<?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>113993</bug_id>
          
          <creation_ts>2013-04-04 21:41:17 -0700</creation_ts>
          <short_desc>Nixed the defunct chromium folder from DumpRenderTree</short_desc>
          <delta_ts>2013-04-04 21:45:48 -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>New Bugs</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>jochen</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869544</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-04 21:41:17 -0700</bug_when>
    <thetext>Nixed the defunct chromium folder from DumpRenderTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869546</commentid>
    <comment_count>1</comment_count>
      <attachid>196574</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-04 21:41:55 -0700</bug_when>
    <thetext>Created attachment 196574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869547</commentid>
    <comment_count>2</comment_count>
      <attachid>196574</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-04 21:42:36 -0700</bug_when>
    <thetext>Comment on attachment 196574
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869549</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-04 21:44:23 -0700</bug_when>
    <thetext>Committed r147704: &lt;http://trac.webkit.org/changeset/147704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869550</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-04 21:45:03 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869552</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-04 21:45:48 -0700</bug_when>
    <thetext>I&apos;ll be sure to do just that...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196574</attachid>
            <date>2013-04-04 21:41:55 -0700</date>
            <delta_ts>2013-04-04 21:42:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113993-20130404214142.patch</filename>
            <type>text/plain</type>
            <size>890197</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE0NzcwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyMSBAQAorMjAxMy0wNC0wNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29t
PgorCisgICAgICAgIE5peGVkIHRoZSBkZWZ1bmN0IGNocm9taXVtIGZvbGRlciBmcm9tIER1bXBS
ZW5kZXJUcmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTM5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGll
bnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EdW1wUmVu
ZGVyVHJlZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
SW1hZ2VEaWZmLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0SGVscGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0xheW91dFRlc3RIZWxwZXJXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tQbGF0Zm9ybS5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1BsYXRmb3JtLmg6IFJlbW92ZWQuCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJQ
cmVyZW5kZXJpbmdTdXBwb3J0Lmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGFzay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGFzay5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RFdmVudFByaW50ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RFdmVudFByaW50ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROZXRz
Y2FwZVBsdWdJbjogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnM6IFJlbW92ZWQuCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFk
ZXJzL1dlYktpdDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMvV2ViS2l0L25wYXBpLmg6IFJlbW92
ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0lu
L0ZvcndhcmRpbmdIZWFkZXJzL1dlYktpdC9ucGZ1bmN0aW9ucy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROZXRzY2FwZVBsdWdJbi9Gb3J3YXJkaW5n
SGVhZGVycy9XZWJLaXQvbnBydW50aW1lLmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lcjogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYzogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJQcmVmZXJlbmNlcy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVi
bGljL1dlYlRhc2suaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0Q29tbW9uLmg6IFJlbW92ZWQuCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9wdWJsaWMvV2ViVGVzdEludGVyZmFjZXMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9X
ZWJUZXN0UnVubmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmM6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oOiBSZW1vdmVkLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmg6IFJl
bW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
Q3BwQm91bmRDbGFzcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5oOiBSZW1vdmVkLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L0NwcFZhcmlhbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9HYW1l
cGFkQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvS2V5Q29kZU1hcHBpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWludHMuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tD
b25zdHJhaW50cy5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2suY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2su
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9Nb2NrU3BlbGxDaGVjay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2suaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViTWVk
aWFTdHJlYW1DZW50ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJNZWRpYVN0cmVhbUNlbnRlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tX
ZWJSVENEVE1GU2VuZGVySGFuZGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTm90
aWZpY2F0aW9uUHJlc2VudGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVs
bENoZWNrQ2xpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50Lmg6IFJlbW92ZWQuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1vbi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvVGVzdENvbW1vbi5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5o
OiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL1Rlc3RQbHVnaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RQbHVnaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9U
ZXN0UnVubmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJv
bGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlBlcm1pc3Npb25zLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5oOiBSZW1vdmVk
LgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBy
ZWZlcmVuY2VzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9XZWJUYXNrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0SW50ZXJmYWNlcy5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
V2ViVGVzdFByb3h5LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVDb250cm9sV2luLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0
VGhlbWVDb250cm9sV2luLmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLmg6IFJlbW92ZWQuCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRo
ZW1lRW5naW5lTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2luZVdpbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRo
ZW1lRW5naW5lV2luLmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvV2ViVXNlck1lZGlhQ2xpZW50TW9jay5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVXNlck1l
ZGlhQ2xpZW50TW9jay5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL2NvbmZpZy5oOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsTWFjLm1tOiBSZW1vdmVkLgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxXaW4u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bFgxMS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
Vmlld0hvc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0Lmg6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vYW5kcm9pZF9mYWxsYmFja19mb250cy54bWw6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vYW5kcm9pZF9tYWluX2ZvbnRzLnhtbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9mb250cy5jb25mOiBSZW1vdmVkLgorCiAyMDEzLTA0
LTA0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0
aGUgcmViYXNlbGluZSBxdWV1ZSBzZXJ2ZXIgc2luY2Ugbm9ib2R5IGV4Y2VwdCBtYXliZSBvbmUg
cGVyc29uIGZyb20gR29vZ2xlIHVzZXMgaXQuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcAkocmV2aXNpb24gMTQ3NzAxKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRFJURGV2VG9vbHNBZ2VudC5oIgotCi0jaW5jbHVkZSAiRFJURGV2VG9vbHNDbGllbnQuaCIK
LQotI2luY2x1ZGUgIlRhc2suaCIKLSNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50LmgiCi0jaW5j
bHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0
LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyOwotCi1EUlREZXZUb29sc0FnZW50
OjpEUlREZXZUb29sc0FnZW50KCkKLSAgICA6IG1fZHJ0RGV2VG9vbHNDbGllbnQoMCkKLSAgICAs
IG1fd2ViVmlldygwKQotewotICAgIHN0YXRpYyBpbnQgZGV2VG9vbHNBZ2VudENvdW50ZXIgPSAw
OwotCi0gICAgbV9yb3V0aW5nSUQgPSArK2RldlRvb2xzQWdlbnRDb3VudGVyOwotfQotCi12b2lk
IERSVERldlRvb2xzQWdlbnQ6OnJlc2V0KCkKLXsKLSAgICBtX3Rhc2tMaXN0LnJldm9rZUFsbCgp
OwotfQotCi12b2lkIERSVERldlRvb2xzQWdlbnQ6OnNldFdlYlZpZXcoV2ViVmlldyogd2ViVmll
dykKLXsKLSAgICBtX3dlYlZpZXcgPSB3ZWJWaWV3OwotfQotCi12b2lkIERSVERldlRvb2xzQWdl
bnQ6OnNlbmRNZXNzYWdlVG9JbnNwZWN0b3JGcm9udGVuZChjb25zdCBXZWJTdHJpbmcmIGRhdGEp
Ci17Ci0gICAgaWYgKG1fZHJ0RGV2VG9vbHNDbGllbnQpCi0gICAgICAgICBtX2RydERldlRvb2xz
Q2xpZW50LT5hc3luY0NhbGwoZGF0YSk7Ci19Ci0KLXZvaWQgRFJURGV2VG9vbHNBZ2VudDo6cnVu
dGltZVByb3BlcnR5Q2hhbmdlZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgdmFsdWUpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotV2ViRGV2VG9vbHNB
Z2VudENsaWVudDo6V2ViS2l0Q2xpZW50TWVzc2FnZUxvb3AqIERSVERldlRvb2xzQWdlbnQ6OmNy
ZWF0ZUNsaWVudE1lc3NhZ2VMb29wKCkKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkNy
ZWF0ZURldlRvb2xzTWVzc2FnZUxvb3AoKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0FnZW50Ojph
c3luY0NhbGwoY29uc3QgV2ViU3RyaW5nJiBhcmdzKQotewotICAgIHBvc3RUYXNrKG5ldyBBc3lu
Y0NhbGxUYXNrKHRoaXMsIGFyZ3MpKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0FnZW50OjpjYWxs
KGNvbnN0IFdlYlN0cmluZyYgYXJncykKLXsKLSAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9
IHdlYkRldlRvb2xzQWdlbnQoKTsKLSAgICBpZiAoYWdlbnQpCi0gICAgICAgIGFnZW50LT5kaXNw
YXRjaE9uSW5zcGVjdG9yQmFja2VuZChhcmdzKTsKLX0KLQotV2ViRGV2VG9vbHNBZ2VudCogRFJU
RGV2VG9vbHNBZ2VudDo6d2ViRGV2VG9vbHNBZ2VudCgpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXcp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3dlYlZpZXctPmRldlRvb2xzQWdlbnQo
KTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0FnZW50OjphdHRhY2goRFJURGV2VG9vbHNDbGllbnQq
IGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1fZHJ0RGV2VG9vbHNDbGllbnQpOwotICAgIG1fZHJ0
RGV2VG9vbHNDbGllbnQgPSBjbGllbnQ7Ci0gICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3
ZWJEZXZUb29sc0FnZW50KCk7Ci0gICAgaWYgKGFnZW50KQotICAgICAgICBhZ2VudC0+YXR0YWNo
KCk7Ci19Ci0KLXZvaWQgRFJURGV2VG9vbHNBZ2VudDo6ZGV0YWNoKCkKLXsKLSAgICBBU1NFUlQo
bV9kcnREZXZUb29sc0NsaWVudCk7Ci0gICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJE
ZXZUb29sc0FnZW50KCk7Ci0gICAgaWYgKGFnZW50KQotICAgICAgICBhZ2VudC0+ZGV0YWNoKCk7
Ci0gICAgbV9kcnREZXZUb29sc0NsaWVudCA9IDA7Ci19Ci0KLWJvb2wgRFJURGV2VG9vbHNBZ2Vu
dDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwgY29uc3Qgc3RkOjpzdHJpbmcm
IHNjcmlwdCkKLXsKLSAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xzQWdl
bnQoKTsKLSAgICBpZiAoIWFnZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYWdlbnQt
PmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY2FsbElELCBXZWJTdHJpbmc6OmZyb21VVEY4KHNjcmlw
dCkpOwotICAgIHJldHVybiB0cnVlOwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuaAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIERSVERldlRvb2xzQWdlbnRfaAotI2RlZmluZSBE
UlREZXZUb29sc0FnZW50X2gKLQotI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRDbGllbnQuaCIK
LSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDU3RyaW5nOwotY2xhc3MgV2ViRGV2VG9vbHNB
Z2VudDsKLWNsYXNzIFdlYlZpZXc7Ci1zdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLWNsYXNzIERSVERldlRvb2xzQ2xpZW50OwotCi1jbGFz
cyBEUlREZXZUb29sc0FnZW50IDogcHVibGljIFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudENsaWVu
dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRFJURGV2VG9vbHNBZ2VudCk7Ci1wdWJsaWM6
Ci0gICAgRFJURGV2VG9vbHNBZ2VudCgpOwotICAgIHZpcnR1YWwgfkRSVERldlRvb2xzQWdlbnQo
KSB7IH0KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0OjpX
ZWJWaWV3Kik7Ci0KLSAgICAvLyBXZWJEZXZUb29sc0FnZW50Q2xpZW50IGltcGxlbWVudGF0aW9u
LgotICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvSW5zcGVjdG9yRnJvbnRlbmQoY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGludCBob3N0SWRlbnRpZmllcigpIHsg
cmV0dXJuIG1fcm91dGluZ0lEOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJ1bnRpbWVQcm9wZXJ0eUNo
YW5nZWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiB2YWx1ZSk7Ci0gICAgdmlydHVhbCBXZWJLaXRDbGllbnRNZXNzYWdlTG9vcCogY3JlYXRl
Q2xpZW50TWVzc2FnZUxvb3AoKTsKLQotICAgIHZvaWQgYXN5bmNDYWxsKGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJiBhcmdzKTsKLQotICAgIHZvaWQgYXR0YWNoKERSVERldlRvb2xzQ2xpZW50Kik7
Ci0gICAgdm9pZCBkZXRhY2goKTsKLQotICAgIGJvb2wgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihs
b25nIGNhbGxJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNjcmlwdCk7Ci0gICAgV2ViVGVzdFJ1bm5l
cjo6V2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotcHJp
dmF0ZToKLSAgICB2b2lkIGNhbGwoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFyZ3MpOwotICAg
IFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudCogd2ViRGV2VG9vbHNBZ2VudCgpOwotCi0gICAgY2xh
c3MgQXN5bmNDYWxsVGFzazogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJU
RGV2VG9vbHNBZ2VudD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgQXN5bmNDYWxsVGFzayhEUlRE
ZXZUb29sc0FnZW50KiBvYmplY3QsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBhcmdzKQotICAg
ICAgICAgICAgOiBXZWJUZXN0UnVubmVyOjpXZWJNZXRob2RUYXNrPERSVERldlRvb2xzQWdlbnQ+
KG9iamVjdCksIG1fYXJncyhhcmdzKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFs
aWQoKSB7IG1fb2JqZWN0LT5jYWxsKG1fYXJncyk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IFdlYktpdDo6V2ViU3RyaW5nIG1fYXJnczsKLSAgICB9OwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6
V2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICBEUlREZXZUb29sc0NsaWVudCogbV9kcnREZXZU
b29sc0NsaWVudDsKLSAgICBpbnQgbV9yb3V0aW5nSUQ7Ci0gICAgV2ViS2l0OjpXZWJWaWV3KiBt
X3dlYlZpZXc7Ci19OwotCi0jZW5kaWYgLy8gRFJURGV2VG9vbHNBZ2VudF9oCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3Bw
CShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRE
ZXZUb29sc0NsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRFJURGV2VG9vbHNDbGllbnQuaCIKLQotI2luY2x1ZGUg
IkRSVERldlRvb2xzQWdlbnQuaCIKLSNpbmNsdWRlICJUYXNrLmgiCi0jaW5jbHVkZSAiV2ViRGV2
VG9vbHNBZ2VudC5oIgotI2luY2x1ZGUgIldlYkRldlRvb2xzRnJvbnRlbmQuaCIKLSNpbmNsdWRl
ICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgotI2luY2x1ZGUgIldl
YlZpZXcuaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViVGVzdFJ1bm5lcjsKLQotRFJURGV2VG9vbHNDbGllbnQ6OkRSVERldlRv
b2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqIGFnZW50LCBXZWJWaWV3KiB3ZWJWaWV3KQotICAg
IDogbV93ZWJWaWV3KHdlYlZpZXcpCi0gICAgLCBtX2RydERldlRvb2xzQWdlbnQoYWdlbnQpCi17
Ci0gICAgbV93ZWJEZXZUb29sc0Zyb250ZW5kID0gYWRvcHRQdHIoV2ViRGV2VG9vbHNGcm9udGVu
ZDo6Y3JlYXRlKG1fd2ViVmlldywgdGhpcywgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZW4tVVMiKSkp
OwotICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC0+YXR0YWNoKHRoaXMpOwotfQotCi1EUlREZXZUb29s
c0NsaWVudDo6fkRSVERldlRvb2xzQ2xpZW50KCkKLXsKLSAgICAvLyBUaGVyZSBpcyBhIGNoYW5j
ZSB0aGF0IHRoZSBwYWdlIHdpbGwgYmUgZGVzdHJveWVkIGF0IGRldGFjaCBzdGVwIG9mCi0gICAg
Ly8gbV9kcnREZXZUb29sc0FnZW50IGFuZCB3ZSBzaG91bGQgY2xlYW4gcGVuZGluZyByZXF1ZXN0
cyBhIGJpdCBlYXJsaWVyLgotICAgIG1fdGFza0xpc3QucmV2b2tlQWxsKCk7Ci0gICAgaWYgKG1f
ZHJ0RGV2VG9vbHNBZ2VudCkKLSAgICAgICAgbV9kcnREZXZUb29sc0FnZW50LT5kZXRhY2goKTsK
LX0KLQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6cmVzZXQoKQotewotICAgIG1fdGFza0xpc3Qu
cmV2b2tlQWxsKCk7Ci19Ci0KLXZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnNlbmRNZXNzYWdlVG9C
YWNrZW5kKGNvbnN0IFdlYlN0cmluZyYgZGF0YSkKLXsKLSAgICBpZiAobV9kcnREZXZUb29sc0Fn
ZW50KQotICAgICAgICBtX2RydERldlRvb2xzQWdlbnQtPmFzeW5jQ2FsbChkYXRhKTsKLX0KLQot
dm9pZCBEUlREZXZUb29sc0NsaWVudDo6YWN0aXZhdGVXaW5kb3coKQotewotICAgIC8vIE5vdCBp
bXBsZW1lbnRlZC4KLX0KLQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2xvc2VXaW5kb3coKQot
ewotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6
ZG9ja1dpbmRvdygpCi17Ci0gICAgLy8gTm90IGltcGxlbWVudGVkLgotfQotCi12b2lkIERSVERl
dlRvb2xzQ2xpZW50Ojp1bmRvY2tXaW5kb3coKQotewotICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4K
LX0KLQotYm9vbCBEUlREZXZUb29sc0NsaWVudDo6aXNVbmRlclRlc3QoKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIERSVERldlRvb2xzQ2xpZW50Ojphc3luY0NhbGwoY29uc3QgV2Vi
U3RyaW5nJiBhcmdzKQotewotICAgIHBvc3RUYXNrKG5ldyBBc3luY0NhbGxUYXNrKHRoaXMsIGFy
Z3MpKTsKLX0KLQotdm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2FsbChjb25zdCBXZWJTdHJpbmcm
IGFyZ3MpCi17Ci0gICAgbV93ZWJEZXZUb29sc0Zyb250ZW5kLT5kaXNwYXRjaE9uSW5zcGVjdG9y
RnJvbnRlbmQoYXJncyk7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
UlREZXZUb29sc0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRFJURGV2VG9vbHNDbGllbnRfaAotI2RlZmluZSBEUlRE
ZXZUb29sc0NsaWVudF9oCi0KLSNpbmNsdWRlICJXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZDsKLXN0cnVjdCBXZWJE
ZXZUb29sc01lc3NhZ2VEYXRhOwotY2xhc3MgV2ViVmlldzsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLWNsYXNzIERSVERldlRvb2xzQWdlbnQ7Ci0KLWNsYXNzIERSVERldlRvb2xzQ2xpZW50
IDogcHVibGljIFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRFJURGV2VG9vbHNDbGllbnQpOwotcHVibGljOgotICAgIERSVERldlRv
b2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqLCBXZWJLaXQ6OldlYlZpZXcqKTsKLSAgICB2aXJ0
dWFsIH5EUlREZXZUb29sc0NsaWVudCgpOwotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIC8vIFdl
YkRldlRvb2xzRnJvbnRlbmRDbGllbnQgaW1wbGVtZW50YXRpb24KLSAgICB2aXJ0dWFsIHZvaWQg
c2VuZE1lc3NhZ2VUb0JhY2tlbmQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhY3RpdmF0ZVdpbmRvdygpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpbmRv
dygpOwotICAgIHZpcnR1YWwgdm9pZCBkb2NrV2luZG93KCk7Ci0gICAgdmlydHVhbCB2b2lkIHVu
ZG9ja1dpbmRvdygpOwotICAgIHZpcnR1YWwgYm9vbCBpc1VuZGVyVGVzdCgpOwotCi0gICAgdm9p
ZCBhc3luY0NhbGwoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFyZ3MpOwotCi0gICAgdm9pZCBh
bGxNZXNzYWdlc1Byb2Nlc3NlZCgpOwotICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0KiB0
YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLSBwcml2YXRlOgotICAgIHZvaWQg
Y2FsbChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgYXJncyk7Ci0gICAgY2xhc3MgQXN5bmNDYWxs
VGFzazogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJURGV2VG9vbHNDbGll
bnQ+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFzeW5jQ2FsbFRhc2soRFJURGV2VG9vbHNDbGll
bnQqIG9iamVjdCwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGFyZ3MpCi0gICAgICAgICAgICA6
IFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8RFJURGV2VG9vbHNDbGllbnQ+KG9iamVjdCks
IG1fYXJncyhhcmdzKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1f
b2JqZWN0LT5jYWxsKG1fYXJncyk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktpdDo6
V2ViU3RyaW5nIG1fYXJnczsKLSAgICB9OwotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2ViVGFza0xp
c3QgbV90YXNrTGlzdDsKLSAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKLSAgICBEUlRE
ZXZUb29sc0FnZW50KiBtX2RydERldlRvb2xzQWdlbnQ7Ci0gICAgV1RGOjpPd25QdHI8V2ViS2l0
OjpXZWJEZXZUb29sc0Zyb250ZW5kPiBtX3dlYkRldlRvb2xzRnJvbnRlbmQ7Ci19OwotCi0jZW5k
aWYgLy8gRFJURGV2VG9vbHNDbGllbnRfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0R1bXBSZW5kZXJUcmVlLmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlICJNb2NrUGxhdGZvcm0uaCIKLSNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oPgotI2luY2x1ZGUgPHY4L2luY2x1
ZGUvdjgtdGVzdGluZy5oPgotI2luY2x1ZGUgPHY4L2luY2x1ZGUvdjguaD4KLSNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25Db21wbGV4VGV4dFtdID0gIi0tY29tcGxl
eC10ZXh0IjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkR1bXBQaXhlbHNbXSA9ICItLXBpeGVs
LXRlc3RzIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkR1bXBQaXhlbHNTaG9ydEZvcm1bXSA9
ICItcCI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25Ob3RyZWVbXSA9ICItLW5vdHJlZSI7Ci1z
dGF0aWMgY29uc3QgY2hhciBvcHRpb25UaHJlYWRlZFtdID0gIi0tdGhyZWFkZWQiOwotc3RhdGlj
IGNvbnN0IGNoYXIgb3B0aW9uRGVidWdSZW5kZXJUcmVlW10gPSAiLS1kZWJ1Zy1yZW5kZXItdHJl
ZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25EZWJ1Z0xheWVyVHJlZVtdID0gIi0tZGVidWct
bGF5ZXItdHJlZSI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkFsbG93RXh0ZXJuYWxQYWdl
c1tdID0gIi0tYWxsb3ctZXh0ZXJuYWwtcGFnZXMiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
U3RhcnR1cERpYWxvZ1tdID0gIi0tdGVzdHNoZWxsLXN0YXJ0dXAtZGlhbG9nIjsKLXN0YXRpYyBj
b25zdCBjaGFyIG9wdGlvbkNoZWNrTGF5b3V0VGVzdFN5c3RlbURlcHNbXSA9ICItLWNoZWNrLWxh
eW91dC10ZXN0LXN5cy1kZXBzIjsKLQotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uSGFyZHdhcmVB
Y2NlbGVyYXRlZEdMW10gPSAiLS1lbmFibGUtaGFyZHdhcmUtZ3B1IjsKLXN0YXRpYyBjb25zdCBj
aGFyIG9wdGlvbkVuYWJsZVNvZnR3YXJlQ29tcG9zaXRpbmdbXSA9ICItLWVuYWJsZS1zb2Z0d2Fy
ZS1jb21wb3NpdGluZyI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVUaHJlYWRlZENv
bXBvc2l0aW5nW10gPSAiLS1lbmFibGUtdGhyZWFkZWQtY29tcG9zaXRpbmciOwotc3RhdGljIGNv
bnN0IGNoYXIgb3B0aW9uRm9yY2VDb21wb3NpdGluZ01vZGVbXSA9ICItLWZvcmNlLWNvbXBvc2l0
aW5nLW1vZGUiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWQyRENh
bnZhc1tdID0gIi0tZW5hYmxlLWFjY2VsZXJhdGVkLTJkLWNhbnZhcyI7Ci1zdGF0aWMgY29uc3Qg
Y2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9bXSA9ICItLWVu
YWJsZS1hY2NlbGVyYXRlZC12aWRlbyI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVB
Y2NlbGVyYXRlZEZpeGVkUG9zaXRpb25bXSA9ICItLWVuYWJsZS1hY2NlbGVyYXRlZC1maXhlZC1w
b3NpdGlvbiI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25FbmFibGVBY2NlbGVyYXRlZE92ZXJm
bG93U2Nyb2xsW10gPSAiLS1lbmFibGUtYWNjZWxlcmF0ZWQtb3ZlcmZsb3ctc2Nyb2xsIjsKLXN0
YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZVBlclRpbGVQYWludGluZ1tdID0gIi0tZW5hYmxl
LXBlci10aWxlLXBhaW50aW5nIjsKLXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkVuYWJsZURlZmVy
cmVkSW1hZ2VEZWNvZGluZ1tdID0gIi0tZW5hYmxlLWRlZmVycmVkLWltYWdlLWRlY29kaW5nIjsK
LXN0YXRpYyBjb25zdCBjaGFyIG9wdGlvbkRpc2FibGVUaHJlYWRlZEhUTUxQYXJzZXJbXSA9ICIt
LWRpc2FibGUtdGhyZWFkZWQtaHRtbC1wYXJzZXIiOwotCi1zdGF0aWMgY29uc3QgY2hhciBvcHRp
b25TdHJlc3NPcHRbXSA9ICItLXN0cmVzcy1vcHQiOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9u
U3RyZXNzRGVvcHRbXSA9ICItLXN0cmVzcy1kZW9wdCI7Ci1zdGF0aWMgY29uc3QgY2hhciBvcHRp
b25KYXZhU2NyaXB0RmxhZ3NbXSA9ICItLWpzLWZsYWdzPSI7Ci1zdGF0aWMgY29uc3QgY2hhciBv
cHRpb25FbmNvZGVCaW5hcnlbXSA9ICItLWVuY29kZS1iaW5hcnkiOwotc3RhdGljIGNvbnN0IGNo
YXIgb3B0aW9uTm9UaW1lb3V0W10gPSAiLS1uby10aW1lb3V0IjsKLXN0YXRpYyBjb25zdCBjaGFy
IG9wdGlvbldlYkNvcmVMb2dDaGFubmVsc1tdID0gIi0td2ViY29yZS1sb2ctY2hhbm5lbHM9IjsK
LQotY2xhc3MgV2ViS2l0U3VwcG9ydFRlc3RFbnZpcm9ubWVudCB7Ci1wdWJsaWM6Ci0gICAgV2Vi
S2l0U3VwcG9ydFRlc3RFbnZpcm9ubWVudCgpCi0gICAgewotICAgICAgICBtX21vY2tQbGF0Zm9y
bSA9IE1vY2tQbGF0Zm9ybTo6Y3JlYXRlKCk7Ci0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRV
cFRlc3RFbnZpcm9ubWVudChtX21vY2tQbGF0Zm9ybS5nZXQoKSk7Ci0gICAgfQotICAgIH5XZWJL
aXRTdXBwb3J0VGVzdEVudmlyb25tZW50KCkKLSAgICB7Ci0gICAgICAgIHdlYmtpdF9zdXBwb3J0
OjpUZWFyRG93blRlc3RFbnZpcm9ubWVudCgpOwotICAgIH0KLQotICAgIE1vY2tQbGF0Zm9ybSog
bW9ja1BsYXRmb3JtKCkgeyByZXR1cm4gbV9tb2NrUGxhdGZvcm0uZ2V0KCk7IH0KLQotcHJpdmF0
ZToKLSAgICBPd25QdHI8TW9ja1BsYXRmb3JtPiBtX21vY2tQbGF0Zm9ybTsKLX07Ci0KLXN0YXRp
YyB2b2lkIHJ1blRlc3QoVGVzdFNoZWxsJiBzaGVsbCwgVGVzdFBhcmFtcyYgcGFyYW1zLCBjb25z
dCBzdHJpbmcmIGlucHV0TGluZSwgY29uc3QgYm9vbCBmb3JjZUR1bXBQaXhlbHMpCi17Ci0gICAg
aW50IG9sZFRpbWVvdXRNc2VjID0gc2hlbGwubGF5b3V0VGVzdFRpbWVvdXQoKTsKLSAgICBUZXN0
Q29tbWFuZCBjb21tYW5kID0gcGFyc2VJbnB1dExpbmUoaW5wdXRMaW5lKTsKLSAgICBwYXJhbXMu
dGVzdFVybCA9IHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVVUkxGb3JQYXRoT3JVUkwoY29tbWFuZC5w
YXRoT3JVUkwpOwotICAgIHBhcmFtcy5waXhlbEhhc2ggPSBjb21tYW5kLnNob3VsZER1bXBQaXhl
bHM7Ci0gICAgd2Via2l0X3N1cHBvcnQ6OlNldEN1cnJlbnREaXJlY3RvcnlGb3JGaWxlVVJMKHBh
cmFtcy50ZXN0VXJsKTsKLSAgICB2ODo6Vjg6OlNldEZsYWdzRnJvbVN0cmluZyhzaGVsbC5qYXZh
U2NyaXB0RmxhZ3MoKS5jX3N0cigpLCBzaGVsbC5qYXZhU2NyaXB0RmxhZ3MoKS5sZW5ndGgoKSk7
Ci0gICAgaWYgKHNoZWxsLnN0cmVzc09wdCgpIHx8IHNoZWxsLnN0cmVzc0Rlb3B0KCkpIHsKLSAg
ICAgIGlmIChzaGVsbC5zdHJlc3NPcHQoKSkKLSAgICAgICAgdjg6OlRlc3Rpbmc6OlNldFN0cmVz
c1J1blR5cGUodjg6OlRlc3Rpbmc6OmtTdHJlc3NUeXBlT3B0KTsKLSAgICAgIGVsc2UKLSAgICAg
ICAgdjg6OlRlc3Rpbmc6OlNldFN0cmVzc1J1blR5cGUodjg6OlRlc3Rpbmc6OmtTdHJlc3NUeXBl
RGVvcHQpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ODo6VGVzdGluZzo6R2V0U3RyZXNz
UnVucygpOyBpKyspIHsKLSAgICAgICAgICB2ODo6VGVzdGluZzo6UHJlcGFyZVN0cmVzc1J1bihp
KTsKLSAgICAgICAgICBib29sIGlzTGFzdExvYWQgPSAoaSA9PSAodjg6OlRlc3Rpbmc6OkdldFN0
cmVzc1J1bnMoKSAtIDEpKTsKLSAgICAgICAgICBzaGVsbC5zZXREdW1wV2hlbkZpbmlzaGVkKGlz
TGFzdExvYWQpOwotICAgICAgICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKLSAgICAg
ICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMsIGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8
fCBmb3JjZUR1bXBQaXhlbHMpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzaGVsbC5y
ZXNldFRlc3RDb250cm9sbGVyKCk7Ci0gICAgICBzaGVsbC5ydW5GaWxlVGVzdChwYXJhbXMsIGNv
bW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBmb3JjZUR1bXBQaXhlbHMpOwotICAgIH0KLSAgICBz
aGVsbC5zZXRMYXlvdXRUZXN0VGltZW91dChvbGRUaW1lb3V0TXNlYyk7Ci19Ci0KLWludCBtYWlu
KGludCBhcmdjLCBjaGFyKiBhcmd2W10pCi17Ci0gICAgV2ViS2l0U3VwcG9ydFRlc3RFbnZpcm9u
bWVudCB0ZXN0RW52aXJvbm1lbnQ7Ci0gICAgcGxhdGZvcm1Jbml0KCZhcmdjLCAmYXJndik7Ci0K
LSAgICBUZXN0UGFyYW1zIHBhcmFtczsKLSAgICBWZWN0b3I8c3RyaW5nPiB0ZXN0czsKLSAgICBi
b29sIHNlcnZlck1vZGUgPSBmYWxzZTsKLSAgICBib29sIGR1bXBBbGxQaXhlbHMgPSBmYWxzZTsK
LSAgICBib29sIGFsbG93RXh0ZXJuYWxQYWdlcyA9IGZhbHNlOwotICAgIGJvb2wgc3RhcnR1cERp
YWxvZyA9IGZhbHNlOwotICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5h
YmxlZCA9IGZhbHNlOwotICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9z
aXRpb25FbmFibGVkID0gZmFsc2U7Ci0gICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
T3ZlcmZsb3dTY3JvbGxFbmFibGVkID0gZmFsc2U7Ci0gICAgYm9vbCBzb2Z0d2FyZUNvbXBvc2l0
aW5nRW5hYmxlZCA9IGZhbHNlOwotICAgIGJvb2wgdGhyZWFkZWRDb21wb3NpdGluZ0VuYWJsZWQg
PSBmYWxzZTsKLSAgICBib29sIGZvcmNlQ29tcG9zaXRpbmdNb2RlID0gZmFsc2U7Ci0gICAgYm9v
bCB0aHJlYWRlZEhUTUxQYXJzZXIgPSB0cnVlOwotICAgIGJvb2wgYWNjZWxlcmF0ZWQyRENhbnZh
c0VuYWJsZWQgPSBmYWxzZTsKLSAgICBib29sIHBlclRpbGVQYWludGluZ0VuYWJsZWQgPSBmYWxz
ZTsKLSAgICBib29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSBmYWxzZTsKLSAgICBi
b29sIHN0cmVzc09wdCA9IGZhbHNlOwotICAgIGJvb2wgc3RyZXNzRGVvcHQgPSBmYWxzZTsKLSAg
ICBib29sIGhhcmR3YXJlQWNjZWxlcmF0ZWRHTCA9IGZhbHNlOwotICAgIHN0cmluZyBqYXZhU2Ny
aXB0RmxhZ3M7Ci0gICAgYm9vbCBlbmNvZGVCaW5hcnkgPSBmYWxzZTsKLSAgICBib29sIG5vVGlt
ZW91dCA9IGZhbHNlOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7Ci0gICAg
ICAgIHN0cmluZyBhcmd1bWVudChhcmd2W2ldKTsKLSAgICAgICAgaWYgKGFyZ3VtZW50ID09ICIt
IikKLSAgICAgICAgICAgIHNlcnZlck1vZGUgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmd1
bWVudCA9PSBvcHRpb25EdW1wUGl4ZWxzIHx8IGFyZ3VtZW50ID09IG9wdGlvbkR1bXBQaXhlbHNT
aG9ydEZvcm0pCi0gICAgICAgICAgICBkdW1wQWxsUGl4ZWxzID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uTm90cmVlKQotICAgICAgICAgICAgcGFyYW1zLmR1bXBU
cmVlID0gZmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRlYnVnUmVu
ZGVyVHJlZSkKLSAgICAgICAgICAgIHBhcmFtcy5kZWJ1Z1JlbmRlclRyZWUgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25EZWJ1Z0xheWVyVHJlZSkKLSAgICAgICAg
ICAgIHBhcmFtcy5kZWJ1Z0xheWVyVHJlZSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3Vt
ZW50ID09IG9wdGlvbkFsbG93RXh0ZXJuYWxQYWdlcykKLSAgICAgICAgICAgIGFsbG93RXh0ZXJu
YWxQYWdlcyA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvblN0YXJ0
dXBEaWFsb2cpCi0gICAgICAgICAgICBzdGFydHVwRGlhbG9nID0gdHJ1ZTsKLSAgICAgICAgZWxz
ZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uQ2hlY2tMYXlvdXRUZXN0U3lzdGVtRGVwcykKLSAgICAg
ICAgICAgIHJldHVybiBjaGVja0xheW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKSA/IEVYSVRf
U1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0
aW9uSGFyZHdhcmVBY2NlbGVyYXRlZEdMKQotICAgICAgICAgICAgaGFyZHdhcmVBY2NlbGVyYXRl
ZEdMID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvKQotICAgICAgICAgICAgYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvclZpZGVvRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50
ID09IG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkRml4ZWRQb3NpdGlvbikKLSAgICAgICAgICAgIGFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuYWJsZUFjY2VsZXJhdGVkT3ZlcmZsb3dT
Y3JvbGwpCi0gICAgICAgICAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3Jv
bGxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5h
YmxlU29mdHdhcmVDb21wb3NpdGluZykKLSAgICAgICAgICAgIHNvZnR3YXJlQ29tcG9zaXRpbmdF
bmFibGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxl
VGhyZWFkZWRDb21wb3NpdGluZykKLSAgICAgICAgICAgIHRocmVhZGVkQ29tcG9zaXRpbmdFbmFi
bGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRm9yY2VDb21w
b3NpdGluZ01vZGUpCi0gICAgICAgICAgICBmb3JjZUNvbXBvc2l0aW5nTW9kZSA9IHRydWU7Ci0g
ICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbkRpc2FibGVUaHJlYWRlZEhUTUxQYXJz
ZXIpCi0gICAgICAgICAgICB0aHJlYWRlZEhUTUxQYXJzZXIgPSBmYWxzZTsKLSAgICAgICAgZWxz
ZSBpZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlQWNjZWxlcmF0ZWQyRENhbnZhcykKLSAgICAg
ICAgICAgIGFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBp
ZiAoYXJndW1lbnQgPT0gb3B0aW9uRW5hYmxlUGVyVGlsZVBhaW50aW5nKQotICAgICAgICAgICAg
cGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50
ID09IG9wdGlvbkVuYWJsZURlZmVycmVkSW1hZ2VEZWNvZGluZykKLSAgICAgICAgICAgIGRlZmVy
cmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQgPSB0cnVlOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVu
dCA9PSBvcHRpb25TdHJlc3NPcHQpCi0gICAgICAgICAgICBzdHJlc3NPcHQgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmIChhcmd1bWVudCA9PSBvcHRpb25TdHJlc3NEZW9wdCkKLSAgICAgICAgICAg
IHN0cmVzc0Rlb3B0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIWFyZ3VtZW50LmZpbmQob3B0
aW9uSmF2YVNjcmlwdEZsYWdzKSkKLSAgICAgICAgICAgIGphdmFTY3JpcHRGbGFncyA9IGFyZ3Vt
ZW50LnN1YnN0cihzdHJsZW4ob3B0aW9uSmF2YVNjcmlwdEZsYWdzKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGFyZ3VtZW50ID09IG9wdGlvbkVuY29kZUJpbmFyeSkKLSAgICAgICAgICAgIGVuY29kZUJp
bmFyeSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50ID09IG9wdGlvbk5vVGltZW91
dCkKLSAgICAgICAgICAgIG5vVGltZW91dCA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKCFhcmd1
bWVudC5maW5kKG9wdGlvbldlYkNvcmVMb2dDaGFubmVscykpIHsKLSAgICAgICAgICAgIHN0cmlu
ZyBjaGFubmVscyA9IGFyZ3VtZW50LnN1YnN0cihzdHJsZW4ob3B0aW9uV2ViQ29yZUxvZ0NoYW5u
ZWxzKSk7Ci0gICAgICAgICAgICB3ZWJraXRfc3VwcG9ydDo6RW5hYmxlV2ViQ29yZUxvZ0NoYW5u
ZWxzKGNoYW5uZWxzKTsKLSAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudC5zaXplKCkgJiYgYXJn
dW1lbnRbMF0gPT0gJy0nKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9w
dGlvbjogJXNcbiIsIGFyZ3ZbaV0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0ZXN0cy5h
cHBlbmQoYXJndW1lbnQpOwotICAgIH0KLSAgICBpZiAoc3RyZXNzT3B0ICYmIHN0cmVzc0Rlb3B0
KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiLS1zdHJlc3Mtb3B0IGFuZCAtLXN0cmVzcy1k
ZW9wdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZB
SUxVUkU7Ci0gICAgfQotCi0gICAgd2Via2l0X3N1cHBvcnQ6OlNldFVwR0xCaW5kaW5ncyhoYXJk
d2FyZUFjY2VsZXJhdGVkR0wgPyB3ZWJraXRfc3VwcG9ydDo6R0xfQklORElOR19ERUZBVUxUIDog
d2Via2l0X3N1cHBvcnQ6OkdMX0JJTkRJTkdfU09GVFdBUkVfUkVOREVSRVIpOwotCi0gICAgaWYg
KHN0YXJ0dXBEaWFsb2cpCi0gICAgICAgIG9wZW5TdGFydHVwRGlhbG9nKCk7Ci0KLSAgICB7IC8v
IEV4cGxpY2l0IHNjb3BlIGZvciB0aGUgVGVzdFNoZWxsIGluc3RhbmNlLgotICAgICAgICBUZXN0
U2hlbGwgc2hlbGw7Ci0gICAgICAgIHNoZWxsLnNldEFsbG93RXh0ZXJuYWxQYWdlcyhhbGxvd0V4
dGVybmFsUGFnZXMpOwotICAgICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
VmlkZW9FbmFibGVkKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQpOwotICAg
ICAgICBzaGVsbC5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJs
ZWQoYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKTsKLSAgICAg
ICAgc2hlbGwuc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxl
ZChhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKTsKLSAgICAg
ICAgc2hlbGwuc2V0U29mdHdhcmVDb21wb3NpdGluZ0VuYWJsZWQoc29mdHdhcmVDb21wb3NpdGlu
Z0VuYWJsZWQpOwotICAgICAgICBzaGVsbC5zZXRUaHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZCh0
aHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZCk7Ci0gICAgICAgIHNoZWxsLnNldEZvcmNlQ29tcG9z
aXRpbmdNb2RlKGZvcmNlQ29tcG9zaXRpbmdNb2RlKTsKLSAgICAgICAgc2hlbGwuc2V0VGhyZWFk
ZWRIVE1MUGFyc2VyKHRocmVhZGVkSFRNTFBhcnNlcik7Ci0gICAgICAgIHNoZWxsLnNldEFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkKGFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKTsKLSAgICAg
ICAgc2hlbGwuc2V0UGVyVGlsZVBhaW50aW5nRW5hYmxlZChwZXJUaWxlUGFpbnRpbmdFbmFibGVk
KTsKLSAgICAgICAgc2hlbGwuc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChkZWZlcnJl
ZEltYWdlRGVjb2RpbmdFbmFibGVkKTsKLSAgICAgICAgc2hlbGwuc2V0SmF2YVNjcmlwdEZsYWdz
KGphdmFTY3JpcHRGbGFncyk7Ci0gICAgICAgIHNoZWxsLnNldFN0cmVzc09wdChzdHJlc3NPcHQp
OwotICAgICAgICBzaGVsbC5zZXRTdHJlc3NEZW9wdChzdHJlc3NEZW9wdCk7Ci0gICAgICAgIHNo
ZWxsLnNldEVuY29kZUJpbmFyeShlbmNvZGVCaW5hcnkpOwotICAgICAgICBpZiAobm9UaW1lb3V0
KSB7Ci0gICAgICAgICAgICAvLyAweDIwMDAwMDAwbXMgaXMgYmlnIGVub3VnaCBmb3IgdGhlIHB1
cnBvc2UgdG8gYXZvaWQgdGltZW91dCBpbiBkZWJ1Z2dpbmcuCi0gICAgICAgICAgICBzaGVsbC5z
ZXRMYXlvdXRUZXN0VGltZW91dCgweDIwMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBzaGVs
bC5pbml0aWFsaXplKHRlc3RFbnZpcm9ubWVudC5tb2NrUGxhdGZvcm0oKSk7Ci0gICAgICAgIGlm
IChzZXJ2ZXJNb2RlICYmICF0ZXN0cy5zaXplKCkpIHsKLSNpZiBPUyhBTkRST0lEKQotICAgICAg
ICAgICAgLy8gU2VuZCBhIHNpZ25hbCB0byBob3N0IHRvIGluZGljYXRlIERSVCBpcyByZWFkeSB0
byBwcm9jZXNzIGNvbW1hbmRzLgotICAgICAgICAgICAgcHV0cygiI1JFQURZIik7Ci0gICAgICAg
ICAgICBmZmx1c2goc3Rkb3V0KTsKLSNlbmRpZgotICAgICAgICAgICAgcGFyYW1zLnByaW50U2Vw
YXJhdG9ycyA9IHRydWU7Ci0gICAgICAgICAgICBjaGFyIHRlc3RTdHJpbmdbMjA0OF07IC8vIDIw
NDggaXMgdGhlIHNhbWUgYXMgdGhlIHNpemVzIG9mIG90aGVyIHBsYXRmb3Jtcy4KLSAgICAgICAg
ICAgIHdoaWxlIChmZ2V0cyh0ZXN0U3RyaW5nLCBzaXplb2YodGVzdFN0cmluZyksIHN0ZGluKSkg
ewotICAgICAgICAgICAgICAgIGNoYXIqIG5ld0xpbmVQb3NpdGlvbiA9IHN0cmNocih0ZXN0U3Ry
aW5nLCAnXG4nKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3TGluZVBvc2l0aW9uKQotICAgICAg
ICAgICAgICAgICAgICAqbmV3TGluZVBvc2l0aW9uID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBp
ZiAodGVzdFN0cmluZ1swXSA9PSAnXDAnKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICAvLyBFeHBsaWNpdGx5IHF1aXQgb24gcGxhdGZvcm1zIHdoZXJlIEVP
RiBpcyBub3QgcmVsaWFibGUuCi0gICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodGVzdFN0cmlu
ZywgIlFVSVQiKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
cnVuVGVzdChzaGVsbCwgcGFyYW1zLCB0ZXN0U3RyaW5nLCBkdW1wQWxsUGl4ZWxzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghdGVzdHMuc2l6ZSgpKQotICAgICAgICAgICAg
cHV0cygiI0VPRiIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBhcmFtcy5wcmludFNl
cGFyYXRvcnMgPSB0ZXN0cy5zaXplKCkgPiAxOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRlc3RzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIHJ1blRlc3Qoc2hl
bGwsIHBhcmFtcywgdGVzdHNbaV0sIGR1bXBBbGxQaXhlbHMpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc2hlbGwuY2FsbEpTR0MoKTsKLSAgICAgICAgc2hlbGwuY2FsbEpTR0MoKTsKLQotICAgICAg
ICAvLyBXaGVuIHdlIGZpbmlzaCB0aGUgbGFzdCB0ZXN0LCBjbGVhbnVwIHRoZSBEUlRUZXN0UnVu
bmVyLgotICAgICAgICAvLyBJdCBtYXkgaGF2ZSByZWZlcmVuY2VzIHRvIG5vdC15ZXQtY2xlYW5l
ZCB1cCB3aW5kb3dzLiBCeSBjbGVhbmluZyB1cAotICAgICAgICAvLyBoZXJlIHdlIGhlbHAgcHVy
aWZ5IHJlcG9ydHMuCi0gICAgICAgIHNoZWxsLnJlc2V0VGVzdENvbnRyb2xsZXIoKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vSW1hZ2VEaWZmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9JbWFnZURpZmYuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9JbWFnZURpZmYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotLy8gVGhpcyBmaWxlIGlucHV0IGZvcm1hdCBpcyBiYXNlZCBsb29zZWx5IG9u
Ci0vLyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9JbWFnZURpZmYubQotCi0vLyBUaGUgZXhh
Y3QgZm9ybWF0IG9mIHRoaXMgdG9vbCdzIG91dHB1dCB0byBzdGRvdXQgaXMgaW1wb3J0YW50LCB0
byBtYXRjaAotLy8gd2hhdCB0aGUgcnVuLXdlYmtpdC10ZXN0cyBzY3JpcHQgZXhwZWN0cy4KLQot
I2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0X2dmeC5oIgotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHZlY3Rvcj4K
LQotI2lmIGRlZmluZWQoX1dJTjMyKQotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNkZWZpbmUgUEFU
SF9NQVggTUFYX1BBVEgKLSNkZWZpbmUgc3RydG9rX3Igc3RydG9rX3MKLSNlbmRpZgotCi0vLyBE
ZWZpbmUgbWFjcm8gaGVyZSB0byBtYWtlIEltYWdlRGlmZiBpbmRlcGVuZGVudCBvZiBXVEYuCi0j
aWZkZWYgTkRFQlVHCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGRvIHsgfSB3aGlsZSAoMCkK
LSNlbHNlCi0jZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGRvIFwKLSAgICBpZiAoIShhc3NlcnRp
b24pKSB7IFwKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJBU1NFUlQgZmFpbGVkIGF0ICVzOiVk
OiAiICNhc3NlcnRpb24gIi4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0gICAgICAgIGV4aXQo
MSk7IFwKLSAgICB9IFwKLXdoaWxlICgwKQotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7
Ci0KLS8vIENhdXNlcyB0aGUgYXBwIHRvIHJlbWFpbiBvcGVuLCB3YWl0aW5nIGZvciBwYWlycyBv
ZiBmaWxlbmFtZXMgb24gc3RkaW4uCi0vLyBUaGUgY2FsbGVyIGlzIHRoZW4gcmVzcG9uc2libGUg
Zm9yIHRlcm1pbmF0aW5nIHRoaXMgYXBwLgotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uUG9sbFN0
ZGluW10gPSAiLS11c2Utc3RkaW4iOwotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uR2VuZXJhdGVE
aWZmW10gPSAiLS1kaWZmIjsKLQotLy8gSWYgLS1kaWZmIGlzIHBhc3NlZCwgY2F1c2VzIHRoZSBh
cHAgdG8gb3V0cHV0IHRoZSBpbWFnZSBkaWZmZXJlbmNlCi0vLyBtZXRyaWMgKHBlcmNlbnRhZ2VE
aWZmZXJlbnQoKSkgb24gc3Rkb3V0Lgotc3RhdGljIGNvbnN0IGNoYXIgb3B0aW9uV3JpdGVbXSA9
ICItLXdyaXRlLWltYWdlLWRpZmYtbWV0cmljcyI7Ci0KLS8vIFVzZSB3ZWlnaHRlZFBlcmNlbnRh
Z2VEaWZmZXJlbnQoKSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGltYWdlCi0vLyBjb21wYXJhdG9y
IHByb2MuCi1zdGF0aWMgY29uc3QgY2hhciBvcHRpb25XZWlnaHRlZEludGVuc2l0eVtdID0gIi0t
d2VpZ2h0ZWQtaW50ZW5zaXR5IjsKLQotLy8gUmV0dXJuIGNvZGVzIHVzZWQgYnkgdGhpcyB1dGls
aXR5Lgotc3RhdGljIGNvbnN0IGludCBzdGF0dXNTYW1lID0gMDsKLXN0YXRpYyBjb25zdCBpbnQg
c3RhdHVzRGlmZmVyZW50ID0gMTsKLXN0YXRpYyBjb25zdCBpbnQgc3RhdHVzRXJyb3IgPSAyOwot
Ci0vLyBDb2xvciBjb2Rlcy4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcmdiYVJlZCA9IDB4
MDAwMDAwZmY7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJnYmFBbHBoYSA9IDB4ZmYwMDAw
MDA7Ci0KLWNsYXNzIEltYWdlIHsKLXB1YmxpYzoKLSAgICBJbWFnZSgpCi0gICAgICAgIDogbV93
aWR0aCgwKQotICAgICAgICAsIG1faGVpZ2h0KDApIHsgfQotCi0gICAgSW1hZ2UoY29uc3QgSW1h
Z2UmIGltYWdlKQotICAgICAgICA6IG1fd2lkdGgoaW1hZ2UubV93aWR0aCkKLSAgICAgICAgLCBt
X2hlaWdodChpbWFnZS5tX2hlaWdodCkKLSAgICAgICAgLCBtX2RhdGEoaW1hZ2UubV9kYXRhKSB7
IH0KLQotICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoID4gMCAmJiBt
X2hlaWdodCA+IDA7IH0KLSAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9
Ci0gICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0gICAgY29uc3Qg
dW5zaWduZWQgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuICZtX2RhdGEuZnJvbnQoKTsgfQot
Ci0gICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZnJvbSBzdGRpbiB3aXRoIHRoZSBnaXZlbiBkYXRh
IGxlbmd0aC4gT24gc3VjY2VzcywgaXQKLSAgICAvLyB3aWxsIHJldHVybiB0cnVlLiBPbiBmYWls
dXJlLCBubyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBhY2Nlc3NlZC4KLSAgICBib29sIGNyZWF0
ZUZyb21TdGRpbihzaXplX3QgYnl0ZUxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGlmICghYnl0ZUxl
bmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB1bnNpZ25lZCBjaGFy
KiBzb3VyY2UgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlTGVuZ3RoXTsKLSAgICAgICAgaWYgKGZy
ZWFkKHNvdXJjZSwgMSwgYnl0ZUxlbmd0aCwgc3RkaW4pICE9IGJ5dGVMZW5ndGgpIHsKLSAgICAg
ICAgICAgIGRlbGV0ZSBbXSBzb3VyY2U7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIXdlYmtpdF9zdXBwb3J0OjpEZWNvZGVQTkcoc291cmNlLCBi
eXRlTGVuZ3RoLCAmbV9kYXRhLCAmbV93aWR0aCwgJm1faGVpZ2h0KSkgewotICAgICAgICAgICAg
ZGVsZXRlIFtdIHNvdXJjZTsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZGVsZXRlIFtdIHNvdXJjZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlcyB0aGUgaW1hZ2UgZnJvbSB0aGUg
Z2l2ZW4gZmlsZW5hbWUgb24gZGlzaywgYW5kIHJldHVybnMgdHJ1ZSBvbgotICAgIC8vIHN1Y2Nl
c3MuCi0gICAgYm9vbCBjcmVhdGVGcm9tRmlsZW5hbWUoY29uc3QgY2hhciogZmlsZW5hbWUpCi0g
ICAgewotICAgICAgICBGSUxFKiBmID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOwotICAgICAgICBp
ZiAoIWYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdmVjdG9yPHVuc2ln
bmVkIGNoYXI+IGNvbXByZXNzZWQ7Ci0gICAgICAgIGNvbnN0IGludCBidWZTaXplID0gMTAyNDsK
LSAgICAgICAgdW5zaWduZWQgY2hhciBidWZbYnVmU2l6ZV07Ci0gICAgICAgIHNpemVfdCBudW1S
ZWFkID0gMDsKLSAgICAgICAgd2hpbGUgKChudW1SZWFkID0gZnJlYWQoYnVmLCAxLCBidWZTaXpl
LCBmKSkgPiAwKQotICAgICAgICAgICAgc3RkOjpjb3B5KGJ1ZiwgJmJ1ZltudW1SZWFkXSwgc3Rk
OjpiYWNrX2luc2VydGVyKGNvbXByZXNzZWQpKTsKLQotICAgICAgICBmY2xvc2UoZik7Ci0KLSAg
ICAgICAgaWYgKCF3ZWJraXRfc3VwcG9ydDo6RGVjb2RlUE5HKCZjb21wcmVzc2VkWzBdLCBjb21w
cmVzc2VkLnNpemUoKSwgJm1fZGF0YSwgJm1fd2lkdGgsICZtX2hlaWdodCkpIHsKLSAgICAgICAg
ICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAg
ICBtX3dpZHRoID0gbV9oZWlnaHQgPSAwOwotICAgICAgICBtX2RhdGEuY2xlYXIoKTsKLSAgICB9
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBSR0JBIHZhbHVlIG9mIHRoZSBwaXhlbCBhdCB0aGUgZ2l2
ZW4gbG9jYXRpb24KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcGl4ZWxBdChpbnQgeCwgaW50IHkp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoeCA+PSAwICYmIHggPCBtX3dpZHRoKTsKLSAg
ICAgICAgQVNTRVJUKHkgPj0gMCAmJiB5IDwgbV9oZWlnaHQpOwotICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oJihtX2RhdGFbKHkgKiBtX3dpZHRo
ICsgeCkgKiA0XSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0UGl4ZWxBdChpbnQgeCwgaW50IHks
IHVuc2lnbmVkIGludCBjb2xvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh4ID49IDAg
JiYgeCA8IG1fd2lkdGgpOwotICAgICAgICBBU1NFUlQoeSA+PSAwICYmIHkgPCBtX2hlaWdodCk7
Ci0gICAgICAgIHZvaWQqIGFkZHIgPSAmY29uc3RfY2FzdDx1bnNpZ25lZCBjaGFyKj4oJm1fZGF0
YS5mcm9udCgpKVsoeSAqIG1fd2lkdGggKyB4KSAqIDRdOwotICAgICAgICAqcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQqPihhZGRyKSA9IGNvbG9yOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICAvLyBwaXhlbCBkaW1lbnNpb25zIG9mIHRoZSBpbWFnZQotICAgIGludCBtX3dpZHRoLCBtX2hl
aWdodDsKLQotICAgIHZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtX2RhdGE7Ci19OwotCi10eXBlZGVm
IGZsb2F0ICgqSW1hZ2VDb21wYXJpc29uUHJvYykgKGNvbnN0IEltYWdlJiwgY29uc3QgSW1hZ2Um
KTsKLQotZmxvYXQgcGVyY2VudGFnZURpZmZlcmVudChjb25zdCBJbWFnZSYgYmFzZWxpbmUsIGNv
bnN0IEltYWdlJiBhY3R1YWwpCi17Ci0gICAgaW50IHcgPSBtaW4oYmFzZWxpbmUud2lkdGgoKSwg
YWN0dWFsLndpZHRoKCkpOwotICAgIGludCBoID0gbWluKGJhc2VsaW5lLmhlaWdodCgpLCBhY3R1
YWwuaGVpZ2h0KCkpOwotCi0gICAgLy8gQ29tcHV0ZSBwaXhlbHMgZGlmZmVyZW50IGluIHRoZSBv
dmVybGFwCi0gICAgaW50IHBpeGVsc0RpZmZlcmVudCA9IDA7Ci0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoOyArK3kpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3OyArK3gpIHsKLSAg
ICAgICAgICAgIGlmIChiYXNlbGluZS5waXhlbEF0KHgsIHkpICE9IGFjdHVhbC5waXhlbEF0KHgs
IHkpKQotICAgICAgICAgICAgICAgIHBpeGVsc0RpZmZlcmVudCsrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gQ291bnQgcGl4ZWxzIHRoYXQgYXJlIGEgZGlmZmVyZW5jZSBpbiBzaXplIGFz
IGFsc28gYmVpbmcgZGlmZmVyZW50Ci0gICAgaW50IG1heFdpZHRoID0gbWF4KGJhc2VsaW5lLndp
ZHRoKCksIGFjdHVhbC53aWR0aCgpKTsKLSAgICBpbnQgbWF4SGVpZ2h0ID0gbWF4KGJhc2VsaW5l
LmhlaWdodCgpLCBhY3R1YWwuaGVpZ2h0KCkpOwotCi0gICAgLy8gLi4ucGl4ZWxzIG9mZiB0aGUg
cmlnaHQgc2lkZSwgYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGxvd2VyIHJpZ2h0IGNvcm5lcgotICAg
IHBpeGVsc0RpZmZlcmVudCArPSAobWF4V2lkdGggLSB3KSAqIGg7Ci0KLSAgICAvLyAuLi5waXhl
bHMgYWxvbmcgdGhlIGJvdHRvbSwgaW5jbHVkaW5nIHRoZSBsb3dlciByaWdodCBjb3JuZXIKLSAg
ICBwaXhlbHNEaWZmZXJlbnQgKz0gKG1heEhlaWdodCAtIGgpICogbWF4V2lkdGg7Ci0KLSAgICAv
LyBMaWtlIHRoZSBXZWJLaXQgSW1hZ2VEaWZmIHRvb2wsIHdlIGRlZmluZSBwZXJjZW50YWdlIGRp
ZmZlcmVudCBpbiB0ZXJtcwotICAgIC8vIG9mIHRoZSBzaXplIG9mIHRoZSAnYWN0dWFsJyBiaXRt
YXAuCi0gICAgZmxvYXQgdG90YWxQaXhlbHMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYWN0dWFsLndp
ZHRoKCkpICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFjdHVhbC5oZWlnaHQoKSk7Ci0gICAgaWYgKCF0
b3RhbFBpeGVscykKLSAgICAgICAgcmV0dXJuIDEwMC4wZjsgLy8gV2hlbiB0aGUgYml0bWFwIGlz
IGVtcHR5LCB0aGV5IGFyZSAxMDAlIGRpZmZlcmVudC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHBpeGVsc0RpZmZlcmVudCkgLyB0b3RhbFBpeGVscyAqIDEwMDsKLX0KLQotaW5saW5l
IHVuc2lnbmVkIGludCBtYXhPZjModW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiLCB1bnNp
Z25lZCBpbnQgYykKLXsKLSAgICBpZiAoYSA8IGIpCi0gICAgICAgIHJldHVybiBzdGQ6Om1heChi
LCBjKTsKLSAgICByZXR1cm4gc3RkOjptYXgoYSwgYyk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBp
bnQgZ2V0UmVkQ29tcG9uZW50KHVuc2lnbmVkIGludCBjb2xvcikKLXsKLSAgICByZXR1cm4gKGNv
bG9yIDw8IDI0KSA+PiAyNDsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGludCBnZXRHcmVlbkNvbXBv
bmVudCh1bnNpZ25lZCBpbnQgY29sb3IpCi17Ci0gICAgcmV0dXJuIChjb2xvciA8PCAxNikgPj4g
MjQ7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBpbnQgZ2V0Qmx1ZUNvbXBvbmVudCh1bnNpZ25lZCBp
bnQgY29sb3IpCi17Ci0gICAgcmV0dXJuIChjb2xvciA8PCA4KSA+PiAyNDsKLX0KLQotLy8vIFJh
bmsgc21hbGwtcGl4ZWwtY291bnQgaGlnaC1pbnRlbnNpdHkgY2hhbmdlcyBhcyBtb3JlIGltcG9y
dGFudCB0aGFuCi0vLy8gbGFyZ2UtcGl4ZWwtY291bnQgbG93LWludGVuc2l0eSBjaGFuZ2VzLgot
ZmxvYXQgd2VpZ2h0ZWRQZXJjZW50YWdlRGlmZmVyZW50KGNvbnN0IEltYWdlJiBiYXNlbGluZSwg
Y29uc3QgSW1hZ2UmIGFjdHVhbCkKLXsKLSAgICBpbnQgdyA9IG1pbihiYXNlbGluZS53aWR0aCgp
LCBhY3R1YWwud2lkdGgoKSk7Ci0gICAgaW50IGggPSBtaW4oYmFzZWxpbmUuaGVpZ2h0KCksIGFj
dHVhbC5oZWlnaHQoKSk7Ci0KLSAgICBmbG9hdCB3ZWlnaHRlZFBpeGVsc0RpZmZlcmVudCA9IDA7
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyArK3kpIHsKLSAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3OyArK3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBhY3R1YWxDb2xvciA9
IGFjdHVhbC5waXhlbEF0KHgsIHkpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2VsaW5l
Q29sb3IgPSBiYXNlbGluZS5waXhlbEF0KHgsIHkpOwotICAgICAgICAgICAgaWYgKGJhc2VsaW5l
Q29sb3IgIT0gYWN0dWFsQ29sb3IpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWN0
dWFsUiA9IGdldFJlZENvbXBvbmVudChhY3R1YWxDb2xvcik7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGFjdHVhbEcgPSBnZXRHcmVlbkNvbXBvbmVudChhY3R1YWxDb2xvcik7Ci0gICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGFjdHVhbEIgPSBnZXRCbHVlQ29tcG9uZW50KGFjdHVh
bENvbG9yKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZWxpbmVSID0gZ2V0UmVk
Q29tcG9uZW50KGJhc2VsaW5lQ29sb3IpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBi
YXNlbGluZUcgPSBnZXRHcmVlbkNvbXBvbmVudChiYXNlbGluZUNvbG9yKTsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgYmFzZWxpbmVCID0gZ2V0Qmx1ZUNvbXBvbmVudChiYXNlbGluZUNv
bG9yKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVsdGFSID0gc3RkOjptYXgoYWN0
dWFsUiwgYmFzZWxpbmVSKQotICAgICAgICAgICAgICAgICAgICAtIHN0ZDo6bWluKGFjdHVhbFIs
IGJhc2VsaW5lUik7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhRyA9IHN0ZDo6
bWF4KGFjdHVhbEcsIGJhc2VsaW5lRykKLSAgICAgICAgICAgICAgICAgICAgLSBzdGQ6Om1pbihh
Y3R1YWxHLCBiYXNlbGluZUcpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZWx0YUIg
PSBzdGQ6Om1heChhY3R1YWxCLCBiYXNlbGluZUIpCi0gICAgICAgICAgICAgICAgICAgIC0gc3Rk
OjptaW4oYWN0dWFsQiwgYmFzZWxpbmVCKTsKLSAgICAgICAgICAgICAgICB3ZWlnaHRlZFBpeGVs
c0RpZmZlcmVudCArPQotICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obWF4
T2YzKGRlbHRhUiwgZGVsdGFHLCBkZWx0YUIpKSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGludCBtYXhXaWR0aCA9IG1heChiYXNlbGluZS53aWR0aCgpLCBh
Y3R1YWwud2lkdGgoKSk7Ci0gICAgaW50IG1heEhlaWdodCA9IG1heChiYXNlbGluZS5oZWlnaHQo
KSwgYWN0dWFsLmhlaWdodCgpKTsKLQotICAgIHdlaWdodGVkUGl4ZWxzRGlmZmVyZW50ICs9ICht
YXhXaWR0aCAtIHcpICogaDsKLQotICAgIHdlaWdodGVkUGl4ZWxzRGlmZmVyZW50ICs9IChtYXhI
ZWlnaHQgLSBoKSAqIG1heFdpZHRoOwotCi0gICAgZmxvYXQgdG90YWxQaXhlbHMgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oYWN0dWFsLndpZHRoKCkpCi0gICAgICAgICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFjdHVhbC5oZWlnaHQoKSk7Ci0gICAgaWYgKCF0b3RhbFBpeGVscykKLSAgICAgICAgcmV0dXJu
IDEwMC4wZjsKLSAgICByZXR1cm4gd2VpZ2h0ZWRQaXhlbHNEaWZmZXJlbnQgLyB0b3RhbFBpeGVs
cyAqIDEwMDsKLX0KLQotCi12b2lkIHByaW50SGVscCgpCi17Ci0gICAgZnByaW50ZihzdGRlcnIs
Ci0gICAgICAgICAgICAiVXNhZ2U6XG4iCi0gICAgICAgICAgICAiICBJbWFnZURpZmYgPGNvbXBh
cmUgZmlsZT4gPHJlZmVyZW5jZSBmaWxlPlxuIgotICAgICAgICAgICAgIiAgICBDb21wYXJlcyB0
d28gZmlsZXMgb24gZGlzaywgcmV0dXJuaW5nIDAgd2hlbiB0aGV5IGFyZSB0aGUgc2FtZVxuIgot
ICAgICAgICAgICAgIiAgSW1hZ2VEaWZmIC0tdXNlLXN0ZGluXG4iCi0gICAgICAgICAgICAiICAg
IFN0YXlzIG9wZW4gcmVhZGluZyBwYWlycyBvZiBmaWxlbmFtZXMgZnJvbSBzdGRpbiwgY29tcGFy
aW5nIHRoZW0sXG4iCi0gICAgICAgICAgICAiICAgIGFuZCBzZW5kaW5nIDAgdG8gc3Rkb3V0IHdo
ZW4gdGhleSBhcmUgdGhlIHNhbWVcbiIKLSAgICAgICAgICAgICIgIEltYWdlRGlmZiAtLWRpZmYg
PGNvbXBhcmUgZmlsZT4gPHJlZmVyZW5jZSBmaWxlPiA8b3V0cHV0IGZpbGU+XG4iCi0gICAgICAg
ICAgICAiICAgIENvbXBhcmVzIHR3byBmaWxlcyBvbiBkaXNrLCBvdXRwdXRzIGFuIGltYWdlIHRo
YXQgdmlzdWFsaXplcyB0aGUiCi0gICAgICAgICAgICAiICAgIGRpZmZlcmVuY2UgdG8gPG91dHB1
dCBmaWxlPlxuIgotICAgICAgICAgICAgIiAgICAtLXdyaXRlLWltYWdlLWRpZmYtbWV0cmljcyBw
cmludHMgYSBkaWZmZXJlbmNlIG1ldHJpYyB0byBzdGRvdXRcbiIKLSAgICAgICAgICAgICIgICAg
LS13ZWlnaHRlZC1pbnRlbnNpdHkgd2VpZ2h0cyB0aGUgZGlmZmVyZW5jZSBtZXRyaWMgYnkgaW50
ZW5zaXR5XG4iCi0gICAgICAgICAgICAiICAgICAgYXQgZWFjaCBwaXhlbFxuIik7Ci0gICAgLyog
Rm9yIHVuZmluaXNoZWQgd2Via2l0LWxpa2UtbW9kZSAoc2VlIGJlbG93KQotICAgICAgICJcbiIK
LSAgICAgICAiICBJbWFnZURpZmYgLXNcbiIKLSAgICAgICAiICAgIFJlYWRzIHN0cmVhbSBpbnB1
dCBmcm9tIHN0ZGluLCBzaG91bGQgYmUgRVhBQ1RMWSBvZiB0aGUgZm9ybWF0XG4iCi0gICAgICAg
IiAgICBcIkNvbnRlbnQtbGVuZ3RoOiA8Ynl0ZSBsZW5ndGg+IDxkYXRhPkNvbnRlbnQtbGVuZ3Ro
OiAuLi5cbiIKLSAgICAgICAiICAgIGl0IHdpbGwgdGFrZSBhcyBtYW55IGZpbGUgcGFpcnMgYXMg
Z2l2ZW4sIGFuZCB3aWxsIGNvbXBhcmUgdGhlbSBhc1xuIgotICAgICAgICIgICAgKGNtcF9maWxl
LCByZWZlcmVuY2VfZmlsZSkgcGFpcnNcbiIpOwotICAgICovCi19Ci0KLWludCBjb21wYXJlSW1h
Z2VzKGNvbnN0IGNoYXIqIGZpbGUxLCBjb25zdCBjaGFyKiBmaWxlMiwKLSAgICAgICAgICAgICAg
ICAgIEltYWdlQ29tcGFyaXNvblByb2MgY29tcGFyYXRvcikKLXsKLSAgICBJbWFnZSBhY3R1YWxJ
bWFnZTsKLSAgICBJbWFnZSBiYXNlbGluZUltYWdlOwotCi0gICAgaWYgKCFhY3R1YWxJbWFnZS5j
cmVhdGVGcm9tRmlsZW5hbWUoZmlsZTEpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW1h
Z2VEaWZmOiBVbmFibGUgdG8gb3BlbiBmaWxlIFwiJXNcIlxuIiwgZmlsZTEpOwotICAgICAgICBy
ZXR1cm4gc3RhdHVzRXJyb3I7Ci0gICAgfQotICAgIGlmICghYmFzZWxpbmVJbWFnZS5jcmVhdGVG
cm9tRmlsZW5hbWUoZmlsZTIpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW1hZ2VEaWZm
OiBVbmFibGUgdG8gb3BlbiBmaWxlIFwiJXNcIlxuIiwgZmlsZTIpOwotICAgICAgICByZXR1cm4g
c3RhdHVzRXJyb3I7Ci0gICAgfQotCi0gICAgZmxvYXQgcGVyY2VudCA9ICgqY29tcGFyYXRvciko
YWN0dWFsSW1hZ2UsIGJhc2VsaW5lSW1hZ2UpOwotICAgIGlmIChwZXJjZW50ID4gMC4wKSB7Ci0g
ICAgICAgIC8vIGZhaWx1cmU6IFRoZSBXZWJLaXQgdmVyc2lvbiBhbHNvIHdyaXRlcyB0aGUgZGlm
ZmVyZW5jZSBpbWFnZSB0bwotICAgICAgICAvLyBzdGRvdXQsIHdoaWNoIHNlZW1zIGV4Y2Vzc2l2
ZSBmb3Igb3VyIG5lZWRzLgotICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxu
IiwgcGVyY2VudCk7Ci0gICAgICAgIHJldHVybiBzdGF0dXNEaWZmZXJlbnQ7Ci0gICAgfQotCi0g
ICAgLy8gc3VjY2VzcwotICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBwZXJj
ZW50KTsKLSAgICByZXR1cm4gc3RhdHVzU2FtZTsKLQotfQotCi0vLyBVbnRlc3RlZCBtb2RlIHRo
YXQgYWN0cyBsaWtlIFdlYktpdCdzIGltYWdlIGNvbXBhcmF0b3IuIEkgd3JvdGUgdGhpcyBidXQK
LS8vIGRlY2lkZWQgaXQncyB0b28gY29tcGxpY2F0ZWQuIFdlIG1heSB1c2UgaXQgaW4gdGhlIGZ1
dHVyZSBpZiBpdCBsb29rcyB1c2VmdWwuCi1pbnQgdW50ZXN0ZWRDb21wYXJlSW1hZ2VzKEltYWdl
Q29tcGFyaXNvblByb2MgY29tcGFyYXRvcikKLXsKLSAgICBJbWFnZSBhY3R1YWxJbWFnZTsKLSAg
ICBJbWFnZSBiYXNlbGluZUltYWdlOwotICAgIGNoYXIgYnVmZmVyWzIwNDhdOwotICAgIHdoaWxl
IChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikpIHsKLSAgICAgICAgaWYgKCFz
dHJuY21wKCJDb250ZW50LWxlbmd0aDogIiwgYnVmZmVyLCAxNikpIHsKLSAgICAgICAgICAgIGNo
YXIqIGNvbnRleHQ7Ci0gICAgICAgICAgICBzdHJ0b2tfcihidWZmZXIsICIgIiwgJmNvbnRleHQp
OwotICAgICAgICAgICAgaW50IGltYWdlU2l6ZSA9IHN0cnRvbChzdHJ0b2tfcigwLCAiICIsICZj
b250ZXh0KSwgMCwgMTApOwotCi0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGlmIChpbWFnZVNpemUgPiAwICYmICFhY3R1YWxJbWFnZS5oYXNJbWFnZSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZS5jcmVhdGVGcm9tU3RkaW4oaW1hZ2VT
aXplKSkgewotICAgICAgICAgICAgICAgICAgICBmcHV0cygiRXJyb3IsIGlucHV0IGltYWdlIGNh
bid0IGJlIGRlY29kZWQuXG4iLCBzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZSA+
IDAgJiYgIWJhc2VsaW5lSW1hZ2UuaGFzSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgIGlmICgh
YmFzZWxpbmVJbWFnZS5jcmVhdGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkgewotICAgICAgICAgICAg
ICAgICAgICBmcHV0cygiRXJyb3IsIGJhc2VsaW5lIGltYWdlIGNhbid0IGJlIGRlY29kZWQuXG4i
LCBzdGRlcnIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZwdXRzKCJFcnJvciwg
aW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC5cbiIsIHN0ZGVycik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0
dWFsSW1hZ2UuaGFzSW1hZ2UoKSAmJiBiYXNlbGluZUltYWdlLmhhc0ltYWdlKCkpIHsKLSAgICAg
ICAgICAgIGZsb2F0IHBlcmNlbnQgPSAoKmNvbXBhcmF0b3IpKGFjdHVhbEltYWdlLCBiYXNlbGlu
ZUltYWdlKTsKLSAgICAgICAgICAgIGlmIChwZXJjZW50ID4gMC4wKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gZmFpbHVyZTogVGhlIFdlYktpdCB2ZXJzaW9uIGFsc28gd3JpdGVzIHRoZSBkaWZmZXJl
bmNlIGltYWdlIHRvCi0gICAgICAgICAgICAgICAgLy8gc3Rkb3V0LCB3aGljaCBzZWVtcyBleGNl
c3NpdmUgZm9yIG91ciBuZWVkcy4KLSAgICAgICAgICAgICAgICBwcmludGYoImRpZmY6ICUwMS4y
ZiUlIGZhaWxlZFxuIiwgcGVyY2VudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUl
IHBhc3NlZFxuIiwgcGVyY2VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhY3R1YWxJ
bWFnZS5jbGVhcigpOwotICAgICAgICAgICAgYmFzZWxpbmVJbWFnZS5jbGVhcigpOwotICAgICAg
ICB9Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQot
Ym9vbCBjcmVhdGVJbWFnZURpZmYoY29uc3QgSW1hZ2UmIGltYWdlMSwgY29uc3QgSW1hZ2UmIGlt
YWdlMiwgSW1hZ2UqIG91dCkKLXsKLSAgICBpbnQgdyA9IG1pbihpbWFnZTEud2lkdGgoKSwgaW1h
Z2UyLndpZHRoKCkpOwotICAgIGludCBoID0gbWluKGltYWdlMS5oZWlnaHQoKSwgaW1hZ2UyLmhl
aWdodCgpKTsKLSAgICAqb3V0ID0gSW1hZ2UoaW1hZ2UxKTsKLSAgICBib29sIHNhbWUgPSAoaW1h
Z2UxLndpZHRoKCkgPT0gaW1hZ2UyLndpZHRoKCkpICYmIChpbWFnZTEuaGVpZ2h0KCkgPT0gaW1h
Z2UyLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZXh0
cmEgcGl4ZWxzIGlmIHRoZSBpbWFnZSBzaXplcyBhcmUgZGlmZmVyZW50LgotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaDsgKyt5KSB7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgKyt4
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZVBpeGVsID0gaW1hZ2UxLnBpeGVsQXQo
eCwgeSk7Ci0gICAgICAgICAgICBpZiAoYmFzZVBpeGVsICE9IGltYWdlMi5waXhlbEF0KHgsIHkp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IGRpZmZlcmluZyBwaXhlbHMgcmVkLgotICAgICAg
ICAgICAgICAgIG91dC0+c2V0UGl4ZWxBdCh4LCB5LCByZ2JhUmVkIHwgcmdiYUFscGhhKTsKLSAg
ICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIFNldCBzYW1lIHBpeGVscyBhcyBmYWRlZC4KLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYWxwaGEgPSBiYXNlUGl4ZWwgJiByZ2JhQWxwaGE7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG5ld1BpeGVsID0gYmFzZVBpeGVsIC0gKChhbHBoYSAvIDIpICYgcmdi
YUFscGhhKTsKLSAgICAgICAgICAgICAgICBvdXQtPnNldFBpeGVsQXQoeCwgeSwgbmV3UGl4ZWwp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHNhbWU7Ci19
Ci0KLXN0YXRpYyBib29sIHdyaXRlRmlsZShjb25zdCBjaGFyKiBvdXRGaWxlLCBjb25zdCB1bnNp
Z25lZCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi17Ci0gICAgRklMRSogZmlsZSA9IGZv
cGVuKG91dEZpbGUsICJ3YiIpOwotICAgIGlmICghZmlsZSkgewotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkltYWdlRGlmZjogVW5hYmxlIHRvIGNyZWF0ZSBmaWxlIFwiJXNcIlxuIiwgb3V0Rmls
ZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGRhdGFTaXplICE9IGZ3
cml0ZShkYXRhLCAxLCBkYXRhU2l6ZSwgZmlsZSkpIHsKLSAgICAgICAgZmNsb3NlKGZpbGUpOwot
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogVW5hYmxlIHRvIHdyaXRlIGRhdGEg
dG8gZmlsZSBcIiVzXCJcbiIsIG91dEZpbGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIGZjbG9zZShmaWxlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IGRpZmZJbWFn
ZXMoY29uc3QgY2hhciogZmlsZTEsIGNvbnN0IGNoYXIqIGZpbGUyLCBjb25zdCBjaGFyKiBvdXRG
aWxlLAotICAgICAgICAgICAgICAgYm9vbCBzaG91bGRXcml0ZVBlcmNlbnRhZ2VzLCBJbWFnZUNv
bXBhcmlzb25Qcm9jIGNvbXBhcmF0b3IpCi17Ci0gICAgSW1hZ2UgYWN0dWFsSW1hZ2U7Ci0gICAg
SW1hZ2UgYmFzZWxpbmVJbWFnZTsKLQotICAgIGlmICghYWN0dWFsSW1hZ2UuY3JlYXRlRnJvbUZp
bGVuYW1lKGZpbGUxKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogVW5h
YmxlIHRvIG9wZW4gZmlsZSBcIiVzXCJcbiIsIGZpbGUxKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1
c0Vycm9yOwotICAgIH0KLSAgICBpZiAoIWJhc2VsaW5lSW1hZ2UuY3JlYXRlRnJvbUZpbGVuYW1l
KGZpbGUyKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogVW5hYmxlIHRv
IG9wZW4gZmlsZSBcIiVzXCJcbiIsIGZpbGUyKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1c0Vycm9y
OwotICAgIH0KLQotICAgIEltYWdlIGRpZmZJbWFnZTsKLSAgICBib29sIHNhbWUgPSBjcmVhdGVJ
bWFnZURpZmYoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UsICZkaWZmSW1hZ2UpOwotICAgIGlm
IChzYW1lKQotICAgICAgICByZXR1cm4gc3RhdHVzU2FtZTsKLQotICAgIHZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiBwbmdEYXRhOwotICAgIHdlYmtpdF9zdXBwb3J0OjpFbmNvZGVSR0JBUE5HKGRpZmZJ
bWFnZS5kYXRhKCksIGRpZmZJbWFnZS53aWR0aCgpLCBkaWZmSW1hZ2UuaGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkltYWdlLndpZHRoKCkgKiA0LCAmcG5n
RGF0YSk7Ci0gICAgaWYgKCF3cml0ZUZpbGUob3V0RmlsZSwgJnBuZ0RhdGEuZnJvbnQoKSwgcG5n
RGF0YS5zaXplKCkpKQotICAgICAgICByZXR1cm4gc3RhdHVzRXJyb3I7Ci0KLSAgICBpZiAoc2hv
dWxkV3JpdGVQZXJjZW50YWdlcykgewotICAgICAgICBmbG9hdCBwZXJjZW50ID0gKCpjb21wYXJh
dG9yKShhY3R1YWxJbWFnZSwgYmFzZWxpbmVJbWFnZSk7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0
LCAiJS4zZlxuIiwgcGVyY2VudCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1c0RpZmZlcmVu
dDsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKLXsKLSAgICBz
dGQ6OnZlY3Rvcjxjb25zdCBjaGFyKj4gdmFsdWVzOwotICAgIGJvb2wgcG9sbFN0ZGluID0gZmFs
c2U7Ci0gICAgYm9vbCBnZW5lcmF0ZURpZmYgPSBmYWxzZTsKLSAgICBib29sIHNob3VsZFdyaXRl
UGVyY2VudGFnZXMgPSBmYWxzZTsKLSAgICBJbWFnZUNvbXBhcmlzb25Qcm9jIGNvbXBhcmF0b3Ig
PSBwZXJjZW50YWdlRGlmZmVyZW50OwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgKytp
KSB7Ci0gICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sIG9wdGlvblBvbGxTdGRpbikpCi0gICAg
ICAgICAgICBwb2xsU3RkaW4gPSB0cnVlOwotICAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3Zb
aV0sIG9wdGlvbkdlbmVyYXRlRGlmZikpCi0gICAgICAgICAgICBnZW5lcmF0ZURpZmYgPSB0cnVl
OwotICAgICAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sIG9wdGlvbldyaXRlKSkKLSAgICAg
ICAgICAgIHNob3VsZFdyaXRlUGVyY2VudGFnZXMgPSB0cnVlOwotICAgICAgICBlbHNlIGlmICgh
c3RyY21wKGFyZ3ZbaV0sIG9wdGlvbldlaWdodGVkSW50ZW5zaXR5KSkKLSAgICAgICAgICAgIGNv
bXBhcmF0b3IgPSB3ZWlnaHRlZFBlcmNlbnRhZ2VEaWZmZXJlbnQ7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbHVlcy5wdXNoX2JhY2soYXJndltpXSk7Ci0gICAgfQotCi0gICAgaWYgKHBv
bGxTdGRpbikgewotICAgICAgICAvLyBXYXRjaCBzdGRpbiBmb3IgZmlsZW5hbWVzLgotICAgICAg
ICBjb25zdCBzaXplX3QgYnVmZmVyU2l6ZSA9IFBBVEhfTUFYOwotICAgICAgICBjaGFyIHN0ZGlu
QnVmZmVyW2J1ZmZlclNpemVdOwotICAgICAgICBjaGFyIGZpcnN0TmFtZVtidWZmZXJTaXplXTsK
LSAgICAgICAgYm9vbCBoYXZlRmlyc3ROYW1lID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlIChmZ2V0
cyhzdGRpbkJ1ZmZlciwgYnVmZmVyU2l6ZSwgc3RkaW4pKSB7Ci0gICAgICAgICAgICBpZiAoIXN0
ZGluQnVmZmVyWzBdKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBp
ZiAoaGF2ZUZpcnN0TmFtZSkgewotICAgICAgICAgICAgICAgIC8vIGNvbXBhcmVJbWFnZXMgd3Jp
dGVzIHJlc3VsdHMgdG8gc3Rkb3V0IHVubGVzcyBhbiBlcnJvciBvY2N1cnJlZC4KLSAgICAgICAg
ICAgICAgICBpZiAoY29tcGFyZUltYWdlcyhmaXJzdE5hbWUsIHN0ZGluQnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0b3IpID09IHN0YXR1c0Vycm9yKQot
ICAgICAgICAgICAgICAgICAgICBwcmludGYoImVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICBm
Zmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgICAgICBoYXZlRmlyc3ROYW1lID0gZmFsc2U7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGZpcnN0IGZp
bGVuYW1lIGluIGFub3RoZXIgYnVmZmVyIGFuZCB3YWl0IGZvciB0aGUgc2Vjb25kCi0gICAgICAg
ICAgICAgICAgLy8gZmlsZW5hbWUgdG8gYXJyaXZlIHZpYSBzdGRpbi4KLSAgICAgICAgICAgICAg
ICBzdHJjcHkoZmlyc3ROYW1lLCBzdGRpbkJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgaGF2ZUZp
cnN0TmFtZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgaWYgKGdlbmVyYXRlRGlmZikgewotICAgICAgICBpZiAodmFsdWVz
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgcmV0dXJuIGRpZmZJbWFnZXModmFsdWVzWzBdLCB2
YWx1ZXNbMV0sIHZhbHVlc1syXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZFdyaXRlUGVyY2VudGFnZXMsIGNvbXBhcmF0b3IpOwotICAgIH0gZWxzZSBpZiAodmFsdWVzLnNp
emUoKSA9PSAyKQotICAgICAgICByZXR1cm4gY29tcGFyZUltYWdlcyhhcmd2WzFdLCBhcmd2WzJd
LCBjb21wYXJhdG9yKTsKLQotICAgIHByaW50SGVscCgpOwotICAgIHJldHVybiBzdGF0dXNFcnJv
cjsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RIZWxw
ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdEhlbHBlci5tbQkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdEhlbHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwyMTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0IDxBcHBLaXQvQXBw
S2l0Lmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLQotLy8gVGhpcyBpcyBhIHNpbXBsZSBoZWxwZXIgYXBwIHRoYXQgY2hhbmdl
cyB0aGUgY29sb3Igc3luYyBwcm9maWxlIHRvIHRoZQotLy8gZ2VuZXJpYyBwcm9maWxlIGFuZCBi
YWNrIHdoZW4gZG9uZS4gIFRoaXMgcHJvZ3JhbSBpcyBtYW5hZ2VkIGJ5IHRoZSBsYXlvdXQKLS8v
IHRlc3Qgc2NyaXB0LCBzbyBpdCBjYW4gZG8gdGhlIGpvYiBmb3IgbXVsdGlwbGUgRHVtcFJlbmRl
clRyZWUgd2hpbGUgdGhleSBhcmUKLS8vIHJ1bm5pbmcgbGF5b3V0IHRlc3RzLgotCi1uYW1lc3Bh
Y2UgewotCi0jaWYgZGVmaW5lZChNQUNfT1NfWF9WRVJTSU9OXzEwXzcpICYmIE1BQ19PU19YX1ZF
UlNJT05fTUFYX0FMTE9XRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF83Ci0KLUNGVVJMUmVmIHNV
c2VyQ29sb3JQcm9maWxlVVJMOwotCi12b2lkIGluc3RhbGxMYXlvdXRUZXN0Q29sb3JQcm9maWxl
KCkKLXsKLSAgICAvLyBUbyBtYWtlIHN1cmUgd2UgZ2V0IGNvbnNpc3RlbnQgY29sb3JzIChub3Qg
ZGVwZW5kZW50IG9uIHRoZSBjaG9zZW4gY29sb3IKLSAgICAvLyBzcGFjZSBvZiB0aGUgbWFpbiBk
aXNwbGF5KSwgd2UgZm9yY2UgdGhlIGdlbmVyaWMgUkdCIGNvbG9yIHByb2ZpbGUuCi0gICAgLy8g
VGhpcyBjYXVzZXMgYSBjaGFuZ2UgdGhlIHVzZXIgY2FuIHNlZS4KLSAgICAKLSAgICBDRlVVSURS
ZWYgbWFpbkRpc3BsYXlJRCA9IENHRGlzcGxheUNyZWF0ZVVVSURGcm9tRGlzcGxheUlEKENHTWFp
bkRpc3BsYXlJRCgpKTsKLSAgICAKLSAgICBpZiAoIXNVc2VyQ29sb3JQcm9maWxlVVJMKSB7Ci0g
ICAgICAgIENGRGljdGlvbmFyeVJlZiBkZXZpY2VJbmZvID0gQ29sb3JTeW5jRGV2aWNlQ29weURl
dmljZUluZm8oa0NvbG9yU3luY0Rpc3BsYXlEZXZpY2VDbGFzcywgbWFpbkRpc3BsYXlJRCk7Ci0K
LSAgICAgICAgaWYgKCFkZXZpY2VJbmZvKSB7Ci0gICAgICAgICAgICBOU0xvZyhAIk5vIGRpc3Bs
YXkgYXR0YWNoZWQgdG8gc3lzdGVtOyBub3Qgc2V0dGluZyBtYWluIGRpc3BsYXkncyBjb2xvciBw
cm9maWxlLiIpOwotICAgICAgICAgICAgQ0ZSZWxlYXNlKG1haW5EaXNwbGF5SUQpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb2Zp
bGVJbmZvID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXZpY2VJbmZv
LCBrQ29sb3JTeW5jQ3VzdG9tUHJvZmlsZXMpOwotICAgICAgICBpZiAocHJvZmlsZUluZm8pIHsK
LSAgICAgICAgICAgIHNVc2VyQ29sb3JQcm9maWxlVVJMID0gKENGVVJMUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKHByb2ZpbGVJbmZvLCBDRlNUUigiMSIpKTsKLSAgICAgICAgICAgIENGUmV0YWlu
KHNVc2VyQ29sb3JQcm9maWxlVVJMKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBy
b2ZpbGVJbmZvID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXZpY2VJ
bmZvLCBrQ29sb3JTeW5jRmFjdG9yeVByb2ZpbGVzKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFy
eVJlZiBmYWN0b3J5UHJvZmlsZSA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUocHJvZmlsZUluZm8sIENGU1RSKCIxIikpOwotICAgICAgICAgICAgc1VzZXJDb2xvclByb2Zp
bGVVUkwgPSAoQ0ZVUkxSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmFjdG9yeVByb2ZpbGUsIGtD
b2xvclN5bmNEZXZpY2VQcm9maWxlVVJMKTsKLSAgICAgICAgICAgIENGUmV0YWluKHNVc2VyQ29s
b3JQcm9maWxlVVJMKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ0ZSZWxlYXNlKGRl
dmljZUluZm8pOwotICAgIH0KLQotICAgIENvbG9yU3luY1Byb2ZpbGVSZWYgZ2VuZXJpY1JHQlBy
b2ZpbGUgPSBDb2xvclN5bmNQcm9maWxlQ3JlYXRlV2l0aE5hbWUoa0NvbG9yU3luY0dlbmVyaWNS
R0JQcm9maWxlKTsKLSAgICBDRkVycm9yUmVmIGVycm9yOwotICAgIENGVVJMUmVmIHByb2ZpbGVV
UkwgPSBDb2xvclN5bmNQcm9maWxlR2V0VVJMKGdlbmVyaWNSR0JQcm9maWxlLCAmZXJyb3IpOwot
ICAgIGlmICghcHJvZmlsZVVSTCkgewotICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBnZXQgVVJM
IG9mIEdlbmVyaWMgUkdCIGNvbG9yIHByb2ZpbGUhIE1hbnkgcGl4ZWwgdGVzdHMgbWF5IGZhaWwg
YXMgYSByZXN1bHQuIEVycm9yOiAlQCIsIGVycm9yKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChz
VXNlckNvbG9yUHJvZmlsZVVSTCkgewotICAgICAgICAgICAgQ0ZSZWxlYXNlKHNVc2VyQ29sb3JQ
cm9maWxlVVJMKTsKLSAgICAgICAgICAgIHNVc2VyQ29sb3JQcm9maWxlVVJMID0gMDsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgQ0ZSZWxlYXNlKGdlbmVyaWNSR0JQcm9maWxlKTsKLSAg
ICAgICAgQ0ZSZWxlYXNlKG1haW5EaXNwbGF5SUQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgICAgICAKLSAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHByb2ZpbGVJbmZvID0gQ0ZEaWN0
aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKLSAg
ICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShwcm9maWxlSW5mbywga0NvbG9yU3luY0RldmljZURlZmF1
bHRQcm9maWxlSUQsIHByb2ZpbGVVUkwpOwotICAgIAotICAgIGlmICghQ29sb3JTeW5jRGV2aWNl
U2V0Q3VzdG9tUHJvZmlsZXMoa0NvbG9yU3luY0Rpc3BsYXlEZXZpY2VDbGFzcywgbWFpbkRpc3Bs
YXlJRCwgcHJvZmlsZUluZm8pKSB7Ci0gICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHNldCBjb2xv
ciBwcm9maWxlIGZvciBtYWluIGRpc3BsYXkhIE1hbnkgcGl4ZWwgdGVzdHMgbWF5IGZhaWwgYXMg
YSByZXN1bHQuIik7Ci0gICAgICAgIAotICAgICAgICBpZiAoc1VzZXJDb2xvclByb2ZpbGVVUkwp
IHsKLSAgICAgICAgICAgIENGUmVsZWFzZShzVXNlckNvbG9yUHJvZmlsZVVSTCk7Ci0gICAgICAg
ICAgICBzVXNlckNvbG9yUHJvZmlsZVVSTCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgQ0ZSZWxlYXNlKHByb2ZpbGVJbmZvKTsKLSAgICBDRlJlbGVhc2UoZ2VuZXJpY1JHQlByb2Zp
bGUpOwotICAgIENGUmVsZWFzZShtYWluRGlzcGxheUlEKTsKLX0KLQotdm9pZCByZXN0b3JlVXNl
ckNvbG9yUHJvZmlsZSh2b2lkKQotewotICAgIC8vIFRoaXMgaXMgdXNlZCBhcyBhIHNpZ25hbCBo
YW5kbGVyLCBhbmQgdGh1cyB0aGUgY2FsbHMgaW50byBDb2xvclN5bmMgYXJlIHVuc2FmZS4KLSAg
ICAvLyBCdXQgd2UgbWlnaHQgYXMgd2VsbCB0cnkgdG8gcmVzdG9yZSB0aGUgdXNlcidzIGNvbG9y
IHByb2ZpbGUsIHdlJ3JlIGdvaW5nIGRvd24gYW55d2F5Li4uCi0gICAgCi0gICAgaWYgKCFzVXNl
ckNvbG9yUHJvZmlsZVVSTCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENGVVVJRFJlZiBt
YWluRGlzcGxheUlEID0gQ0dEaXNwbGF5Q3JlYXRlVVVJREZyb21EaXNwbGF5SUQoQ0dNYWluRGlz
cGxheUlEKCkpOwotICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgcHJvZmlsZUluZm8gPSBDRkRp
Y3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwot
ICAgIENGRGljdGlvbmFyeVNldFZhbHVlKHByb2ZpbGVJbmZvLCBrQ29sb3JTeW5jRGV2aWNlRGVm
YXVsdFByb2ZpbGVJRCwgc1VzZXJDb2xvclByb2ZpbGVVUkwpOwotICAgIENvbG9yU3luY0Rldmlj
ZVNldEN1c3RvbVByb2ZpbGVzKGtDb2xvclN5bmNEaXNwbGF5RGV2aWNlQ2xhc3MsIG1haW5EaXNw
bGF5SUQsIHByb2ZpbGVJbmZvKTsKLSAgICBDRlJlbGVhc2UobWFpbkRpc3BsYXlJRCk7Ci0gICAg
Q0ZSZWxlYXNlKHByb2ZpbGVJbmZvKTsKLX0KLQotI2Vsc2UgLy8gRm9yIFNub3cgTGVvcGFyZCBh
bmQgYmVmb3JlLCB1c2Ugb2xkZXIgQ00qIEFQSS4KLQotY29uc3QgY2hhciBjb2xvclByb2ZpbGVQ
YXRoW10gPSAiL1N5c3RlbS9MaWJyYXJ5L0NvbG9yU3luYy9Qcm9maWxlcy9HZW5lcmljIFJHQiBQ
cm9maWxlLmljYyI7Ci0KLUNNUHJvZmlsZUxvY2F0aW9uIGluaXRpYWxDb2xvclByb2ZpbGVMb2Nh
dGlvbjsgLy8gVGhlIGxvY1R5cGUgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gMCB3aGljaCBpcyB0
aGUgc2FtZSBhcyBjbU5vUHJvZmlsZUJhc2UuCi0KLXZvaWQgaW5zdGFsbExheW91dFRlc3RDb2xv
clByb2ZpbGUoKQotewotICAgIC8vIFRvIG1ha2Ugc3VyZSB3ZSBnZXQgY29uc2lzdGVudCBjb2xv
cnMgKG5vdCBkZXBlbmRlbnQgb24gdGhlIE1haW4gZGlzcGxheSksCi0gICAgLy8gd2UgZm9yY2Ug
dGhlIGdlbmVyaWMgcmdiIGNvbG9yIHByb2ZpbGUuICBUaGlzIGNhc2VzIGEgY2hhbmdlIHRoZSB1
c2VyIGNhbgotICAgIC8vIHNlZS4KLSAgICBjb25zdCBDTURldmljZVNjb3BlIHNjb3BlID0geyBr
Q0ZQcmVmZXJlbmNlc0N1cnJlbnRVc2VyLCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRIb3N0IH07Ci0K
LSAgICBDTVByb2ZpbGVSZWYgcHJvZmlsZSA9IDA7Ci0gICAgaW50IGVycm9yID0gQ01HZXRQcm9m
aWxlQnlBVklEKChDTURpc3BsYXlJRFR5cGUpa0NHRGlyZWN0TWFpbkRpc3BsYXksICZwcm9maWxl
KTsKLSAgICBpZiAoIWVycm9yKSB7Ci0gICAgICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKGluaXRp
YWxDb2xvclByb2ZpbGVMb2NhdGlvbik7Ci0gICAgICAgIGVycm9yID0gTkNNR2V0UHJvZmlsZUxv
Y2F0aW9uKHByb2ZpbGUsICZpbml0aWFsQ29sb3JQcm9maWxlTG9jYXRpb24sICZzaXplKTsKLSAg
ICAgICAgQ01DbG9zZVByb2ZpbGUocHJvZmlsZSk7Ci0gICAgfQotICAgIGlmIChlcnJvcikgewot
ICAgICAgICBOU0xvZyhAImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgY29sb3IgcHJvZmlsZSwg
cGl4bWFwcyB3b24ndCBtYXRjaC4gRXJyb3I6ICVkIiwgKGludCllcnJvcik7Ci0gICAgICAgIGlu
aXRpYWxDb2xvclByb2ZpbGVMb2NhdGlvbi5sb2NUeXBlID0gY21Ob1Byb2ZpbGVCYXNlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ01Qcm9maWxlTG9jYXRpb24gbG9jYXRpb247Ci0g
ICAgbG9jYXRpb24ubG9jVHlwZSA9IGNtUGF0aEJhc2VkUHJvZmlsZTsKLSAgICBzdHJuY3B5KGxv
Y2F0aW9uLnUucGF0aExvYy5wYXRoLCBjb2xvclByb2ZpbGVQYXRoLCBzaXplb2YobG9jYXRpb24u
dS5wYXRoTG9jLnBhdGgpKTsKLSAgICBlcnJvciA9IENNU2V0RGV2aWNlUHJvZmlsZShjbURpc3Bs
YXlEZXZpY2VDbGFzcywgKENNRGV2aWNlSUQpa0NHRGlyZWN0TWFpbkRpc3BsYXksICZzY29wZSwg
Y21EZWZhdWx0UHJvZmlsZUlELCAmbG9jYXRpb24pOwotICAgIGlmIChlcnJvcikgewotICAgICAg
ICBOU0xvZyhAImZhaWxlZCBpbnN0YWxsIHRoZSBnZW5lcmljIGNvbG9yIHByb2ZpbGUsIHBpeG1h
cHMgd29uJ3QgbWF0Y2guIEVycm9yOiAlZCIsIChpbnQpZXJyb3IpOwotICAgICAgICBpbml0aWFs
Q29sb3JQcm9maWxlTG9jYXRpb24ubG9jVHlwZSA9IGNtTm9Qcm9maWxlQmFzZTsKLSAgICB9Ci19
Ci0KLXZvaWQgcmVzdG9yZVVzZXJDb2xvclByb2ZpbGUodm9pZCkKLXsKLSAgICAvLyBUaGlzIGlz
IHVzZWQgYXMgYSBzaWduYWwgaGFuZGxlciwgYW5kIHRodXMgdGhlIGNhbGxzIGludG8gQ29sb3JT
eW5jIGFyZSB1bnNhZmUuCi0gICAgLy8gQnV0IHdlIG1pZ2h0IGFzIHdlbGwgdHJ5IHRvIHJlc3Rv
cmUgdGhlIHVzZXIncyBjb2xvciBwcm9maWxlLCB3ZSdyZSBnb2luZyBkb3duIGFueXdheS4uLgot
ICAgIGlmIChpbml0aWFsQ29sb3JQcm9maWxlTG9jYXRpb24ubG9jVHlwZSAhPSBjbU5vUHJvZmls
ZUJhc2UpIHsKLSAgICAgICAgY29uc3QgQ01EZXZpY2VTY29wZSBzY29wZSA9IHsga0NGUHJlZmVy
ZW5jZXNDdXJyZW50VXNlciwga0NGUHJlZmVyZW5jZXNDdXJyZW50SG9zdCB9OwotICAgICAgICBp
bnQgZXJyb3IgPSBDTVNldERldmljZVByb2ZpbGUoY21EaXNwbGF5RGV2aWNlQ2xhc3MsIChDTURl
dmljZUlEKWtDR0RpcmVjdE1haW5EaXNwbGF5LCAmc2NvcGUsIGNtRGVmYXVsdFByb2ZpbGVJRCwg
JmluaXRpYWxDb2xvclByb2ZpbGVMb2NhdGlvbik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAg
ICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gcmVzdG9yZSBjb2xvciBwcm9maWxlLCB1c2UgU3lz
dGVtIFByZWZlcmVuY2VzIC0+IERpc3BsYXlzIC0+IENvbG9yIHRvIHJlc2V0LiBFcnJvcjogJWQi
LCAoaW50KWVycm9yKTsKLSAgICAgICAgfQotICAgICAgICBpbml0aWFsQ29sb3JQcm9maWxlTG9j
YXRpb24ubG9jVHlwZSA9IGNtTm9Qcm9maWxlQmFzZTsKLSAgICB9Ci19Ci0KLSNlbmRpZgotCi12
b2lkIHNpbXBsZVNpZ25hbEhhbmRsZXIoaW50IHNpZykKLXsKLSAgICAvLyBUcnkgdG8gcmVzdG9y
ZSB0aGUgY29sb3IgcHJvZmlsZSBhbmQgdHJ5IHRvIGdvIGRvd24gY2xlYW5seQotICAgIHJlc3Rv
cmVVc2VyQ29sb3JQcm9maWxlKCk7Ci0gICAgZXhpdCgxMjggKyBzaWcpOwotfQotCi19IC8vIG5h
bWVzcGFjZQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQotewotICAgIE5TQXV0
b3JlbGVhc2VQb29sKiBwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0K
LSAgICAvLyBIb29rcyB0aGUgd2F5cyB3ZSBtaWdodCBnZXQgdG9sZCB0byBjbGVhbiB1cC4uLgot
ICAgIHNpZ25hbChTSUdJTlQsIHNpbXBsZVNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdI
VVAsIHNpbXBsZVNpZ25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdURVJNLCBzaW1wbGVTaWdu
YWxIYW5kbGVyKTsKLQotICAgIC8vIFNhdmUgb2ZmIHRoZSBjdXJyZW50IHByb2ZpbGUsIGFuZCB0
aGVuIGluc3RhbGwgdGhlIGxheW91dCB0ZXN0IHByb2ZpbGUuCi0gICAgaW5zdGFsbExheW91dFRl
c3RDb2xvclByb2ZpbGUoKTsKLQotICAgIC8vIExldCB0aGUgc2NyaXB0IGtub3cgd2UncmUgcmVh
ZHkKLSAgICBwcmludGYoInJlYWR5XG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLQotICAgIC8v
IFdhaXQgZm9yIGFueSBrZXkgKG9yIHNpZ25hbCkKLSAgICBnZXRjaGFyKCk7Ci0KLSAgICAvLyBS
ZXN0b3JlIHRoZSBwcm9maWxlCi0gICAgcmVzdG9yZVVzZXJDb2xvclByb2ZpbGUoKTsKLQotICAg
IFtwb29sIHJlbGVhc2VdOwotICAgIHJldHVybiAwOwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdEhlbHBlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdEhlbHBlcldpbi5jcHAJKHJldmlz
aW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RI
ZWxwZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c2ln
bmFsLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0KLXN0YXRpYyBCT09MIGZvbnRTbW9vdGhpbmdFbmFibGVkID0gRkFMU0U7
Ci0KLXN0YXRpYyB2b2lkIHNhdmVJbml0aWFsU2V0dGluZ3Modm9pZCkKLXsKLSAgICA6OlN5c3Rl
bVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HLCAwLCAmZm9udFNtb290aGluZ0Vu
YWJsZWQsIDApOwotfQotCi0vLyBUZWNobmljYWxseSwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgZGlz
YWJsZSBDbGVhclR5cGUuIEhvd2V2ZXIsCi0vLyBmb3Igc29tZSByZWFzb24sIHRoZSBjYWxsIHRv
IFNQSV9TRVRGT05UU01PT1RISU5HVFlQRSBkb2Vzbid0Ci0vLyBzZWVtIHRvIHdvcmssIHNvIHdl
IGp1c3QgZGlzYWJsZSBmb250IHNtb290aGluZyBhbGwgdG9nZXRoZXIKLS8vICh3aGljaCB3b3Jr
cyByZWxpYWJseSkKLXN0YXRpYyB2b2lkIGluc3RhbGxMYXlvdXRUZXN0U2V0dGluZ3Modm9pZCkK
LXsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9TRVRGT05UU01PT1RISU5HLCBGQUxT
RSwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVJbml0aWFsU2V0dGluZ3Modm9pZCkK
LXsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9TRVRGT05UU01PT1RISU5HLCBzdGF0
aWNfY2FzdDxVSU5UPihmb250U21vb3RoaW5nRW5hYmxlZCksIDAsIDApOwotfQotCi1zdGF0aWMg
dm9pZCBzaW1wbGVTaWduYWxIYW5kbGVyKGludCBzaWduYWxOdW1iZXIpCi17Ci0gICAgLy8gVHJ5
IHRvIHJlc3RvcmUgdGhlIHNldHRpbmdzIGFuZCB0aGVuIGdvIGRvd24gY2xlYW5seQotICAgIHJl
c3RvcmVJbml0aWFsU2V0dGluZ3MoKTsKLSAgICBleGl0KDEyOCArIHNpZ25hbE51bWJlcik7Ci19
Ci0KLWludCBtYWluKGludCwgY2hhcipbXSkKLXsKLSAgICAvLyBIb29rcyB0aGUgd2F5cyB3ZSBt
aWdodCBnZXQgdG9sZCB0byBjbGVhbiB1cC4uLgotICAgIHNpZ25hbChTSUdJTlQsIHNpbXBsZVNp
Z25hbEhhbmRsZXIpOwotICAgIHNpZ25hbChTSUdURVJNLCBzaW1wbGVTaWduYWxIYW5kbGVyKTsK
LQotICAgIHNhdmVJbml0aWFsU2V0dGluZ3MoKTsKLQotICAgIGluc3RhbGxMYXlvdXRUZXN0U2V0
dGluZ3MoKTsKLQotICAgIC8vIExldCB0aGUgc2NyaXB0IGtub3cgd2UncmUgcmVhZHkKLSAgICBw
cmludGYoInJlYWR5XG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLQotICAgIC8vIFdhaXQgZm9y
IGFueSBrZXkgKG9yIHNpZ25hbCkKLSAgICBnZXRjaGFyKCk7Ci0KLSAgICByZXN0b3JlSW5pdGlh
bFNldHRpbmdzKCk7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1BsYXRmb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrUGxhdGZvcm0uY3BwCShyZXZpc2lvbiAx
NDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrUGxhdGZvcm0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTW9ja1BsYXRmb3JtLmgiCi0KLSNpbmNsdWRlICJXZWJUZXN0SW50ZXJmYWNlcy5oIgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlci5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBXZWJUZXN0UnVubmVyOwotCi1QYXNzT3duUHRy
PE1vY2tQbGF0Zm9ybT4gTW9ja1BsYXRmb3JtOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgTW9ja1BsYXRmb3JtKCkpOwotfQotCi1Nb2NrUGxhdGZvcm06Ok1vY2tQbGF0Zm9y
bSgpCi17Ci19Ci0KLU1vY2tQbGF0Zm9ybTo6fk1vY2tQbGF0Zm9ybSgpCi17Ci19Ci0KLXZvaWQg
TW9ja1BsYXRmb3JtOjpzZXRJbnRlcmZhY2VzKFdlYlRlc3RJbnRlcmZhY2VzKiBpbnRlcmZhY2Vz
KQotewotICAgIG1faW50ZXJmYWNlcyA9IGludGVyZmFjZXM7Ci19Ci0KLXZvaWQgTW9ja1BsYXRm
b3JtOjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyh1bnNpZ25lZCBjaGFyKiwgc2l6ZV90
KQotewotICAgIENSQVNIKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotV2ViTWVk
aWFTdHJlYW1DZW50ZXIqIE1vY2tQbGF0Zm9ybTo6Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2Vi
TWVkaWFTdHJlYW1DZW50ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9pbnRlcmZh
Y2VzKTsKLQotICAgIGlmICghbV9tb2NrTWVkaWFTdHJlYW1DZW50ZXIpCi0gICAgICAgIG1fbW9j
a01lZGlhU3RyZWFtQ2VudGVyID0gYWRvcHRQdHIobV9pbnRlcmZhY2VzLT5jcmVhdGVNZWRpYVN0
cmVhbUNlbnRlcihjbGllbnQpKTsKLQotICAgIHJldHVybiBtX21vY2tNZWRpYVN0cmVhbUNlbnRl
ci5nZXQoKTsKLX0KLQotV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKiBNb2NrUGxhdGZvcm06
OmNyZWF0ZVJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9pbnRlcmZhY2VzKTsKLQotICAgIHJl
dHVybiBtX2ludGVyZmFjZXMtPmNyZWF0ZVdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcihjbGll
bnQpOwotfQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrUGxhdGZvcm0uaAkocmV2aXNpb24gMTQ3NzAxKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1BsYXRmb3JtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja1BsYXRmb3JtX2gKLSNkZWZpbmUgTW9j
a1BsYXRmb3JtX2gKLQotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
VGVzdFJ1bm5lciB7Ci1jbGFzcyBXZWJUZXN0SW50ZXJmYWNlczsKLX0KLQotY2xhc3MgTW9ja1Bs
YXRmb3JtIDogcHVibGljIFdlYktpdDo6UGxhdGZvcm0gewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1vY2tQbGF0Zm9ybT4gY3JlYXRlKCk7Ci0gICAgfk1vY2tQbGF0Zm9ybSgpOwot
Ci0gICAgdm9pZCBzZXRJbnRlcmZhY2VzKFdlYlRlc3RSdW5uZXI6OldlYlRlc3RJbnRlcmZhY2Vz
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKHVuc2ln
bmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkgT1ZFUlJJREU7Ci0KLSNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlciog
Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVu
dCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXIqIGNyZWF0ZVJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJLaXQ6OldlYlJUQ1BlZXJD
b25uZWN0aW9uSGFuZGxlckNsaWVudCopIE9WRVJSSURFOwotI2VuZGlmIC8vIEVOQUJMRShNRURJ
QV9TVFJFQU0pCi0KLXByaXZhdGU6Ci0gICAgTW9ja1BsYXRmb3JtKCk7Ci0KLSAgICBXZWJUZXN0
UnVubmVyOjpXZWJUZXN0SW50ZXJmYWNlcyogbV9pbnRlcmZhY2VzOwotCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSAgICBPd25QdHI8V2ViS2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlcj4gbV9t
b2NrTWVkaWFTdHJlYW1DZW50ZXI7Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKLX07
Ci0KLSNlbmRpZiAvLyBNb2NrUGxhdGZvcm1faApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmNw
cAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9j
a1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBv
cnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLU1vY2tXZWJQcmVyZW5kZXJp
bmdTdXBwb3J0OjpNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydCgpCi17Ci0gICAgQVNTRVJUKCFj
dXJyZW50KCkpOwotICAgIGluaXRpYWxpemUodGhpcyk7Ci19Ci0KLU1vY2tXZWJQcmVyZW5kZXJp
bmdTdXBwb3J0Ojp+TW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQoKQotewotICAgIEFTU0VSVChj
dXJyZW50KCkgPT0gdGhpcyk7Ci0gICAgc2h1dGRvd24oKTsKLX0KLQotdm9pZCBNb2NrV2ViUHJl
cmVuZGVyaW5nU3VwcG9ydDo6YWRkKGNvbnN0IFdlYktpdDo6V2ViUHJlcmVuZGVyJikKLXsKLX0K
LQotdm9pZCBNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6Y2FuY2VsKGNvbnN0IFdlYktpdDo6
V2ViUHJlcmVuZGVyJikKLXsKLX0KLQotdm9pZCBNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydDo6
YWJhbmRvbihjb25zdCBXZWJLaXQ6OldlYlByZXJlbmRlciYpCi17Ci19CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJQcmVyZW5kZXJp
bmdTdXBwb3J0LmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL01vY2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnRfaAotI2RlZmluZSBN
b2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydF9oCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUHJlcmVu
ZGVyaW5nU3VwcG9ydC5oPgotCi1jbGFzcyBNb2NrV2ViUHJlcmVuZGVyaW5nU3VwcG9ydCA6IHB1
YmxpYyBXZWJLaXQ6OldlYlByZXJlbmRlcmluZ1N1cHBvcnQgewotcHVibGljOgotICAgIE1vY2tX
ZWJQcmVyZW5kZXJpbmdTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCB+TW9ja1dlYlByZXJlbmRlcmlu
Z1N1cHBvcnQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFkZChjb25zdCBXZWJLaXQ6OldlYlBy
ZXJlbmRlciYpIE9WRVJSSURFOwotICAgIHZvaWQgY2FuY2VsKGNvbnN0IFdlYktpdDo6V2ViUHJl
cmVuZGVyJikgT1ZFUlJJREU7Ci0gICAgdm9pZCBhYmFuZG9uKGNvbnN0IFdlYktpdDo6V2ViUHJl
cmVuZGVyJikgT1ZFUlJJREU7Ci19OwotCi0jZW5kaWYgLy8gTW9ja1dlYlByZXJlbmRlcmluZ1N1
cHBvcnRfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGFzay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGFzay5jcHAJKHJldmlz
aW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rhc2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGFzay5oIgotCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgot
I2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8cHVi
bGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViVGVzdFJ1bm5lcjsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBpbnZva2VUYXNrKHZvaWQqIGNv
bnRleHQpCi17Ci0gICAgV2ViVGFzayogdGFzayA9IHN0YXRpY19jYXN0PFdlYlRhc2sqPihjb250
ZXh0KTsKLSAgICB0YXNrLT5ydW4oKTsKLSAgICBkZWxldGUgdGFzazsKLX0KLQotY2xhc3MgVGFz
a1dyYXBwZXIgOiBwdWJsaWMgd2Via2l0X3N1cHBvcnQ6OlRhc2tBZGFwdG9yIHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBUYXNrV3JhcHBlcihXZWJUYXNrKiB0YXNrKQotICAgICAgICA6IG1fdGFz
ayhhZG9wdFB0cih0YXNrKSkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgflRhc2tXcmFwcGVy
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIFJ1bigpCi0gICAgewotICAgICAgICBtX3Rhc2stPnJ1
bigpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPd25QdHI8V2ViVGFzaz4gbV90YXNrOwotfTsK
LQotfQotCi12b2lkIHBvc3RUYXNrKFdlYlRhc2sqIHRhc2spCi17Ci0gICAgUGxhdGZvcm06OmN1
cnJlbnQoKS0+Y2FsbE9uTWFpblRocmVhZChpbnZva2VUYXNrLCBzdGF0aWNfY2FzdDx2b2lkKj4o
dGFzaykpOwotfQotCi12b2lkIHBvc3REZWxheWVkVGFzayhXZWJUYXNrKiB0YXNrLCBsb25nIGxv
bmcgbXMpCi17Ci0gICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayhuZXcgVGFza1dy
YXBwZXIodGFzayksIG1zKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UYXNr
LmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rh
c2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUYXNrX2gKLSNkZWZp
bmUgVGFza19oCi0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLWNsYXNzIFdlYlRhc2s7Ci19
Ci0KLXZvaWQgcG9zdFRhc2soV2ViVGVzdFJ1bm5lcjo6V2ViVGFzayopOwotdm9pZCBwb3N0RGVs
YXllZFRhc2soV2ViVGVzdFJ1bm5lcjo6V2ViVGFzayosIGxvbmcgbG9uZyBtcyk7Ci0KLSNlbmRp
ZiAvLyBUYXNrX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RFdmVu
dFByaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RFdmVudFByaW50ZXIuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0RXZlbnRQcmlu
dGVyLmgiCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0KLVRl
c3RFdmVudFByaW50ZXI6OlRlc3RFdmVudFByaW50ZXIoKQotICAgIDogbV9lbmNvZGVCaW5hcnko
ZmFsc2UpCi17Ci19Ci0KLVRlc3RFdmVudFByaW50ZXI6On5UZXN0RXZlbnRQcmludGVyKCkKLXsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRlc3RFdmVudFByaW50ZXI6OmhhbmRsZVRlc3RIZWFk
ZXIoY29uc3QgY2hhciopIGNvbnN0Ci17Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJpbnRlcjo6aGFu
ZGxlVGltZWRPdXQoKSBjb25zdAotewotICAgIGZwcmludGYoc3RkZXJyLCAiRkFJTDogVGltZWQg
b3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG4iKTsKLSAgICBmcHJpbnRm
KHN0ZG91dCwgIkZBSUw6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNh
bGxlZFxuIik7Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJpbnRlcjo6aGFuZGxlVGV4dEhlYWRlcigp
IGNvbnN0Ci17Ci0gICAgcHJpbnRmKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cbiIpOwotfQot
Ci12b2lkIFRlc3RFdmVudFByaW50ZXI6OmhhbmRsZVRleHRGb290ZXIoKSBjb25zdAotewotICAg
IHByaW50ZigiI0VPRlxuIik7Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJpbnRlcjo6aGFuZGxlQXVk
aW8oY29uc3Qgdm9pZCogYXVkaW9EYXRhLCBzaXplX3QgYXVkaW9TaXplKSBjb25zdAotewotICAg
IHByaW50ZigiQ29udGVudC1UeXBlOiBhdWRpby93YXZcbiIpOwotICAgIGhhbmRsZUJpbmFyeShh
dWRpb0RhdGEsIGF1ZGlvU2l6ZSk7Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJpbnRlcjo6aGFuZGxl
QXVkaW9Gb290ZXIoKSBjb25zdAotewotICAgIHByaW50ZigiI0VPRlxuIik7Ci0gICAgZnByaW50
ZihzdGRlcnIsICIjRU9GXG4iKTsKLX0KLQotdm9pZCBUZXN0RXZlbnRQcmludGVyOjpoYW5kbGVJ
bWFnZShjb25zdCBjaGFyKiBhY3R1YWxIYXNoLCBjb25zdCBjaGFyKiBleHBlY3RlZEhhc2gsIGNv
bnN0IHZvaWQqIGltYWdlRGF0YSwgc2l6ZV90IGltYWdlU2l6ZSkgY29uc3QKLXsKLSAgICBBU1NF
UlQoYWN0dWFsSGFzaCk7Ci0gICAgcHJpbnRmKCJcbkFjdHVhbEhhc2g6ICVzXG4iLCBhY3R1YWxI
YXNoKTsKLSAgICBpZiAoZXhwZWN0ZWRIYXNoICYmIGV4cGVjdGVkSGFzaFswXSkKLSAgICAgICAg
cHJpbnRmKCJcbkV4cGVjdGVkSGFzaDogJXNcbiIsIGV4cGVjdGVkSGFzaCk7Ci0gICAgaWYgKGlt
YWdlRGF0YSAmJiBpbWFnZVNpemUpIHsKLSAgICAgICAgcHJpbnRmKCJDb250ZW50LVR5cGU6IGlt
YWdlL3BuZ1xuIik7Ci0gICAgICAgIGhhbmRsZUJpbmFyeShpbWFnZURhdGEsIGltYWdlU2l6ZSk7
Ci0gICAgfQotfQotCi12b2lkIFRlc3RFdmVudFByaW50ZXI6OmhhbmRsZVRlc3RGb290ZXIoYm9v
bCkgY29uc3QKLXsKLSAgICBwcmludGYoIiNFT0ZcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAi
I0VPRlxuIik7Ci19Ci0KLXZvaWQgVGVzdEV2ZW50UHJpbnRlcjo6aGFuZGxlQmluYXJ5KGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKSBjb25zdAotewotICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjQ7Ci0gICAgaWYgKG1fZW5jb2RlQmluYXJ5KSB7Ci0gICAgICAgIGJhc2U2NEVuY29kZShzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oZGF0YSksIHNpemUsIGJhc2U2NCwgQmFzZTY0SW5zZXJ0TEZz
KTsKLSAgICAgICAgZGF0YSA9IGJhc2U2NC5kYXRhKCk7Ci0gICAgICAgIHNpemUgPSBiYXNlNjQu
c2l6ZSgpOwotICAgICAgICBwcmludGYoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2
NFxuIik7Ci0gICAgfQotICAgIC8vIFByaW50ZiBmb3JtYXR0aW5nIGZvciBzaXplX3Qgb24gMzIt
Yml0LCA2NC1iaXQsIGFuZCBvbiBXaW5kb3dzIGlzIGhhcmQgc28ganVzdCBjYXN0IHRvIGFuIGlu
dC4KLSAgICBwcmludGYoIkNvbnRlbnQtTGVuZ3RoOiAlZFxuIiwgc3RhdGljX2Nhc3Q8aW50Pihz
aXplKSk7Ci0gICAgaWYgKGZ3cml0ZShkYXRhLCAxLCBzaXplLCBzdGRvdXQpICE9IHNpemUpIHsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJTaG9ydCB3cml0ZSB0byBzdGRvdXQuXG4iKTsKLSAg
ICAgICAgZXhpdCgxKTsKLSAgICB9Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0RXZlbnRQcmludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdEV2ZW50UHJpbnRlci5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0RXZlbnRQcmludGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdEV2ZW50UHJpbnRlcl9oCi0jZGVmaW5lIFRl
c3RFdmVudFByaW50ZXJfaAotCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotY2xhc3Mg
VGVzdEV2ZW50UHJpbnRlciB7Ci1wdWJsaWM6Ci0gICAgVGVzdEV2ZW50UHJpbnRlcigpOwotICAg
IH5UZXN0RXZlbnRQcmludGVyKCk7Ci0gICAgdm9pZCBoYW5kbGVUZXN0SGVhZGVyKGNvbnN0IGNo
YXIqIHVybCkgY29uc3Q7Ci0gICAgdm9pZCBoYW5kbGVUaW1lZE91dCgpIGNvbnN0OwotICAgIHZv
aWQgaGFuZGxlVGV4dEhlYWRlcigpIGNvbnN0OwotICAgIHZvaWQgaGFuZGxlVGV4dEZvb3Rlcigp
IGNvbnN0OwotICAgIHZvaWQgaGFuZGxlQXVkaW8oY29uc3Qgdm9pZCogYXVkaW9EYXRhLCBzaXpl
X3QgYXVkaW9TaXplKSBjb25zdDsKLSAgICB2b2lkIGhhbmRsZUF1ZGlvRm9vdGVyKCkgY29uc3Q7
Ci0gICAgdm9pZCBoYW5kbGVJbWFnZShjb25zdCBjaGFyKiBhY3R1YWxIYXNoLCBjb25zdCBjaGFy
KiBleHBlY3RlZEhhc2gsIGNvbnN0IHZvaWQqIGltYWdlRGF0YSwgc2l6ZV90IGltYWdlU2l6ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBoYW5kbGVUZXN0Rm9vdGVyKGJvb2wgZHVtcGVkQW55dGhpbmcpIGNv
bnN0OwotCi0gICAgLy8gU2V0IGlmIGJpbmFyeSBvdXRwdXQgZGF0YSBzaG91bGQgYmUgZW5jb2Rl
ZCBpbiBiYXNlNjQuIERlZmF1bHQgaXMgb2ZmLgotICAgIHZvaWQgc2V0RW5jb2RlQmluYXJ5KGJv
b2wgZW5jb2RlQmluYXJ5KSB7IG1fZW5jb2RlQmluYXJ5ID0gZW5jb2RlQmluYXJ5OyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBoYW5kbGVCaW5hcnkoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSBj
b25zdDsKLQotICAgIGJvb2wgbV9lbmNvZGVCaW5hcnk7Ci19OwotCi0jZW5kaWYgLy8gVGVzdEV2
ZW50UHJpbnRlcl9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmF2
aWdhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0NzcwMSkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi11c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gVGVzdE5hdmlnYXRpb25FbnRyeQotCi1QYXNzUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+
IFRlc3ROYXZpZ2F0aW9uRW50cnk6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBUZXN0TmF2aWdhdGlvbkVudHJ5KTsKLX0KLQotUGFzc1JlZlB0cjxUZXN0TmF2aWdhdGlvbkVu
dHJ5PiBUZXN0TmF2aWdhdGlvbkVudHJ5OjpjcmVhdGUoCi0gICAgaW50IHBhZ2VJRCwgY29uc3Qg
V2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgdGl0bGUsIGNvbnN0IFdlYlN0cmluZyYgdGFy
Z2V0RnJhbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXN0TmF2aWdhdGlvbkVudHJ5
KHBhZ2VJRCwgdXJsLCB0aXRsZSwgdGFyZ2V0RnJhbWUpKTsKLX0KLQotVGVzdE5hdmlnYXRpb25F
bnRyeTo6VGVzdE5hdmlnYXRpb25FbnRyeSgpCi0gICAgOiBtX3BhZ2VJRCgtMSkgeyB9Ci0KLVRl
c3ROYXZpZ2F0aW9uRW50cnk6OlRlc3ROYXZpZ2F0aW9uRW50cnkoCi0gICAgaW50IHBhZ2VJRCwg
Y29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgdGl0bGUsIGNvbnN0IFdlYlN0cmlu
ZyYgdGFyZ2V0RnJhbWUpCi0gICAgOiBtX3BhZ2VJRChwYWdlSUQpCi0gICAgLCBtX3VybCh1cmwp
Ci0gICAgLCBtX3RpdGxlKHRpdGxlKQotICAgICwgbV90YXJnZXRGcmFtZSh0YXJnZXRGcmFtZSkg
eyB9Ci0KLVRlc3ROYXZpZ2F0aW9uRW50cnk6On5UZXN0TmF2aWdhdGlvbkVudHJ5KCkgeyB9Ci0K
LXZvaWQgVGVzdE5hdmlnYXRpb25FbnRyeTo6c2V0Q29udGVudFN0YXRlKGNvbnN0IFdlYkhpc3Rv
cnlJdGVtJiBzdGF0ZSkKLXsKLSAgICBtX3N0YXRlID0gc3RhdGU7Ci19Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcgotCi1UZXN0TmF2aWdhdGlv
bkNvbnRyb2xsZXI6OlRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcihOYXZpZ2F0aW9uSG9zdCogaG9z
dCkKLSAgICA6IG1fcGVuZGluZ0VudHJ5KDApCi0gICAgLCBtX2xhc3RDb21taXR0ZWRFbnRyeUlu
ZGV4KC0xKQotICAgICwgbV9wZW5kaW5nRW50cnlJbmRleCgtMSkKLSAgICAsIG1faG9zdChob3N0
KQotICAgICwgbV9tYXhQYWdlSUQoLTEpIHsgfQotCi1UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6
On5UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIoKQotewotICAgIGRpc2NhcmRQZW5kaW5nRW50cnko
KTsKLX0KLQotdm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6OnJlc2V0KCkKLXsKLSAgICBt
X2VudHJpZXMuY2xlYXIoKTsKLSAgICBkaXNjYXJkUGVuZGluZ0VudHJ5KCk7Ci0KLSAgICBtX2xh
c3RDb21taXR0ZWRFbnRyeUluZGV4ID0gLTE7Ci19Ci0KLXZvaWQgVGVzdE5hdmlnYXRpb25Db250
cm9sbGVyOjpyZWxvYWQoKQotewotICAgIC8vIEJhc2UgdGhlIG5hdmlnYXRpb24gb24gd2hlcmUg
d2UgYXJlIG5vdy4uLgotICAgIGludCBjdXJyZW50SW5kZXggPSBjdXJyZW50RW50cnlJbmRleCgp
OwotCi0gICAgLy8gSWYgd2UgYXJlIG5vIHdoZXJlLCB0aGVuIHdlIGNhbid0IHJlbG9hZC4KLSAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIENhblJlbG9hZCBtZXRob2QuCi0gICAgaWYgKGN1
cnJlbnRJbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGlzY2FyZFBlbmRpbmdF
bnRyeSgpOwotCi0gICAgbV9wZW5kaW5nRW50cnlJbmRleCA9IGN1cnJlbnRJbmRleDsKLSAgICBu
YXZpZ2F0ZVRvUGVuZGluZ0VudHJ5KHRydWUpOwotfQotCi12b2lkIFRlc3ROYXZpZ2F0aW9uQ29u
dHJvbGxlcjo6Z29Ub09mZnNldChpbnQgb2Zmc2V0KQotewotICAgIGludCBpbmRleCA9IG1fbGFz
dENvbW1pdHRlZEVudHJ5SW5kZXggKyBvZmZzZXQ7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRl
eCA+PSBlbnRyeUNvdW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdvVG9JbmRleChpbmRl
eCk7Ci19Ci0KLXZvaWQgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpnb1RvSW5kZXgoaW50IGlu
ZGV4KQotewotICAgIEFTU0VSVChpbmRleCA+PSAwKTsKLSAgICBBU1NFUlQoaW5kZXggPCBzdGF0
aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpKTsKLQotICAgIGRpc2NhcmRQZW5kaW5nRW50
cnkoKTsKLQotICAgIG1fcGVuZGluZ0VudHJ5SW5kZXggPSBpbmRleDsKLSAgICBuYXZpZ2F0ZVRv
UGVuZGluZ0VudHJ5KGZhbHNlKTsKLX0KLQotdm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6
OmxvYWRFbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSkKLXsKLSAgICAvLyBXaGVuIG5h
dmlnYXRpbmcgdG8gYSBuZXcgcGFnZSwgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSBpZiB3ZSB3aWxs
IGFjdHVhbGx5Ci0gICAgLy8gZW5kIHVwIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZS4gVGhlIG5l
dyBwYWdlIGxvYWQgY291bGQgZm9yIGV4YW1wbGUKLSAgICAvLyByZXN1bHQgaW4gYSBkb3dubG9h
ZCBvciBhICdubyBjb250ZW50JyByZXNwb25zZSAoZS5nLiwgYSBtYWlsdG86IFVSTCkuCi0gICAg
ZGlzY2FyZFBlbmRpbmdFbnRyeSgpOwotICAgIG1fcGVuZGluZ0VudHJ5ID0gZW50cnk7Ci0gICAg
bmF2aWdhdGVUb1BlbmRpbmdFbnRyeShmYWxzZSk7Ci19Ci0KLQotVGVzdE5hdmlnYXRpb25FbnRy
eSogVGVzdE5hdmlnYXRpb25Db250cm9sbGVyOjpsYXN0Q29tbWl0dGVkRW50cnkoKSBjb25zdAot
ewotICAgIGlmIChtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4ID09IC0xKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV9lbnRyaWVzW21fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXhdLmdl
dCgpOwotfQotCi1UZXN0TmF2aWdhdGlvbkVudHJ5KiBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6
OmFjdGl2ZUVudHJ5KCkgY29uc3QKLXsKLSAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9
IG1fcGVuZGluZ0VudHJ5LmdldCgpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIGVudHJ5ID0g
bGFzdENvbW1pdHRlZEVudHJ5KCk7Ci0gICAgcmV0dXJuIGVudHJ5OwotfQotCi1pbnQgVGVzdE5h
dmlnYXRpb25Db250cm9sbGVyOjpjdXJyZW50RW50cnlJbmRleCgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fcGVuZGluZ0VudHJ5SW5kZXggIT0gLTEpCi0gICAgICAgIHJldHVybiBtX3BlbmRpbmdFbnRy
eUluZGV4OwotICAgIHJldHVybiBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4OwotfQotCi0KLVRl
c3ROYXZpZ2F0aW9uRW50cnkqIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcjo6ZW50cnlBdEluZGV4
KGludCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGVudHJ5
Q291bnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZW50cmllc1tpbmRleF0u
Z2V0KCk7Ci19Ci0KLVRlc3ROYXZpZ2F0aW9uRW50cnkqIFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxl
cjo6ZW50cnlXaXRoUGFnZUlEKGludDMyX3QgcGFnZUlEKSBjb25zdAotewotICAgIGludCBpbmRl
eCA9IGVudHJ5SW5kZXhXaXRoUGFnZUlEKHBhZ2VJRCk7Ci0gICAgcmV0dXJuIChpbmRleCAhPSAt
MSkgPyBtX2VudHJpZXNbaW5kZXhdLmdldCgpIDogMDsKLX0KLQotdm9pZCBUZXN0TmF2aWdhdGlv
bkNvbnRyb2xsZXI6OmRpZE5hdmlnYXRlVG9FbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRy
eSkKLXsKLSAgICAvLyBJZiB0aGUgZW50cnkgaXMgdGhhdCBvZiBhIHBhZ2Ugd2l0aCBQYWdlSUQg
bGFyZ2VyIHRoYW4gYW55IHRoaXMgVGFiIGhhcwotICAgIC8vIHNlZW4gYmVmb3JlLCB0aGVuIGNv
bnNpZGVyIGl0IGEgbmV3IG5hdmlnYXRpb24uCi0gICAgaWYgKGVudHJ5LT5wYWdlSUQoKSA+IG1h
eFBhZ2VJRCgpKSB7Ci0gICAgICAgIGluc2VydEVudHJ5KGVudHJ5KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBuZWVkIHRvIHVwZGF0ZSBhbiBl
eGlzdGluZyBlbnRyeSB3aXRoIG1hdGNoaW5nIFBhZ2VJRC4KLSAgICAvLyBJZiB0aGUgZXhpc3Rp
bmcgZW50cnkgY29ycmVzcG9uZHMgdG8gdGhlIGVudHJ5IHdoaWNoIGlzIHBlbmRpbmcsIHRoZW4g
d2UKLSAgICAvLyBtdXN0IHVwZGF0ZSB0aGUgY3VycmVudCBlbnRyeSBpbmRleCBhY2NvcmRpbmds
eS4gV2hlbiBuYXZpZ2F0aW5nIHRvIHRoZQotICAgIC8vIHNhbWUgVVJMLCBhIG5ldyBQYWdlSUQg
aXMgbm90IGNyZWF0ZWQuCi0KLSAgICBpbnQgZXhpc3RpbmdFbnRyeUluZGV4ID0gZW50cnlJbmRl
eFdpdGhQYWdlSUQoZW50cnktPnBhZ2VJRCgpKTsKLSAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBl
eGlzdGluZ0VudHJ5ID0gKGV4aXN0aW5nRW50cnlJbmRleCAhPSAtMSkgPwotICAgICAgICBtX2Vu
dHJpZXNbZXhpc3RpbmdFbnRyeUluZGV4XS5nZXQoKSA6IDA7Ci0gICAgaWYgKCFleGlzdGluZ0Vu
dHJ5KSB7Ci0gICAgICAgIC8vIE5vIGV4aXN0aW5nIGVudHJ5LCB0aGVuIHNpbXBseSBpZ25vcmUg
dGhpcyBuYXZpZ2F0aW9uIQotICAgIH0gZWxzZSBpZiAoZXhpc3RpbmdFbnRyeSA9PSBtX3BlbmRp
bmdFbnRyeS5nZXQoKSkgewotICAgICAgICAvLyBUaGUgZ2l2ZW4gZW50cnkgbWlnaHQgcHJvdmlk
ZSBhIG5ldyBVUkwuLi4gZS5nLiwgbmF2aWdhdGluZyBiYWNrIHRvIGEKLSAgICAgICAgLy8gcGFn
ZSBpbiBzZXNzaW9uIGhpc3RvcnkgY291bGQgaGF2ZSByZXN1bHRlZCBpbiBhIG5ldyBjbGllbnQg
cmVkaXJlY3QuCi0gICAgICAgIGV4aXN0aW5nRW50cnktPnNldFVSTChlbnRyeS0+VVJMKCkpOwot
ICAgICAgICBleGlzdGluZ0VudHJ5LT5zZXRDb250ZW50U3RhdGUoZW50cnktPmNvbnRlbnRTdGF0
ZSgpKTsKLSAgICAgICAgbV9sYXN0Q29tbWl0dGVkRW50cnlJbmRleCA9IG1fcGVuZGluZ0VudHJ5
SW5kZXg7Ci0gICAgICAgIG1fcGVuZGluZ0VudHJ5SW5kZXggPSAtMTsKLSAgICAgICAgbV9wZW5k
aW5nRW50cnkuY2xlYXIoKTsKLSAgICB9IGVsc2UgaWYgKG1fcGVuZGluZ0VudHJ5ICYmIG1fcGVu
ZGluZ0VudHJ5LT5wYWdlSUQoKSA9PSAtMQotICAgICAgICAgICAgICAgJiYgR1VSTChtX3BlbmRp
bmdFbnRyeS0+VVJMKCkpID09IEdVUkwoZXhpc3RpbmdFbnRyeS0+VVJMKCkuc3BlYygpKSkgewot
ICAgICAgICAvLyBOb3QgYSBuZXcgbmF2aWdhdGlvbgotICAgICAgICBkaXNjYXJkUGVuZGluZ0Vu
dHJ5KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gVGhlIGdpdmVuIGVudHJ5IG1pZ2h0IHBy
b3ZpZGUgYSBuZXcgVVJMLi4uIGUuZy4sIG5hdmlnYXRpbmcgdG8gYSBwYWdlCi0gICAgICAgIC8v
IG1pZ2h0IHJlc3VsdCBpbiBhIGNsaWVudCByZWRpcmVjdCwgd2hpY2ggc2hvdWxkIG92ZXJyaWRl
IHRoZSBVUkwgb2YgdGhlCi0gICAgICAgIC8vIGV4aXN0aW5nIGVudHJ5LgotICAgICAgICBleGlz
dGluZ0VudHJ5LT5zZXRVUkwoZW50cnktPlVSTCgpKTsKLSAgICAgICAgZXhpc3RpbmdFbnRyeS0+
c2V0Q29udGVudFN0YXRlKGVudHJ5LT5jb250ZW50U3RhdGUoKSk7Ci0KLSAgICAgICAgLy8gVGhl
IG5hdmlnYXRpb24gY291bGQgaGF2ZSBiZWVuIGlzc3VlZCBieSB0aGUgcmVuZGVyZXIsIHNvIGJl
IHN1cmUgdGhhdAotICAgICAgICAvLyB3ZSB1cGRhdGUgb3VyIGN1cnJlbnQgaW5kZXguCi0gICAg
ICAgIG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPSBleGlzdGluZ0VudHJ5SW5kZXg7Ci0gICAg
fQotCi0gICAgdXBkYXRlTWF4UGFnZUlEKCk7Ci19Ci0KLXZvaWQgVGVzdE5hdmlnYXRpb25Db250
cm9sbGVyOjpkaXNjYXJkUGVuZGluZ0VudHJ5KCkKLXsKLSAgICBtX3BlbmRpbmdFbnRyeS5jbGVh
cigpOwotICAgIG1fcGVuZGluZ0VudHJ5SW5kZXggPSAtMTsKLX0KLQotdm9pZCBUZXN0TmF2aWdh
dGlvbkNvbnRyb2xsZXI6Omluc2VydEVudHJ5KFRlc3ROYXZpZ2F0aW9uRW50cnkqIGVudHJ5KQot
ewotICAgIGRpc2NhcmRQZW5kaW5nRW50cnkoKTsKLQotICAgIC8vIFBydW5lIGFueSBlbnRyeSB3
aGljaCBhcmUgaW4gZnJvbnQgb2YgdGhlIGN1cnJlbnQgZW50cnkKLSAgICBpbnQgY3VycmVudFNp
emUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpOwotICAgIGlmIChjdXJyZW50
U2l6ZSA+IDApIHsKLSAgICAgICAgd2hpbGUgKG1fbGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPCAo
Y3VycmVudFNpemUgLSAxKSkgewotICAgICAgICAgICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsK
LSAgICAgICAgICAgIGN1cnJlbnRTaXplLS07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2Vu
dHJpZXMuYXBwZW5kKFJlZlB0cjxUZXN0TmF2aWdhdGlvbkVudHJ5PihlbnRyeSkpOwotICAgIG1f
bGFzdENvbW1pdHRlZEVudHJ5SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXpl
KCkpIC0gMTsKLSAgICB1cGRhdGVNYXhQYWdlSUQoKTsKLX0KLQotaW50IFRlc3ROYXZpZ2F0aW9u
Q29udHJvbGxlcjo6ZW50cnlJbmRleFdpdGhQYWdlSUQoaW50MzIgcGFnZUlEKSBjb25zdAotewot
ICAgIGZvciAoaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50cmllcy5zaXplKCkpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fZW50cmllc1tpXS0+cGFnZUlEKCkgPT0gcGFn
ZUlEKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQot
dm9pZCBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXI6Om5hdmlnYXRlVG9QZW5kaW5nRW50cnkoYm9v
bCByZWxvYWQpCi17Ci0gICAgLy8gRm9yIHNlc3Npb24gaGlzdG9yeSBuYXZpZ2F0aW9ucyBvbmx5
IHRoZSBwZW5kaW5nX2VudHJ5X2luZGV4XyBpcyBzZXQuCi0gICAgaWYgKCFtX3BlbmRpbmdFbnRy
eSkgewotICAgICAgICBBU1NFUlQobV9wZW5kaW5nRW50cnlJbmRleCAhPSAtMSk7Ci0gICAgICAg
IG1fcGVuZGluZ0VudHJ5ID0gbV9lbnRyaWVzW21fcGVuZGluZ0VudHJ5SW5kZXhdOwotICAgIH0K
LQotICAgIGlmIChtX2hvc3QtPm5hdmlnYXRlKCptX3BlbmRpbmdFbnRyeS5nZXQoKSwgcmVsb2Fk
KSkgewotICAgICAgICAvLyBOb3RlOiB0aGlzIGlzIHJlZHVuZGFudCBpZiBuYXZpZ2F0aW9uIGNv
bXBsZXRlZCBzeW5jaHJvbm91c2x5IGJlY2F1c2UKLSAgICAgICAgLy8gRGlkTmF2aWdhdGVUb0Vu
dHJ5IGNhbGwgdGhpcyBhcyB3ZWxsLgotICAgICAgICB1cGRhdGVNYXhQYWdlSUQoKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgZGlzY2FyZFBlbmRpbmdFbnRyeSgpOwotfQotCi12b2lkIFRlc3ROYXZp
Z2F0aW9uQ29udHJvbGxlcjo6dXBkYXRlTWF4UGFnZUlEKCkKLXsKLSAgICBUZXN0TmF2aWdhdGlv
bkVudHJ5KiBlbnRyeSA9IGFjdGl2ZUVudHJ5KCk7Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICBt
X21heFBhZ2VJRCA9IG1heChtX21heFBhZ2VJRCwgZW50cnktPnBhZ2VJRCgpKTsKLX0KSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwyMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyX2gKLSNkZWZpbmUg
VGVzdE5hdmlnYXRpb25Db250cm9sbGVyX2gKLQotI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIK
LSNpbmNsdWRlICJXZWJIaXN0b3J5SXRlbS5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dl
YmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotI2luY2x1ZGUg
PHB1YmxpYy9XZWJVUkwuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi0vLyBBc3NvY2lhdGVkIHdpdGggYnJvd3Nlci1pbml0YXRlZCBuYXZpZ2F0aW9ucyB0byBo
b2xkIHRyYWNraW5nIGRhdGEuCi1jbGFzcyBUZXN0U2hlbGxFeHRyYURhdGEgOiBwdWJsaWMgV2Vi
S2l0OjpXZWJEYXRhU291cmNlOjpFeHRyYURhdGEgewotcHVibGljOgotICAgIFRlc3RTaGVsbEV4
dHJhRGF0YShpbnQzMl90IHBlbmRpbmdQYWdlSUQpCi0gICAgICAgIDogcGVuZGluZ1BhZ2VJRChw
ZW5kaW5nUGFnZUlEKQotICAgICAgICAsIHJlcXVlc3RDb21taXR0ZWQoZmFsc2UpIHsgfQotCi0g
ICAgLy8gQ29udGFpbnMgdGhlIHBhZ2VfaWQgZm9yIHRoaXMgbmF2aWdhdGlvbiBvciAtMSBpZiB0
aGVyZSBpcyBub25lIHlldC4KLSAgICBpbnQzMl90IHBlbmRpbmdQYWdlSUQ7Ci0KLSAgICAvLyBU
cnVlIGlmIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlICJEaWRDb21taXRMb2FkIiBldmVu
dCBmb3IgdGhpcwotICAgIC8vIHJlcXVlc3QuIFVzZWQgYnkgc2Vzc2lvbiBoaXN0b3J5LgotICAg
IGJvb2wgcmVxdWVzdENvbW1pdHRlZDsKLX07Ci0KLS8vIFN0b3JlcyBvbmUgYmFjay9mb3J3YXJk
IG5hdmlnYXRpb24gc3RhdGUgZm9yIHRoZSB0ZXN0IHNoZWxsLgotY2xhc3MgVGVzdE5hdmlnYXRp
b25FbnRyeTogcHVibGljIFJlZkNvdW50ZWQ8VGVzdE5hdmlnYXRpb25FbnRyeT4gewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IGNyZWF0ZSgpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IGNyZWF0ZSgKLSAgICAg
ICAgaW50IHBhZ2VJRCwKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJVUkwmLAotICAgICAgICBj
b25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGl0bGUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiB0YXJnZXRGcmFtZSk7Ci0KLSAgICAvLyBWaXJ0dWFsIHRvIGFsbG93IHRlc3Rfc2hl
bGwgdG8gZXh0ZW5kIHRoZSBjbGFzcy4KLSAgICB2aXJ0dWFsIH5UZXN0TmF2aWdhdGlvbkVudHJ5
KCk7Ci0KLSAgICAvLyBTZXQgLyBHZXQgdGhlIFVSSQotICAgIHZvaWQgc2V0VVJMKGNvbnN0IFdl
YktpdDo6V2ViVVJMJiB1cmwpIHsgbV91cmwgPSB1cmw7IH0KLSAgICBjb25zdCBXZWJLaXQ6Oldl
YlVSTCYgVVJMKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KLQotICAgIC8vIFNldCAvIEdldCB0
aGUgdGl0bGUKLSAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0aXRs
ZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KLSAgICBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGl0
bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9Ci0KLSAgICAvLyBTZXQgLyBHZXQgYSBzdGF0
ZS4KLSAgICB2b2lkIHNldENvbnRlbnRTdGF0ZShjb25zdCBXZWJLaXQ6OldlYkhpc3RvcnlJdGVt
Jik7Ci0gICAgY29uc3QgV2ViS2l0OjpXZWJIaXN0b3J5SXRlbSYgY29udGVudFN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotCi0gICAgLy8gR2V0IHRoZSBwYWdlIGlkIGNvcnJlc3Bv
bmRpbmcgdG8gdGhlIHRhYidzIHN0YXRlLgotICAgIHZvaWQgc2V0UGFnZUlEKGludCBwYWdlSUQp
IHsgbV9wYWdlSUQgPSBwYWdlSUQ7IH0KLSAgICBpbnQzMl90IHBhZ2VJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnZUlEOyB9Ci0KLSAgICBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGFyZ2V0RnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldEZyYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAgVGVz
dE5hdmlnYXRpb25FbnRyeSgpOwotICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkoaW50IHBhZ2VJRCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVVJMJiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0aXRsZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0YXJnZXRGcmFtZSk7Ci0K
LSAgICAvLyBEZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSB0aGF0IHRoZSB0YWIgcmVwcmVzZW50
cy4gVGhpcyBpcyBub3QgcmVsZXZhbnQKLSAgICAvLyBmb3IgYWxsIHRhYiBjb250ZW50cyB0eXBl
cy4KLSAgICBpbnQzMl90IG1fcGFnZUlEOwotCi0gICAgV2ViS2l0OjpXZWJVUkwgbV91cmw7Ci0g
ICAgV2ViS2l0OjpXZWJTdHJpbmcgbV90aXRsZTsKLSAgICBXZWJLaXQ6OldlYkhpc3RvcnlJdGVt
IG1fc3RhdGU7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgbV90YXJnZXRGcmFtZTsKLX07Ci0KLWNs
YXNzIE5hdmlnYXRpb25Ib3N0IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgbmF2aWdhdGUo
Y29uc3QgVGVzdE5hdmlnYXRpb25FbnRyeSYsIGJvb2wgcmVsb2FkKSA9IDA7Ci19OwotCi0vLyBU
ZXN0IHNoZWxsJ3MgTmF2aWdhdGlvbkNvbnRyb2xsZXIuIFRoZSBnb2FsIGlzIHRvIGJlIGFzIGNs
b3NlIHRvIHRoZSBDaHJvbWUKLS8vIHZlcnNpb24gYXMgcG9zc2libGUuCi1jbGFzcyBUZXN0TmF2
aWdhdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRlc3ROYXZpZ2F0
aW9uQ29udHJvbGxlcik7Ci1wdWJsaWM6Ci0gICAgVGVzdE5hdmlnYXRpb25Db250cm9sbGVyKE5h
dmlnYXRpb25Ib3N0Kik7Ci0gICAgflRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcigpOwotCi0gICAg
dm9pZCByZXNldCgpOwotCi0gICAgLy8gQ2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIHJlbG9hZCB0
aGUgY3VycmVudCAob3IgcGVuZGluZykgZW50cnkuCi0gICAgdm9pZCByZWxvYWQoKTsKLQotICAg
IC8vIENhdXNlcyB0aGUgY29udHJvbGxlciB0byBnbyB0byB0aGUgc3BlY2lmaWVkIG9mZnNldCBm
cm9tIGN1cnJlbnQuIERvZXMKLSAgICAvLyBub3RoaW5nIGlmIG91dCBvZiBib3VuZHMuCi0gICAg
dm9pZCBnb1RvT2Zmc2V0KGludCk7Ci0KLSAgICAvLyBDYXVzZXMgdGhlIGNvbnRyb2xsZXIgdG8g
Z28gdG8gdGhlIHNwZWNpZmllZCBpbmRleC4KLSAgICB2b2lkIGdvVG9JbmRleChpbnQpOwotCi0g
ICAgLy8gQ2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGxvYWQgdGhlIHNwZWNpZmllZCBlbnRyeS4K
LSAgICAvLyBOT1RFOiBEbyBub3QgcGFzcyBhbiBlbnRyeSB0aGF0IHRoZSBjb250cm9sbGVyIGFs
cmVhZHkgb3ducyEKLSAgICB2b2lkIGxvYWRFbnRyeShUZXN0TmF2aWdhdGlvbkVudHJ5Kik7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBsYXN0IGNvbW1pdHRlZCBlbnRyeSwgd2hpY2ggbWF5IGJlIG51
bGwgaWYgdGhlcmUgYXJlIG5vCi0gICAgLy8gY29tbWl0dGVkIGVudHJpZXMuCi0gICAgVGVzdE5h
dmlnYXRpb25FbnRyeSogbGFzdENvbW1pdHRlZEVudHJ5KCkgY29uc3Q7Ci0KLSAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgTmF2aWdhdGlvbkNvbnRyb2xsZXJCYXNl
LCBleGNsdWRpbmcKLSAgICAvLyB0aGUgcGVuZGluZyBlbnRyeSBpZiB0aGVyZSBpcyBvbmUuCi0g
ICAgaW50IGVudHJ5Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fZW50
cmllcy5zaXplKCkpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBhY3RpdmUgZW50cnksIHdoaWNo
IGlzIHRoZSBwZW5kaW5nIGVudHJ5IGlmIGEgbmF2aWdhdGlvbiBpcyBpbgotICAgIC8vIHByb2dy
ZXNzIG9yIHRoZSBsYXN0IGNvbW1pdHRlZCBlbnRyeSBvdGhlcndpc2UuIE5PVEU6IFRoaXMgY2Fu
IGJlIDAhIQotICAgIC8vCi0gICAgLy8gSWYgeW91IGFyZSB0cnlpbmcgdG8gZ2V0IHRoZSBjdXJy
ZW50IHN0YXRlIG9mIHRoZSBOYXZpZ2F0aW9uQ29udHJvbGxlckJhc2UsCi0gICAgLy8gdGhpcyBp
cyB0aGUgbWV0aG9kIHlvdSB3aWxsIHR5cGljYWxseSB3YW50IHRvIGNhbGwuCi0gICAgVGVzdE5h
dmlnYXRpb25FbnRyeSogYWN0aXZlRW50cnkoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdGhl
IGluZGV4IGZyb20gd2hpY2ggd2Ugd291bGQgZ28gYmFjay9mb3J3YXJkIG9yIHJlbG9hZC4gVGhp
cyBpcwotICAgIC8vIHRoZSBtX2xhc3RDb21taXR0ZWRFbnRyeUluZGV4IGlmIG1fcGVuZGluZ0Vu
dHJ5SW5kZXggaXMgLTEuIE90aGVyd2lzZSwKLSAgICAvLyBpdCBpcyB0aGUgbV9wZW5kaW5nRW50
cnlJbmRleC4KLSAgICBpbnQgY3VycmVudEVudHJ5SW5kZXgoKSBjb25zdDsKLQotICAgIC8vIFJl
dHVybnMgdGhlIGVudHJ5IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguIFJldHVybnMgMCBpZiBvdXQg
b2YgYm91bmRzLgotICAgIFRlc3ROYXZpZ2F0aW9uRW50cnkqIGVudHJ5QXRJbmRleChpbnQpIGNv
bnN0OwotCi0gICAgLy8gUmV0dXJuIHRoZSBlbnRyeSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHR5
cGUgYW5kIHBhZ2UgSUQsIG9yIDAgaWYKLSAgICAvLyBub3QgZm91bmQuCi0gICAgVGVzdE5hdmln
YXRpb25FbnRyeSogZW50cnlXaXRoUGFnZUlEKGludDMyX3QpIGNvbnN0OwotCi0gICAgLy8gUmV0
dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY29tbWl0dGVkIGVudHJ5LgotICAgIGludCBsYXN0
Q29tbWl0dGVkRW50cnlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENvbW1pdHRlZEVudHJ5
SW5kZXg7IH0KLQotICAgIC8vIFVzZWQgdG8gaW5mb3JtIHVzIG9mIGEgbmF2aWdhdGlvbiBiZWlu
ZyBjb21taXR0ZWQgZm9yIGEgdGFiLiBBbnkgZW50cnkKLSAgICAvLyBsb2NhdGVkIGZvcndhcmQg
dG8gdGhlIGN1cnJlbnQgZW50cnkgd2lsbCBiZSBkZWxldGVkLiBUaGUgbmV3IGVudHJ5Ci0gICAg
Ly8gYmVjb21lcyB0aGUgY3VycmVudCBlbnRyeS4KLSAgICB2b2lkIGRpZE5hdmlnYXRlVG9FbnRy
eShUZXN0TmF2aWdhdGlvbkVudHJ5Kik7Ci0KLSAgICAvLyBVc2VkIHRvIGluZm9ybSB1cyB0byBk
aXNjYXJkIGl0cyBwZW5kaW5nIGVudHJ5LgotICAgIHZvaWQgZGlzY2FyZFBlbmRpbmdFbnRyeSgp
OwotCi1wcml2YXRlOgotICAgIC8vIEluc2VydHMgYW4gZW50cnkgYWZ0ZXIgdGhlIGN1cnJlbnQg
cG9zaXRpb24sIHJlbW92aW5nIGFsbCBlbnRyaWVzIGFmdGVyIGl0LgotICAgIC8vIFRoZSBuZXcg
ZW50cnkgd2lsbCBiZWNvbWUgdGhlIGFjdGl2ZSBvbmUuCi0gICAgdm9pZCBpbnNlcnRFbnRyeShU
ZXN0TmF2aWdhdGlvbkVudHJ5Kik7Ci0KLSAgICBpbnQgbWF4UGFnZUlEKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhQYWdlSUQ7IH0KLSAgICB2b2lkIG5hdmlnYXRlVG9QZW5kaW5nRW50cnkoYm9vbCBy
ZWxvYWQpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgd2l0aCB0aGUg
Y29ycmVzcG9uZGluZyB0eXBlIGFuZCBwYWdlIElELAotICAgIC8vIG9yIC0xIGlmIG5vdCBmb3Vu
ZC4KLSAgICBpbnQgZW50cnlJbmRleFdpdGhQYWdlSUQoaW50MzJfdCkgY29uc3Q7Ci0KLSAgICAv
LyBVcGRhdGVzIHRoZSBtYXggcGFnZSBJRCB3aXRoIHRoYXQgb2YgdGhlIGdpdmVuIGVudHJ5LCBp
ZiBpcyBsYXJnZXIuCi0gICAgdm9pZCB1cGRhdGVNYXhQYWdlSUQoKTsKLQotICAgIC8vIExpc3Qg
b2YgTmF2aWdhdGlvbkVudHJ5IGZvciB0aGlzIHRhYgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxUZXN0TmF2aWdhdGlvbkVudHJ5PiA+IE5hdmlnYXRpb25FbnRyeUxpc3Q7Ci0gICAgdHlwZWRl
ZiBOYXZpZ2F0aW9uRW50cnlMaXN0OjppdGVyYXRvciBOYXZpZ2F0aW9uRW50cnlMaXN0SXRlcmF0
b3I7Ci0gICAgTmF2aWdhdGlvbkVudHJ5TGlzdCBtX2VudHJpZXM7Ci0KLSAgICAvLyBBbiBlbnRy
eSB3ZSBoYXZlbid0IGdvdHRlbiBhIHJlc3BvbnNlIGZvciB5ZXQuIFRoaXMgd2lsbCBiZSBkaXNj
YXJkZWQKLSAgICAvLyB3aGVuIHdlIG5hdmlnYXRlIGFnYWluLiBJdCdzIHVzZWQgb25seSBzbyB3
ZSBrbm93IHdoYXQgdGhlIGN1cnJlbnRseQotICAgIC8vIGRpc3BsYXllZCB0YWIgaXMuCi0gICAg
UmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IG1fcGVuZGluZ0VudHJ5OwotCi0gICAgLy8gY3Vy
cmVudGx5IHZpc2libGUgZW50cnkKLSAgICBpbnQgbV9sYXN0Q29tbWl0dGVkRW50cnlJbmRleDsK
LQotICAgIC8vIGluZGV4IG9mIHBlbmRpbmcgZW50cnkgaWYgaXQgaXMgaW4gZW50cmllc18sIG9y
IC0xIGlmIHBlbmRpbmdfZW50cnlfIGlzIGEKLSAgICAvLyBuZXcgZW50cnkgKGNyZWF0ZWQgYnkg
TG9hZFVSTCkuCi0gICAgaW50IG1fcGVuZGluZ0VudHJ5SW5kZXg7Ci0KLSAgICBOYXZpZ2F0aW9u
SG9zdCogbV9ob3N0OwotICAgIGludCBtX21heFBhZ2VJRDsKLX07Ci0KLSNlbmRpZiAvLyBUZXN0
TmF2aWdhdGlvbkNvbnRyb2xsZXJfaAotCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTY3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0KLSNpbmNs
dWRlICJEUlREZXZUb29sc0FnZW50LmgiCi0jaW5jbHVkZSAiRFJURGV2VG9vbHNDbGllbnQuaCIK
LSNpbmNsdWRlICJNb2NrUGxhdGZvcm0uaCIKLSNpbmNsdWRlICJNb2NrV2ViUHJlcmVuZGVyaW5n
U3VwcG9ydC5oIgotI2luY2x1ZGUgIldlYkFycmF5QnVmZmVyVmlldy5oIgotI2luY2x1ZGUgIldl
YkRhdGFTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgotI2luY2x1ZGUgIldlYkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVt
LmgiCi0jaW5jbHVkZSAiV2ViSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIldlYlRlc3RpbmdTdXBw
b3J0LmgiCi0jaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJUZXN0UHJveHku
aCIKLSNpbmNsdWRlICJXZWJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2lu
Y2x1ZGUgIldlYlZpZXdIb3N0LmgiCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFz
LmgiCi0jaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbmNsdWRl
ICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydF9nZnguaCIKLSNpbmNsdWRlIDxwdWJsaWMv
UGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaD4KLSNp
bmNsdWRlIDxwdWJsaWMvV2ViUG9pbnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgot
I2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVGhyZWFk
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlcXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViVVJMUmVzcG9uc2UuaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y2N0eXBl
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYvTUQ1Lmg+Ci0jaW5jbHVkZSA8d3Rm
L093bkFycmF5UHRyLmg+Ci0KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVz
cGFjZSBXZWJUZXN0UnVubmVyOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotLy8gQ29udGVudCBh
cmVhIHNpemUgZm9yIG5ld2x5IGNyZWF0ZWQgd2luZG93cy4KLXN0YXRpYyBjb25zdCBpbnQgdGVz
dFdpbmRvd1dpZHRoID0gODAwOwotc3RhdGljIGNvbnN0IGludCB0ZXN0V2luZG93SGVpZ2h0ID0g
NjAwOwotCi0vLyBUaGUgVzNDIFNWRyBsYXlvdXQgdGVzdHMgdXNlIGEgZGlmZmVyZW50IHNpemUg
dGhhbiB0aGUgb3RoZXIgbGF5b3V0IHRlc3RzLgotc3RhdGljIGNvbnN0IGludCBTVkdUZXN0V2lu
ZG93V2lkdGggPSA0ODA7Ci1zdGF0aWMgY29uc3QgaW50IFNWR1Rlc3RXaW5kb3dIZWlnaHQgPSAz
NjA7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGxheW91dFRlc3RzUGF0dGVybltdID0gIi9MYXlvdXRU
ZXN0cy8iOwotc3RhdGljIGNvbnN0IHN0cmluZzo6c2l6ZV90eXBlIGxheW91dFRlc3RzUGF0dGVy
blNpemUgPSBzaXplb2YobGF5b3V0VGVzdHNQYXR0ZXJuKSAtIDE7Ci1zdGF0aWMgY29uc3QgY2hh
ciBmaWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Ci1zdGF0aWMgY29uc3QgY2hhciBmaWxlVGVz
dFByZWZpeFtdID0gIihmaWxlIHRlc3QpOiI7Ci1zdGF0aWMgY29uc3QgY2hhciBkYXRhVXJsUGF0
dGVybltdID0gImRhdGE6IjsKLXN0YXRpYyBjb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRhVXJs
UGF0dGVyblNpemUgPSBzaXplb2YoZGF0YVVybFBhdHRlcm4pIC0gMTsKLQotLy8gRklYTUU6IE1v
dmUgdGhpcyB0byBhIGNvbW1vbiBwbGFjZSBzbyB0aGF0IGl0IGNhbiBiZSBzaGFyZWQgd2l0aAot
Ly8gV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUoKS4KLXN0YXRpYyB2
b2lkIG1ha2VDYW52YXNPcGFxdWUoU2tDYW52YXMqIGNhbnZhcykKLXsKLSAgICBjb25zdCBTa0Jp
dG1hcCYgYml0bWFwID0gY2FudmFzLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUp
OwotICAgIEFTU0VSVChiaXRtYXAuY29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29u
ZmlnKTsKLQotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhiaXRtYXApOwotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgYml0bWFwLmhlaWdodCgpOyB5KyspIHsKLSAgICAgICAgdWludDMyX3QqIHJv
dyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
Yml0bWFwLndpZHRoKCk7IHgrKykKLSAgICAgICAgICAgIHJvd1t4XSB8PSAweEZGMDAwMDAwOyAv
LyBTZXQgYWxwaGEgYml0cyB0byAxLgotICAgIH0KLX0KLQotVGVzdFNoZWxsOjpUZXN0U2hlbGwo
KQotICAgIDogbV90ZXN0SXNQZW5kaW5nKGZhbHNlKQotICAgICwgbV90ZXN0SXNQcmVwYXJpbmco
ZmFsc2UpCi0gICAgLCBtX2ZvY3VzZWRXaWRnZXQoMCkKLSAgICAsIG1fZGV2VG9vbHMoMCkKLSAg
ICAsIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KGZhbHNlKQotICAgICwgbV9hbGxvd0V4dGVy
bmFsUGFnZXMoZmFsc2UpCi0gICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0Vu
YWJsZWQoZmFsc2UpCi0gICAgLCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJm
bG93U2Nyb2xsRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fc29mdHdhcmVDb21wb3NpdGluZ0VuYWJs
ZWQoZmFsc2UpCi0gICAgLCBtX3RocmVhZGVkQ29tcG9zaXRpbmdFbmFibGVkKGZhbHNlKQotICAg
ICwgbV9mb3JjZUNvbXBvc2l0aW5nTW9kZShmYWxzZSkKLSAgICAsIG1fdGhyZWFkZWRIVE1MUGFy
c2VyKHRydWUpCi0gICAgLCBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGZhbHNlKQotICAg
ICwgbV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9kZWZlcnJlZEltYWdl
RGVjb2RpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9zdHJlc3NPcHQoZmFsc2UpCi0gICAgLCBt
X3N0cmVzc0Rlb3B0KGZhbHNlKQotICAgICwgbV9kdW1wV2hlbkZpbmlzaGVkKHRydWUpCi0gICAg
LCBtX2lzRGlzcGxheWluZ01vZGFsRGlhbG9nKGZhbHNlKQotewotICAgIC8vIDMwIHNlY29uZCBp
cyB0aGUgc2FtZSBhcyB0aGUgdmFsdWUgaW4gTWFjIERSVC4KLSAgICAvLyBJZiB3ZSB1c2UgYSB2
YWx1ZSBzbWFsbGVyIHRoYW4gdGhlIHRpbWVvdXQgdmFsdWUgb2YKLSAgICAvLyAobmV3LSlydW4t
d2Via2l0LXRlc3RzLCAobmV3LSlydW4td2Via2l0LXRlc3RzIG1pc3VuZGVyc3RhbmRzIHRoYXQg
YQotICAgIC8vIHRpbWVkLW91dCBEUlQgcHJvY2VzcyB3YXMgY3Jhc2hlZC4KLSAgICBtX3RpbWVv
dXQgPSAzMCAqIDEwMDA7Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjppbml0aWFsaXplKE1vY2tQbGF0
Zm9ybSogcGxhdGZvcm1TdXBwb3J0KQotewotICAgIG1fdGVzdEludGVyZmFjZXMgPSBhZG9wdFB0
cihuZXcgV2ViVGVzdEludGVyZmFjZXMoKSk7Ci0gICAgcGxhdGZvcm1TdXBwb3J0LT5zZXRJbnRl
cmZhY2VzKG1fdGVzdEludGVyZmFjZXMuZ2V0KCkpOwotICAgIG1fZGV2VG9vbHNUZXN0SW50ZXJm
YWNlcyA9IGFkb3B0UHRyKG5ldyBXZWJUZXN0SW50ZXJmYWNlcygpKTsKLSNpZiBFTkFCTEUoTElO
S19QUkVSRU5ERVIpCi0gICAgbV9wcmVyZW5kZXJpbmdTdXBwb3J0ID0gYWRvcHRQdHIobmV3IE1v
Y2tXZWJQcmVyZW5kZXJpbmdTdXBwb3J0KCkpOwotI2VuZGlmCi0jaWYgIWRlZmluZWQoVVNFX0RF
RkFVTFRfUkVOREVSX1RIRU1FKSAmJiAoT1MoV0lORE9XUykgfHwgT1MoTUFDX09TX1gpKQotICAg
IC8vIFNldCB0aGVtZSBlbmdpbmUuCi0gICAgd2Via2l0X3N1cHBvcnQ6OlNldFRoZW1lRW5naW5l
KG1fdGVzdEludGVyZmFjZXMtPnRoZW1lRW5naW5lKCkpOwotI2VuZGlmCi0KLQotICAgIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwotCi0gICAgaWYgKG1fdGhyZWFkZWRDb21wb3NpdGluZ0Vu
YWJsZWQpCi0gICAgICAgIG1fd2ViQ29tcG9zaXRvclRocmVhZCA9IGFkb3B0UHRyKFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlVGhyZWFkKCJDb21wb3NpdG9yIikpOwotICAgIHdl
YmtpdF9zdXBwb3J0OjpTZXRUaHJlYWRlZENvbXBvc2l0b3JFbmFibGVkKG1fdGhyZWFkZWRDb21w
b3NpdGluZ0VuYWJsZWQpOwotCi0gICAgY3JlYXRlTWFpbldpbmRvdygpOwotfQotCi12b2lkIFRl
c3RTaGVsbDo6Y3JlYXRlTWFpbldpbmRvdygpCi17Ci0gICAgbV9kcnREZXZUb29sc0FnZW50ID0g
YWRvcHRQdHIobmV3IERSVERldlRvb2xzQWdlbnQpOwotICAgIG1fd2ViVmlld0hvc3QgPSBhZG9w
dFB0cihjcmVhdGVOZXdXaW5kb3coV2ViVVJMKCksIG1fZHJ0RGV2VG9vbHNBZ2VudC5nZXQoKSwg
bV90ZXN0SW50ZXJmYWNlcy5nZXQoKSkpOwotICAgIG1fd2ViVmlldyA9IG1fd2ViVmlld0hvc3Qt
PndlYlZpZXcoKTsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT5zZXREZWxlZ2F0ZShtX3dlYlZpZXdI
b3N0LmdldCgpKTsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT5zZXRXZWJWaWV3KG1fd2ViVmlldywg
bV93ZWJWaWV3SG9zdC0+cHJveHkoKSk7Ci0gICAgbV9kcnREZXZUb29sc0FnZW50LT5zZXRXZWJW
aWV3KG1fd2ViVmlldyk7Ci19Ci0KLVRlc3RTaGVsbDo6flRlc3RTaGVsbCgpCi17Ci0gICAgaWYg
KG1fd2ViVmlld0hvc3QpCi0gICAgICAgIG1fd2ViVmlld0hvc3QtPnNodXRkb3duKCk7Ci0gICAg
bV90ZXN0SW50ZXJmYWNlcy0+c2V0RGVsZWdhdGUoMCk7Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+
c2V0V2ViVmlldygwLCAwKTsKLSAgICBtX2RldlRvb2xzVGVzdEludGVyZmFjZXMtPnNldERlbGVn
YXRlKDApOwotICAgIG1fZGV2VG9vbHNUZXN0SW50ZXJmYWNlcy0+c2V0V2ViVmlldygwLCAwKTsK
LSAgICBtX2RydERldlRvb2xzQWdlbnQtPnNldFdlYlZpZXcoMCk7Ci19Ci0KLXZvaWQgVGVzdFNo
ZWxsOjpjcmVhdGVEUlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50KiBhZ2VudCkKLXsK
LSAgICBtX2RydERldlRvb2xzQ2xpZW50ID0gYWRvcHRQdHIobmV3IERSVERldlRvb2xzQ2xpZW50
KGFnZW50LCBtX2RldlRvb2xzLT53ZWJWaWV3KCkpKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OnNo
b3dEZXZUb29scygpCi17Ci0gICAgaWYgKCFtX2RldlRvb2xzKSB7Ci0gICAgICAgIFdlYlVSTCB1
cmwgPSB3ZWJraXRfc3VwcG9ydDo6R2V0RGV2VG9vbHNQYXRoQXNVUkwoKTsKLSAgICAgICAgaWYg
KCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1fZGV2VG9vbHMgPSBjcmVhdGVOZXdXaW5k
b3codXJsLCAwLCBtX2RldlRvb2xzVGVzdEludGVyZmFjZXMuZ2V0KCkpOwotICAgICAgICBtX2Rl
dlRvb2xzLT53ZWJWaWV3KCktPnNldHRpbmdzKCktPnNldE1lbW9yeUluZm9FbmFibGVkKHRydWUp
OwotICAgICAgICBtX2RldlRvb2xzLT5wcm94eSgpLT5zZXRMb2dDb25zb2xlT3V0cHV0KGZhbHNl
KTsKLSAgICAgICAgbV9kZXZUb29sc1Rlc3RJbnRlcmZhY2VzLT5zZXREZWxlZ2F0ZShtX2RldlRv
b2xzKTsKLSAgICAgICAgbV9kZXZUb29sc1Rlc3RJbnRlcmZhY2VzLT5zZXRXZWJWaWV3KG1fZGV2
VG9vbHMtPndlYlZpZXcoKSwgbV9kZXZUb29scy0+cHJveHkoKSk7Ci0gICAgICAgIEFTU0VSVCht
X2RldlRvb2xzKTsKLSAgICAgICAgY3JlYXRlRFJURGV2VG9vbHNDbGllbnQobV9kcnREZXZUb29s
c0FnZW50LmdldCgpKTsKLSAgICB9Ci0gICAgbV9kZXZUb29scy0+c2hvdyhXZWJLaXQ6OldlYk5h
dmlnYXRpb25Qb2xpY3lOZXdXaW5kb3cpOwotfQotCi12b2lkIFRlc3RTaGVsbDo6Y2xvc2VEZXZU
b29scygpCi17Ci0gICAgaWYgKG1fZGV2VG9vbHMpIHsKLSAgICAgICAgbV9kZXZUb29scy0+d2Vi
VmlldygpLT5zZXR0aW5ncygpLT5zZXRNZW1vcnlJbmZvRW5hYmxlZChmYWxzZSk7Ci0gICAgICAg
IG1fZHJ0RGV2VG9vbHNBZ2VudC0+cmVzZXQoKTsKLSAgICAgICAgbV9kcnREZXZUb29sc0NsaWVu
dC5jbGVhcigpOwotICAgICAgICBtX2RldlRvb2xzVGVzdEludGVyZmFjZXMtPnNldERlbGVnYXRl
KDApOwotICAgICAgICBtX2RldlRvb2xzVGVzdEludGVyZmFjZXMtPnNldFdlYlZpZXcoMCwgMCk7
Ci0gICAgICAgIGNsb3NlV2luZG93KG1fZGV2VG9vbHMpOwotICAgICAgICBtX2RldlRvb2xzID0g
MDsKLSAgICB9Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcm
IHdlYlZpZXcpCi17Ci0gICAgbV9wcmVmcy5yZXNldCgpOwotICAgIG1fcHJlZnMuYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSB0cnVlOwotICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvclZpZGVvRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVv
RW5hYmxlZDsKLSAgICBtX3ByZWZzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFi
bGVkOwotICAgIG1fcHJlZnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
RW5hYmxlZCA9IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxl
ZDsKLSAgICBtX3ByZWZzLmZvcmNlQ29tcG9zaXRpbmdNb2RlID0gbV9mb3JjZUNvbXBvc2l0aW5n
TW9kZTsKLSAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkID0gbV9hY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZDsKLSAgICBtX3ByZWZzLnBlclRpbGVQYWludGluZ0VuYWJsZWQg
PSBtX3BlclRpbGVQYWludGluZ0VuYWJsZWQ7Ci0gICAgbV9wcmVmcy5kZWZlcnJlZEltYWdlRGVj
b2RpbmdFbmFibGVkID0gbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkOwotICAgIG1fcHJl
ZnMudGhyZWFkZWRIVE1MUGFyc2VyID0gbV90aHJlYWRlZEhUTUxQYXJzZXI7Ci0gICAgbV9wcmVm
cy5hcHBseVRvKCZ3ZWJWaWV3KTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OnJ1bkZpbGVUZXN0KGNv
bnN0IFRlc3RQYXJhbXMmIHBhcmFtcywgYm9vbCBzaG91bGREdW1wUGl4ZWxzKQotewotICAgIEFT
U0VSVChwYXJhbXMudGVzdFVybC5pc1ZhbGlkKCkpOwotICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJl
bnRUZXN0ID0gc2hvdWxkRHVtcFBpeGVsczsKLSAgICBtX3Rlc3RJc1ByZXBhcmluZyA9IHRydWU7
Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+c2V0VGVzdElzUnVubmluZyh0cnVlKTsKLSAgICBtX3Bh
cmFtcyA9IHBhcmFtczsKLSAgICBzdHJpbmcgdGVzdFVybCA9IG1fcGFyYW1zLnRlc3RVcmwuc3Bl
YygpOwotICAgIG1fdGVzdEludGVyZmFjZXMtPmNvbmZpZ3VyZUZvclRlc3RXaXRoVVJMKG1fcGFy
YW1zLnRlc3RVcmwsIHNob3VsZER1bXBQaXhlbHMpOwotCi0gICAgaWYgKHRlc3RVcmwuZmluZCgi
Y29tcG9zaXRpbmcvIikgIT0gc3RyaW5nOjpucG9zIHx8IHRlc3RVcmwuZmluZCgiY29tcG9zaXRp
bmdcXCIpICE9IHN0cmluZzo6bnBvcykgewotICAgICAgICBpZiAoIW1fc29mdHdhcmVDb21wb3Np
dGluZ0VuYWJsZWQpCi0gICAgICAgICAgICBtX3ByZWZzLmFjY2VsZXJhdGVkMmRDYW52YXNFbmFi
bGVkID0gdHJ1ZTsKLSAgICAgICAgbV9wcmVmcy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlk
ZW9FbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgbV9wcmVmcy5tb2NrU2Nyb2xsYmFyc0VuYWJsZWQg
PSB0cnVlOwotICAgICAgICBtX3ByZWZzLmFwcGx5VG8obV93ZWJWaWV3KTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9kdW1wV2hlbkZpbmlzaGVkKQotICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGVzdEhl
YWRlcih0ZXN0VXJsLmNfc3RyKCkpOwotICAgIGxvYWRVUkwobV9wYXJhbXMudGVzdFVybCk7Ci0K
LSAgICBpZiAobV9kZXZUb29scykKLSAgICAgICAgdGhpcy0+c2V0Rm9jdXMobV9kZXZUb29scy0+
d2ViVmlldygpLCB0cnVlKTsKLQotICAgIG1fdGVzdElzUHJlcGFyaW5nID0gZmFsc2U7Ci0gICAg
d2FpdFRlc3RGaW5pc2hlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTVkdUZXN0VVJM
KGNvbnN0IFdlYlVSTCYgdXJsKQotewotICAgIHJldHVybiB1cmwuaXNWYWxpZCgpICYmIHN0cmlu
Zyh1cmwuc3BlYygpKS5maW5kKCJXM0MtU1ZHLTEuMSIpICE9IHN0cmluZzo6bnBvczsKLX0KLQot
dm9pZCBUZXN0U2hlbGw6OnJlc2l6ZVdpbmRvd0ZvclRlc3QoV2ViVmlld0hvc3QqIHdpbmRvdywg
Y29uc3QgV2ViVVJMJiB1cmwpCi17Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgaWYgKGlz
U1ZHVGVzdFVSTCh1cmwpKSB7Ci0gICAgICAgIHdpZHRoID0gU1ZHVGVzdFdpbmRvd1dpZHRoOwot
ICAgICAgICBoZWlnaHQgPSBTVkdUZXN0V2luZG93SGVpZ2h0OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHdpZHRoID0gdGVzdFdpbmRvd1dpZHRoOwotICAgICAgICBoZWlnaHQgPSB0ZXN0V2luZG93
SGVpZ2h0OwotICAgIH0KLSAgICB3aW5kb3ctPnNldFdpbmRvd1JlY3QoV2ViUmVjdCgwLCAwLCB3
aWR0aCArIHZpcnR1YWxXaW5kb3dCb3JkZXIgKiAyLCBoZWlnaHQgKyB2aXJ0dWFsV2luZG93Qm9y
ZGVyICogMikpOwotfQotCi12b2lkIFRlc3RTaGVsbDo6cmVzZXRUZXN0Q29udHJvbGxlcigpCi17
Ci0gICAgcmVzZXRXZWJTZXR0aW5ncygqd2ViVmlldygpKTsKLSAgICBtX3Rlc3RJbnRlcmZhY2Vz
LT5yZXNldEFsbCgpOwotICAgIG1fZGV2VG9vbHNUZXN0SW50ZXJmYWNlcy0+cmVzZXRBbGwoKTsK
LSAgICBtX3dlYlZpZXdIb3N0LT5yZXNldCgpOwotICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC0+cmVz
ZXQoKTsKLSAgICBpZiAobV9kcnREZXZUb29sc0NsaWVudCkKLSAgICAgICAgbV9kcnREZXZUb29s
c0NsaWVudC0+cmVzZXQoKTsKLSAgICB3ZWJWaWV3KCktPnNldFBhZ2VTY2FsZUZhY3RvcigxLCBX
ZWJQb2ludCgwLCAwKSk7Ci0gICAgd2ViVmlldygpLT5lbmFibGVGaXhlZExheW91dE1vZGUoZmFs
c2UpOwotICAgIHdlYlZpZXcoKS0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYlNpemUoMCwgMCkpOwot
ICAgIHdlYlZpZXcoKS0+bWFpbkZyYW1lKCktPmNsZWFyT3BlbmVyKCk7Ci0gICAgV2ViVGVzdGlu
Z1N1cHBvcnQ6OnJlc2V0SW50ZXJuYWxzT2JqZWN0KHdlYlZpZXcoKS0+bWFpbkZyYW1lKCkpOwot
fQotCi12b2lkIFRlc3RTaGVsbDo6bG9hZFVSTChjb25zdCBXZWJVUkwmIHVybCkKLXsKLSAgICBt
X3dlYlZpZXdIb3N0LT5sb2FkVVJMRm9yRnJhbWUodXJsLCBzdHJpbmcoKSk7Ci19Ci0KLXZvaWQg
VGVzdFNoZWxsOjpyZWxvYWQoKQotewotICAgIG1fd2ViVmlld0hvc3QtPm5hdmlnYXRpb25Db250
cm9sbGVyKCktPnJlbG9hZCgpOwotfQotCi12b2lkIFRlc3RTaGVsbDo6Z29Ub09mZnNldChpbnQg
b2Zmc2V0KQotewotICAgICBtX3dlYlZpZXdIb3N0LT5uYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5n
b1RvT2Zmc2V0KG9mZnNldCk7Ci19Ci0KLWludCBUZXN0U2hlbGw6Om5hdmlnYXRpb25FbnRyeUNv
dW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJWaWV3SG9zdC0+bmF2aWdhdGlvbkNvbnRy
b2xsZXIoKS0+ZW50cnlDb3VudCgpOwotfQotCi12b2lkIFRlc3RTaGVsbDo6Y2FsbEpTR0MoKQot
ewotICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmNvbGxlY3RHYXJiYWdlKCk7Ci19Ci0KLXZv
aWQgVGVzdFNoZWxsOjpzZXRGb2N1cyhXZWJXaWRnZXQqIHdpZGdldCwgYm9vbCBlbmFibGUpCi17
Ci0gICAgLy8gU2ltdWxhdGUgdGhlIGVmZmVjdHMgb2YgSW50ZXJhY3RpdmVTZXRGb2N1cygpLCB3
aGljaCBpbmNsdWRlcyBjYWxsaW5nCi0gICAgLy8gYm90aCBzZXRGb2N1cygpIGFuZCBzZXRJc0Fj
dGl2ZSgpLgotICAgIGlmIChlbmFibGUpIHsKLSAgICAgICAgaWYgKG1fZm9jdXNlZFdpZGdldCAh
PSB3aWRnZXQpIHsKLSAgICAgICAgICAgIGlmIChtX2ZvY3VzZWRXaWRnZXQpCi0gICAgICAgICAg
ICAgICAgbV9mb2N1c2VkV2lkZ2V0LT5zZXRGb2N1cyhmYWxzZSk7Ci0gICAgICAgICAgICB3ZWJW
aWV3KCktPnNldElzQWN0aXZlKGVuYWJsZSk7Ci0gICAgICAgICAgICB3aWRnZXQtPnNldEZvY3Vz
KGVuYWJsZSk7Ci0gICAgICAgICAgICBtX2ZvY3VzZWRXaWRnZXQgPSB3aWRnZXQ7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9mb2N1c2VkV2lkZ2V0ID09IHdpZGdldCkg
ewotICAgICAgICAgICAgd2lkZ2V0LT5zZXRGb2N1cyhlbmFibGUpOwotICAgICAgICAgICAgd2Vi
VmlldygpLT5zZXRJc0FjdGl2ZShlbmFibGUpOwotICAgICAgICAgICAgbV9mb2N1c2VkV2lkZ2V0
ID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBUZXN0U2hlbGw6OnRlc3RGaW5pc2hl
ZChXZWJWaWV3SG9zdCogaG9zdCkKLXsKLSAgICBpZiAoaG9zdCA9PSBtX2RldlRvb2xzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fdGVzdElzUGVuZGluZykKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fdGVzdElzUGVuZGluZyA9IGZhbHNlOwotICAgIG1fdGVzdEludGVyZmFjZXMtPnNl
dFRlc3RJc1J1bm5pbmcoZmFsc2UpOwotICAgIGlmIChtX2R1bXBXaGVuRmluaXNoZWQpCi0gICAg
ICAgIGR1bXAoKTsKLSAgICB3ZWJraXRfc3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7Ci19Ci0K
LXZvaWQgVGVzdFNoZWxsOjp0ZXN0VGltZWRPdXQoKQotewotICAgIG1fcHJpbnRlci5oYW5kbGVU
aW1lZE91dCgpOwotICAgIHRlc3RGaW5pc2hlZCh3ZWJWaWV3SG9zdCgpKTsKLX0KLQotdm9pZCBU
ZXN0U2hlbGw6OmR1bXAoKQotewotICAgIC8vIER1bXAgdGhlIHJlcXVlc3RlZCByZXByZXNlbnRh
dGlvbi4KLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIHNob3VsZER1bXBBc0F1ZGlv
ID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQXNBdWRpbygpOwot
ICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPnNob3VsZEdlbmVyYXRlUGl4ZWxSZXN1bHRzKCk7Ci0gICAgYm9vbCBkdW1w
ZWRBbnl0aGluZyA9IGZhbHNlOwotCi0gICAgaWYgKHNob3VsZER1bXBBc0F1ZGlvKSB7Ci0gICAg
ICAgIGNvbnN0IFdlYktpdDo6V2ViQXJyYXlCdWZmZXJWaWV3KiB3ZWJBcnJheUJ1ZmZlclZpZXcg
PSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmF1ZGlvRGF0YSgpOwotICAgICAgICBt
X3ByaW50ZXIuaGFuZGxlQXVkaW8od2ViQXJyYXlCdWZmZXJWaWV3LT5iYXNlQWRkcmVzcygpLCB3
ZWJBcnJheUJ1ZmZlclZpZXctPmJ5dGVMZW5ndGgoKSk7Ci0gICAgICAgIG1fcHJpbnRlci5oYW5k
bGVBdWRpb0Zvb3RlcigpOwotICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGVzdEZvb3Rlcih0cnVl
KTsKLQotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wYXJhbXMuZHVtcFRyZWUpIHsKLSAg
ICAgICAgZHVtcGVkQW55dGhpbmcgPSB0cnVlOwotICAgICAgICBtX3ByaW50ZXIuaGFuZGxlVGV4
dEhlYWRlcigpOwotICAgICAgICBzdHJpbmcgZGF0YVV0ZjggPSBtX3dlYlZpZXdIb3N0LT5wcm94
eSgpLT5jYXB0dXJlVHJlZShtX3BhcmFtcy5kZWJ1Z1JlbmRlclRyZWUpOwotICAgICAgICBpZiAo
ZndyaXRlKGRhdGFVdGY4LmNfc3RyKCksIDEsIGRhdGFVdGY4LnNpemUoKSwgc3Rkb3V0KSAhPSBk
YXRhVXRmOC5zaXplKCkpCi0gICAgICAgICAgICBGQVRBTCgiU2hvcnQgd3JpdGUgdG8gc3Rkb3V0
LCBkaXNrIGZ1bGw/XG4iKTsKLSAgICB9Ci0gICAgaWYgKGR1bXBlZEFueXRoaW5nICYmIG1fcGFy
YW1zLnByaW50U2VwYXJhdG9ycykKLSAgICAgICAgbV9wcmludGVyLmhhbmRsZVRleHRGb290ZXIo
KTsKLQotICAgIGlmIChtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCAmJiBzaG91bGRHZW5lcmF0
ZVBpeGVsUmVzdWx0cykgewotICAgICAgICAvLyBJbWFnZSBvdXRwdXQ6IHdlIHdyaXRlIHRoZSBp
bWFnZSBkYXRhIHRvIHRoZSBmaWxlIGdpdmVuIG9uIHRoZQotICAgICAgICAvLyBjb21tYW5kIGxp
bmUgKGZvciB0aGUgZHVtcCBwaXhlbHMgYXJndW1lbnQpLCBhbmQgdGhlIE1ENSBzdW0gdG8KLSAg
ICAgICAgLy8gc3Rkb3V0LgotICAgICAgICBkdW1wZWRBbnl0aGluZyA9IHRydWU7Ci0gICAgICAg
IGR1bXBJbWFnZShtX3dlYlZpZXdIb3N0LT5wcm94eSgpLT5jYXB0dXJlUGl4ZWxzKCkpOwotICAg
IH0KLSAgICBtX3ByaW50ZXIuaGFuZGxlVGVzdEZvb3RlcihkdW1wZWRBbnl0aGluZyk7Ci0gICAg
ZmZsdXNoKHN0ZG91dCk7Ci0gICAgZmZsdXNoKHN0ZGVycik7Ci19Ci0KLXZvaWQgVGVzdFNoZWxs
OjpkdW1wSW1hZ2UoU2tDYW52YXMqIGNhbnZhcykgY29uc3QKLXsKLSAgICAvLyBGaXggdGhlIGFs
cGhhLiBUaGUgZXhwZWN0ZWQgUE5HcyBvbiBNYWMgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3
ZSB3YW50Ci0gICAgLy8gdG8ga2VlcCBpdC4gT24gV2luZG93cywgdGhlIGFscGhhIGNoYW5uZWwg
aXMgd3Jvbmcgc2luY2UgdGV4dC9mb3JtIGNvbnRyb2wKLSAgICAvLyBkcmF3aW5nIG1heSBoYXZl
IGVyYXNlZCBpdCBpbiBhIGZldyBwbGFjZXMuIFNvIG9uIFdpbmRvd3Mgd2UgZm9yY2UgaXQgdG8K
LSAgICAvLyBvcGFxdWUgYW5kIGFsc28gZG9uJ3Qgd3JpdGUgdGhlIGFscGhhIGNoYW5uZWwgZm9y
IHRoZSByZWZlcmVuY2UuIExpbnV4Ci0gICAgLy8gZG9lc24ndCBoYXZlIHRoZSB3cm9uZyBhbHBo
YSBsaWtlIFdpbmRvd3MsIGJ1dCB3ZSBtYXRjaCBXaW5kb3dzLgotI2lmIE9TKE1BQ19PU19YKQot
ICAgIGJvb2wgZGlzY2FyZFRyYW5zcGFyZW5jeSA9IGZhbHNlOwotI2Vsc2UKLSAgICBib29sIGRp
c2NhcmRUcmFuc3BhcmVuY3kgPSB0cnVlOwotICAgIG1ha2VDYW52YXNPcGFxdWUoY2FudmFzKTsK
LSNlbmRpZgotCi0gICAgY29uc3QgU2tCaXRtYXAmIHNvdXJjZUJpdG1hcCA9IGNhbnZhcy0+Z2V0
VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBz
b3VyY2VCaXRtYXBMb2NrKHNvdXJjZUJpdG1hcCk7Ci0KLSAgICAvLyBDb21wdXRlIE1ENSBzdW0u
Ci0gICAgTUQ1IGRpZ2VzdGVyOwotICAgIFZlY3Rvcjx1aW50OF90LCAxNj4gZGlnZXN0VmFsdWU7
Ci0jaWYgT1MoQU5EUk9JRCkKLSAgICAvLyBPbiBBbmRyb2lkLCBwaXhlbCBsYXlvdXQgaXMgUkdC
QSAoc2VlIHRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrQ29sb3JQcml2LmgpOwotICAg
IC8vIGhvd2V2ZXIsIG90aGVyIENocm9tZSBwbGF0Zm9ybXMgdXNlIEJHUkEgKHNlZSBza2lhL2Nv
bmZpZy9Ta1VzZXJDb25maWcuaCkuCi0gICAgLy8gVG8gbWF0Y2ggdGhlIGNoZWNrc3VtIG9mIG90
aGVyIENocm9tZSBwbGF0Zm9ybXMsIHdlIG5lZWQgdG8gcmVvcmRlciB0aGUgbGF5b3V0IG9mIHBp
eGVscy4KLSAgICAvLyBOT1RFOiBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSB1c2UgU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAotICAgIC8vIHdoaWNoIGhhcyBiZWVuIGNoZWNrZWQg
aW4gZGV2aWNlLm1ha2VPcGFxdWUoKSAoc2VlIGFib3ZlKS4KLSAgICBjb25zdCB1aW50OF90KiBy
YXdQaXhlbHMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzb3VyY2VCaXRtYXAu
Z2V0UGl4ZWxzKCkpOwotICAgIHNpemVfdCBiaXRtYXBTaXplID0gc291cmNlQml0bWFwLmdldFNp
emUoKTsKLSAgICBPd25BcnJheVB0cjx1aW50OF90PiByZW9yZGVyZWRQaXhlbHMgPSBhZG9wdEFy
cmF5UHRyKG5ldyB1aW50OF90W2JpdG1hcFNpemVdKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJpdG1hcFNpemU7IGkgKz0gNCkgewotICAgICAgICByZW9yZGVyZWRQaXhlbHNbaV0gPSBy
YXdQaXhlbHNbaSArIDJdOyAvLyBSCi0gICAgICAgIHJlb3JkZXJlZFBpeGVsc1tpICsgMV0gPSBy
YXdQaXhlbHNbaSArIDFdOyAvLyBHCi0gICAgICAgIHJlb3JkZXJlZFBpeGVsc1tpICsgMl0gPSBy
YXdQaXhlbHNbaV07IC8vIEIKLSAgICAgICAgcmVvcmRlcmVkUGl4ZWxzW2kgKyAzXSA9IHJhd1Bp
eGVsc1tpICsgM107IC8vIEEKLSAgICB9Ci0gICAgZGlnZXN0ZXIuYWRkQnl0ZXMocmVvcmRlcmVk
UGl4ZWxzLmdldCgpLCBiaXRtYXBTaXplKTsKLSAgICByZW9yZGVyZWRQaXhlbHMuY2xlYXIoKTsK
LSNlbHNlCi0gICAgZGlnZXN0ZXIuYWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oc291cmNlQml0bWFwLmdldFBpeGVscygpKSwgc291cmNlQml0bWFwLmdldFNpemUoKSk7
Ci0jZW5kaWYKLSAgICBkaWdlc3Rlci5jaGVja3N1bShkaWdlc3RWYWx1ZSk7Ci0gICAgc3RyaW5n
IG1kNWhhc2g7Ci0gICAgbWQ1aGFzaC5yZXNlcnZlKDE2ICogMik7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgICAgY2hhciBoZXhbM107Ci0gICAgICAgIC8v
IFVzZSAieCIsIG5vdCAiWCIuIFRoZSBzdHJpbmcgbXVzdCBiZSBsb3dlcmNhc2VkLgotICAgICAg
ICBzcHJpbnRmKGhleCwgIiUwMngiLCBkaWdlc3RWYWx1ZVtpXSk7Ci0gICAgICAgIG1kNWhhc2gu
YXBwZW5kKGhleCk7Ci0gICAgfQotCi0gICAgLy8gT25seSBlbmNvZGUgYW5kIGR1bXAgdGhlIHBu
ZyBpZiB0aGUgaGFzaGVzIGRvbid0IG1hdGNoLiBFbmNvZGluZyB0aGUKLSAgICAvLyBpbWFnZSBp
cyByZWFsbHkgZXhwZW5zaXZlLgotICAgIGlmIChtZDVoYXNoLmNvbXBhcmUobV9wYXJhbXMucGl4
ZWxIYXNoKSkgewotICAgICAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmc7Ci0jaWYg
T1MoQU5EUk9JRCkKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OkVuY29kZVJHQkFQTkdXaXRoQ2hl
Y2tzdW0ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc291cmNlQml0bWFw
LmdldFBpeGVscygpKSwgc291cmNlQml0bWFwLndpZHRoKCksCi0gICAgICAgICAgICBzb3VyY2VC
aXRtYXAuaGVpZ2h0KCksIHN0YXRpY19jYXN0PGludD4oc291cmNlQml0bWFwLnJvd0J5dGVzKCkp
LCBkaXNjYXJkVHJhbnNwYXJlbmN5LCBtZDVoYXNoLCAmcG5nKTsKLSNlbHNlCi0gICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpFbmNvZGVCR1JBUE5HV2l0aENoZWNrc3VtKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KHNvdXJjZUJpdG1hcC5nZXRQaXhlbHMoKSksIHNvdXJjZUJp
dG1hcC53aWR0aCgpLAotICAgICAgICAgICAgc291cmNlQml0bWFwLmhlaWdodCgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHNvdXJjZUJpdG1hcC5yb3dCeXRlcygpKSwgZGlzY2FyZFRyYW5zcGFyZW5jeSwg
bWQ1aGFzaCwgJnBuZyk7Ci0jZW5kaWYKLQotICAgICAgICBtX3ByaW50ZXIuaGFuZGxlSW1hZ2Uo
bWQ1aGFzaC5jX3N0cigpLCBtX3BhcmFtcy5waXhlbEhhc2guY19zdHIoKSwgJnBuZ1swXSwgcG5n
LnNpemUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcHJpbnRlci5oYW5kbGVJbWFnZShtZDVo
YXNoLmNfc3RyKCksIG1fcGFyYW1zLnBpeGVsSGFzaC5jX3N0cigpLCAwLCAwKTsKLX0KLQotdm9p
ZCBUZXN0U2hlbGw6OmJpbmRKU09iamVjdHNUb1dpbmRvdyhXZWJGcmFtZSogZnJhbWUpCi17Ci0g
ICAgV2ViVGVzdGluZ1N1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChmcmFtZSk7Ci0gICAg
aWYgKG1fZGV2VG9vbHMgJiYgbV9kZXZUb29scy0+d2ViVmlldygpID09IGZyYW1lLT52aWV3KCkp
Ci0gICAgICAgIG1fZGV2VG9vbHNUZXN0SW50ZXJmYWNlcy0+YmluZFRvKGZyYW1lKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fdGVzdEludGVyZmFjZXMtPmJpbmRUbyhmcmFtZSk7Ci19Ci0KLVdlYlZp
ZXdIb3N0KiBUZXN0U2hlbGw6OmNyZWF0ZU5ld1dpbmRvdyhjb25zdCBXZWJLaXQ6OldlYlVSTCYg
dXJsKQotewotICAgIHJldHVybiBjcmVhdGVOZXdXaW5kb3codXJsLCAwLCBtX3Rlc3RJbnRlcmZh
Y2VzLmdldCgpKTsKLX0KLQotV2ViVmlld0hvc3QqIFRlc3RTaGVsbDo6Y3JlYXRlTmV3V2luZG93
KGNvbnN0IFdlYktpdDo6V2ViVVJMJiB1cmwsIERSVERldlRvb2xzQWdlbnQqIGRldlRvb2xzQWdl
bnQsIFdlYlRlc3RJbnRlcmZhY2VzICp0ZXN0SW50ZXJmYWNlcykKLXsKLSAgICBXZWJUZXN0UHJv
eHk8V2ViVmlld0hvc3QsIFRlc3RTaGVsbCo+KiBob3N0ID0gbmV3IFdlYlRlc3RQcm94eTxXZWJW
aWV3SG9zdCwgVGVzdFNoZWxsKj4odGhpcyk7Ci0gICAgaG9zdC0+c2V0SW50ZXJmYWNlcyh0ZXN0
SW50ZXJmYWNlcyk7Ci0gICAgaWYgKG1fd2ViVmlld0hvc3QpCi0gICAgICAgIGhvc3QtPnNldERl
bGVnYXRlKG1fd2ViVmlld0hvc3QuZ2V0KCkpOwotICAgIGVsc2UKLSAgICAgICAgaG9zdC0+c2V0
RGVsZWdhdGUoaG9zdCk7Ci0gICAgaG9zdC0+c2V0UHJveHkoaG9zdCk7Ci0gICAgV2ViVmlldyog
dmlldyA9IFdlYlZpZXc6OmNyZWF0ZShob3N0KTsKLSAgICB2aWV3LT5zZXRQZXJtaXNzaW9uQ2xp
ZW50KHRlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPndlYlBlcm1pc3Npb25zKCkpOwotICAg
IHZpZXctPnNldERldlRvb2xzQWdlbnRDbGllbnQoZGV2VG9vbHNBZ2VudCk7Ci0gICAgaG9zdC0+
c2V0V2ViV2lkZ2V0KHZpZXcpOwotICAgIG1fcHJlZnMuYXBwbHlUbyh2aWV3KTsKLSAgICB2aWV3
LT5pbml0aWFsaXplTWFpbkZyYW1lKGhvc3QpOwotICAgIG1fd2luZG93TGlzdC5hcHBlbmQoaG9z
dCk7Ci0gICAgaG9zdC0+bG9hZFVSTEZvckZyYW1lKHVybCwgc3RyaW5nKCkpOwotICAgIHJldHVy
biBob3N0OwotfQotCi12b2lkIFRlc3RTaGVsbDo6Y2xvc2VXaW5kb3coV2ViVmlld0hvc3QqIHdp
bmRvdykKLXsKLSAgICBzaXplX3QgaSA9IG1fd2luZG93TGlzdC5maW5kKHdpbmRvdyk7Ci0gICAg
aWYgKGkgPT0gbm90Rm91bmQpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV93aW5kb3dMaXN0LnJlbW92ZShpKTsKLSAgICBXZWJX
aWRnZXQqIGZvY3VzZWRXaWRnZXQgPSBtX2ZvY3VzZWRXaWRnZXQ7Ci0gICAgaWYgKHdpbmRvdy0+
d2ViV2lkZ2V0KCkgPT0gbV9mb2N1c2VkV2lkZ2V0KQotICAgICAgICBmb2N1c2VkV2lkZ2V0ID0g
MDsKLQotICAgIHdpbmRvdy0+c2h1dGRvd24oKTsKLSAgICBkZWxldGUgd2luZG93OwotICAgIC8v
IFdlIHNldCB0aGUgZm9jdXNlZCB3aWRnZXQgYWZ0ZXIgZGVsZXRpbmcgdGhlIHdlYiB2aWV3IGhv
c3QgYmVjYXVzZSBpdAotICAgIC8vIGNhbiBjaGFuZ2UgdGhlIGZvY3VzLgotICAgIG1fZm9jdXNl
ZFdpZGdldCA9IGZvY3VzZWRXaWRnZXQ7Ci0gICAgaWYgKG1fZm9jdXNlZFdpZGdldCkgewotICAg
ICAgICB3ZWJWaWV3KCktPnNldElzQWN0aXZlKHRydWUpOwotICAgICAgICBtX2ZvY3VzZWRXaWRn
ZXQtPnNldEZvY3VzKHRydWUpOwotICAgIH0KLX0KLQotdm9pZCBUZXN0U2hlbGw6OmNsb3NlUmVt
YWluaW5nV2luZG93cygpCi17Ci0gICAgLy8gSnVzdCBjbG9zZSBkZXZUb29scyB3aW5kb3cgbWFu
dWFsbHkgYmVjYXVzZSB3ZSBoYXZlIGN1c3RvbSBkZWluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGl0
LgotICAgIGNsb3NlRGV2VG9vbHMoKTsKLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgd2lu
ZG93IGxpc3QgYW5kIGNsb3NlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBtYWluCi0gICAgLy8gd2lu
ZG93LiBXZSBkb24ndCB3YW50IHRvIGRlbGV0ZSBlbGVtZW50cyBhcyB3ZSdyZSBpdGVyYXRpbmcs
IHNvIHdlIGNvcHkKLSAgICAvLyB0byBhIHRlbXAgdmVjdG9yIGZpcnN0LgotICAgIFZlY3RvcjxX
ZWJWaWV3SG9zdCo+IHdpbmRvd3NUb0RlbGV0ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV93aW5kb3dMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3dpbmRvd0xpc3Rb
aV0gIT0gd2ViVmlld0hvc3QoKSkKLSAgICAgICAgICAgIHdpbmRvd3NUb0RlbGV0ZS5hcHBlbmQo
bV93aW5kb3dMaXN0W2ldKTsKLSAgICB9Ci0gICAgQVNTRVJUKHdpbmRvd3NUb0RlbGV0ZS5zaXpl
KCkgKyAxID09IG1fd2luZG93TGlzdC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB3aW5kb3dzVG9EZWxldGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNsb3NlV2luZG93KHdp
bmRvd3NUb0RlbGV0ZVtpXSk7Ci0gICAgQVNTRVJUKG1fd2luZG93TGlzdC5zaXplKCkgPT0gMSk7
Ci19Ci0KLWludCBUZXN0U2hlbGw6OndpbmRvd0NvdW50KCkKLXsKLSAgICByZXR1cm4gbV93aW5k
b3dMaXN0LnNpemUoKTsKLX0KLQotdm9pZCBUZXN0U2hlbGw6OmNhcHR1cmVIaXN0b3J5Rm9yV2lu
ZG93KHNpemVfdCB3aW5kb3dJbmRleCwgV2ViVmVjdG9yPFdlYkhpc3RvcnlJdGVtPiogaGlzdG9y
eSwgc2l6ZV90KiBjdXJyZW50RW50cnlJbmRleCkKLXsKLSAgICBBU1NFUlQoaGlzdG9yeSk7Ci0g
ICAgQVNTRVJUKGN1cnJlbnRFbnRyeUluZGV4KTsKLSAgICBpZiAod2luZG93SW5kZXggPj0gbV93
aW5kb3dMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFRlc3ROYXZpZ2F0aW9uQ29u
dHJvbGxlciYgbmF2aWdhdGlvbkNvbnRyb2xsZXIgPSAqbV93aW5kb3dMaXN0W3dpbmRvd0luZGV4
XS0+bmF2aWdhdGlvbkNvbnRyb2xsZXIoKTsKLSAgICBzaXplX3QgZW50cnlDb3VudCA9IG5hdmln
YXRpb25Db250cm9sbGVyLmVudHJ5Q291bnQoKTsKLSAgICBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0
ZW0+IHJlc3VsdChlbnRyeUNvdW50KTsKLSAgICAqY3VycmVudEVudHJ5SW5kZXggPSBuYXZpZ2F0
aW9uQ29udHJvbGxlci5sYXN0Q29tbWl0dGVkRW50cnlJbmRleCgpOwotICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBlbnRyeUNvdW50OyArK2luZGV4KSB7Ci0gICAgICAgIFdlYkhp
c3RvcnlJdGVtIGhpc3RvcnlJdGVtID0gbmF2aWdhdGlvbkNvbnRyb2xsZXIuZW50cnlBdEluZGV4
KGluZGV4KS0+Y29udGVudFN0YXRlKCk7Ci0gICAgICAgIGlmIChoaXN0b3J5SXRlbS5pc051bGwo
KSkgewotICAgICAgICAgICAgaGlzdG9yeUl0ZW0uaW5pdGlhbGl6ZSgpOwotICAgICAgICAgICAg
aGlzdG9yeUl0ZW0uc2V0VVJMU3RyaW5nKG5hdmlnYXRpb25Db250cm9sbGVyLmVudHJ5QXRJbmRl
eChpbmRleCktPlVSTCgpLnNwZWMoKS51dGYxNigpKTsKLSAgICAgICAgfQotICAgICAgICByZXN1
bHRbaW5kZXhdID0gaGlzdG9yeUl0ZW07Ci0gICAgfQotICAgIGhpc3RvcnktPnN3YXAocmVzdWx0
KTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCShy
ZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdFNoZWxsX2gK
LSNkZWZpbmUgVGVzdFNoZWxsX2gKLQotI2luY2x1ZGUgIlRlc3RFdmVudFByaW50ZXIuaCIKLSNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlRlc3RJbnRlcmZhY2VzLmgi
Ci0jaW5jbHVkZSAiV2ViVmlld0hvc3QuaCIKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gVGVzdFNoZWxsIGlz
IGEgY29udGFpbmVyIG9mIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGhhcyBicmlkZ2UgZnVuY3Rpb25z
IGJldHdlZW4KLS8vIHZhcmlvdXMgb2JqZWN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgY3JlYXRl
ZCBpbiBvbmUgRFJUIHByb2Nlc3MuCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViRGV2
VG9vbHNBZ2VudENsaWVudDsKLWNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViVGhyZWFkOwotY2xh
c3MgV2ViVmlldzsKLWNsYXNzIFdlYlRoZW1lRW5naW5lOwotY2xhc3MgV2ViVVJMOwotfQotCi1j
bGFzcyBEUlREZXZUb29sc0FnZW50OwotY2xhc3MgRFJURGV2VG9vbHNDYWxsQXJnczsKLWNsYXNz
IERSVERldlRvb2xzQ2xpZW50OwotY2xhc3MgTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQ7Ci1j
bGFzcyBNb2NrUGxhdGZvcm07Ci0KLXN0cnVjdCBUZXN0UGFyYW1zIHsKLSAgICBib29sIGR1bXBU
cmVlOwotICAgIGJvb2wgZGVidWdSZW5kZXJUcmVlOwotICAgIGJvb2wgZGVidWdMYXllclRyZWU7
Ci0gICAgYm9vbCBwcmludFNlcGFyYXRvcnM7Ci0gICAgV2ViS2l0OjpXZWJVUkwgdGVzdFVybDsK
LSAgICBzdGQ6OnN0cmluZyBwaXhlbEhhc2g7Ci0KLSAgICBUZXN0UGFyYW1zKCkKLSAgICAgICAg
OiBkdW1wVHJlZSh0cnVlKQotICAgICAgICAsIGRlYnVnUmVuZGVyVHJlZShmYWxzZSkKLSAgICAg
ICAgLCBkZWJ1Z0xheWVyVHJlZShmYWxzZSkKLSAgICAgICAgLCBwcmludFNlcGFyYXRvcnMoZmFs
c2UpIHsgfQotfTsKLQotY2xhc3MgVGVzdFNoZWxsIHsKLXB1YmxpYzoKLSAgICBUZXN0U2hlbGwo
KTsKLSAgICB+VGVzdFNoZWxsKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoTW9ja1BsYXRmb3Jt
Kik7Ci0KLSAgICAvLyBUaGUgbWFpbiBXZWJWaWV3LgotICAgIFdlYktpdDo6V2ViVmlldyogd2Vi
VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQotICAgIC8vIFJldHVybnMgdGhlIGhv
c3QgZm9yIHRoZSBtYWluIFdlYlZpZXcuCi0gICAgV2ViVmlld0hvc3QqIHdlYlZpZXdIb3N0KCkg
Y29uc3QgeyByZXR1cm4gbV93ZWJWaWV3SG9zdC5nZXQoKTsgfQotICAgIFdlYlRlc3RSdW5uZXI6
OldlYlRlc3RSdW5uZXIqIHRlc3RSdW5uZXIoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RJbnRlcmZh
Y2VzLT50ZXN0UnVubmVyKCk7IH0KLSAgICBjb25zdCBUZXN0RXZlbnRQcmludGVyKiBwcmludGVy
KCkgY29uc3QgeyByZXR1cm4gJm1fcHJpbnRlcjsgfQotCi0gICAgV2ViVGVzdFJ1bm5lcjo6V2Vi
UHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKCkgeyByZXR1cm4gJm1fcHJlZnM7IH0KLSAgICB2b2lk
IGFwcGx5UHJlZmVyZW5jZXMoKSB7IG1fcHJlZnMuYXBwbHlUbyhtX3dlYlZpZXcpOyB9Ci0KLSAg
ICB2b2lkIGJpbmRKU09iamVjdHNUb1dpbmRvdyhXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9p
ZCBydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiwgYm9vbCBzaG91bGREdW1wUGl4ZWxUZXN0
cyk7Ci0gICAgdm9pZCBjYWxsSlNHQygpOwotICAgIHZvaWQgcmVzZXRUZXN0Q29udHJvbGxlcigp
OwotICAgIHZvaWQgd2FpdFRlc3RGaW5pc2hlZCgpOwotCi0gICAgLy8gT3BlcmF0aW9ucyB0byB0
aGUgbWFpbiB3aW5kb3cuCi0gICAgdm9pZCBsb2FkVVJMKGNvbnN0IFdlYktpdDo6V2ViVVJMJik7
Ci0gICAgdm9pZCByZWxvYWQoKTsKLSAgICB2b2lkIGdvVG9PZmZzZXQoaW50IG9mZnNldCk7Ci0g
ICAgaW50IG5hdmlnYXRpb25FbnRyeUNvdW50KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEZvY3Vz
KFdlYktpdDo6V2ViV2lkZ2V0KiwgYm9vbCBlbmFibGUpOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRo
ZSBEUlRUZXN0UnVubmVyIHRvIHNpZ25hbCB0ZXN0IGNvbXBsZXRpb24uCi0gICAgdm9pZCB0ZXN0
RmluaXNoZWQoV2ViVmlld0hvc3QqKTsKLSAgICAvLyBDYWxsZWQgYnkgRFJUVGVzdFJ1bm5lciB3
aGVuIGEgdGVzdCBoaXRzIHRoZSB0aW1lb3V0LCBidXQgZG9lcyBub3QKLSAgICAvLyBjYXVzZSBh
IGhhbmcuIFdlIGNhbiBhdm9pZCBraWxsaW5nIFRlc3RTaGVsbCBpbiB0aGlzIGNhc2UgYW5kIHN0
aWxsIGR1bXAKLSAgICAvLyB0aGUgdGVzdCByZXN1bHRzLgotICAgIHZvaWQgdGVzdFRpbWVkT3V0
KCk7Ci0KLSAgICBib29sIGFsbG93RXh0ZXJuYWxQYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fYWxs
b3dFeHRlcm5hbFBhZ2VzOyB9Ci0gICAgdm9pZCBzZXRBbGxvd0V4dGVybmFsUGFnZXMoYm9vbCBh
bGxvd0V4dGVybmFsUGFnZXMpIHsgbV9hbGxvd0V4dGVybmFsUGFnZXMgPSBhbGxvd0V4dGVybmFs
UGFnZXM7IH0KLQotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvclZpZGVvRW5h
YmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFi
bGVkID0gZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZp
eGVkUG9zaXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAgICB2b2lkIHNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbEVuYWJsZWQoYm9vbCBlbmFibGVkKSB7
IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5hYmxlZCA9IGVuYWJs
ZWQ7IH0KLSAgICBib29sIHNvZnR3YXJlQ29tcG9zaXRpbmdFbmFibGVkKCkgeyByZXR1cm4gbV9z
b2Z0d2FyZUNvbXBvc2l0aW5nRW5hYmxlZDsgfQotICAgIHZvaWQgc2V0U29mdHdhcmVDb21wb3Np
dGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fc29mdHdhcmVDb21wb3NpdGluZ0VuYWJsZWQg
PSBlbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRUaHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZChib29s
IGVuYWJsZWQpIHsgbV90aHJlYWRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAg
ICB2b2lkIHNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKGJvb2wgZW5hYmxlZCkgeyBtX2ZvcmNlQ29t
cG9zaXRpbmdNb2RlID0gZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0VGhyZWFkZWRIVE1MUGFyc2Vy
KGJvb2wgZW5hYmxlZCkgeyBtX3RocmVhZGVkSFRNTFBhcnNlciA9IGVuYWJsZWQ7IH0KLSAgICB2
b2lkIHNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkID0gZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0UGVyVGlsZVBh
aW50aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkID0g
ZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0RGVmZXJyZWRJbWFnZURlY29kaW5nRW5hYmxlZChib29s
IGVuYWJsZWQpIHsgbV9kZWZlcnJlZEltYWdlRGVjb2RpbmdFbmFibGVkID0gZW5hYmxlZDsgfQot
I2lmIGRlZmluZWQoT1NfV0lOKQotICAgIC8vIEFjY2VzcyB0byB0aGUgZmluaXNoZWQgZXZlbnQu
IFVzZWQgYnkgdGhlIHN0YXRpYyBXYXRjaERvZyB0aHJlYWQuCi0gICAgSEFORExFIGZpbmlzaGVk
RXZlbnQoKSB7IHJldHVybiBtX2ZpbmlzaGVkRXZlbnQ7IH0KLSNlbmRpZgotCi0gICAgLy8gR2V0
IHRoZSB0aW1lb3V0IGZvciBydW5uaW5nIGEgdGVzdCBpbiBtaWxsaXNlY29uZHMuCi0gICAgaW50
IGxheW91dFRlc3RUaW1lb3V0KCkgeyByZXR1cm4gbV90aW1lb3V0OyB9Ci0gICAgaW50IGxheW91
dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSB7IHJldHVybiBsYXlvdXRUZXN0VGltZW91dCgpICsg
MTAwMDsgfQotICAgIHZvaWQgc2V0TGF5b3V0VGVzdFRpbWVvdXQoaW50IHRpbWVvdXQpIHsgbV90
aW1lb3V0ID0gdGltZW91dDsgfQotCi0gICAgLy8gVjggSmF2YVNjcmlwdCBzdHJlc3MgdGVzdCBv
cHRpb25zLgotICAgIGludCBzdHJlc3NPcHQoKSB7IHJldHVybiBtX3N0cmVzc09wdDsgfQotICAg
IHZvaWQgc2V0U3RyZXNzT3B0KGJvb2wgc3RyZXNzT3B0KSB7IG1fc3RyZXNzT3B0ID0gc3RyZXNz
T3B0OyB9Ci0gICAgaW50IHN0cmVzc0Rlb3B0KCkgeyByZXR1cm4gbV9zdHJlc3NEZW9wdDsgfQot
ICAgIHZvaWQgc2V0U3RyZXNzRGVvcHQoaW50IHN0cmVzc0Rlb3B0KSB7IG1fc3RyZXNzRGVvcHQg
PSBzdHJlc3NEZW9wdDsgfQotCi0gICAgLy8gVGhlIEphdmFTY3JpcHQgZmxhZ3Mgc3BlY2lmaWVk
IGFzIGEgc3RyaW5ncy4KLSAgICBzdGQ6OnN0cmluZyBqYXZhU2NyaXB0RmxhZ3MoKSB7IHJldHVy
biBtX2phdmFTY3JpcHRGbGFnczsgfQotICAgIHZvaWQgc2V0SmF2YVNjcmlwdEZsYWdzKHN0ZDo6
c3RyaW5nIGphdmFTY3JpcHRGbGFncykgeyBtX2phdmFTY3JpcHRGbGFncyA9IGphdmFTY3JpcHRG
bGFnczsgfQotCi0gICAgLy8gU2V0IHdoZXRoZXIgdG8gZHVtcCB3aGVuIHRoZSBsb2FkZWQgcGFn
ZSBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gVGhpcyBpcyB1c2VkIHdpdGggbXVsdGlwbGUgbG9h
ZAotICAgIC8vIHRlc3Rpbmcgd2hlcmUgd2Ugb25seSB3YW50IHRvIGhhdmUgdGhlIG91dHB1dCBm
cm9tIHRoZSBsYXN0IGxvYWQuCi0gICAgdm9pZCBzZXREdW1wV2hlbkZpbmlzaGVkKGJvb2wgZHVt
cFdoZW5GaW5pc2hlZCkgeyBtX2R1bXBXaGVuRmluaXNoZWQgPSBkdW1wV2hlbkZpbmlzaGVkOyB9
Ci0KLSAgICB2b2lkIHNldElzRGlzcGxheWluZ01vZGFsRGlhbG9nKGJvb2wgaXNEaXNwbGF5aW5n
TW9kYWxEaWFsb2cpIHsgbV9pc0Rpc3BsYXlpbmdNb2RhbERpYWxvZyA9IGlzRGlzcGxheWluZ01v
ZGFsRGlhbG9nOyB9Ci0gICAgYm9vbCBpc0Rpc3BsYXlpbmdNb2RhbERpYWxvZygpIGNvbnN0IHsg
cmV0dXJuIG1faXNEaXNwbGF5aW5nTW9kYWxEaWFsb2c7IH0KLQotICAgIC8vIFNldCB3aGV0aGVy
IHRoZSBiaW5hcnkgZGF0YSBvdXRwdXQgc2hvdWxkIGJlIGVuY29kZWQgaW4gYmFzZTY0IHRleHQu
Ci0gICAgdm9pZCBzZXRFbmNvZGVCaW5hcnkoYm9vbCBlbmNvZGVCaW5hcnkpIHsgbV9wcmludGVy
LnNldEVuY29kZUJpbmFyeShlbmNvZGVCaW5hcnkpOyB9Ci0KLSAgICBXZWJWaWV3SG9zdCogY3Jl
YXRlTmV3V2luZG93KGNvbnN0IFdlYktpdDo6V2ViVVJMJik7Ci0gICAgdm9pZCBjbG9zZVdpbmRv
dyhXZWJWaWV3SG9zdCopOwotICAgIHZvaWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7Ci0gICAg
aW50IHdpbmRvd0NvdW50KCk7Ci0gICAgdm9pZCBjYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhzaXpl
X3Qgd2luZG93SW5kZXgsIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViSGlzdG9yeUl0ZW0+
Kiwgc2l6ZV90KiBjdXJyZW50RW50cnlJbmRleCk7Ci0gICAgc3RhdGljIHZvaWQgcmVzaXplV2lu
ZG93Rm9yVGVzdChXZWJWaWV3SG9zdCosIGNvbnN0IFdlYktpdDo6V2ViVVJMJik7Ci0KLSAgICB2
b2lkIHNob3dEZXZUb29scygpOwotICAgIHZvaWQgY2xvc2VEZXZUb29scygpOwotCi0gICAgRFJU
RGV2VG9vbHNBZ2VudCogZHJ0RGV2VG9vbHNBZ2VudCgpIHsgcmV0dXJuIG1fZHJ0RGV2VG9vbHNB
Z2VudC5nZXQoKTsgfQotICAgIERSVERldlRvb2xzQ2xpZW50KiBkcnREZXZUb29sc0NsaWVudCgp
IHsgcmV0dXJuIG1fZHJ0RGV2VG9vbHNDbGllbnQuZ2V0KCk7IH0KLSAgICBXZWJWaWV3SG9zdCog
ZGV2VG9vbHNXZWJWaWV3KCkgeyByZXR1cm4gbV9kZXZUb29sczsgfQotCi0gICAgc3RhdGljIGNv
bnN0IGludCB2aXJ0dWFsV2luZG93Qm9yZGVyID0gMzsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFdl
YlZpZXdIb3N0Kj4gV2luZG93TGlzdDsKLSAgICBXaW5kb3dMaXN0IHdpbmRvd0xpc3QoKSBjb25z
dCB7IHJldHVybiBtX3dpbmRvd0xpc3Q7IH0KLQotICAgIFdlYktpdDo6V2ViVGhyZWFkKiB3ZWJD
b21wb3NpdG9yVGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV93ZWJDb21wb3NpdG9yVGhyZWFkLmdl
dCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlld0hvc3QqIGNyZWF0ZU5ld1dpbmRvdyhjb25z
dCBXZWJLaXQ6OldlYlVSTCYsIERSVERldlRvb2xzQWdlbnQqLCBXZWJUZXN0UnVubmVyOjpXZWJU
ZXN0SW50ZXJmYWNlcyopOwotICAgIHZvaWQgY3JlYXRlTWFpbldpbmRvdygpOwotICAgIHZvaWQg
Y3JlYXRlRFJURGV2VG9vbHNDbGllbnQoRFJURGV2VG9vbHNBZ2VudCopOwotCi0gICAgdm9pZCBy
ZXNldFdlYlNldHRpbmdzKFdlYktpdDo6V2ViVmlldyYpOwotICAgIHZvaWQgZHVtcCgpOwotICAg
IHN0ZDo6c3RyaW5nIGR1bXBBbGxCYWNrRm9yd2FyZExpc3RzKCk7Ci0gICAgdm9pZCBkdW1wSW1h
Z2UoU2tDYW52YXMqKSBjb25zdDsKLQotICAgIGJvb2wgbV90ZXN0SXNQZW5kaW5nOwotICAgIGJv
b2wgbV90ZXN0SXNQcmVwYXJpbmc7Ci0gICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7Ci0g
ICAgV2ViS2l0OjpXZWJXaWRnZXQqIG1fZm9jdXNlZFdpZGdldDsKLSAgICBXZWJWaWV3SG9zdCog
bV9kZXZUb29sczsKLQotICAgIC8vIEJlIGNhcmVmdWwgb2YgdGhlIGRlc3RydWN0aW9uIG9yZGVy
IG9mIHRoZSBmb2xsb3dpbmcgb2JqZWN0cy4KLSAgICBUZXN0RXZlbnRQcmludGVyIG1fcHJpbnRl
cjsKLSAgICBPd25QdHI8RFJURGV2VG9vbHNBZ2VudD4gbV9kcnREZXZUb29sc0FnZW50OwotICAg
IE93blB0cjxEUlREZXZUb29sc0NsaWVudD4gbV9kcnREZXZUb29sc0NsaWVudDsKLSAgICBPd25Q
dHI8V2ViVGVzdFJ1bm5lcjo6V2ViVGVzdEludGVyZmFjZXM+IG1fdGVzdEludGVyZmFjZXM7Ci0g
ICAgT3duUHRyPFdlYlRlc3RSdW5uZXI6OldlYlRlc3RJbnRlcmZhY2VzPiBtX2RldlRvb2xzVGVz
dEludGVyZmFjZXM7Ci0gICAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB0aGlzIHRocmVhZCBpcyBk
ZXN0cm95ZWQgYWZ0ZXIgdGhlIFdlYlZpZXdIb3N0LgotICAgIE93blB0cjxXZWJLaXQ6OldlYlRo
cmVhZD4gbV93ZWJDb21wb3NpdG9yVGhyZWFkOwotICAgIE93blB0cjxXZWJWaWV3SG9zdD4gbV93
ZWJWaWV3SG9zdDsKLSNpZiBFTkFCTEUoTElOS19QUkVSRU5ERVIpCi0gICAgT3duUHRyPE1vY2tX
ZWJQcmVyZW5kZXJpbmdTdXBwb3J0PiBtX3ByZXJlbmRlcmluZ1N1cHBvcnQ7Ci0jZW5kaWYKLQot
ICAgIFRlc3RQYXJhbXMgbV9wYXJhbXM7Ci0gICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JDdXJyZW50
VGVzdDsKLSAgICBpbnQgbV90aW1lb3V0OyAvLyB0aW1lb3V0IHZhbHVlIGluIG1pbGxpc2Vjb25k
Ci0gICAgYm9vbCBtX2FsbG93RXh0ZXJuYWxQYWdlczsKLSAgICBib29sIG1fYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0ZvclZpZGVvRW5hYmxlZDsKLSAgICBib29sIG1fYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkOwotICAgIGJvb2wgbV9hY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkOwotICAgIGJvb2wgbV9zb2Z0d2FyZUNvbXBv
c2l0aW5nRW5hYmxlZDsKLSAgICBib29sIG1fdGhyZWFkZWRDb21wb3NpdGluZ0VuYWJsZWQ7Ci0g
ICAgYm9vbCBtX2ZvcmNlQ29tcG9zaXRpbmdNb2RlOwotICAgIGJvb2wgbV90aHJlYWRlZEhUTUxQ
YXJzZXI7Ci0gICAgYm9vbCBtX2FjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwotICAgIGJvb2wg
bV9wZXJUaWxlUGFpbnRpbmdFbmFibGVkOwotICAgIGJvb2wgbV9kZWZlcnJlZEltYWdlRGVjb2Rp
bmdFbmFibGVkOwotICAgIFdlYlRlc3RSdW5uZXI6OldlYlByZWZlcmVuY2VzIG1fcHJlZnM7Ci0g
ICAgYm9vbCBtX3N0cmVzc09wdDsKLSAgICBib29sIG1fc3RyZXNzRGVvcHQ7Ci0gICAgc3RkOjpz
dHJpbmcgbV9qYXZhU2NyaXB0RmxhZ3M7Ci0gICAgYm9vbCBtX2R1bXBXaGVuRmluaXNoZWQ7Ci0g
ICAgYm9vbCBtX2lzRGlzcGxheWluZ01vZGFsRGlhbG9nOwotCi0KLSAgICAvLyBMaXN0IG9mIGFs
bCB3aW5kb3dzIGluIHRoaXMgcHJvY2Vzcy4KLSAgICAvLyBUaGUgbWFpbiB3aW5kb3cgc2hvdWxk
IGJlIHB1dCBpbnRvIHdpbmRvd0xpc3RbMF0uCi0gICAgV2luZG93TGlzdCBtX3dpbmRvd0xpc3Q7
Ci0KLSNpZiBkZWZpbmVkKE9TX1dJTikKLSAgICAvLyBVc2VkIGJ5IHRoZSB3YXRjaGRvZyB0byBr
bm93IHdoZW4gaXQncyBmaW5pc2hlZC4KLSAgICBIQU5ETEUgbV9maW5pc2hlZEV2ZW50OwotI2Vu
ZGlmCi19OwotCi12b2lkIHBsYXRmb3JtSW5pdChpbnQqLCBjaGFyKioqKTsKLXZvaWQgb3BlblN0
YXJ0dXBEaWFsb2coKTsKLWJvb2wgY2hlY2tMYXlvdXRUZXN0U3lzdGVtRGVwZW5kZW5jaWVzKCk7
Ci0KLSNlbmRpZiAvLyBUZXN0U2hlbGxfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGVzdFNoZWxsLmgiCi0KLSNpbmNsdWRlICJsaW51eC9XZWJGb250UmVuZGVyaW5nLmgiCi0jaW5j
bHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3BvcnRzL1NrVHlwZWZhY2VfYW5kcm9pZC5o
IgotCi1uYW1lc3BhY2UgewotCi0vLyBNdXN0IGJlIHNhbWUgYXMgREVWSUNFX0RSVF9ESVIgaW4g
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lk
LnB5LgotI2RlZmluZSBERVZJQ0VfRFJUX0RJUiAiL2RhdGEvbG9jYWwvdG1wL2RydC8iCi0KLWNv
bnN0IGNoYXIgZm9udE1haW5Db25maWdGaWxlW10gPSBERVZJQ0VfRFJUX0RJUiAiYW5kcm9pZF9t
YWluX2ZvbnRzLnhtbCI7Ci1jb25zdCBjaGFyIGZvbnRGYWxsYmFja0NvbmZpZ0ZpbGVbXSA9IERF
VklDRV9EUlRfRElSICJhbmRyb2lkX2ZhbGxiYWNrX2ZvbnRzLnhtbCI7Ci1jb25zdCBjaGFyIGZv
bnRzRGlyW10gPSBERVZJQ0VfRFJUX0RJUiAiZm9udHMvIjsKLQotfSAvLyBuYW1lc3BhY2UKLQot
dm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCi17Ci0gICAgLy8gSW5p
dGlhbGl6ZSBza2lhIHdpdGggY3VzdG9taXplZCBmb250IGNvbmZpZyBmaWxlcy4KLSAgICBTa1Vz
ZVRlc3RGb250Q29uZmlnRmlsZShmb250TWFpbkNvbmZpZ0ZpbGUsIGZvbnRGYWxsYmFja0NvbmZp
Z0ZpbGUsIGZvbnRzRGlyKTsKLQotICAgIC8vIERpc2FibGUgYXV0byBoaW50IGFuZCB1c2Ugbm9y
bWFsIGhpbnRpbmcgaW4gbGF5b3V0IHRlc3QgbW9kZSB0byBwcm9kdWNlIHRoZSBzYW1lIGZvbnQg
bWV0cmljcyBhcyBjaHJvbWl1bS1saW51eC4KLSAgICBXZWJLaXQ6OldlYkZvbnRSZW5kZXJpbmc6
OnNldEF1dG9IaW50KGZhbHNlKTsKLSAgICBXZWJLaXQ6OldlYkZvbnRSZW5kZXJpbmc6OnNldEhp
bnRpbmcoU2tQYWludDo6a05vcm1hbF9IaW50aW5nKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxNYWMubW0JKHJldmlzaW9uIDE0NzcwMSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIlRl
c3RTaGVsbC5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0j
aW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0KLS8vIEEgY2xhc3MgdG8gYmUgdGhlIHRhcmdldC9z
ZWxlY3RvciBvZiB0aGUgIndhdGNoZG9nIiB0aHJlYWQgdGhhdCBlbnN1cmVzCi0vLyBwYWdlcyB0
aW1lb3V0IGlmIHRoZXkgdGFrZSB0b28gbG9uZyBhbmQgdGVsbHMgdGhlIHRlc3QgaGFybmVzcyB2
aWEgc3Rkb3V0LgotQGludGVyZmFjZSBXYXRjaERvZ1RhcmdldCA6IE5TT2JqZWN0IHsKLUBwcml2
YXRlCi0gICAgTlNUaW1lSW50ZXJ2YWwgX3RpbWVvdXQ7Ci19Ci0vLyB8dGltZW91dHwgaXMgaW4g
c2Vjb25kcwotLSAoaWQpaW5pdFdpdGhUaW1lb3V0OihOU1RpbWVJbnRlcnZhbCl0aW1lb3V0Owot
Ly8gc2VydmVzIGFzIHRoZSAicnVuIiBtZXRob2Qgb2YgYSBOU1RocmVhZC4KLS0gKHZvaWQpcnVu
OihpZClzZW5kZXI7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXYXRjaERvZ1RhcmdldAotCi0t
IChpZClpbml0V2l0aFRpbWVvdXQ6KE5TVGltZUludGVydmFsKXRpbWVvdXQKLXsKLSAgICBpZiAo
KHNlbGYgPSBbc3VwZXIgaW5pdF0pKQotICAgICAgICBfdGltZW91dCA9IHRpbWVvdXQ7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpcnVuOihpZClpZ25vcmUKLXsKLSAgICBOU0F1dG9y
ZWxlYXNlUG9vbCogcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwotCi0g
ICAgLy8gY2hlY2sgZm9yIGRlYnVnZ2VyLCBqdXN0IGJhaWwgaWYgc28uIFdlIGRvbid0IHdhbnQg
dGhlIHRpbWVvdXRzIGhpdHRpbmcKLSAgICAvLyB3aGVuIHdlJ3JlIHRyeWluZyB0byB0cmFjayBk
b3duIGFuIGlzc3VlLgotICAgIGlmICh3ZWJraXRfc3VwcG9ydDo6QmVpbmdEZWJ1Z2dlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBOU1RocmVhZCogY3VycmVudFRocmVhZCA9IFtOU1RocmVh
ZCBjdXJyZW50VGhyZWFkXTsKLQotICAgIC8vIFdhaXQgdG8gYmUgY2FuY2VsbGVkLiBJZiB3ZSBh
cmUgdGhhdCBtZWFucyB0aGUgdGVzdCBmaW5pc2hlZC4gSWYgaXQgaGFzbid0LAotICAgIC8vIHRo
ZW4gd2UgbmVlZCB0byB0ZWxsIHRoZSBsYXlvdXQgc2NyaXB0IHdlIHRpbWVkIG91dCBhbmQgc3Rh
cnQgYWdhaW4uCi0gICAgTlNEYXRlKiBsaW1pdERhdGUgPSBbTlNEYXRlIGRhdGVXaXRoVGltZUlu
dGVydmFsU2luY2VOb3c6X3RpbWVvdXRdOwotICAgIHdoaWxlIChbKE5TRGF0ZSopW05TRGF0ZSBk
YXRlXSBjb21wYXJlOmxpbWl0RGF0ZV0gPT0gTlNPcmRlcmVkQXNjZW5kaW5nICYmCi0gICAgICAg
ICAgICFbY3VycmVudFRocmVhZCBpc0NhbmNlbGxlZF0pIHsKLSAgICAgICAgLy8gc2xlZXAgZm9y
IGEgc21hbGwgaW5jcmVtZW50IHRoZW4gY2hlY2sgYWdhaW4KLSAgICAgICAgTlNEYXRlKiBpbmNy
ZW1lbnREYXRlID0gW05TRGF0ZSBkYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlTm93OjEuMF07Ci0g
ICAgICAgIFtOU1RocmVhZCBzbGVlcFVudGlsRGF0ZTppbmNyZW1lbnREYXRlXTsKLSAgICB9Ci0g
ICAgaWYgKCFbY3VycmVudFRocmVhZCBpc0NhbmNlbGxlZF0pIHsKLSAgICAgICAgLy8gUHJpbnQg
YSB3YXJuaW5nIHRvIGJlIGNhdWdodCBieSB0aGUgbGF5b3V0LXRlc3Qgc2NyaXB0LgotICAgICAg
ICAvLyBOb3RlOiB0aGUgbGF5b3V0IHRlc3QgZHJpdmVyIG1heSBvciBtYXkgbm90IHJlY29nbml6
ZQotICAgICAgICAvLyB0aGlzIGFzIGEgdGltZW91dC4KLSAgICAgICAgcHV0cygiI1RFU1RfVElN
RURfT1VUXG4iKTsKLSAgICAgICAgcHV0cygiI0VPRlxuIik7Ci0gICAgICAgIGZmbHVzaChzdGRv
dXQpOwotICAgICAgICBleGl0KDApOwotICAgIH0KLQotICAgIFtwb29sIHJlbGVhc2VdOwotfQot
Ci1AZW5kCi0KLXZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkKLXsKLSAgICBBU1NF
UlQoIW1fdGVzdElzUGVuZGluZyk7Ci0KLSAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwotCi0g
ICAgLy8gQ3JlYXRlIGEgd2F0Y2hkb2cgdGhyZWFkIHdoaWNoIGp1c3Qgc2V0cyBhIHRpbWVyIGFu
ZAotICAgIC8vIGtpbGxzIHRoZSBwcm9jZXNzIGlmIGl0IHRpbWVzIG91dC4gIFRoaXMgY2F0Y2hl
cyByZWFsbHkKLSAgICAvLyBiYWQgaGFuZ3Mgd2hlcmUgdGhlIHNoZWxsIGlzbid0IGNvbWluZyBi
YWNrIHRvIHRoZQotICAgIC8vIG1lc3NhZ2UgbG9vcC4gIElmIHRoZSB3YXRjaGRvZyBpcyB3aGF0
IGNhdGNoZXMgYQotICAgIC8vIHRpbWVvdXQsIGl0IGNhbid0IGRvIGFueXRoaW5nIGV4Y2VwdCB0
ZXJtaW5hdGUgdGhlIHRlc3QKLSAgICAvLyBzaGVsbCwgd2hpY2ggaXMgdW5mb3J0dW5hdGUuCi0g
ICAgLy8gV2luZG93cyBtdWx0aXBsaWVzIGJ5IDIuNSwgYnV0IHRoYXQgY2F1c2VzIHVzIHRvIHJ1
biBmb3IgZmFyLCBmYXIgdG9vCi0gICAgLy8gbG9uZy4gV2UgdXNlIHRoZSBwYXNzZWQgdmFsdWUg
YW5kIGxldCB0aGUgc2NyaXB0cyBmbGFnIG92ZXJyaWRlCi0gICAgLy8gdGhlIHZhbHVlIGFzIG5l
ZWRlZC4KLSAgICBOU1RpbWVJbnRlcnZhbCB0aW1lb3V0U2Vjb25kcyA9IGxheW91dFRlc3RUaW1l
b3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDA7Ci0gICAgV2F0Y2hEb2dUYXJnZXQqIHdhdGNoZG9nID0g
W1tbV2F0Y2hEb2dUYXJnZXQgYWxsb2NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbml0V2l0aFRpbWVvdXQ6dGltZW91dFNlY29uZHNdIGF1dG9yZWxlYXNlXTsKLSAgICBO
U1RocmVhZCogdGhyZWFkID0gW1tOU1RocmVhZCBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6d2F0Y2hk
b2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNl
bGVjdG9yKHJ1bjopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9i
amVjdDpuaWxdOwotICAgIFt0aHJlYWQgc3RhcnRdOwotCi0gICAgLy8gVGVzdEZpbmlzaGVkKCkg
d2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdl
Ci0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3aGlsZSAobV90ZXN0SXNQZW5kaW5nKQot
ICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsKLQotICAgIC8vIFRlbGwg
dGhlIHdhdGNoZG9nIHRoYXQgd2UncmUgZmluaXNoZWQuIE5vIHBvaW50IHdhaXRpbmcgdG8gcmUt
am9pbiwgaXQnbGwKLSAgICAvLyBkaWUgb24gaXRzIG93bi4KLSAgICBbdGhyZWFkIGNhbmNlbF07
Ci0gICAgW3RocmVhZCByZWxlYXNlXTsKLX0KLQotdm9pZCBwbGF0Zm9ybUluaXQoaW50KiwgY2hh
cioqKikKLXsKLX0KLQotdm9pZCBvcGVuU3RhcnR1cERpYWxvZygpCi17Ci0gICAgLy8gRklYTUU6
IFRoaXMgY29kZSBkb2Vzbid0IHdvcmsuIE5lZWQgTlNBcHBsaWNhdGlvbiBldmVudCBsb29wPwot
ICAgIE5TQWxlcnQqIGFsZXJ0ID0gW1tbTlNBbGVydCBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2Vd
OwotICAgIGFsZXJ0Lm1lc3NhZ2VUZXh0ID0gQCJBdHRhY2ggdG8gbWU/IjsKLSAgICBhbGVydC5p
bmZvcm1hdGl2ZVRleHQgPSBAIlRoaXMgd291bGQgcHJvYmFibHkgYmUgYSBnb29kIHRpbWUgdG8g
YXR0YWNoIHlvdXIgZGVidWdnZXIuIjsKLSAgICBbYWxlcnQgYWRkQnV0dG9uV2l0aFRpdGxlOkAi
T0siXTsKLSAgICBbYWxlcnQgcnVuTW9kYWxdOwotfQotCi1ib29sIGNoZWNrTGF5b3V0VGVzdFN5
c3RlbURlcGVuZGVuY2llcygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxQb3NpeC5jcHAJKHJldmlz
aW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBv
c2l4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotCi0jaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Vi
a2l0X3N1cHBvcnQuaCIKLQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5o
PgotCi1zdGF0aWMgdm9pZCBBbGFybUhhbmRsZXIoaW50KQotewotICAgIC8vIElmIHRoZSBhbGFy
bSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdlIGhhdmUgYSByZWFsbHkgYmFkIGhh
bmcuCi0gICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIpOwotICAgIHB1dHMoIiNFT0ZcbiIp
OwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGV4aXQoMCk7Ci19Ci0KLXZvaWQgVGVzdFNoZWxs
Ojp3YWl0VGVzdEZpbmlzaGVkKCkKLXsKLSAgICBBU1NFUlQoIW1fdGVzdElzUGVuZGluZyk7Ci0g
ICAgbV90ZXN0SXNQZW5kaW5nID0gdHJ1ZTsKLQotICAgIC8vIEluc3RhbGwgYW4gYWxhcm0gc2ln
bmFsIGhhbmRsZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYgd2UgdGltZSBvdXQuCi0gICAgc3RydWN0
IHNpZ2FjdGlvbiBhbGFybUFjdGlvbjsKLSAgICBhbGFybUFjdGlvbi5zYV9oYW5kbGVyID0gQWxh
cm1IYW5kbGVyOwotICAgIHNpZ2VtcHR5c2V0KCZhbGFybUFjdGlvbi5zYV9tYXNrKTsKLSAgICBh
bGFybUFjdGlvbi5zYV9mbGFncyA9IDA7Ci0KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlv
bjsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xkQWN0aW9uKTsKLSAg
ICBhbGFybShsYXlvdXRUZXN0VGltZW91dEZvcldhdGNoRG9nKCkgLyAxMDAwKTsKLQotICAgIC8v
IFRlc3RGaW5pc2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQgbWVzc2FnZSB0byBicmVhayB0aGlzIGxv
b3Agd2hlbiB0aGUgcGFnZQotICAgIC8vIGZpbmlzaGVzIGxvYWRpbmcuCi0gICAgd2hpbGUgKG1f
dGVzdElzUGVuZGluZykKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7
Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGFsYXJtLgotICAgIGFsYXJtKDApOwotICAgIHNpZ2FjdGlv
bihTSUdBTFJNLCAmb2xkQWN0aW9uLCAwKTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbFN0dWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFN0dWIuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJU
ZXN0U2hlbGwuaCIKLQotYm9vbCBjaGVja0xheW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKQot
ewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIG9wZW5TdGFydHVwRGlhbG9nKCkKLXsKLSAg
ICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFdpbi5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dFNoZWxsLmgiCi0KLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgot
I2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8aW8uaD4KLSNpbmNsdWRlIDxsaXN0PgotI2lu
Y2x1ZGUgPHByb2Nlc3MuaD4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0jaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotCi0jZGVmaW5l
IFNJWkVPRl9TVFJVQ1RfV0lUSF9TUEVDSUZJRURfTEFTVF9NRU1CRVIoc3RydWN0TmFtZSwgbWVt
YmVyKSBcCi0gICAgb2Zmc2V0b2Yoc3RydWN0TmFtZSwgbWVtYmVyKSArIFwKLSAgICAoc2l6ZW9m
IHN0YXRpY19jYXN0PHN0cnVjdE5hbWUqPigwKS0+bWVtYmVyKQotI2RlZmluZSBOT05DTElFTlRN
RVRSSUNTX1NJWkVfUFJFX1ZJU1RBIFwKLSAgICBTSVpFT0ZfU1RSVUNUX1dJVEhfU1BFQ0lGSUVE
X0xBU1RfTUVNQkVSKE5PTkNMSUVOVE1FVFJJQ1MsIGxmTWVzc2FnZUZvbnQpCi0KLS8vIFRocmVh
ZCBtYWluIHRvIHJ1biBmb3IgdGhlIHRocmVhZCB3aGljaCBqdXN0IHRlc3RzIGZvciB0aW1lb3V0
LgotdW5zaWduZWQgaW50IF9fc3RkY2FsbCB3YXRjaERvZ1RocmVhZCh2b2lkKiBhcmcpCi17Ci0g
ICAgLy8gSWYgd2UncmUgZGVidWdnaW5nIGEgbGF5b3V0IHRlc3QsIGRvbid0IHRpbWVvdXQuCi0g
ICAgaWYgKDo6SXNEZWJ1Z2dlclByZXNlbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBU
ZXN0U2hlbGwqIHNoZWxsID0gc3RhdGljX2Nhc3Q8VGVzdFNoZWxsKj4oYXJnKTsKLSAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB1c2VyLXNwZWNpZmllZCB0aW1lIHNldHRpbmdzIGFzIHdpdGggdGhl
IG9yaWdpbmFsCi0gICAgLy8gQ2hyb21pdW0gaW1wbGVtZW50YXRpb24/Ci0gICAgRFdPUkQgdGlt
ZW91dCA9IHN0YXRpY19jYXN0PERXT1JEPihzaGVsbC0+bGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRj
aERvZygpKTsKLSAgICBEV09SRCBydiA9IFdhaXRGb3JTaW5nbGVPYmplY3Qoc2hlbGwtPmZpbmlz
aGVkRXZlbnQoKSwgdGltZW91dCk7Ci0gICAgaWYgKHJ2ID09IFdBSVRfVElNRU9VVCkgewotICAg
ICAgICAvLyBQcmludCBhIHdhcm5pbmcgdG8gYmUgY2F1Z2h0IGJ5IHRoZSBsYXlvdXQtdGVzdCBz
Y3JpcHQuCi0gICAgICAgIC8vIE5vdGU6IHRoZSBsYXlvdXQgdGVzdCBkcml2ZXIgbWF5IG9yIG1h
eSBub3QgcmVjb2duaXplCi0gICAgICAgIC8vIHRoaXMgYXMgYSB0aW1lb3V0LgotICAgICAgICBw
dXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7Ci0gICAgICAgIHB1dHMoIiNFT0ZcbiIpOwotICAg
ICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgVGVybWluYXRlUHJvY2VzcyhHZXRDdXJyZW50
UHJvY2VzcygpLCAwKTsKLSAgICB9Ci0gICAgLy8gRmluaXNoZWQgbm9ybWFsbHkuCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkKLXsKLSAgICBB
U1NFUlQoIW1fdGVzdElzUGVuZGluZyk7Ci0KLSAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwot
Ci0gICAgLy8gQ3JlYXRlIGEgd2F0Y2hkb2cgdGhyZWFkIHdoaWNoIGp1c3Qgc2V0cyBhIHRpbWVy
IGFuZAotICAgIC8vIGtpbGxzIHRoZSBwcm9jZXNzIGlmIGl0IHRpbWVzIG91dC4gVGhpcyBjYXRj
aGVzIHJlYWxseQotICAgIC8vIGJhZCBoYW5ncyB3aGVyZSB0aGUgc2hlbGwgaXNuJ3QgY29taW5n
IGJhY2sgdG8gdGhlCi0gICAgLy8gbWVzc2FnZSBsb29wLiBJZiB0aGUgd2F0Y2hkb2cgaXMgd2hh
dCBjYXRjaGVzIGEKLSAgICAvLyB0aW1lb3V0LCBpdCBjYW4ndCBkbyBhbnl0aGluZyBleGNlcHQg
dGVybWluYXRlIHRoZSB0ZXN0Ci0gICAgLy8gc2hlbGwsIHdoaWNoIGlzIHVuZm9ydHVuYXRlLgot
ICAgIG1fZmluaXNoZWRFdmVudCA9IENyZWF0ZUV2ZW50KDAsIFRSVUUsIEZBTFNFLCAwKTsKLSAg
ICBBU1NFUlQobV9maW5pc2hlZEV2ZW50KTsKLQotICAgIEhBTkRMRSB0aHJlYWRIYW5kbGUgPSBy
ZWludGVycHJldF9jYXN0PEhBTkRMRT4oX2JlZ2ludGhyZWFkZXgoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3YXRjaERvZ1RocmVh
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCkpOwotICAgIEFTU0VSVCh0aHJlYWRIYW5kbGUpOwotCi0gICAgLy8gVGVzdEZp
bmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMgbG9vcCB3aGVu
IHRoZSBwYWdlCi0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3aGlsZSAobV90ZXN0SXNQ
ZW5kaW5nKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsKLQotICAg
IC8vIFRlbGwgdGhlIHdhdGNoZG9nIHRoYXQgd2UgYXJlIGZpbmlzaGVkLgotICAgIFNldEV2ZW50
KG1fZmluaXNoZWRFdmVudCk7Ci0KLSAgICAvLyBXYWl0IHRvIGpvaW4gdGhlIHdhdGNoZG9nIHRo
cmVhZC4gICh1cCB0byAxcywgdGhlbiBxdWl0KQotICAgIFdhaXRGb3JTaW5nbGVPYmplY3QodGhy
ZWFkSGFuZGxlLCAxMDAwKTsKLX0KLQotdm9pZCBwbGF0Zm9ybUluaXQoaW50KiwgY2hhcioqKikK
LXsKLSAgICAvLyBTZXQgc3Rkb3V0L3N0ZGVyciBiaW5hcnkgbW9kZS4KLSAgICBfc2V0bW9kZShf
ZmlsZW5vKHN0ZG91dCksIF9PX0JJTkFSWSk7Ci0gICAgX3NldG1vZGUoX2ZpbGVubyhzdGRlcnIp
LCBfT19CSU5BUlkpOwotCi0gICAgLy8gTG9hZCBBaGVtIGZvbnQuCi0gICAgLy8gQUhFTV9fX18u
VFRGIGlzIGNvcGllZCB0byB0aGUgZGlyZWN0b3J5IG9mIER1bXBSZW5kZXJUcmVlLmV4ZSBieSBX
ZWJLaXQuZ3lwLgotICAgIFdDSEFSIHBhdGhbX01BWF9QQVRIXTsKLSAgICBpZiAoITo6R2V0TW9k
dWxlRmlsZU5hbWUoMCwgcGF0aCwgX01BWF9QQVRIKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkNhbid0IGdldCB0aGUgbW9kdWxlIHBhdGguXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAg
ICB9Ci0gICAgOjpQYXRoUmVtb3ZlRmlsZVNwZWMocGF0aCk7Ci0gICAgd2NzY2F0X3MocGF0aCwg
X01BWF9QQVRILCBMIi9BSEVNX19fXy5UVEYiKTsKLSAgICBzdHJ1Y3QgX3N0YXQgYWhlbVN0YXQ7
Ci0gICAgaWYgKF93c3RhdChwYXRoLCAmYWhlbVN0YXQpID09IC0xKSB7Ci0gICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiQ2FuJ3QgYWNjZXNzOiAnJVMnXG4iLCBwYXRoKTsKLSAgICAgICAgZXhpdCgx
KTsKLSAgICB9Ci0KLSAgICBGSUxFKiBmcCA9IF93Zm9wZW4ocGF0aCwgTCJyYiIpOwotICAgIGlm
ICghZnApIHsKLSAgICAgICAgX3dwZXJyb3IocGF0aCk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAg
fQotICAgIHNpemVfdCBzaXplID0gYWhlbVN0YXQuc3Rfc2l6ZTsKLSAgICBjaGFyKiBmb250QnVm
ZmVyID0gbmV3IGNoYXJbc2l6ZV07Ci0gICAgaWYgKGZyZWFkKGZvbnRCdWZmZXIsIDEsIHNpemUs
IGZwKSAhPSBzaXplKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVhZCB0aGUg
Zm9udDogJyVTJ1xuIiwgcGF0aCk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIGV4aXQo
MSk7Ci0gICAgfQotICAgIGZjbG9zZShmcCk7Ci0gICAgRFdPUkQgbnVtRm9udHMgPSAxOwotICAg
IEhBTkRMRSBmb250SGFuZGxlID0gOjpBZGRGb250TWVtUmVzb3VyY2VFeChmb250QnVmZmVyLCBz
aXplLCAwLCAmbnVtRm9udHMpOwotICAgIGRlbGV0ZVtdIGZvbnRCdWZmZXI7IC8vIE9TIG93bnMg
YSBjb3B5IG9mIHRoZSBidWZmZXIuCi0gICAgaWYgKCFmb250SGFuZGxlKSB7Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIEFoZW0gZm9udDogJyVTJ1xuIiwgcGF0
aCk7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmVs
ZWFzZSB0aGUgZm9udCBleHBsaWNpdGx5LgotfQotCi12b2lkIG9wZW5TdGFydHVwRGlhbG9nKCkK
LXsKLSAgICA6Ok1lc3NhZ2VCb3goMCwgTCJBdHRhY2ggdG8gbWU/IiwgTCJEdW1wUmVuZGVyVHJl
ZSIsIE1CX09LKTsKLX0KLQotYm9vbCBjaGVja0xheW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMo
KQotewotICAgIC8vIFRoaXMgbWV0cmljIHdpbGwgYmUgMTcgd2hlbiBmb250IHNpemUgaXMgIk5v
cm1hbCIuCi0gICAgLy8gVGhlIHNpemUgb2YgZHJvcC1kb3duIG1lbnVzIGRlcGVuZHMgb24gaXQu
Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsU2l6ZSA9IDo6R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZT
Q1JPTEwpOwotICAgIGludCByZXF1aXJlZFZTY3JvbGxTaXplID0gMTc7Ci0gICAgc3RkOjpsaXN0
PHN0ZDo6c3RyaW5nPiBlcnJvcnM7Ci0gICAgaWYgKHZlcnRpY2FsU2Nyb2xsU2l6ZSAhPSByZXF1
aXJlZFZTY3JvbGxTaXplKQotICAgICAgICBlcnJvcnMucHVzaF9iYWNrKCJNdXN0IHVzZSBub3Jt
YWwgc2l6ZSBmb250cyAoOTYgZHBpKS4iKTsKLQotICAgIC8vIENsZWFyVHlwZSBtdXN0IGJlIGRp
c2FibGVkLCBiZWNhdXNlIHRoZSByZW5kZXJpbmcgaXMgdW5wcmVkaWN0YWJsZS4KLSAgICBCT09M
IGZvbnRTbW9vdGhpbmdFbmFibGVkOwotICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dF
VEZPTlRTTU9PVEhJTkcsIDAsICZmb250U21vb3RoaW5nRW5hYmxlZCwgMCk7Ci0gICAgaW50IGZv
bnRTbW9vdGhpbmdUeXBlOwotICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRT
TU9PVEhJTkdUWVBFLCAwLCAmZm9udFNtb290aGluZ1R5cGUsIDApOwotICAgIGlmIChmb250U21v
b3RoaW5nRW5hYmxlZCAmJiAoZm9udFNtb290aGluZ1R5cGUgPT0gRkVfRk9OVFNNT09USElOR0NM
RUFSVFlQRSkpCi0gICAgICAgIGVycm9ycy5wdXNoX2JhY2soIkNsZWFyVHlwZSBtdXN0IGJlIGRp
c2FibGVkLiIpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB3ZSdyZSB1c2luZyB0aGUgZGVmYXVsdCBz
eXN0ZW0gZm9udHMuCi0gICAgT1NWRVJTSU9OSU5GTyB2ZXJzaW9uSW5mbyA9IHswfTsKLSAgICB2
ZXJzaW9uSW5mby5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHZlcnNpb25JbmZvKTsKLSAg
ICA6OkdldFZlcnNpb25FeCgmdmVyc2lvbkluZm8pOwotICAgIGNvbnN0IGJvb2wgaXNWaXN0YU9y
TGF0ZXIgPSAodmVyc2lvbkluZm8uZHdNYWpvclZlcnNpb24gPj0gNik7Ci0gICAgTk9OQ0xJRU5U
TUVUUklDUyBtZXRyaWNzID0gezB9OwotICAgIG1ldHJpY3MuY2JTaXplID0gaXNWaXN0YU9yTGF0
ZXIgPyAoc2l6ZW9mIE5PTkNMSUVOVE1FVFJJQ1MpIDogTk9OQ0xJRU5UTUVUUklDU19TSVpFX1BS
RV9WSVNUQTsKLSAgICBjb25zdCBib29sIHN1Y2Nlc3MgPSAhITo6U3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1MsIG1ldHJpY3MuY2JTaXplLCAmbWV0cmljcywgMCk7
Ci0gICAgQVNTRVJUKHN1Y2Nlc3MpOwotICAgIExPR0ZPTlRXKiBzeXN0ZW1Gb250c1tdID0KLSAg
ICAgICAgeyZtZXRyaWNzLmxmU3RhdHVzRm9udCwgJm1ldHJpY3MubGZNZW51Rm9udCwgJm1ldHJp
Y3MubGZTbUNhcHRpb25Gb250fTsKLSAgICBjb25zdCB3Y2hhcl90KiBjb25zdCByZXF1aXJlZEZv
bnQgPSBpc1Zpc3RhT3JMYXRlciA/IEwiU2Vnb2UgVUkiIDogTCJUYWhvbWEiOwotICAgIGNvbnN0
IGludCByZXF1aXJlZEZvbnRTaXplID0gaXNWaXN0YU9yTGF0ZXIgPyAtMTIgOiAtMTE7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoc3lzdGVtRm9udHMpOyArK2kpIHsKLSAg
ICAgICAgaWYgKHN5c3RlbUZvbnRzW2ldLT5sZkhlaWdodCAhPSByZXF1aXJlZEZvbnRTaXplIHx8
IHdjc2NtcChyZXF1aXJlZEZvbnQsIHN5c3RlbUZvbnRzW2ldLT5sZkZhY2VOYW1lKSkgewotICAg
ICAgICAgICAgZXJyb3JzLnB1c2hfYmFjayhpc1Zpc3RhT3JMYXRlciA/ICJNdXN0IHVzZSBlaXRo
ZXIgdGhlIEFlcm8gb3IgQmFzaWMgdGhlbWUuIiA6ICJNdXN0IHVzZSB0aGUgZGVmYXVsdCBYUCB0
aGVtZSAoTHVuYSkuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghZXJyb3JzLmVtcHR5KCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIs
Ci0gICAgICAgICAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgotICAgICAgICAgICAgICAgICIjIyBMYXlv
dXQgdGVzdCBzeXN0ZW0gZGVwZW5kZW5jaWVzIGNoZWNrIGZhaWxlZC5cbiIKLSAgICAgICAgICAg
ICAgICAiIyNcbiIpOwotICAgICAgICBmb3IgKHN0ZDo6bGlzdDxzdGQ6OnN0cmluZz46Oml0ZXJh
dG9yIGl0ID0gZXJyb3JzLmJlZ2luKCk7IGl0ICE9IGVycm9ycy5lbmQoKTsgKytpdCkKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiIyMgJXNcbiIsIGl0LT5jX3N0cigpKTsKLSAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlcyIsCi0gICAgICAgICAgICAgICAgIiMjXG4iCi0gICAgICAgICAg
ICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjI1xuIik7Ci0gICAgfQotICAgIHJldHVybiBlcnJvcnMuZW1wdHkoKTsK
LX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDEx
LmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsWDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLQotI2luY2x1ZGUgPGZvbnRjb25m
aWcvZm9udGNvbmZpZy5oPgotCi0jaWYgVVNFKEdUSykKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0K
LXZvaWQgb3BlblN0YXJ0dXBEaWFsb2coKQotewotICAgIEd0a1dpZGdldCogZGlhbG9nID0gZ3Rr
X21lc3NhZ2VfZGlhbG9nX25ldygKLSAgICAgICAgMCwgR1RLX0RJQUxPR19NT0RBTCwgR1RLX01F
U1NBR0VfSU5GTywgR1RLX0JVVFRPTlNfT0ssICJBdHRhY2ggdG8gbWU/Iik7Ci0gICAgZ3RrX3dp
bmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCAiRHVtcFJlbmRlclRyZWUiKTsKLSAg
ICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOyAvLyBSdW5zIGEgbmVzdGVkIG1l
c3NhZ2UgbG9vcC4KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKLX0KLQotYm9vbCBj
aGVja0xheW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKQotewotICAgIHJldHVybiB0cnVlOwot
fQotI2VuZGlmIC8vIFVTRShHVEspCi0KLXN0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxl
KEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIp
Ci17Ci0gICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOwotICAgIGlmIChhY2Nlc3MoZm9udCwg
Ul9PSykgPCAwKSB7Ci0gICAgICAgIGZvbnQgPSBwYXRoMjsKLSAgICAgICAgaWYgKGFjY2Vzcyhm
b250LCBSX09LKSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBt
aXNzaW5nICVzIG9yICVzLiBXaXRob3V0IHRoaXMsIHNvbWUgbGF5b3V0IHRlc3RzIG1heSBmYWls
LiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4ICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9yIG1vcmUuXG4iLCBwYXRoMSwgcGF0aDIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghRmNDb25maWdBcHBGb250QWRk
RmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBmb250KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnQpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRj
b25maWcoKQotewotICAgIC8vIFdlIHdpc2ggdG8gbWFrZSB0aGUgbGF5b3V0IHRlc3RzIHJlcHJv
ZHVjYWJsZSB3aXRoIHJlc3BlY3QgdG8gZm9udHMuIFNraWEKLSAgICAvLyB1c2VzIGZvbnRjb25m
aWcgdG8gcmVzb2x2ZSBmb250IGZhbWlseSBuYW1lcyBmcm9tIFdlYktpdCBpbnRvIGFjdHVhbCBm
b250Ci0gICAgLy8gZmlsZXMgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIG1lYW5z
IHRoYXQgZm9udHMgdmFyeSBiYXNlZCBvbiB0aGUKLSAgICAvLyBzeXN0ZW0gYW5kIGFsc28gb24g
dGhlIGZvbnRjb25maWcgY29uZmlndXJhdGlvbi4KLSAgICAvLwotICAgIC8vIFRvIGF2b2lkIHRo
aXMgd2UgaW5pdGlhbGlzZSBmb250Y29uZmlnIGhlcmUgYW5kIGluc3RhbGwgYSBjb25maWd1cmF0
aW9uCi0gICAgLy8gd2hpY2ggb25seSBrbm93cyBhYm91dCBhIGZldywgc2VsZWN0LCBmb250cy4K
LQotICAgIC8vIFdlIGhhdmUgZm9udGNvbmZpZyBwYXJzZSBhIGNvbmZpZyBmaWxlIGZyb20gb3Vy
IHJlc291cmNlcyBmaWxlLiBUaGlzCi0gICAgLy8gc2V0cyBhIG51bWJlciBvZiBhbGlhc2VzICgi
c2FucyItPiJBcmlhbCIgZXRjKSwgYnV0IGRvZXNuJ3QgaW5jbHVkZSBhbnkKLSAgICAvLyBmb250
IGRpcmVjdG9yaWVzLgotICAgIEZjSW5pdCgpOwotCi0gICAgY2hhciBkcnRQYXRoW1BBVEhfTUFY
ICsgMV07Ci0gICAgaW50IGRydFBhdGhTaXplID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwg
ZHJ0UGF0aCwgUEFUSF9NQVgpOwotICAgIGlmIChkcnRQYXRoU2l6ZSA8IDAgfHwgZHJ0UGF0aFNp
emUgPiBQQVRIX01BWCkgewotICAgICAgICBmcHV0cygiVW5hYmxlIHRvIHJlc29sdmUgL3Byb2Mv
c2VsZi9leGUuIiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZHJ0UGF0
aFtkcnRQYXRoU2l6ZV0gPSAwOwotICAgIHN0ZDo6c3RyaW5nIGRydERpclBhdGgoZHJ0UGF0aCk7
Ci0gICAgc2l6ZV90IGxhc3RQYXRoUG9zID0gZHJ0RGlyUGF0aC5yZmluZCgiLyIpOwotICAgIEFT
U0VSVChsYXN0UGF0aFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0gICAgZHJ0RGlyUGF0aC5l
cmFzZShsYXN0UGF0aFBvcyArIDEpOwotCi0gICAgRmNDb25maWcqIGZvbnRjZmcgPSBGY0NvbmZp
Z0NyZWF0ZSgpOwotICAgIHN0ZDo6c3RyaW5nIGZvbnRjb25maWdQYXRoID0gZHJ0RGlyUGF0aCAr
ICJmb250cy5jb25mIjsKLSAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGZvbnRjZmcsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRjb25maWdQYXRoLmNfc3RyKCkpLCB0
cnVlKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHBhcnNlIGZvbnRjb25maWcgY29uZmln
IGZpbGVcbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgLy8gVGhp
cyBpcyB0aGUgbGlzdCBvZiBmb250cyB0aGF0IGZvbnRjb25maWcgd2lsbCBrbm93IGFib3V0LiBJ
dAotICAgIC8vIHdpbGwgdHJ5IGl0cyBiZXN0IHRvIG1hdGNoIGJhc2VkIG9ubHkgb24gdGhlIGZv
bnRzIGhlcmUgaW4uIFRoZQotICAgIC8vIHBhdGhzIGFyZSB3aGVyZSB0aGVzZSBmb250cyBhcmUg
Zm91bmQgb24gb3VyIFVidW50dSBib3hlcy4KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg
Zm9udHNbXSA9IHsKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29j
aGktZ290aGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hp
L2tvY2hpLW1pbmNoby50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0FyaWFsLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfSXRhbGlj
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
Q29taWNfU2Fuc19NUy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVNfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3LnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9s
ZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0NvdXJpZXJfTmV3X0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfSXRhbGljLnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYS50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFf
Qm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0dlb3JnaWFfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0ltcGFjdC50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NUy50
dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1Ry
ZWJ1Y2hldF9NU19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0l0YWxp
Yy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L1RpbWVzX05ld19Sb21hbi50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGRf
SXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvVGltZXNfTmV3X1JvbWFuX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmEudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGQudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0Jv
bGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVmVyZGFuYV9JdGFsaWMudHRmIiwKLSAgICAgICAgLy8gVGhlIERlamFWdVNhbnMg
Zm9udCBpcyB1c2VkIGJ5IHRoZSBjc3MyLjEgdGVzdHMuCi0gICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9oaS50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9s
b2hpdF90YS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5k
aWMtZm9udHMtY29yZS9NdWt0aU5hcnJvdy50dGYiLAotICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhcnJheXNpemUoZm9udHMpOyArK2kpIHsKLSAgICAgICAgaWYgKGFjY2Vzcyhm
b250c1tpXSwgUl9PSykpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBt
aXNzaW5nICVzLiBUcnkgcmUtcnVubmluZyBidWlsZC9pbnN0YWxsLWJ1aWxkLWRlcHMuc2guIEFs
c28gc2VlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9udHNbaV0pOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikg
Zm9udHNbaV0pKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2Fk
IGZvbnQgJXNcbiIsIGZvbnRzW2ldKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoIWNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL3RoYWkvR2FydWRhLnR0ZiIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90bHdnL0dhcnVkYS50dGYiKSkK
LSAgICAgICAgZXhpdCgxKTsKLQotICAgIC8vIFdlIHNwZWNpYWwgY2FzZSB0aGVzZSBmb250cyBi
ZWNhdXNlIHRoZXkncmUgb25seSBuZWVkZWQgaW4gYQotICAgIC8vIGZldyBsYXlvdXQgdGVzdHMu
Ci0gICAgY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfcGEudHRmIiwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLXB1bmphYmktZm9udHMv
bG9oaXRfcGEudHRmIik7Ci0KLSAgICAvLyBBbHNvIGxvYWQgdGhlIGxheW91dC10ZXN0LXNwZWNp
ZmljICJBaGVtIiBmb250LgotICAgIHN0ZDo6c3RyaW5nIGFoZW1QYXRoID0gZHJ0RGlyUGF0aCAr
ICJBSEVNX19fXy5UVEYiOwotICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2Zn
LCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihhaGVtUGF0aC5jX3N0cigpKSkpIHsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBhaGVt
UGF0aC5jX3N0cigpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoIUZjQ29u
ZmlnU2V0Q3VycmVudChmb250Y2ZnKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHNldCB0
aGUgZGVmYXVsdCBmb250IGNvbmZpZ3VyYXRpb25cbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQo
MSk7Ci0gICAgfQotfQotCi12b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJn
dikKLXsKLSAgICAvLyBGSVhNRTogSXQncyBiZXR0ZXIgY2FsbCBndGtfaW5pdCgpIG9ubHkgd2hl
biB3ZSBydW4gcGx1Z2luIHRlc3RzLgotICAgIC8vIFNlZSBodHRwOi8vZ3JvdXBzLmdvb2dsZS5j
b20vYS9jaHJvbWl1bS5vcmcvZ3JvdXAvY2hyb21pdW0tZGV2L2Jyb3dzZV90aHJlYWQvdGhyZWFk
LzYzM2VhMTY3Y2RlMTk2Y2EjCi0jaWYgVVNFKEdUSykKLSAgICBndGtfaW5pdChhcmdjLCBhcmd2
KTsKLSNlbmRpZgotCi0gICAgc2V0dXBGb250Y29uZmlnKCk7Ci19CkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCShyZXZpc2lvbiAxNDc3MDEp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTAwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAy
MDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYlZpZXdIb3N0LmgiCi0KLSNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50
LmgiCi0jaW5jbHVkZSAiVGFzay5oIgotI2luY2x1ZGUgIlRlc3ROYXZpZ2F0aW9uQ29udHJvbGxl
ci5oIgotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotI2luY2x1ZGUgIldlYkNhY2hlZFVSTFJlcXVl
c3QuaCIKLSNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgotI2luY2x1ZGUgIldlYkNvbnRl
eHRNZW51RGF0YS5oIgotI2luY2x1ZGUgIldlYkRPTU1lc3NhZ2VFdmVudC5oIgotI2luY2x1ZGUg
IldlYkRhdGFTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgotI2luY2x1ZGUgIldl
YkVsZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYkhpc3RvcnlJ
dGVtLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViTm9kZS5oIgotI2luY2x1
ZGUgIldlYlBsdWdpblBhcmFtcy5oIgotI2luY2x1ZGUgIldlYlBvcHVwTWVudS5oIgotI2luY2x1
ZGUgIldlYlBvcHVwVHlwZS5oIgotI2luY2x1ZGUgIldlYlByaW50UGFyYW1zLmgiCi0jaW5jbHVk
ZSAiV2ViUmFuZ2UuaCIKLSNpbmNsdWRlICJXZWJTY3JlZW5JbmZvLmgiCi0jaW5jbHVkZSAiV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViVXNlckdlc3R1cmVJbmRpY2F0
b3IuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViV2luZG93RmVhdHVyZXMu
aCIKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC90ZXN0X21lZGlhX3N0cmVhbV9jbGllbnQuaCIK
LSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2luY2x1ZGUgPGNj
dHlwZT4KLSNpbmNsdWRlIDxjbG9jYWxlPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8cHVibGljL1dlYkNvbXBvc2l0b3JPdXRwdXRTdXJmYWNlLmg+Ci0jaW5jbHVk
ZSA8cHVibGljL1dlYkNvbXBvc2l0b3JTdXBwb3J0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYkRy
YWdEYXRhLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJlY3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViU2l6ZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTdG9yYWdlTmFtZXNwYWNlLmg+Ci0jaW5j
bHVkZSA8cHVibGljL1dlYlRocmVhZC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxSZXF1ZXN0
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlc3BvbnNlLmg+Ci0KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2Vi
VGVzdFJ1bm5lcjsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyBjb25zdCBpbnQgc2Ny
ZWVuV2lkdGggPSAxOTIwOwotc3RhdGljIGNvbnN0IGludCBzY3JlZW5IZWlnaHQgPSAxMDgwOwot
c3RhdGljIGNvbnN0IGludCBzY3JlZW5VbmF2YWlsYWJsZUJvcmRlciA9IDg7Ci0KLXN0YXRpYyBp
bnQgbmV4dFBhZ2VJRCA9IDE7Ci0KLS8vIFdlYlZpZXdDbGllbnQgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XZWJWaWV3KiBX
ZWJWaWV3SG9zdDo6Y3JlYXRlVmlldyhXZWJGcmFtZSogY3JlYXRvciwgY29uc3QgV2ViVVJMUmVx
dWVzdCYsIGNvbnN0IFdlYldpbmRvd0ZlYXR1cmVzJiwgY29uc3QgV2ViU3RyaW5nJiwgV2ViTmF2
aWdhdGlvblBvbGljeSkKLXsKLSAgICBXZWJVc2VyR2VzdHVyZUluZGljYXRvcjo6Y29uc3VtZVVz
ZXJHZXN0dXJlKCk7Ci0gICAgcmV0dXJuIG1fc2hlbGwtPmNyZWF0ZU5ld1dpbmRvdyhXZWJVUkwo
KSktPndlYlZpZXcoKTsKLX0KLQotV2ViV2lkZ2V0KiBXZWJWaWV3SG9zdDo6Y3JlYXRlUG9wdXBN
ZW51KFdlYlBvcHVwVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
V2ViS2l0OjpXZWJQb3B1cFR5cGVOb25lOgotICAgIGNhc2UgV2ViS2l0OjpXZWJQb3B1cFR5cGVQ
YWdlOgotICAgIGNhc2UgV2ViS2l0OjpXZWJQb3B1cFR5cGVIZWxwZXJQbHVnaW46Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJQb3B1cFR5cGVTZWxlY3Q6Ci0gICAgY2FzZSBX
ZWJLaXQ6OldlYlBvcHVwVHlwZVN1Z2dlc3Rpb246Ci0gICAgICAgIG1fcG9wdXBtZW51cy5hcHBl
bmQoV2ViUG9wdXBNZW51OjpjcmVhdGUoMCkpOwotICAgICAgICByZXR1cm4gbV9wb3B1cG1lbnVz
Lmxhc3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdlYldpZGdldCogV2ViVmlld0hv
c3Q6OmNyZWF0ZVBvcHVwTWVudShjb25zdCBXZWJQb3B1cE1lbnVJbmZvJikKLXsKLSAgICAvLyBE
byBub3QgdXNlIHRoaXMgbWV0aG9kLiBJdCdzIGJlZW4gcmVwbGFjZWQgYnkgY3JlYXRlRXh0ZXJu
YWxQb3B1cE1lbnUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLVdlYlN0b3JhZ2VOYW1lc3BhY2UqIFdlYlZpZXdIb3N0OjpjcmVhdGVTZXNzaW9uU3RvcmFn
ZU5hbWVzcGFjZSh1bnNpZ25lZCBxdW90YSkKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6
OkNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKHF1b3RhKTsKLX0KLQotdm9pZCBXZWJWaWV3
SG9zdDo6ZGlkQWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJDb25zb2xlTWVzc2FnZSYgbWVz
c2FnZSwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VOYW1lLCB1bnNpZ25lZCBzb3VyY2VMaW5lKQot
ewotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWRTdGFydExvYWRpbmcoKQotewotfQotCi12b2lk
IFdlYlZpZXdIb3N0OjpkaWRTdG9wTG9hZGluZygpCi17Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6
OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2Vi
UmFuZ2UmIHJhbmdlKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZpZXdIb3N0
OjpzaG91bGRJbnNlcnROb2RlKGNvbnN0IFdlYk5vZGUmIG5vZGUsIGNvbnN0IFdlYlJhbmdlJiBy
YW5nZSwgV2ViRWRpdGluZ0FjdGlvbiBhY3Rpb24pCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZEluc2VydFRleHQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0
LCBjb25zdCBXZWJSYW5nZSYgcmFuZ2UsIFdlYkVkaXRpbmdBY3Rpb24gYWN0aW9uKQotewotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYlZpZXdIb3N0OjpzaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKAotICAgIGNvbnN0IFdlYlJhbmdlJiBmcm9tUmFuZ2UsIGNvbnN0IFdlYlJhbmdlJiB0
b1JhbmdlLCBXZWJUZXh0QWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCi17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6OnNob3VsZERlbGV0ZVJh
bmdlKGNvbnN0IFdlYlJhbmdlJiByYW5nZSkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJWaWV3SG9zdDo6c2hvdWxkQXBwbHlTdHlsZShjb25zdCBXZWJTdHJpbmcmIHN0eWxlLCBj
b25zdCBXZWJSYW5nZSYgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
Vmlld0hvc3Q6OmhhbmRsZUN1cnJlbnRLZXlib2FyZEV2ZW50KCkKLXsKLSAgICBpZiAobV9lZGl0
Q29tbWFuZE5hbWUuZW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFdlYkZyYW1l
KiBmcmFtZSA9IHdlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGZyYW1lLT5leGVjdXRlQ29tbWFuZChX
ZWJTdHJpbmc6OmZyb21VVEY4KG1fZWRpdENvbW1hbmROYW1lKSwgV2ViU3RyaW5nOjpmcm9tVVRG
OChtX2VkaXRDb21tYW5kVmFsdWUpKTsKLX0KLQotLy8gV2ViS2l0OjpXZWJQcmVyZW5kZXJlckNs
aWVudAotCi12b2lkIFdlYlZpZXdIb3N0Ojp3aWxsQWRkUHJlcmVuZGVyKFdlYktpdDo6V2ViUHJl
cmVuZGVyKikKLXsKLX0KLQotCi12b2lkIFdlYlZpZXdIb3N0OjpydW5Nb2RhbEFsZXJ0RGlhbG9n
KFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQotewotfQotCi1ib29sIFdlYlZp
ZXdIb3N0OjpydW5Nb2RhbENvbmZpcm1EaWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6OnJ1
bk1vZGFsUHJvbXB0RGlhbG9nKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBtZXNz
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3Ry
aW5nJiBkZWZhdWx0VmFsdWUsIFdlYlN0cmluZyopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgV2ViVmlld0hvc3Q6OnNob3dDb250ZXh0TWVudShXZWJGcmFtZSosIGNvbnN0IFdlYkNv
bnRleHRNZW51RGF0YSYgY29udGV4dE1lbnVEYXRhKQotewotfQotCi12b2lkIFdlYlZpZXdIb3N0
OjpkaWRVcGRhdGVMYXlvdXQoKQotewotI2lmIE9TKE1BQ19PU19YKQotICAgIHN0YXRpYyBib29s
IHF1ZXJ5aW5nUHJlZmVycmVkU2l6ZSA9IGZhbHNlOwotICAgIGlmIChxdWVyeWluZ1ByZWZlcnJl
ZFNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHF1ZXJ5aW5nUHJlZmVycmVkU2l6ZSA9IHRy
dWU7Ci0gICAgLy8gUXVlcnkgcHJlZmVycmVkIHdpZHRoIHRvIGVtdWxhdGUgdGhlIHNhbWUgZnVu
Y3Rpb25hbGl0eSBpbiBDaHJvbWl1bToKLSAgICAvLyBzZWUgUmVuZGVyVmlldzo6Q2hlY2tQcmVm
ZXJyZWRTaXplIChzcmMvY29udGVudC9yZW5kZXJlci9yZW5kZXJfdmlldy5jYykKLSAgICAvLyBh
bmQgVGFiQ29udGVudHNWaWV3TWFjOjpSZW5kZXJWaWV3Q3JlYXRlZCAoc3JjL2Nocm9tZS9icm93
c2VyL3RhYl9jb250ZW50cy90YWJfY29udGVudHNfdmlld19tYWMubW0pCi0gICAgd2ViVmlldygp
LT5tYWluRnJhbWUoKS0+Y29udGVudHNQcmVmZXJyZWRXaWR0aCgpOwotICAgIHdlYlZpZXcoKS0+
bWFpbkZyYW1lKCktPmRvY3VtZW50RWxlbWVudFNjcm9sbEhlaWdodCgpOwotICAgIHF1ZXJ5aW5n
UHJlZmVycmVkU2l6ZSA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6Om5h
dmlnYXRlQmFja0ZvcndhcmRTb29uKGludCBvZmZzZXQpCi17Ci0gICAgbmF2aWdhdGlvbkNvbnRy
b2xsZXIoKS0+Z29Ub09mZnNldChvZmZzZXQpOwotfQotCi1pbnQgV2ViVmlld0hvc3Q6Omhpc3Rv
cnlCYWNrTGlzdENvdW50KCkKLXsKLSAgICByZXR1cm4gbmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+
bGFzdENvbW1pdHRlZEVudHJ5SW5kZXgoKTsKLX0KLQotaW50IFdlYlZpZXdIb3N0OjpoaXN0b3J5
Rm9yd2FyZExpc3RDb3VudCgpCi17Ci0gICAgaW50IGN1cnJlbnRJbmRleCA9bmF2aWdhdGlvbkNv
bnRyb2xsZXIoKS0+bGFzdENvbW1pdHRlZEVudHJ5SW5kZXgoKTsKLSAgICByZXR1cm4gbmF2aWdh
dGlvbkNvbnRyb2xsZXIoKS0+ZW50cnlDb3VudCgpIC0gY3VycmVudEluZGV4IC0gMTsKLX0KLQot
Ly8gV2ViV2lkZ2V0Q2xpZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgV2ViVmlld0hvc3Q6OmRpZEF1dG9SZXNpemUo
Y29uc3QgV2ViU2l6ZSYgbmV3U2l6ZSkKLXsKLSAgICAvLyBQdXJwb3NlbHkgZG9uJ3QgaW5jbHVk
ZSB0aGUgdmlydHVhbFdpbmRvd0JvcmRlciBpbiB0aGlzIGNhc2Ugc28gdGhhdAotICAgIC8vIHdp
bmRvdy5pbm5lcltXaWR0aHxIZWlnaHRdIGlzIHRoZSBzYW1lIGFzIHdpbmRvdy5vdXRlcltXaWR0
aHxIZWlnaHRdCi0gICAgc2V0V2luZG93UmVjdChXZWJSZWN0KDAsIDAsIG5ld1NpemUud2lkdGgs
IG5ld1NpemUuaGVpZ2h0KSk7Ci19Ci0KLWNsYXNzIFdlYlZpZXdIb3N0RFJUTGF5ZXJUcmVlVmll
d0NsaWVudCA6IHB1YmxpYyB3ZWJraXRfc3VwcG9ydDo6RFJUTGF5ZXJUcmVlVmlld0NsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViVmlld0hvc3REUlRMYXllclRyZWVWaWV3Q2xpZW50
KFdlYlZpZXdIb3N0KiBob3N0KQotICAgICAgICA6IG1faG9zdChob3N0KSB7IH0KLSAgICB2aXJ0
dWFsIH5XZWJWaWV3SG9zdERSVExheWVyVHJlZVZpZXdDbGllbnQoKSB7IH0KLQotICAgIHZpcnR1
YWwgdm9pZCBMYXlvdXQoKSB7IG1faG9zdC0+d2ViVmlldygpLT5sYXlvdXQoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBTY2hlZHVsZUNvbXBvc2l0ZSgpIHsgbV9ob3N0LT5wcm94eSgpLT5zY2hlZHVs
ZUNvbXBvc2l0ZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVmlld0hvc3QqIG1faG9zdDsKLX07
Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmluaXRpYWxpemVMYXllclRyZWVWaWV3KCkKLXsKLSAgICBt
X2xheWVyVHJlZVZpZXdDbGllbnQgPSBhZG9wdFB0cihuZXcgV2ViVmlld0hvc3REUlRMYXllclRy
ZWVWaWV3Q2xpZW50KHRoaXMpKTsKLSAgICBpZiAobV9zaGVsbC0+c29mdHdhcmVDb21wb3NpdGlu
Z0VuYWJsZWQoKSkgewotICAgICAgICBtX2xheWVyVHJlZVZpZXcgPSBhZG9wdFB0cih3ZWJraXRf
c3VwcG9ydDo6Q3JlYXRlTGF5ZXJUcmVlVmlldygKLSAgICAgICAgICAgIHdlYmtpdF9zdXBwb3J0
OjpTT0ZUV0FSRV9DT05URVhULAotICAgICAgICAgICAgbV9sYXllclRyZWVWaWV3Q2xpZW50Lmdl
dCgpLAotICAgICAgICAgICAgbV9zaGVsbC0+d2ViQ29tcG9zaXRvclRocmVhZCgpKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9sYXllclRyZWVWaWV3ID0gYWRvcHRQdHIod2Via2l0X3N1cHBv
cnQ6OkNyZWF0ZUxheWVyVHJlZVZpZXcoCi0gICAgICAgICAgICB3ZWJraXRfc3VwcG9ydDo6TUVT
QV9DT05URVhULAotICAgICAgICAgICAgbV9sYXllclRyZWVWaWV3Q2xpZW50LmdldCgpLAotICAg
ICAgICAgICAgbV9zaGVsbC0+d2ViQ29tcG9zaXRvclRocmVhZCgpKSk7Ci0gICAgfQotCi0gICAg
QVNTRVJUKG1fbGF5ZXJUcmVlVmlldyk7Ci0gICAgdXBkYXRlVmlld3BvcnRTaXplKCk7Ci0gICAg
bV9sYXllclRyZWVWaWV3LT5zZXRTdXJmYWNlUmVhZHkoKTsKLX0KLQotV2ViTGF5ZXJUcmVlVmll
dyogV2ViVmlld0hvc3Q6OmxheWVyVHJlZVZpZXcoKQotewotICAgIHJldHVybiBtX2xheWVyVHJl
ZVZpZXcuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNjaGVkdWxlQW5pbWF0aW9uKCkK
LXsKLSAgICBpZiAod2ViVmlldygpLT5zZXR0aW5ncygpLT5zY3JvbGxBbmltYXRvckVuYWJsZWQo
KSkKLSAgICAgICAgd2ViVmlldygpLT5hbmltYXRlKDAuMCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hv
c3Q6OmRpZEZvY3VzKCkKLXsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6ZGlkQmx1cigpCi17Ci19
Ci0KLVdlYlNjcmVlbkluZm8gV2ViVmlld0hvc3Q6OnNjcmVlbkluZm8oKQotewotICAgIC8vIFdl
IGRvbid0IG5lZWQgdG8gc2V0IGFjdHVhbCB2YWx1ZXMuCi0gICAgV2ViU2NyZWVuSW5mbyBpbmZv
OwotICAgIGluZm8uZGVwdGggPSAyNDsKLSAgICBpbmZvLmRlcHRoUGVyQ29tcG9uZW50ID0gODsK
LSAgICBpbmZvLmlzTW9ub2Nocm9tZSA9IGZhbHNlOwotICAgIGluZm8ucmVjdCA9IFdlYlJlY3Qo
MCwgMCwgc2NyZWVuV2lkdGgsIHNjcmVlbkhlaWdodCk7Ci0gICAgLy8gVXNlIHZhbHVlcyBkaWZm
ZXJlbnQgZnJvbSBpbmZvLnJlY3QgZm9yIHRlc3RpbmcuCi0gICAgaW5mby5hdmFpbGFibGVSZWN0
ID0gV2ViUmVjdChzY3JlZW5VbmF2YWlsYWJsZUJvcmRlciwgc2NyZWVuVW5hdmFpbGFibGVCb3Jk
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JlZW5XaWR0aCAtIHNjcmVl
blVuYXZhaWxhYmxlQm9yZGVyICogMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmVlbkhlaWdodCAtIHNjcmVlblVuYXZhaWxhYmxlQm9yZGVyICogMik7Ci0gICAgcmV0dXJu
IGluZm87Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNob3coV2ViTmF2aWdhdGlvblBvbGljeSkK
LXsKLSAgICBtX2hhc1dpbmRvdyA9IHRydWU7Ci19Ci0KLQotCi12b2lkIFdlYlZpZXdIb3N0Ojpj
bG9zZVdpZGdldCgpCi17Ci0gICAgbV9oYXNXaW5kb3cgPSBmYWxzZTsKLSAgICBtX3NoZWxsLT5j
bG9zZVdpbmRvdyh0aGlzKTsKLSAgICAvLyBObyBtb3JlIGNvZGUgaGVyZSwgd2Ugc2hvdWxkIGJl
IGRlbGV0ZWQgYXQgdGhpcyBwb2ludC4KLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6Y2xvc2VXaWRn
ZXRTb29uKCkKLXsKLSAgICBwb3N0RGVsYXllZFRhc2sobmV3IEhvc3RNZXRob2RUYXNrKHRoaXMs
ICZXZWJWaWV3SG9zdDo6Y2xvc2VXaWRnZXQpLCAwKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6
ZGlkQ2hhbmdlQ3Vyc29yKGNvbnN0IFdlYkN1cnNvckluZm8mIGN1cnNvckluZm8pCi17Ci0gICAg
aWYgKCFoYXNXaW5kb3coKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY3VycmVudEN1cnNvciA9
IGN1cnNvckluZm87Ci19Ci0KLVdlYlJlY3QgV2ViVmlld0hvc3Q6OndpbmRvd1JlY3QoKQotewot
ICAgIHJldHVybiBtX3dpbmRvd1JlY3Q7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldFdpbmRv
d1JlY3QoY29uc3QgV2ViUmVjdCYgcmVjdCkKLXsKLSAgICBtX3dpbmRvd1JlY3QgPSByZWN0Owot
ICAgIGNvbnN0IGludCBib3JkZXIyID0gVGVzdFNoZWxsOjp2aXJ0dWFsV2luZG93Qm9yZGVyICog
MjsKLSAgICBpZiAobV93aW5kb3dSZWN0LndpZHRoIDw9IGJvcmRlcjIpCi0gICAgICAgIG1fd2lu
ZG93UmVjdC53aWR0aCA9IDEgKyBib3JkZXIyOwotICAgIGlmIChtX3dpbmRvd1JlY3QuaGVpZ2h0
IDw9IGJvcmRlcjIpCi0gICAgICAgIG1fd2luZG93UmVjdC5oZWlnaHQgPSAxICsgYm9yZGVyMjsK
LSAgICBpbnQgd2lkdGggPSBtX3dpbmRvd1JlY3Qud2lkdGggLSBib3JkZXIyOwotICAgIGludCBo
ZWlnaHQgPSBtX3dpbmRvd1JlY3QuaGVpZ2h0IC0gYm9yZGVyMjsKLSAgICB3ZWJXaWRnZXQoKS0+
cmVzaXplKFdlYlNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgp
OwotfQotCi1XZWJSZWN0IFdlYlZpZXdIb3N0Ojpyb290V2luZG93UmVjdCgpCi17Ci0gICAgcmV0
dXJuIHdpbmRvd1JlY3QoKTsKLX0KLQotV2ViUmVjdCBXZWJWaWV3SG9zdDo6d2luZG93UmVzaXpl
clJlY3QoKQotewotICAgIC8vIE5vdCBuZWNlc3NhcnkuCi0gICAgcmV0dXJuIFdlYlJlY3QoKTsK
LX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6cnVuTW9kYWwoKQotewotICAgIGlmIChtX3NoZWxsLT5p
c0Rpc3BsYXlpbmdNb2RhbERpYWxvZygpKSB7Ci0gICAgICAgIC8vIER1bXBSZW5kZXJUcmVlIGRv
ZXNuJ3Qgc3VwcG9ydCByZWFsIG1vZGFsIGRpYWxvZ3MsIHNvIGEgdGVzdCBzaG91bGRuJ3QgdHJ5
IHRvIHN0YXJ0IHR3byBtb2RhbCBkaWFsb2dzIGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFRoaXMg
V2ViVmlld0hvc3QgbWlnaHQgZ2V0IGRlbGV0ZWQgYmVmb3JlIFJ1bk1lc3NhZ2VMb29wKCkgcmV0
dXJucywgc28ga2VlcCBhIGNvcHkgb2YgdGhlIG1fc2hlbGwgbWVtYmVyIHZhcmlhYmxlIGFyb3Vu
ZC4KLSAgICBBU1NFUlQobV9zaGVsbC0+d2ViVmlld0hvc3QoKSAhPSB0aGlzKTsKLSAgICBUZXN0
U2hlbGwqIHNoZWxsID0gbV9zaGVsbDsKLSAgICBzaGVsbC0+c2V0SXNEaXNwbGF5aW5nTW9kYWxE
aWFsb2codHJ1ZSk7Ci0gICAgYm9vbCBvbGRTdGF0ZSA9IHdlYmtpdF9zdXBwb3J0OjpNZXNzYWdl
TG9vcE5lc3RhYmxlVGFza3NBbGxvd2VkKCk7Ci0gICAgd2Via2l0X3N1cHBvcnQ6Ok1lc3NhZ2VM
b29wU2V0TmVzdGFibGVUYXNrc0FsbG93ZWQodHJ1ZSk7Ci0gICAgbV9pbk1vZGFsTG9vcCA9IHRy
dWU7Ci0gICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7Ci0gICAgd2Via2l0X3N1
cHBvcnQ6Ok1lc3NhZ2VMb29wU2V0TmVzdGFibGVUYXNrc0FsbG93ZWQob2xkU3RhdGUpOwotICAg
IHNoZWxsLT5zZXRJc0Rpc3BsYXlpbmdNb2RhbERpYWxvZyhmYWxzZSk7Ci19Ci0KLWJvb2wgV2Vi
Vmlld0hvc3Q6OmVudGVyRnVsbFNjcmVlbigpCi17Ci0gICAgcG9zdERlbGF5ZWRUYXNrKG5ldyBI
b3N0TWV0aG9kVGFzayh0aGlzLCAmV2ViVmlld0hvc3Q6OmVudGVyRnVsbFNjcmVlbk5vdyksIDAp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpleGl0RnVsbFNjcmVl
bigpCi17Ci0gICAgcG9zdERlbGF5ZWRUYXNrKG5ldyBIb3N0TWV0aG9kVGFzayh0aGlzLCAmV2Vi
Vmlld0hvc3Q6OmV4aXRGdWxsU2NyZWVuTm93KSwgMCk7Ci19Ci0KLS8vIFdlYkZyYW1lQ2xpZW50
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1XZWJQbHVnaW4qIFdlYlZpZXdIb3N0OjpjcmVhdGVQbHVnaW4oV2ViRnJhbWUqIGZy
YW1lLCBjb25zdCBXZWJQbHVnaW5QYXJhbXMmIHBhcmFtcykKLXsKLSAgICByZXR1cm4gd2Via2l0
X3N1cHBvcnQ6OkNyZWF0ZVdlYlBsdWdpbihmcmFtZSwgcGFyYW1zKTsKLX0KLQotV2ViTWVkaWFQ
bGF5ZXIqIFdlYlZpZXdIb3N0OjpjcmVhdGVNZWRpYVBsYXllcihXZWJGcmFtZSogZnJhbWUsIGNv
bnN0IFdlYlVSTCYgdXJsLCBXZWJNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQotewotI2lmIEVO
QUJMRShNRURJQV9TVFJFQU0pCi0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVNZWRp
YVBsYXllcihmcmFtZSwgdXJsLCBjbGllbnQsIHRlc3RNZWRpYVN0cmVhbUNsaWVudCgpKTsKLSNl
bHNlCi0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVNZWRpYVBsYXllcihmcmFtZSwg
dXJsLCBjbGllbnQpOwotI2VuZGlmCi19Ci0KLVdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBXZWJW
aWV3SG9zdDo6Y3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoV2ViRnJhbWUqIGZyYW1lLCBXZWJB
cHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCogY2xpZW50KQotewotICAgIHJldHVybiB3ZWJraXRf
c3VwcG9ydDo6Q3JlYXRlQXBwbGljYXRpb25DYWNoZUhvc3QoZnJhbWUsIGNsaWVudCk7Ci19Ci0K
LXZvaWQgV2ViVmlld0hvc3Q6OmxvYWRVUkxFeHRlcm5hbGx5KFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgV2ViTmF2aWdhdGlvblBvbGljeSBwb2xpY3kpCi17
Ci0gICAgbG9hZFVSTEV4dGVybmFsbHkoZnJhbWUsIHJlcXVlc3QsIHBvbGljeSwgV2ViU3RyaW5n
KCkpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpsb2FkVVJMRXh0ZXJuYWxseShXZWJGcmFtZSos
IGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QsIFdlYk5hdmlnYXRpb25Qb2xpY3kgcG9saWN5
LCBjb25zdCBXZWJTdHJpbmcmIGRvd25sb2FkTmFtZSkKLXsKLSAgICBBU1NFUlQocG9saWN5ICE9
ICBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lDdXJyZW50VGFiKTsKLSAgICBXZWJWaWV3SG9z
dCogYW5vdGhlciA9IG1fc2hlbGwtPmNyZWF0ZU5ld1dpbmRvdyhyZXF1ZXN0LnVybCgpKTsKLSAg
ICBpZiAoYW5vdGhlcikKLSAgICAgICAgYW5vdGhlci0+c2hvdyhwb2xpY3kpOwotfQotCi1XZWJO
YXZpZ2F0aW9uUG9saWN5IFdlYlZpZXdIb3N0OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uKAot
ICAgIFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMUmVxdWVzdCYsCi0gICAgV2ViTmF2aWdhdGlvblR5
cGUsIGNvbnN0IFdlYk5vZGUmLAotICAgIFdlYk5hdmlnYXRpb25Qb2xpY3kgZGVmYXVsdFBvbGlj
eSwgYm9vbCkKLXsKLSAgICByZXR1cm4gZGVmYXVsdFBvbGljeTsKLX0KLQotYm9vbCBXZWJWaWV3
SG9zdDo6Y2FuSGFuZGxlUmVxdWVzdChXZWJGcmFtZSosIGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJl
cXVlc3QpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVdlYlVSTEVycm9yIFdlYlZpZXdIb3N0
OjpjYW5jZWxsZWRFcnJvcihXZWJGcmFtZSosIGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3Qp
Ci17Ci0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpDcmVhdGVDYW5jZWxsZWRFcnJvcihyZXF1
ZXN0KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6dW5hYmxlVG9JbXBsZW1lbnRQb2xpY3lXaXRo
RXJyb3IoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJVUkxFcnJvciYgZXJyb3IpCi17Ci19Ci0K
LXZvaWQgV2ViVmlld0hvc3Q6OmRpZENyZWF0ZURhdGFTb3VyY2UoV2ViRnJhbWUqLCBXZWJEYXRh
U291cmNlKiBkcykKLXsKLSAgICBkcy0+c2V0RXh0cmFEYXRhKG1fcGVuZGluZ0V4dHJhRGF0YS5s
ZWFrUHRyKCkpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWRDb21taXRQcm92aXNpb25hbExv
YWQoV2ViRnJhbWUqIGZyYW1lLCBib29sIGlzTmV3TmF2aWdhdGlvbikKLXsKLSAgICB1cGRhdGVG
b3JDb21taXR0ZWRMb2FkKGZyYW1lLCBpc05ld05hdmlnYXRpb24pOwotfQotCi12b2lkIFdlYlZp
ZXdIb3N0OjpkaWRDbGVhcldpbmRvd09iamVjdChXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgbV9z
aGVsbC0+YmluZEpTT2JqZWN0c1RvV2luZG93KGZyYW1lKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9z
dDo6ZGlkUmVjZWl2ZVRpdGxlKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiB0aXRs
ZSwgV2ViVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgc2V0UGFnZVRpdGxlKHRpdGxl
KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6ZGlkQ2hhbmdlSWNvbihXZWJGcmFtZSogLCBXZWJJ
Y29uVVJMOjpUeXBlKQotewotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpkaWROYXZpZ2F0ZVdpdGhp
blBhZ2UoV2ViRnJhbWUqIGZyYW1lLCBib29sIGlzTmV3TmF2aWdhdGlvbikKLXsKLSAgICBmcmFt
ZS0+ZGF0YVNvdXJjZSgpLT5zZXRFeHRyYURhdGEobV9wZW5kaW5nRXh0cmFEYXRhLmxlYWtQdHIo
KSk7Ci0KLSAgICB1cGRhdGVGb3JDb21taXR0ZWRMb2FkKGZyYW1lLCBpc05ld05hdmlnYXRpb24p
OwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojp3aWxsU2VuZFJlcXVlc3QoV2ViRnJhbWUqIGZyYW1l
LCB1bnNpZ25lZCwgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
KQotewotICAgIGlmIChyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcmVxdWVzdC5zZXRFeHRyYURhdGEod2Via2l0X3N1cHBvcnQ6OkNyZWF0ZVdlYlVSTFJl
cXVlc3RFeHRyYURhdGEoZnJhbWUtPmRvY3VtZW50KCkucmVmZXJyZXJQb2xpY3koKSkpOwotfQot
Ci12b2lkIFdlYlZpZXdIb3N0OjpvcGVuRmlsZVN5c3RlbShXZWJGcmFtZSogZnJhbWUsIFdlYkZp
bGVTeXN0ZW1UeXBlIHR5cGUsIGxvbmcgbG9uZyBzaXplLCBib29sIGNyZWF0ZSwgV2ViRmlsZVN5
c3RlbUNhbGxiYWNrcyogY2FsbGJhY2tzKQotewotICAgIHdlYmtpdF9zdXBwb3J0OjpPcGVuRmls
ZVN5c3RlbShmcmFtZSwgdHlwZSwgc2l6ZSwgY3JlYXRlLCBjYWxsYmFja3MpOwotfQotCi12b2lk
IFdlYlZpZXdIb3N0OjpkZWxldGVGaWxlU3lzdGVtKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBX
ZWJLaXQ6OldlYkZpbGVTeXN0ZW1UeXBlIHR5cGUsIFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxi
YWNrcyogY2FsbGJhY2tzKQotewotICAgIHdlYmtpdF9zdXBwb3J0OjpEZWxldGVGaWxlU3lzdGVt
KGZyYW1lLCB0eXBlLCBjYWxsYmFja3MpOwotfQotCi1ib29sIFdlYlZpZXdIb3N0Ojp3aWxsQ2hl
Y2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChXZWJGcmFtZSogc291cmNlRnJhbWUsIFdlYkZyYW1l
KiB0YXJnZXRGcmFtZSwgV2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBXZWJET01NZXNzYWdlRXZl
bnQgZXZlbnQpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBXZWJUZXN0RGVsZWdhdGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldEVkaXRDb21tYW5kKGNvbnN0IHN0cmluZyYgbmFt
ZSwgY29uc3Qgc3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBtX2VkaXRDb21tYW5kTmFtZSA9IG5hbWU7
Ci0gICAgbV9lZGl0Q29tbWFuZFZhbHVlID0gdmFsdWU7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6
OmNsZWFyRWRpdENvbW1hbmQoKQotewotICAgIG1fZWRpdENvbW1hbmROYW1lLmNsZWFyKCk7Ci0g
ICAgbV9lZGl0Q29tbWFuZFZhbHVlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNl
dEdhbWVwYWREYXRhKGNvbnN0IFdlYkdhbWVwYWRzJiBwYWRzKQotewotICAgIHdlYmtpdF9zdXBw
b3J0OjpTZXRHYW1lcGFkRGF0YShwYWRzKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6cHJpbnRN
ZXNzYWdlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKQotewotICAgIHByaW50ZigiJXMiLCBt
ZXNzYWdlLmNfc3RyKCkpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpwb3N0VGFzayhXZWJUYXNr
KiB0YXNrKQotewotICAgIDo6cG9zdFRhc2sodGFzayk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6
OnBvc3REZWxheWVkVGFzayhXZWJUYXNrKiB0YXNrLCBsb25nIGxvbmcgbXMpCi17Ci0gICAgOjpw
b3N0RGVsYXllZFRhc2sodGFzaywgbXMpOwotfQotCi1XZWJTdHJpbmcgV2ViVmlld0hvc3Q6OnJl
Z2lzdGVySXNvbGF0ZWRGaWxlU3lzdGVtKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBhYnNv
bHV0ZUZpbGVuYW1lcykKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVySXNv
bGF0ZWRGaWxlU3lzdGVtKGFic29sdXRlRmlsZW5hbWVzKTsKLX0KLQotbG9uZyBsb25nIFdlYlZp
ZXdIb3N0OjpnZXRDdXJyZW50VGltZUluTWlsbGlzZWNvbmQoKQotewotICAgIHJldHVybiB3ZWJr
aXRfc3VwcG9ydDo6R2V0Q3VycmVudFRpbWVJbk1pbGxpc2Vjb25kKCk7Ci19Ci0KLVdlYktpdDo6
V2ViU3RyaW5nIFdlYlZpZXdIb3N0OjpnZXRBYnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4UGF0aChj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6Okdl
dEFic29sdXRlV2ViU3RyaW5nRnJvbVVURjhQYXRoKHBhdGgpOwotfQotCi1XZWJVUkwgV2ViVmll
d0hvc3Q6OmxvY2FsRmlsZVRvRGF0YVVSTChjb25zdCBXZWJLaXQ6OldlYlVSTCYgdXJsKQotewot
ICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6TG9jYWxGaWxlVG9EYXRhVVJMKHVybCk7Ci19Ci0K
LVdlYlVSTCBXZWJWaWV3SG9zdDo6cmV3cml0ZUxheW91dFRlc3RzVVJMKGNvbnN0IHN0ZDo6c3Ry
aW5nJiB1cmwpCi17Ci0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpSZXdyaXRlTGF5b3V0VGVz
dHNVUkwodXJsKTsKLX0KLQotV2ViUHJlZmVyZW5jZXMqIFdlYlZpZXdIb3N0OjpwcmVmZXJlbmNl
cygpCi17Ci0gICAgcmV0dXJuIG1fc2hlbGwtPnByZWZlcmVuY2VzKCk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld0hvc3Q6OmFwcGx5UHJlZmVyZW5jZXMoKQotewotICAgIG1fc2hlbGwtPmFwcGx5UHJlZmVy
ZW5jZXMoKTsKLX0KLQotc3RkOjpzdHJpbmcgV2ViVmlld0hvc3Q6Om1ha2VVUkxFcnJvckRlc2Ny
aXB0aW9uKGNvbnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImIGVycm9yKQotewotICAgIHJldHVybiB3
ZWJraXRfc3VwcG9ydDo6TWFrZVVSTEVycm9yRGVzY3JpcHRpb24oZXJyb3IpOwotfQotCi12b2lk
IFdlYlZpZXdIb3N0OjpzaG93RGV2VG9vbHMoKQotewotICAgIG1fc2hlbGwtPnNob3dEZXZUb29s
cygpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpjbG9zZURldlRvb2xzKCkKLXsKLSAgICBtX3No
ZWxsLT5jbG9zZURldlRvb2xzKCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHQpCi17Ci0g
ICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNBZ2VudCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNh
bGxJRCwgc2NyaXB0KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6Y2xlYXJBbGxEYXRhYmFzZXMo
KQotewotICAgIHdlYmtpdF9zdXBwb3J0OjpDbGVhckFsbERhdGFiYXNlcygpOwotfQotCi12b2lk
IFdlYlZpZXdIb3N0OjpzZXREYXRhYmFzZVF1b3RhKGludCBxdW90YSkKLXsKLSAgICB3ZWJraXRf
c3VwcG9ydDo6U2V0RGF0YWJhc2VRdW90YShxdW90YSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6
OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIHdl
YlZpZXcoKS0+c2V0RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIHVw
ZGF0ZVZpZXdwb3J0U2l6ZSgpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpzZXRGb2N1cyhXZWJU
ZXN0UHJveHlCYXNlKiBwcm94eSwgYm9vbCBmb2N1c2VkKQotewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9zaGVsbC0+d2luZG93TGlzdCgpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX3NoZWxsLT53aW5kb3dMaXN0KClbaV0tPnByb3h5KCkgPT0gcHJveHkpCi0gICAgICAgICAg
ICBtX3NoZWxsLT5zZXRGb2N1cyhtX3NoZWxsLT53aW5kb3dMaXN0KClbaV0tPndlYldpZGdldCgp
LCBmb2N1c2VkKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldEFjY2VwdEFsbENv
b2tpZXMoYm9vbCBhY2NlcHRDb29raWVzKQotewotICAgIHdlYmtpdF9zdXBwb3J0OjpTZXRBY2Nl
cHRBbGxDb29raWVzKGFjY2VwdENvb2tpZXMpOwotfQotCi1zdHJpbmcgV2ViVmlld0hvc3Q6OnBh
dGhUb0xvY2FsUmVzb3VyY2UoY29uc3Qgc3RyaW5nJiB1cmwpCi17Ci0jaWYgT1MoV0lORE9XUykK
LSAgICBpZiAoIXVybC5maW5kKCIvdG1wLyIpKSB7Ci0gICAgICAgIC8vIFdlIHdhbnQgYSB0ZW1w
IGZpbGUuCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHRlbXBQcmVmaXhMZW5ndGggPSA1OwotICAg
ICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IE1BWF9QQVRIOwotICAgICAgICBPd25BcnJheVB0cjxX
Q0hBUj4gdGVtcFBhdGggPSBhZG9wdEFycmF5UHRyKG5ldyBXQ0hBUltidWZmZXJTaXplXSk7Ci0g
ICAgICAgIERXT1JEIHRlbXBMZW5ndGggPSA6OkdldFRlbXBQYXRoVyhidWZmZXJTaXplLCB0ZW1w
UGF0aC5nZXQoKSk7Ci0gICAgICAgIGlmICh0ZW1wTGVuZ3RoICsgdXJsLmxlbmd0aCgpIC0gdGVt
cFByZWZpeExlbmd0aCArIDEgPiBidWZmZXJTaXplKSB7Ci0gICAgICAgICAgICBidWZmZXJTaXpl
ID0gdGVtcExlbmd0aCArIHVybC5sZW5ndGgoKSAtIHRlbXBQcmVmaXhMZW5ndGggKyAxOwotICAg
ICAgICAgICAgdGVtcFBhdGggPSBhZG9wdEFycmF5UHRyKG5ldyBXQ0hBUltidWZmZXJTaXplXSk7
Ci0gICAgICAgICAgICB0ZW1wTGVuZ3RoID0gR2V0VGVtcFBhdGhXKGJ1ZmZlclNpemUsIHRlbXBQ
YXRoLmdldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVCh0ZW1wTGVuZ3RoIDwgYnVmZmVyU2l6ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3RyaW5nIHJlc3VsdFBhdGgoV2ViU3RyaW5nKHRlbXBQYXRo
LmdldCgpLCB0ZW1wTGVuZ3RoKS51dGY4KCkpOwotICAgICAgICByZXN1bHRQYXRoLmFwcGVuZCh1
cmwuc3Vic3RyKHRlbXBQcmVmaXhMZW5ndGgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBTb21lIGxheW91dCB0ZXN0cyB1c2UgZmlsZTovLy8v
IHdoaWNoIHdlIHJlc29sdmUgYXMgYSBVTkMgcGF0aC4gTm9ybWFsaXplCi0gICAgLy8gdGhlbSB0
byBqdXN0IGZpbGU6Ly8vLgotICAgIHN0cmluZyBsb3dlclVybCA9IHVybDsKLSAgICBzdHJpbmcg
cmVzdWx0ID0gdXJsOwotICAgIHRyYW5zZm9ybShsb3dlclVybC5iZWdpbigpLCBsb3dlclVybC5l
bmQoKSwgbG93ZXJVcmwuYmVnaW4oKSwgOjp0b2xvd2VyKTsKLSAgICB3aGlsZSAoIWxvd2VyVXJs
LmZpbmQoImZpbGU6Ly8vLyIpKSB7Ci0gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHIoMCwg
OCkgKyByZXN1bHQuc3Vic3RyKDkpOwotICAgICAgICBsb3dlclVybCA9IGxvd2VyVXJsLnN1YnN0
cigwLCA4KSArIGxvd2VyVXJsLnN1YnN0cig5KTsKLSAgICB9Ci0gICAgcmV0dXJuIHdlYmtpdF9z
dXBwb3J0OjpSZXdyaXRlTGF5b3V0VGVzdHNVUkwocmVzdWx0KS5zcGVjKCk7Ci19Ci0KLXZvaWQg
V2ViVmlld0hvc3Q6OnNldExvY2FsZShjb25zdCBzdGQ6OnN0cmluZyYgbG9jYWxlKQotewotICAg
IHNldGxvY2FsZShMQ19BTEwsIGxvY2FsZS5jX3N0cigpKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9z
dDo6dGVzdEZpbmlzaGVkKCkKLXsKLSAgICBtX3NoZWxsLT50ZXN0RmluaXNoZWQodGhpcyk7Ci19
Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnRlc3RUaW1lZE91dCgpCi17Ci0gICAgbV9zaGVsbC0+dGVz
dFRpbWVkT3V0KCk7Ci19Ci0KLWJvb2wgV2ViVmlld0hvc3Q6OmlzQmVpbmdEZWJ1Z2dlZCgpCi17
Ci0gICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpCZWluZ0RlYnVnZ2VkKCk7Ci19Ci0KLWludCBX
ZWJWaWV3SG9zdDo6bGF5b3V0VGVzdFRpbWVvdXQoKQotewotICAgIHJldHVybiBtX3NoZWxsLT5s
YXlvdXRUZXN0VGltZW91dCgpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0OjpjbG9zZVJlbWFpbmlu
Z1dpbmRvd3MoKQotewotICAgIG1fc2hlbGwtPmNsb3NlUmVtYWluaW5nV2luZG93cygpOwotfQot
Ci1pbnQgV2ViVmlld0hvc3Q6Om5hdmlnYXRpb25FbnRyeUNvdW50KCkKLXsKLSAgICByZXR1cm4g
bV9zaGVsbC0+bmF2aWdhdGlvbkVudHJ5Q291bnQoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6
Z29Ub09mZnNldChpbnQgb2Zmc2V0KQotewotICAgIG1fc2hlbGwtPmdvVG9PZmZzZXQob2Zmc2V0
KTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6cmVsb2FkKCkKLXsKLSAgICBtX3NoZWxsLT5yZWxv
YWQoKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6bG9hZFVSTEZvckZyYW1lKGNvbnN0IFdlYlVS
TCYgdXJsLCBjb25zdCBzdHJpbmcmIGZyYW1lTmFtZSkKLXsKLSAgICBpZiAoIXVybC5pc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBUZXN0U2hlbGw6OnJlc2l6ZVdpbmRvd0ZvclRlc3Qo
dGhpcywgdXJsKTsKLSAgICBuYXZpZ2F0aW9uQ29udHJvbGxlcigpLT5sb2FkRW50cnkoVGVzdE5h
dmlnYXRpb25FbnRyeTo6Y3JlYXRlKC0xLCB1cmwsIFdlYlN0cmluZygpLCBXZWJTdHJpbmc6OmZy
b21VVEY4KGZyYW1lTmFtZSkpLmdldCgpKTsKLX0KLQotYm9vbCBXZWJWaWV3SG9zdDo6YWxsb3dF
eHRlcm5hbFBhZ2VzKCkKLXsKLSAgICByZXR1cm4gbV9zaGVsbC0+YWxsb3dFeHRlcm5hbFBhZ2Vz
KCk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KFdlYlRl
c3RQcm94eUJhc2UqIHByb3h5LCBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+KiBoaXN0b3J5LCBz
aXplX3QqIGN1cnJlbnRFbnRyeUluZGV4KQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9zaGVsbC0+d2luZG93TGlzdCgpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3NoZWxs
LT53aW5kb3dMaXN0KClbaV0tPnByb3h5KCkgPT0gcHJveHkpCi0gICAgICAgICAgICBtX3NoZWxs
LT5jYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhpLCBoaXN0b3J5LCBjdXJyZW50RW50cnlJbmRleCk7
Ci0gICAgfQotfQotCi0vLyBQdWJsaWMgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdlYlZpZXdIb3N0OjpXZWJW
aWV3SG9zdChUZXN0U2hlbGwqIHNoZWxsKQotICAgIDogbV9zaGVsbChzaGVsbCkKLSAgICAsIG1f
cHJveHkoMCkKLSAgICAsIG1fd2ViV2lkZ2V0KDApCi0gICAgLCBtX3NodXRkb3duV2FzSW52b2tl
ZChmYWxzZSkKLXsKLSAgICByZXNldCgpOwotfQotCi1XZWJWaWV3SG9zdDo6fldlYlZpZXdIb3N0
KCkKLXsKLSAgICBBU1NFUlQobV9zaHV0ZG93bldhc0ludm9rZWQpOwotICAgIGlmIChtX2luTW9k
YWxMb29wKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UXVpdE1lc3NhZ2VMb29wKCk7Ci19Ci0K
LXZvaWQgV2ViVmlld0hvc3Q6OnNodXRkb3duKCkKLXsKLSAgICBBU1NFUlQoIW1fc2h1dGRvd25X
YXNJbnZva2VkKTsKLQotICAgIC8vIERldlRvb2xzIGZyb250ZW5kIHBhZ2UgaXMgc3VwcG9zZWQg
dG8gYmUgbmF2aWdhdGVkIG9ubHkgb25jZSBhbmQKLSAgICAvLyBsb2FkaW5nIGFub3RoZXIgVVJM
IGluIHRoYXQgUGFnZSBpcyBhbiBlcnJvci4KLSAgICBpZiAobV9zaGVsbC0+ZGV2VG9vbHNXZWJW
aWV3KCkgIT0gdGhpcykgewotICAgICAgICAvLyBOYXZpZ2F0ZSB0byBhbiBlbXB0eSBwYWdlIHRv
IGZpcmUgYWxsIHRoZSBkZXN0cnVjdGlvbiBsb2dpYyBmb3IgdGhlCi0gICAgICAgIC8vIGN1cnJl
bnQgcGFnZS4KLSAgICAgICAgbG9hZFVSTEZvckZyYW1lKEdVUkwoImFib3V0OmJsYW5rIiksIHN0
cmluZygpKTsKLSAgICB9Ci0KLSAgICBmb3IgKFZlY3RvcjxXZWJLaXQ6OldlYldpZGdldCo+Ojpp
dGVyYXRvciBpdCA9IG1fcG9wdXBtZW51cy5iZWdpbigpOwotICAgICAgICAgaXQgPCBtX3BvcHVw
bWVudXMuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT5jbG9zZSgpOwotCi0gICAgd2ViV2lk
Z2V0KCktPndpbGxDbG9zZUxheWVyVHJlZVZpZXcoKTsKLSAgICBtX2xheWVyVHJlZVZpZXcuY2xl
YXIoKTsKLSAgICB3ZWJXaWRnZXQoKS0+Y2xvc2UoKTsKLSAgICBtX3dlYldpZGdldCA9IDA7Ci0g
ICAgbV9zaHV0ZG93bldhc0ludm9rZWQgPSB0cnVlOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpz
ZXRXZWJXaWRnZXQoV2ViS2l0OjpXZWJXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBtX3dlYldpZGdl
dCA9IHdpZGdldDsKLSAgICB3ZWJWaWV3KCktPnNldFNwZWxsQ2hlY2tDbGllbnQocHJveHkoKS0+
c3BlbGxDaGVja0NsaWVudCgpKTsKLSAgICB3ZWJWaWV3KCktPnNldFByZXJlbmRlcmVyQ2xpZW50
KHRoaXMpOwotfQotCi1XZWJWaWV3KiBXZWJWaWV3SG9zdDo6d2ViVmlldygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKG1fd2ViV2lkZ2V0KTsKLSAgICAvLyBEUlQgZG9lcyBub3Qgc3VwcG9ydCBwb3B1
cCB3aWRnZXRzLiBTbyBtX3dlYldpZGdldCBpcyBhbHdheXMgYSBXZWJWaWV3LgotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJWaWV3Kj4obV93ZWJXaWRnZXQpOwotfQotCi1XZWJXaWRnZXQqIFdl
YlZpZXdIb3N0Ojp3ZWJXaWRnZXQoKSBjb25zdAotewotICAgIEFTU0VSVChtX3dlYldpZGdldCk7
Ci0gICAgcmV0dXJuIG1fd2ViV2lkZ2V0OwotfQotCi1XZWJUZXN0UHJveHlCYXNlKiBXZWJWaWV3
SG9zdDo6cHJveHkoKSBjb25zdAotewotICAgIEFTU0VSVChtX3Byb3h5KTsKLSAgICByZXR1cm4g
bV9wcm94eTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6c2V0UHJveHkoV2ViVGVzdFByb3h5QmFz
ZSogcHJveHkpCi17Ci0gICAgQVNTRVJUKCFtX3Byb3h5KTsKLSAgICBBU1NFUlQocHJveHkpOwot
ICAgIG1fcHJveHkgPSBwcm94eTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6cmVzZXQoKQotewot
ICAgIG1fcGFnZUlkID0gLTE7Ci0gICAgbV9sYXN0UGFnZUlkVXBkYXRlZCA9IC0xOwotICAgIG1f
aGFzV2luZG93ID0gZmFsc2U7Ci0gICAgbV9pbk1vZGFsTG9vcCA9IGZhbHNlOwotCi0gICAgbV9u
YXZpZ2F0aW9uQ29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBUZXN0TmF2aWdhdGlvbkNvbnRyb2xs
ZXIodGhpcykpOwotCi0gICAgbV9wZW5kaW5nRXh0cmFEYXRhLmNsZWFyKCk7Ci0gICAgbV9lZGl0
Q29tbWFuZE5hbWUuY2xlYXIoKTsKLSAgICBtX2VkaXRDb21tYW5kVmFsdWUuY2xlYXIoKTsKLQot
ICAgIG1fY3VycmVudEN1cnNvciA9IFdlYkN1cnNvckluZm8oKTsKLSAgICBtX3dpbmRvd1JlY3Qg
PSBXZWJSZWN0KCk7Ci0gICAgLy8gbV9wcm94eSBpcyBub3Qgc2V0IHdoZW4gcmVzZXQoKSBpcyBp
bnZva2VkIGZyb20gdGhlIGNvbnN0cnVjdG9yLgotICAgIGlmIChtX3Byb3h5KQotICAgICAgICBw
cm94eSgpLT5yZXNldCgpOwotCi0gICAgaWYgKG1fd2ViV2lkZ2V0KSB7Ci0gICAgICAgIHdlYlZp
ZXcoKS0+bWFpbkZyYW1lKCktPnNldE5hbWUoV2ViU3RyaW5nKCkpOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJWaWV3SG9zdDo6c2V0Q2xpZW50V2luZG93UmVjdChjb25zdCBXZWJLaXQ6OldlYlJlY3Qm
IHJlY3QpCi17Ci0gICAgc2V0V2luZG93UmVjdChyZWN0KTsKLX0KLQotYm9vbCBXZWJWaWV3SG9z
dDo6bmF2aWdhdGUoY29uc3QgVGVzdE5hdmlnYXRpb25FbnRyeSYgZW50cnksIGJvb2wgcmVsb2Fk
KQotewotICAgIC8vIEdldCB0aGUgcmlnaHQgdGFyZ2V0IGZyYW1lIGZvciB0aGUgZW50cnkuCi0g
ICAgV2ViRnJhbWUqIGZyYW1lID0gd2ViVmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIWVu
dHJ5LnRhcmdldEZyYW1lKCkuaXNFbXB0eSgpKQotICAgICAgICBmcmFtZSA9IHdlYlZpZXcoKS0+
ZmluZEZyYW1lQnlOYW1lKGVudHJ5LnRhcmdldEZyYW1lKCkpOwotCi0gICAgLy8gVE9ETyhtcGNv
bXBsZXRlKTogc2hvdWxkIHdlIGNsZWFyIHRoZSB0YXJnZXQgZnJhbWUsIG9yIHNob3VsZAotICAg
IC8vIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9ucyBtYWludGFpbiB0aGUgdGFyZ2V0IGZyYW1lPwot
Ci0gICAgLy8gQSBuYXZpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIGxvYWRpbmcgYSBqYXZhc2NyaXB0
IFVSTCBzaG91bGQgbm90IGJlCi0gICAgLy8gdHJlYXRlZCBhcyBhIGJyb3dzZXIgaW5pdGlhdGVk
IGV2ZW50LiBJbnN0ZWFkLCB3ZSB3YW50IGl0IHRvIGxvb2sgYXMgaWYKLSAgICAvLyB0aGUgcGFn
ZSBpbml0aWF0ZWQgYW55IGxvYWQgcmVzdWx0aW5nIGZyb20gSlMgZXhlY3V0aW9uLgotICAgIGlm
ICghR1VSTChlbnRyeS5VUkwoKSkuU2NoZW1lSXMoImphdmFzY3JpcHQiKSkKLSAgICAgICAgc2V0
UGVuZGluZ0V4dHJhRGF0YShhZG9wdFB0cihuZXcgVGVzdFNoZWxsRXh0cmFEYXRhKGVudHJ5LnBh
Z2VJRCgpKSkpOwotCi0gICAgLy8gSWYgd2UgYXJlIHJlbG9hZGluZywgdGhlbiBXZWJLaXQgd2ls
bCB1c2UgdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHBhZ2UuCi0gICAgLy8gT3RoZXJ3aXNlLCB3
ZSBnaXZlIGl0IHRoZSBzdGF0ZSB0byBuYXZpZ2F0ZSB0by4KLSAgICBpZiAocmVsb2FkKSB7Ci0g
ICAgICAgIGZyYW1lLT5yZWxvYWQoZmFsc2UpOwotICAgIH0gZWxzZSBpZiAoIWVudHJ5LmNvbnRl
bnRTdGF0ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIEFTU0VSVChlbnRyeS5wYWdlSUQoKSAhPSAt
MSk7Ci0gICAgICAgIGZyYW1lLT5sb2FkSGlzdG9yeUl0ZW0oZW50cnkuY29udGVudFN0YXRlKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChlbnRyeS5wYWdlSUQoKSA9PSAtMSk7Ci0g
ICAgICAgIGZyYW1lLT5sb2FkUmVxdWVzdChXZWJVUkxSZXF1ZXN0KGVudHJ5LlVSTCgpKSk7Ci0g
ICAgfQotCi0gICAgLy8gSW4gY2FzZSBMb2FkUmVxdWVzdCBmYWlsZWQgYmVmb3JlIERpZENyZWF0
ZURhdGFTb3VyY2Ugd2FzIGNhbGxlZC4KLSAgICBzZXRQZW5kaW5nRXh0cmFEYXRhKG51bGxwdHIp
OwotCi0gICAgLy8gUmVzdG9yZSBmb2N1cyB0byB0aGUgbWFpbiBmcmFtZSBwcmlvciB0byBsb2Fk
aW5nIG5ldyByZXF1ZXN0LgotICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHdlIGRvbid0IGhh
dmUgYSBmb2N1c2VkIGlmcmFtZS4gT3RoZXJ3aXNlLCB0aGF0Ci0gICAgLy8gaWZyYW1lIHdvdWxk
IGtlZXAgZm9jdXMgd2hlbiB0aGUgU2V0Rm9jdXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyCi0g
ICAgLy8gTG9hZFJlcXVlc3QsIHRodXMgbWFraW5nIHNvbWUgdGVzdHMgZmFpbCAoc2VlIGh0dHA6
Ly9iL2lzc3VlP2lkPTg0NTMzNwotICAgIC8vIGZvciBtb3JlIGRldGFpbHMpLgotICAgIHdlYlZp
ZXcoKS0+c2V0Rm9jdXNlZEZyYW1lKGZyYW1lKTsKLSAgICBtX3NoZWxsLT5zZXRGb2N1cyh3ZWJW
aWV3KCksIHRydWUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFByaXZhdGUgZnVuY3Rp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotdm9pZCBXZWJWaWV3SG9zdDo6dXBkYXRlRm9yQ29tbWl0dGVkTG9hZChXZWJGcmFt
ZSogZnJhbWUsIGJvb2wgaXNOZXdOYXZpZ2F0aW9uKQotewotICAgIC8vIENvZGUgZHVwbGljYXRl
ZCBmcm9tIFJlbmRlclZpZXc6OkRpZENvbW1pdExvYWRGb3JGcmFtZS4KLSAgICBUZXN0U2hlbGxF
eHRyYURhdGEqIGV4dHJhRGF0YSA9IHN0YXRpY19jYXN0PFRlc3RTaGVsbEV4dHJhRGF0YSo+KGZy
YW1lLT5kYXRhU291cmNlKCktPmV4dHJhRGF0YSgpKTsKLSAgICBjb25zdCBXZWJVUkwmIHVybCA9
IGZyYW1lLT5kYXRhU291cmNlKCktPnJlcXVlc3QoKS51cmwoKTsKLSAgICBib29sIG5vbkJsYW5r
UGFnZUFmdGVyUmVzZXQgPSBtX3BhZ2VJZCA9PSAtMSAmJiAhdXJsLmlzRW1wdHkoKSAmJiBzdHJj
bXAodXJsLnNwZWMoKS5kYXRhKCksICJhYm91dDpibGFuayIpOwotCi0gICAgaWYgKGlzTmV3TmF2
aWdhdGlvbiB8fCBub25CbGFua1BhZ2VBZnRlclJlc2V0KSB7Ci0gICAgICAgIC8vIE5ldyBuYXZp
Z2F0aW9uLgotICAgICAgICB1cGRhdGVTZXNzaW9uSGlzdG9yeShmcmFtZSk7Ci0gICAgICAgIG1f
cGFnZUlkID0gbmV4dFBhZ2VJRCsrOwotICAgIH0gZWxzZSBpZiAoZXh0cmFEYXRhICYmIGV4dHJh
RGF0YS0+cGVuZGluZ1BhZ2VJRCAhPSAtMSAmJiAhZXh0cmFEYXRhLT5yZXF1ZXN0Q29tbWl0dGVk
KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBzdWNjZXNzZnVsIHNlc3Npb24gaGlzdG9yeSBuYXZp
Z2F0aW9uIQotICAgICAgICB1cGRhdGVTZXNzaW9uSGlzdG9yeShmcmFtZSk7Ci0gICAgICAgIG1f
cGFnZUlkID0gZXh0cmFEYXRhLT5wZW5kaW5nUGFnZUlEOwotICAgIH0KLQotICAgIC8vIERvbid0
IHVwZGF0ZSBzZXNzaW9uIGhpc3RvcnkgbXVsdGlwbGUgdGltZXMuCi0gICAgaWYgKGV4dHJhRGF0
YSkKLSAgICAgICAgZXh0cmFEYXRhLT5yZXF1ZXN0Q29tbWl0dGVkID0gdHJ1ZTsKLQotICAgIHVw
ZGF0ZVVSTChmcmFtZSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnVwZGF0ZVVSTChXZWJGcmFt
ZSogZnJhbWUpCi17Ci0gICAgV2ViRGF0YVNvdXJjZSogZHMgPSBmcmFtZS0+ZGF0YVNvdXJjZSgp
OwotICAgIEFTU0VSVChkcyk7Ci0gICAgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCA9IGRz
LT5yZXF1ZXN0KCk7Ci0gICAgUmVmUHRyPFRlc3ROYXZpZ2F0aW9uRW50cnk+IGVudHJ5KFRlc3RO
YXZpZ2F0aW9uRW50cnk6OmNyZWF0ZSgpKTsKLQotICAgIC8vIFRoZSByZWZlcnJlciB3aWxsIGJl
IGVtcHR5IG9uIGh0dHBzLT5odHRwIHRyYW5zaXRpb25zLiBJdAotICAgIC8vIHdvdWxkIGJlIG5p
Y2UgaWYgd2UgY291bGQgZ2V0IHRoZSByZWFsIHJlZmVycmVyIGZyb20gc29tZXdoZXJlLgotICAg
IGVudHJ5LT5zZXRQYWdlSUQobV9wYWdlSWQpOwotICAgIGlmIChkcy0+aGFzVW5yZWFjaGFibGVV
UkwoKSkKLSAgICAgICAgZW50cnktPnNldFVSTChkcy0+dW5yZWFjaGFibGVVUkwoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBlbnRyeS0+c2V0VVJMKHJlcXVlc3QudXJsKCkpOwotCi0gICAgY29uc3Qg
V2ViSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtID0gZnJhbWUtPmN1cnJlbnRIaXN0b3J5SXRlbSgp
OwotICAgIGlmICghaGlzdG9yeUl0ZW0uaXNOdWxsKCkpCi0gICAgICAgIGVudHJ5LT5zZXRDb250
ZW50U3RhdGUoaGlzdG9yeUl0ZW0pOwotCi0gICAgbmF2aWdhdGlvbkNvbnRyb2xsZXIoKS0+ZGlk
TmF2aWdhdGVUb0VudHJ5KGVudHJ5LmdldCgpKTsKLSAgICBtX2xhc3RQYWdlSWRVcGRhdGVkID0g
bWF4KG1fbGFzdFBhZ2VJZFVwZGF0ZWQsIG1fcGFnZUlkKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9z
dDo6dXBkYXRlU2Vzc2lvbkhpc3RvcnkoV2ViRnJhbWUqIGZyYW1lKQotewotICAgIC8vIElmIHdl
IGhhdmUgYSB2YWxpZCBwYWdlIElEIGF0IHRoaXMgcG9pbnQsIHRoZW4gaXQgY29ycmVzcG9uZHMg
dG8gdGhlIHBhZ2UKLSAgICAvLyB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20uIE90aGVyd2lz
ZSwgdGhpcyBpcyB0aGUgZmlyc3QgbmF2aWdhdGlvbiwgc28KLSAgICAvLyB0aGVyZSBpcyBubyBw
YXN0IHNlc3Npb24gaGlzdG9yeSB0byByZWNvcmQuCi0gICAgaWYgKG1fcGFnZUlkID09IC0xKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBUZXN0TmF2aWdhdGlvbkVudHJ5KiBlbnRyeSA9IG5hdmln
YXRpb25Db250cm9sbGVyKCktPmVudHJ5V2l0aFBhZ2VJRChtX3BhZ2VJZCk7Ci0gICAgaWYgKCFl
bnRyeSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgV2ViSGlzdG9yeUl0ZW0mIGhpc3Rv
cnlJdGVtID0gd2ViVmlldygpLT5tYWluRnJhbWUoKS0+cHJldmlvdXNIaXN0b3J5SXRlbSgpOwot
ICAgIGlmIChoaXN0b3J5SXRlbS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW50
cnktPnNldENvbnRlbnRTdGF0ZShoaXN0b3J5SXRlbSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6
OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCi17Ci0gICAgaWYgKCFtX2xheWVyVHJlZVZpZXcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFdlYlNpemUgZGV2aWNlVmlld3BvcnRTaXplKHdlYldpZGdldCgp
LT5zaXplKCkud2lkdGggKiB3ZWJWaWV3KCktPmRldmljZVNjYWxlRmFjdG9yKCksCi0gICAgICAg
IHdlYldpZGdldCgpLT5zaXplKCkuaGVpZ2h0ICogd2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKLSAgICBtX2xheWVyVHJlZVZpZXctPnNldFZpZXdwb3J0U2l6ZSh3ZWJXaWRnZXQoKS0+
c2l6ZSgpLCBkZXZpY2VWaWV3cG9ydFNpemUpOwotfQotCi12b2lkIFdlYlZpZXdIb3N0Ojpwcmlu
dEZyYW1lRGVzY3JpcHRpb24oV2ViRnJhbWUqIHdlYmZyYW1lKQotewotICAgIHN0cmluZyBuYW1l
OCA9IHdlYmZyYW1lLT51bmlxdWVOYW1lKCkudXRmOCgpOwotICAgIGlmICh3ZWJmcmFtZSA9PSB3
ZWJWaWV3KCktPm1haW5GcmFtZSgpKSB7Ci0gICAgICAgIGlmICghbmFtZTgubGVuZ3RoKCkpIHsK
LSAgICAgICAgICAgIGZwdXRzKCJtYWluIGZyYW1lIiwgc3Rkb3V0KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIm1haW4gZnJhbWUgXCIlc1wiIiwgbmFt
ZTguY19zdHIoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFuYW1lOC5sZW5n
dGgoKSkgewotICAgICAgICBmcHV0cygiZnJhbWUgKGFub255bW91cykiLCBzdGRvdXQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIHByaW50ZigiZnJhbWUgXCIlc1wiIiwgbmFtZTguY19z
dHIoKSk7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldFBlbmRpbmdFeHRyYURhdGEoUGFzc093
blB0cjxUZXN0U2hlbGxFeHRyYURhdGE+IGV4dHJhRGF0YSkKLXsKLSAgICBtX3BlbmRpbmdFeHRy
YURhdGEgPSBleHRyYURhdGE7Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OnNldFBhZ2VUaXRsZShj
b25zdCBXZWJTdHJpbmcmKQotewotICAgIC8vIE5vdGhpbmcgdG8gZG8gaW4gbGF5b3V0IHRlc3Qu
Ci19Ci0KLXZvaWQgV2ViVmlld0hvc3Q6OmVudGVyRnVsbFNjcmVlbk5vdygpCi17Ci0gICAgd2Vi
VmlldygpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAgd2ViVmlldygpLT5kaWRFbnRlckZ1
bGxTY3JlZW4oKTsKLX0KLQotdm9pZCBXZWJWaWV3SG9zdDo6ZXhpdEZ1bGxTY3JlZW5Ob3coKQot
ewotICAgIHdlYlZpZXcoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Ci0gICAgd2ViVmlldygpLT5k
aWRFeGl0RnVsbFNjcmVlbigpOwotfQotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLXdlYmtp
dF9zdXBwb3J0OjpUZXN0TWVkaWFTdHJlYW1DbGllbnQqIFdlYlZpZXdIb3N0Ojp0ZXN0TWVkaWFT
dHJlYW1DbGllbnQoKQotewotICAgIGlmICghbV90ZXN0TWVkaWFTdHJlYW1DbGllbnQuZ2V0KCkp
Ci0gICAgICAgIG1fdGVzdE1lZGlhU3RyZWFtQ2xpZW50ID0gYWRvcHRQdHIobmV3IHdlYmtpdF9z
dXBwb3J0OjpUZXN0TWVkaWFTdHJlYW1DbGllbnQoKSk7Ci0gICAgcmV0dXJuIG1fdGVzdE1lZGlh
U3RyZWFtQ2xpZW50LmdldCgpOwotfQotI2VuZGlmCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFdlYlZpZXdIb3N0X2gKLSNkZWZpbmUgV2ViVmlld0hvc3RfaAot
Ci0jaW5jbHVkZSAiVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViQ3Vy
c29ySW5mby5oIgotI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViUHJl
cmVuZGVyZXJDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSAiV2ViVGVz
dERlbGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViVGVzdFByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmll
d0NsaWVudC5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJGaWxlU3lzdGVtVHlwZS5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLWNsYXNzIFNr
Q2FudmFzOwotY2xhc3MgVGVzdFNoZWxsOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdl
YkZyYW1lOwotY2xhc3MgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotY2xhc3MgV2ViU2hhcmVk
V29ya2VyQ2xpZW50OwotY2xhc3MgV2ViVVJMOwotc3RydWN0IFdlYlJlY3Q7Ci1zdHJ1Y3QgV2Vi
VVJMRXJyb3I7Ci1zdHJ1Y3QgV2ViV2luZG93RmVhdHVyZXM7Ci19Ci0KLW5hbWVzcGFjZSB3ZWJr
aXRfc3VwcG9ydCB7Ci1jbGFzcyBEUlRMYXllclRyZWVWaWV3Q2xpZW50OwotY2xhc3MgTWVkaWFT
dHJlYW1VdGlsOwotY2xhc3MgVGVzdE1lZGlhU3RyZWFtQ2xpZW50OwotfQotCi1uYW1lc3BhY2Ug
V2ViVGVzdFJ1bm5lciB7Ci1jbGFzcyBXZWJUZXN0UnVubmVyOwotfQotCi1jbGFzcyBXZWJWaWV3
SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZy
YW1lQ2xpZW50LCBwdWJsaWMgTmF2aWdhdGlvbkhvc3QsIHB1YmxpYyBXZWJLaXQ6OldlYlByZXJl
bmRlcmVyQ2xpZW50LCBwdWJsaWMgV2ViVGVzdFJ1bm5lcjo6V2ViVGVzdERlbGVnYXRlIHsKLSBw
dWJsaWM6Ci0gICAgV2ViVmlld0hvc3QoVGVzdFNoZWxsKik7Ci0gICAgdmlydHVhbCB+V2ViVmll
d0hvc3QoKTsKLSAgICB2b2lkIHNodXRkb3duKCk7Ci0gICAgdm9pZCBzZXRXZWJXaWRnZXQoV2Vi
S2l0OjpXZWJXaWRnZXQqKTsKLSAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKSBjb25zdDsK
LSAgICBXZWJLaXQ6OldlYldpZGdldCogd2ViV2lkZ2V0KCkgY29uc3Q7Ci0gICAgV2ViVGVzdFJ1
bm5lcjo6V2ViVGVzdFByb3h5QmFzZSogcHJveHkoKSBjb25zdDsKLSAgICB2b2lkIHNldFByb3h5
KFdlYlRlc3RSdW5uZXI6OldlYlRlc3RQcm94eUJhc2UqKTsKLSAgICB2b2lkIHJlc2V0KCk7Ci0g
ICAgdm9pZCBzZXRQZW5kaW5nRXh0cmFEYXRhKFBhc3NPd25QdHI8VGVzdFNoZWxsRXh0cmFEYXRh
Pik7Ci0KLSAgICBUZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIqIG5hdmlnYXRpb25Db250cm9sbGVy
KCkgeyByZXR1cm4gbV9uYXZpZ2F0aW9uQ29udHJvbGxlci5nZXQoKTsgfQotCi0gICAgdm9pZCBj
bG9zZVdpZGdldCgpOwotCi0gICAgLy8gV2ViVGVzdERlbGVnYXRlLgotICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGl0Q29tbWFuZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJp
bmcmIHZhbHVlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJFZGl0Q29tbWFuZCgp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRHYW1lcGFkRGF0YShjb25zdCBXZWJLaXQ6
OldlYkdhbWVwYWRzJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHByaW50TWVzc2FnZShj
b25zdCBzdGQ6OnN0cmluZyYgbWVzc2FnZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBv
c3RUYXNrKFdlYlRlc3RSdW5uZXI6OldlYlRhc2sqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcG9zdERlbGF5ZWRUYXNrKFdlYlRlc3RSdW5uZXI6OldlYlRhc2sqLCBsb25nIGxvbmcgbXMp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgcmVnaXN0ZXJJc29sYXRl
ZEZpbGVTeXN0ZW0oY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+JiBh
YnNvbHV0ZUZpbGVuYW1lcykgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBsb25nIGxvbmcgZ2V0Q3Vy
cmVudFRpbWVJbk1pbGxpc2Vjb25kKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJLaXQ6Oldl
YlN0cmluZyBnZXRBYnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4UGF0aChjb25zdCBzdGQ6OnN0cmlu
ZyYgcGF0aCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlVSTCBsb2NhbEZpbGVU
b0RhdGFVUkwoY29uc3QgV2ViS2l0OjpXZWJVUkwmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViVVJMIHJld3JpdGVMYXlvdXRUZXN0c1VSTChjb25zdCBzdGQ6OnN0cmluZyYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgV2ViVGVzdFJ1bm5lcjo6V2ViUHJlZmVyZW5jZXMqIHByZWZl
cmVuY2VzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5UHJlZmVyZW5jZXMoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHN0ZDo6c3RyaW5nIG1ha2VVUkxFcnJvckRlc2NyaXB0aW9u
KGNvbnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2xpZW50V2luZG93UmVjdChjb25zdCBXZWJLaXQ6OldlYlJlY3QmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2hvd0RldlRvb2xzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IGNsb3NlRGV2VG9vbHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGVJbldl
Ykluc3BlY3Rvcihsb25nLCBjb25zdCBzdGQ6OnN0cmluZyYpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhckFsbERhdGFiYXNlcygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXREYXRhYmFzZVF1b3RhKGludCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldERldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
V2ViVGVzdFJ1bm5lcjo6V2ViVGVzdFByb3h5QmFzZSosIGJvb2wpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRBY2NlcHRBbGxDb29raWVzKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgc3RkOjpzdHJpbmcgcGF0aFRvTG9jYWxSZXNvdXJjZShjb25zdCBzdGQ6OnN0cmluZyYgdXJs
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TG9jYWxlKGNvbnN0IHN0ZDo6c3RyaW5n
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHRlc3RGaW5pc2hlZCgpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCB0ZXN0VGltZWRPdXQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNCZWluZ0RlYnVnZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbGF5b3V0VGVz
dFRpbWVvdXQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW1haW5pbmdXaW5k
b3dzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbmF2aWdhdGlvbkVudHJ5Q291bnQoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ29Ub09mZnNldChpbnQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCByZWxvYWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFVS
TEZvckZyYW1lKGNvbnN0IFdlYktpdDo6V2ViVVJMJiwgY29uc3Qgc3RkOjpzdHJpbmcmIGZyYW1l
TmFtZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGFsbG93RXh0ZXJuYWxQYWdlcygpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBjYXB0dXJlSGlzdG9yeUZvcldpbmRvdyhXZWJUZXN0
UnVubmVyOjpXZWJUZXN0UHJveHlCYXNlKiwgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJI
aXN0b3J5SXRlbT4qLCBzaXplX3QqIGN1cnJlbnRFbnRyeUluZGV4KSBPVkVSUklERTsKLQotICAg
IC8vIE5hdmlnYXRpb25Ib3N0Ci0gICAgdmlydHVhbCBib29sIG5hdmlnYXRlKGNvbnN0IFRlc3RO
YXZpZ2F0aW9uRW50cnkmLCBib29sIHJlbG9hZCk7Ci0KLSAgICAvLyBXZWJLaXQ6OldlYlByZXJl
bmRlcmVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxBZGRQcmVyZW5kZXIoV2ViS2l0OjpX
ZWJQcmVyZW5kZXIqKSBPVkVSUklERTsKLQotICAgIC8vIFdlYktpdDo6V2ViVmlld0NsaWVudAot
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJWaWV3KiBjcmVhdGVWaWV3KFdlYktpdDo6V2ViRnJhbWUq
LCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmLCBjb25zdCBXZWJLaXQ6OldlYldpbmRvd0Zl
YXR1cmVzJiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Q
b2xpY3kpOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJXaWRnZXQqIGNyZWF0ZVBvcHVwTWVudShX
ZWJLaXQ6OldlYlBvcHVwVHlwZSk7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYldpZGdldCogY3Jl
YXRlUG9wdXBNZW51KGNvbnN0IFdlYktpdDo6V2ViUG9wdXBNZW51SW5mbyYpOwotICAgIHZpcnR1
YWwgV2ViS2l0OjpXZWJTdG9yYWdlTmFtZXNwYWNlKiBjcmVhdGVTZXNzaW9uU3RvcmFnZU5hbWVz
cGFjZSh1bnNpZ25lZCBxdW90YSk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEFkZE1lc3NhZ2VUb0Nv
bnNvbGUoY29uc3QgV2ViS2l0OjpXZWJDb25zb2xlTWVzc2FnZSYsIGNvbnN0IFdlYktpdDo6V2Vi
U3RyaW5nJiBzb3VyY2VOYW1lLCB1bnNpZ25lZCBzb3VyY2VMaW5lKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkU3RhcnRMb2FkaW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFN0b3BMb2FkaW5nKCk7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJLaXQ6OldlYlJh
bmdlJik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgV2ViS2l0OjpX
ZWJSYW5nZSYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnROb2RlKGNvbnN0IFdlYktp
dDo6V2ViTm9kZSYsIGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmLCBXZWJLaXQ6OldlYkVkaXRpbmdB
Y3Rpb24pOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdlYktpdDo6
V2ViU3RyaW5nJiwgY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYsIFdlYktpdDo6V2ViRWRpdGluZ0Fj
dGlvbik7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3Qg
V2ViS2l0OjpXZWJSYW5nZSYgZnJvbSwgY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYgdG8sIFdlYktp
dDo6V2ViVGV4dEFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkRGVsZXRlUmFuZ2UoY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYpOwotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRBcHBseVN0eWxlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzdHlsZSwg
Y29uc3QgV2ViS2l0OjpXZWJSYW5nZSYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDdXJyZW50
S2V5Ym9hcmRFdmVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbEFsZXJ0RGlhbG9nKFdl
YktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYpOwotICAgIHZpcnR1YWwg
Ym9vbCBydW5Nb2RhbENvbmZpcm1EaWFsb2coV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJik7Ci0gICAgdmlydHVhbCBib29sIHJ1bk1vZGFsUHJvbXB0RGlhbG9nKFdl
YktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV2ViS2l0OjpXZWJTdHJpbmcqIGFjdHVh
bFZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KFdlYktpdDo6V2ViRnJh
bWUqLCBjb25zdCBXZWJLaXQ6OldlYkNvbnRleHRNZW51RGF0YSYpOwotICAgIHZpcnR1YWwgdm9p
ZCBkaWRVcGRhdGVMYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGVCYWNrRm9yd2Fy
ZFNvb24oaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBpbnQgaGlzdG9yeUJhY2tMaXN0Q291bnQo
KTsKLSAgICB2aXJ0dWFsIGludCBoaXN0b3J5Rm9yd2FyZExpc3RDb3VudCgpOwotCi0gICAgLy8g
V2ViS2l0OjpXZWJXaWRnZXRDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQXV0b1Jlc2l6ZShj
b25zdCBXZWJLaXQ6OldlYlNpemUmIG5ld1NpemUpOwotICAgIHZpcnR1YWwgdm9pZCBpbml0aWFs
aXplTGF5ZXJUcmVlVmlldygpOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJMYXllclRyZWVWaWV3
KiBsYXllclRyZWVWaWV3KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZvY3VzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEJsdXIo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ3Vyc29yKGNvbnN0IFdlYktpdDo6V2ViQ3Vy
c29ySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZVdpZGdldFNvb24oKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2hvdyhXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kpOwotICAgIHZpcnR1YWwg
dm9pZCBydW5Nb2RhbCgpOwotICAgIHZpcnR1YWwgYm9vbCBlbnRlckZ1bGxTY3JlZW4oKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2Vi
UmVjdCB3aW5kb3dSZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3Qg
V2ViS2l0OjpXZWJSZWN0Jik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlJlY3Qgcm9vdFdpbmRv
d1JlY3QoKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUmVjdCB3aW5kb3dSZXNpemVyUmVjdCgp
OwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTY3JlZW5JbmZvIHNjcmVlbkluZm8oKTsKLQotICAg
IC8vIFdlYktpdDo6V2ViRnJhbWVDbGllbnQKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUGx1Z2lu
KiBjcmVhdGVQbHVnaW4oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2lu
UGFyYW1zJik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYk1lZGlhUGxheWVyKiBjcmVhdGVNZWRp
YVBsYXllcihXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBXZWJLaXQ6
OldlYk1lZGlhUGxheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYkFwcGxpY2F0
aW9uQ2FjaGVIb3N0KiBjcmVhdGVBcHBsaWNhdGlvbkNhY2hlSG9zdChXZWJLaXQ6OldlYkZyYW1l
KiwgV2ViS2l0OjpXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudCopOwotICAgIHZpcnR1YWwg
dm9pZCBsb2FkVVJMRXh0ZXJuYWxseShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpX
ZWJVUkxSZXF1ZXN0JiwgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5KTsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFVSTEV4dGVybmFsbHkoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6
V2ViVVJMUmVxdWVzdCYsIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeSwgY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIGRvd25sb2FkTmFtZSk7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYk5hdmln
YXRpb25Qb2xpY3kgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbigKLSAgICAgICAgV2ViS2l0OjpX
ZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVxdWVzdCYsCi0gICAgICAgIFdlYktpdDo6
V2ViTmF2aWdhdGlvblR5cGUsIGNvbnN0IFdlYktpdDo6V2ViTm9kZSYsCi0gICAgICAgIFdlYktp
dDo6V2ViTmF2aWdhdGlvblBvbGljeSwgYm9vbCBpc1JlZGlyZWN0KTsKLSAgICB2aXJ0dWFsIGJv
b2wgY2FuSGFuZGxlUmVxdWVzdChXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJV
UkxSZXF1ZXN0Jik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlVSTEVycm9yIGNhbmNlbGxlZEVy
cm9yKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdW5hYmxlVG9JbXBsZW1lbnRQb2xpY3lXaXRoRXJyb3IoV2ViS2l0OjpX
ZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ3JlYXRlRGF0YVNvdXJjZShXZWJLaXQ6OldlYkZyYW1lKiwgV2ViS2l0OjpXZWJEYXRhU291
cmNlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJLaXQ6
OldlYkZyYW1lKiwgYm9vbCBpc05ld05hdmlnYXRpb24pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRD
bGVhcldpbmRvd09iamVjdChXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVUaXRsZShXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcm
LCBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJ
Y29uKFdlYktpdDo6V2ViRnJhbWUqICwgV2ViS2l0OjpXZWJJY29uVVJMOjpUeXBlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkTmF2aWdhdGVXaXRoaW5QYWdlKFdlYktpdDo6V2ViRnJhbWUqLCBib29s
IGlzTmV3TmF2aWdhdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJL
aXQ6OldlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
JiwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVu
RmlsZVN5c3RlbShXZWJLaXQ6OldlYkZyYW1lKiwgV2ViS2l0OjpXZWJGaWxlU3lzdGVtVHlwZSwg
bG9uZyBsb25nIHNpemUsIGJvb2wgY3JlYXRlLCBXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFj
a3MqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRmlsZVN5c3RlbShXZWJLaXQ6OldlYkZyYW1l
KiwgV2ViS2l0OjpXZWJGaWxlU3lzdGVtVHlwZSwgV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJh
Y2tzKik7Ci0gICAgdmlydHVhbCBib29sIHdpbGxDaGVja0FuZERpc3BhdGNoTWVzc2FnZUV2ZW50
KAotICAgICAgICBXZWJLaXQ6OldlYkZyYW1lKiBzb3VyY2VGcmFtZSwgV2ViS2l0OjpXZWJGcmFt
ZSogdGFyZ2V0RnJhbWUsIAotICAgICAgICBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luIHRhcmdl
dCwgV2ViS2l0OjpXZWJET01NZXNzYWdlRXZlbnQpOwotCi0gICAgLy8gUGVuZGluZyB0YXNrIGxp
c3QsIE5vdGUgdGFodCB0aGUgbWV0aG9kIGlzIHJlZmVycmVkIGZyb20gV2ViTWV0aG9kVGFzayBj
bGFzcy4KLSAgICBXZWJUZXN0UnVubmVyOjpXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVy
biAmbV90YXNrTGlzdDsgfQotCi0gICAgLy8gRXhwb3NlZCBmb3IgV2ViVGVzdFByb3h5LgotICAg
IHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KLQotcHJpdmF0ZToKLQotICAgIGNsYXNzIEhv
c3RNZXRob2RUYXNrIDogcHVibGljIFdlYlRlc3RSdW5uZXI6OldlYk1ldGhvZFRhc2s8V2ViVmll
d0hvc3Q+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdm9pZCAoV2ViVmlld0hvc3Q6
OipDYWxsYmFja01ldGhvZFR5cGUpKCk7Ci0gICAgICAgIEhvc3RNZXRob2RUYXNrKFdlYlZpZXdI
b3N0KiBvYmplY3QsIENhbGxiYWNrTWV0aG9kVHlwZSBjYWxsYmFjaykKLSAgICAgICAgICAgIDog
V2ViVGVzdFJ1bm5lcjo6V2ViTWV0aG9kVGFzazxXZWJWaWV3SG9zdD4ob2JqZWN0KQotICAgICAg
ICAgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICAgICB7IH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgKG1fb2JqZWN0LT4qbV9jYWxsYmFjaykoKTsgfQotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgQ2FsbGJhY2tNZXRob2RUeXBlIG1fY2FsbGJhY2s7Ci0gICAg
fTsKLQotICAgIC8vIENhbGxlZCB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UgY2hhbmdlcy4KLSAgICAv
LyBDYW4gYmUgdXNlZCB0byB1cGRhdGUgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cuCi0gICAgdm9p
ZCBzZXRQYWdlVGl0bGUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLQotICAgIHZvaWQgZW50
ZXJGdWxsU2NyZWVuTm93KCk7Ci0gICAgdm9pZCBleGl0RnVsbFNjcmVlbk5vdygpOwotCi0gICAg
dm9pZCB1cGRhdGVGb3JDb21taXR0ZWRMb2FkKFdlYktpdDo6V2ViRnJhbWUqLCBib29sIGlzTmV3
TmF2aWdhdGlvbik7Ci0gICAgdm9pZCB1cGRhdGVVUkwoV2ViS2l0OjpXZWJGcmFtZSopOwotICAg
IHZvaWQgdXBkYXRlU2Vzc2lvbkhpc3RvcnkoV2ViS2l0OjpXZWJGcmFtZSopOwotCi0gICAgLy8g
RHVtcGluZyBhIGZyYW1lIHRvIHRoZSBjb25zb2xlLgotICAgIHZvaWQgcHJpbnRGcmFtZURlc2Ny
aXB0aW9uKFdlYktpdDo6V2ViRnJhbWUqKTsKLQotICAgIGJvb2wgaGFzV2luZG93KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNXaW5kb3c7IH0KLQotICAgIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIHdlYmtpdF9zdXBwb3J0OjpUZXN0TWVk
aWFTdHJlYW1DbGllbnQqIHRlc3RNZWRpYVN0cmVhbUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICAv
LyBOb24tb3duaW5nIHBvaW50ZXIuIFRoZSBXZWJWaWV3SG9zdCBpbnN0YW5jZSBpcyBvd25lZCBi
eSB0aGlzIFRlc3RTaGVsbCBpbnN0YW5jZS4KLSAgICBUZXN0U2hlbGwqIG1fc2hlbGw7Ci0KLSAg
ICAvLyBOb24tb3duaW5nIHBvaW50ZXIuIFRoaXMgY2xhc3MgbmVlZHMgdG8gYmUgd3JhcHBlZCBp
biBhIFdlYlRlc3RQcm94eS4gVGhpcyBpcyB0aGUgcG9pbnRlciB0byB0aGUgV2ViVGVzdFByb3h5
QmFzZS4KLSAgICBXZWJUZXN0UnVubmVyOjpXZWJUZXN0UHJveHlCYXNlKiBtX3Byb3h5OwotCi0g
ICAgLy8gVGhpcyBkZWxlZ2F0ZSB3b3JrcyBmb3IgdGhlIGZvbGxvd2luZyB3aWRnZXQuCi0gICAg
V2ViS2l0OjpXZWJXaWRnZXQqIG1fd2ViV2lkZ2V0OwotCi0gICAgLy8gRm9yIHRyYWNraW5nIHNl
c3Npb24gaGlzdG9yeS4gU2VlIFJlbmRlclZpZXcuCi0gICAgaW50IG1fcGFnZUlkOwotICAgIGlu
dCBtX2xhc3RQYWdlSWRVcGRhdGVkOwotCi0gICAgT3duUHRyPFRlc3RTaGVsbEV4dHJhRGF0YT4g
bV9wZW5kaW5nRXh0cmFEYXRhOwotCi0gICAgV2ViS2l0OjpXZWJDdXJzb3JJbmZvIG1fY3VycmVu
dEN1cnNvcjsKLQotICAgIGJvb2wgbV9oYXNXaW5kb3c7Ci0gICAgYm9vbCBtX2luTW9kYWxMb29w
OwotCi0gICAgYm9vbCBtX3NodXRkb3duV2FzSW52b2tlZDsKLQotICAgIFdlYktpdDo6V2ViUmVj
dCBtX3dpbmRvd1JlY3Q7Ci0KLSAgICAvLyBFZGl0IGNvbW1hbmQgYXNzb2NpYXRlZCB0byB0aGUg
Y3VycmVudCBrZXlib2FyZCBldmVudC4KLSAgICBzdGQ6OnN0cmluZyBtX2VkaXRDb21tYW5kTmFt
ZTsKLSAgICBzdGQ6OnN0cmluZyBtX2VkaXRDb21tYW5kVmFsdWU7Ci0KLQotICAgIE93blB0cjxX
ZWJLaXQ6OldlYkNvbnRleHRNZW51RGF0YT4gbV9sYXN0Q29udGV4dE1lbnVEYXRhOwotCi0KLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIE93blB0cjx3ZWJraXRfc3VwcG9ydDo6VGVzdE1l
ZGlhU3RyZWFtQ2xpZW50PiBtX3Rlc3RNZWRpYVN0cmVhbUNsaWVudDsKLSNlbmRpZgotCi0gICAg
T3duUHRyPFRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlcj4gbV9uYXZpZ2F0aW9uQ29udHJvbGxlcjsK
LQotICAgIFdlYlRlc3RSdW5uZXI6OldlYlRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0gICAgVmVjdG9y
PFdlYktpdDo6V2ViV2lkZ2V0Kj4gbV9wb3B1cG1lbnVzOwotCi0gICAgT3duUHRyPHdlYmtpdF9z
dXBwb3J0OjpEUlRMYXllclRyZWVWaWV3Q2xpZW50PiBtX2xheWVyVHJlZVZpZXdDbGllbnQ7Ci0g
ICAgT3duUHRyPFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldz4gbV9sYXllclRyZWVWaWV3OwotfTsK
LQotI2VuZGlmIC8vIFdlYlZpZXdIb3N0X2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL2FuZHJvaWRfZmFsbGJhY2tfZm9udHMueG1sCShyZXZpc2lv
biAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9hbmRyb2lkX2ZhbGxi
YWNrX2ZvbnRzLnhtbAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGZhbWlseXNldD4KLSAgICA8ZmFtaWx5Pgot
ICAgICAgICA8ZmlsZXNldD4KLSAgICAgICAgICAgIDxmaWxlPkRlamFWdVNhbnMudHRmPC9maWxl
PgotICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0gICAgPGZhbWlseT4KLSAgICAg
ICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5rb2NoaS1taW5jaG8udHRmPC9maWxlPgot
ICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0gICAgPGZhbWlseT4KLSAgICAgICAg
PGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5sb2hpdF9oaS50dGY8L2ZpbGU+Ci0gICAgICAg
IDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4KLSAgICA8ZmFtaWx5PgotICAgICAgICA8ZmlsZXNl
dD4KLSAgICAgICAgICAgIDxmaWxlPmxvaGl0X3RhLnR0ZjwvZmlsZT4KLSAgICAgICAgPC9maWxl
c2V0PgotICAgIDwvZmFtaWx5PgotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxmaWxlc2V0PgotICAg
ICAgICAgICAgPGZpbGU+TXVrdGlOYXJyb3cudHRmPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+
Ci0gICAgPC9mYW1pbHk+Ci0gICAgPGZhbWlseT4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAg
ICAgICA8ZmlsZT5HYXJ1ZGEudHRmPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9m
YW1pbHk+Ci0gICAgPGZhbWlseT4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8Zmls
ZT5sb2hpdF9wYS50dGY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAgICA8L2ZhbWlseT4K
LTwvZmFtaWx5c2V0PgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vYW5kcm9p
ZF9tYWluX2ZvbnRzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9hbmRyb2lkX21haW5fZm9udHMueG1sCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9hbmRyb2lkX21haW5fZm9udHMueG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYt
OCI/PgotPGZhbWlseXNldD4KLQotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxuYW1lc2V0PgotICAg
ICAgICAgICAgPG5hbWU+c2FuczwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1lPnNhbnMgc2VyaWY8
L25hbWU+Ci0gICAgICAgICAgICA8bmFtZT5zYW5zLXNlcmlmPC9uYW1lPgotICAgICAgICAgICAg
PG5hbWU+QXJpYWw8L25hbWU+Ci0gICAgICAgICAgICA8bmFtZT5IZWx2ZXRpY2E8L25hbWU+Ci0g
ICAgICAgIDwvbmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5B
cmlhbC50dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8ZmlsZT5BcmlhbF9Cb2xkLnR0ZjwvZmlsZT4K
LSAgICAgICAgICAgIDxmaWxlPkFyaWFsX0l0YWxpYy50dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8
ZmlsZT5BcmlhbF9Cb2xkX0l0YWxpYy50dGY8L2ZpbGU+Ci0gICAgICAgIDwvZmlsZXNldD4KLSAg
ICA8L2ZhbWlseT4KLQotICAgIDxmYW1pbHk+Ci0gICAgICAgIDxuYW1lc2V0PgotICAgICAgICAg
ICAgPG5hbWU+c2VyaWY8L25hbWU+Ci0gICAgICAgICAgICA8bmFtZT5UaW1lczwvbmFtZT4KLSAg
ICAgICAgICAgIDxuYW1lPlRpbWVzIE5ldyBSb21hbjwvbmFtZT4KLSAgICAgICAgICAgIDxuYW1l
Pk1vbmFjbzwvbmFtZT4KLSAgICAgICAgICAgIDwhLS0gTWF0Y2ggY2hyb21pdW0tbGludXguIFNl
ZSBjb21tZW50cyBvZiBTdWJwaXhlbFBvc2l0aW9uaW5nIGluIGZvbnRzLmNvbmYgLS0+Ci0gICAg
ICAgICAgICA8bmFtZT5TdWJwaXhlbFBvc2l0aW9uaW5nPC9uYW1lPgotICAgICAgICA8L25hbWVz
ZXQ+Ci0gICAgICAgIDxmaWxlc2V0PgotICAgICAgICAgICAgPGZpbGU+VGltZXNfTmV3X1JvbWFu
LnR0ZjwvZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPlRpbWVzX05ld19Sb21hbl9Cb2xkLnR0Zjwv
ZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPlRpbWVzX05ld19Sb21hbl9JdGFsaWMudHRmPC9maWxl
PgotICAgICAgICAgICAgPGZpbGU+VGltZXNfTmV3X1JvbWFuX0JvbGRfSXRhbGljLnR0ZjwvZmls
ZT4KLSAgICAgICAgPC9maWxlc2V0PgotICAgIDwvZmFtaWx5PgotCi0gICAgPGZhbWlseT4KLSAg
ICAgICAgPG5hbWVzZXQ+Ci0gICAgICAgICAgICA8bmFtZT5tb25vPC9uYW1lPgotICAgICAgICAg
ICAgPG5hbWU+bW9ub3NwYWNlPC9uYW1lPgotICAgICAgICAgICAgPG5hbWU+Q291cmllcjwvbmFt
ZT4KLSAgICAgICAgICAgIDxuYW1lPkNvdXJpZXIgTmV3PC9uYW1lPgotICAgICAgICA8L25hbWVz
ZXQ+Ci0gICAgICAgIDxmaWxlc2V0PgotICAgICAgICAgICAgPGZpbGU+Q291cmllcl9OZXcudHRm
PC9maWxlPgotICAgICAgICAgICAgPGZpbGU+Q291cmllcl9OZXdfQm9sZC50dGY8L2ZpbGU+Ci0g
ICAgICAgICAgICA8ZmlsZT5Db3VyaWVyX05ld19JdGFsaWMudHRmPC9maWxlPgotICAgICAgICAg
ICAgPGZpbGU+Q291cmllcl9OZXdfQm9sZF9JdGFsaWMudHRmPC9maWxlPgotICAgICAgICA8L2Zp
bGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0KLSAgICA8ZmFtaWx5PgotICAgICAgICA8bmFtZXNldD4K
LSAgICAgICAgICAgIDxuYW1lPmN1cnNpdmU8L25hbWU+Ci0gICAgICAgICAgICA8bmFtZT5Db21p
YyBTYW5zIE1TPC9uYW1lPgotICAgICAgICA8L25hbWVzZXQ+Ci0gICAgICAgIDxmaWxlc2V0Pgot
ICAgICAgICAgICAgPGZpbGU+Q29taWNfU2Fuc19NUy50dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8
ZmlsZT5Db21pY19TYW5zX01TX0JvbGQudHRmPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0g
ICAgPC9mYW1pbHk+Ci0KLSAgICA8ZmFtaWx5PgotICAgICAgICA8bmFtZXNldD4KLSAgICAgICAg
ICAgIDxuYW1lPmZhbnRhc3k8L25hbWU+Ci0gICAgICAgICAgICA8bmFtZT5JbXBhY3Q8L25hbWU+
Ci0gICAgICAgIDwvbmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8Zmls
ZT5JbXBhY3QudHRmPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0K
LSAgICA8ZmFtaWx5PgotICAgICAgICA8bmFtZXNldD4KLSAgICAgICAgICAgIDxuYW1lPkdlb3Jn
aWE8L25hbWU+Ci0gICAgICAgIDwvbmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAg
ICAgICA8ZmlsZT5HZW9yZ2lhLnR0ZjwvZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPkdlb3JnaWFf
Qm9sZC50dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8ZmlsZT5HZW9yZ2lhX0l0YWxpYy50dGY8L2Zp
bGU+Ci0gICAgICAgICAgICA8ZmlsZT5HZW9yZ2lhX0JvbGRfSXRhbGljLnR0ZjwvZmlsZT4KLSAg
ICAgICAgPC9maWxlc2V0PgotICAgIDwvZmFtaWx5PgotCi0gICAgPGZhbWlseT4KLSAgICAgICAg
PG5hbWVzZXQ+Ci0gICAgICAgICAgICA8bmFtZT5UcmVidWNoZXQgTVM8L25hbWU+Ci0gICAgICAg
IDwvbmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5UcmVidWNo
ZXRfTVMudHRmPC9maWxlPgotICAgICAgICAgICAgPGZpbGU+VHJlYnVjaGV0X01TX0JvbGQudHRm
PC9maWxlPgotICAgICAgICAgICAgPGZpbGU+VHJlYnVjaGV0X01TX0l0YWxpYy50dGY8L2ZpbGU+
Ci0gICAgICAgICAgICA8ZmlsZT5UcmVidWNoZXRfTVNfQm9sZF9JdGFsaWMudHRmPC9maWxlPgot
ICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0KLSAgICA8ZmFtaWx5PgotICAgICAg
ICA8bmFtZXNldD4KLSAgICAgICAgICAgIDxuYW1lPlZlcmRhbmE8L25hbWU+Ci0gICAgICAgIDwv
bmFtZXNldD4KLSAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICA8ZmlsZT5WZXJkYW5hLnR0
ZjwvZmlsZT4KLSAgICAgICAgICAgIDxmaWxlPlZlcmRhbmFfQm9sZC50dGY8L2ZpbGU+Ci0gICAg
ICAgICAgICA8ZmlsZT5WZXJkYW5hX0l0YWxpYy50dGY8L2ZpbGU+Ci0gICAgICAgICAgICA8Zmls
ZT5WZXJkYW5hX0JvbGRfSXRhbGljLnR0ZjwvZmlsZT4KLSAgICAgICAgPC9maWxlc2V0PgotICAg
IDwvZmFtaWx5PgotCi0gICAgPGZhbWlseT4KLSAgICAgICAgPG5hbWVzZXQ+Ci0gICAgICAgICAg
ICA8bmFtZT5BaGVtPC9uYW1lPgotICAgICAgICAgICAgPCEtLSBNYXRjaCBjaHJvbWl1bS1saW51
eC4gU2VlIGNvbW1lbnRzIG9mIFN1YnBpeGVsUG9zaXRpb25pbmcgaW4gZm9udHMuY29uZiAtLT4K
LSAgICAgICAgICAgIDxuYW1lPlN1YnBpeGVsUG9zaXRpb25pbmdBaGVtPC9uYW1lPgotICAgICAg
ICA8L25hbWVzZXQ+Ci0gICAgICAgIDxmaWxlc2V0PgotICAgICAgICAgICAgPGZpbGU+QUhFTV9f
X18uVFRGPC9maWxlPgotICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9mYW1pbHk+Ci0KLTwvZmFt
aWx5c2V0PgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmgJKHJldmlz
aW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIGNvbmZpZ19oCi0jZGVmaW5lIGNv
bmZpZ19oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvRXhwb3J0
TWFjcm9zLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKSAmJiAhQ09NUElMRVIoR0NDKQotLy8gQWxsb3cg
J3RoaXMnIHRvIGJlIHVzZWQgaW4gYmFzZSBtZW1iZXIgaW5pdGlhbGl6ZXIgbGlzdC4KLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlIDogNDM1NSkKLSNlbmRpZgotCi0jZW5kaWYgLy8gY29uZmlnX2gK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2ZvbnRzLmNvbmYKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vZm9udHMuY29uZgkocmV2aXNpb24g
MTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vZm9udHMuY29uZgkod29y
a2luZyBjb3B5KQpAQCAtMSwyNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURP
Q1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZvbnRzLmR0ZCI+Ci08IS0tIC9ldGMvZm9udHMvZm9u
dHMuY29uZiBmaWxlIHRvIGNvbmZpZ3VyZSBzeXN0ZW0gZm9udCBhY2Nlc3MgLS0+Ci08Zm9udGNv
bmZpZz4KLSAgPG1hdGNoIHRhcmdldD0iZm9udCI+Ci0gICAgPGVkaXQgbmFtZT0iZW1iZWRkZWRi
aXRtYXAiIG1vZGU9ImFzc2lnbiI+PGJvb2w+ZmFsc2U8L2Jvb2w+PC9lZGl0PgotICA8L21hdGNo
PgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFt
ZT0iZmFtaWx5Ij4KLSAgICAgIDxzdHJpbmc+VGltZXM8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0g
ICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5UaW1l
cyBOZXcgUm9tYW48L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNo
IHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgot
ICAgICAgPHN0cmluZz5zYW5zPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9
ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAg
ICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAg
PHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgPHN0cmluZz5zYW5zIHNlcmlm
PC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNz
aWduIj4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0
Y2g+Ci0KLSAgPCEtLSBTb21lIGxheW91dCB0ZXN0cyBzcGVjaWZ5IEhlbHZldGljYSBhcyBhIGZh
bWlseSBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUKLSAgICAgICB0aGF0IHdlIGRvbid0IGZhbGxi
YWNrIHRvIFRpbWVzIE5ldyBSb21hbiBmb3IgdGhlbSAtLT4KLSAgPG1hdGNoIHRhcmdldD0icGF0
dGVybiI+Ci0gICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgPHN0cmlu
Zz5IZWx2ZXRpY2E8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5
IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5BcmlhbDwvc3RyaW5nPgotICAgIDwvZWRp
dD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBx
dWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICA8c3RyaW5nPnNhbnMtc2VyaWY8L3N0cmlu
Zz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgot
ICAgICAgPHN0cmluZz5BcmlhbDwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQot
ICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZh
bWlseSI+Ci0gICAgICA8c3RyaW5nPnNlcmlmPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxl
ZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+VGltZXMgTmV3
IFJvbWFuPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0YXJn
ZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KLSAgICAg
IDxzdHJpbmc+bW9ubzwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1p
bHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPkNvdXJpZXIgTmV3PC9zdHJpbmc+Ci0g
ICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAg
IDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KLSAgICAgIDxzdHJpbmc+bW9ub3NwYWNl
PC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNz
aWduIj4KLSAgICAgIDxzdHJpbmc+Q291cmllciBOZXc8L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0g
IDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgcXVhbD0i
YW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgPHN0cmluZz5Db3VyaWVyPC9zdHJpbmc+Ci0gICAg
PC90ZXN0PgotICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxz
dHJpbmc+Q291cmllciBOZXc8L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAg
PG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1p
bHkiPgotICAgICAgPHN0cmluZz5jdXJzaXZlPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxl
ZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+Q29taWMgU2Fu
cyBNUzwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0
PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICA8
c3RyaW5nPmZhbnRhc3k8L3N0cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFt
aWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5JbXBhY3Q8L3N0cmluZz4KLSAgICA8
L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRl
c3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgPHN0cmluZz5Nb25hY288L3N0cmlu
Zz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgot
ICAgICAgPHN0cmluZz5UaW1lcyBOZXcgUm9tYW48L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwv
bWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgbmFtZT0iZmFt
aWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICA8c3RyaW5nPk5vbkFudGlBbGlhc2VkU2Fuczwvc3Ry
aW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+
Ci0gICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICAgIDxlZGl0IG5h
bWU9ImFudGlhbGlhcyIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxib29sPmZhbHNlPC9ib29sPgot
ICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAg
ICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgIDxzdHJpbmc+U2xpZ2h0
SGludGVkR2VvcmdpYTwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1p
bHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPkdlb3JnaWE8L3N0cmluZz4KLSAgICA8
L2VkaXQ+Ci0gICAgPGVkaXQgbmFtZT0iaGludHN0eWxlIiBtb2RlPSJhc3NpZ24iPgotICAgICAg
PGNvbnN0PmhpbnRzbGlnaHQ8L2NvbnN0PgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8
bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9
ImVxIj4KLSAgICAgIDxzdHJpbmc+Tm9uSGludGVkU2Fuczwvc3RyaW5nPgotICAgIDwvdGVzdD4K
LSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8c3RyaW5nPlZl
cmRhbmE8L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gICAgPCEtLSBUaGVzZSBkZWxpYmVyYXRlbHkg
Y29udHJhZGljdCBlYWNoIG90aGVyLiBUaGUgJ2hpbnRpbmcnIHByZWZlcmVuY2UKLSAgICAgICAg
IHNob3VsZCB0YWtlIHByaW9yaXR5IC0tPgotICAgIDxlZGl0IG5hbWU9ImhpbnRzdHlsZSIgbW9k
ZT0iYXNzaWduIj4KLSAgICAgIDxjb25zdD5oaW50ZnVsbDwvY29uc3Q+Ci0gICAgPC9lZGl0Pgot
ICAgPGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxib29sPmZhbHNl
PC9ib29sPgotICAgIDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotICA8bWF0Y2ggdGFyZ2V0PSJwYXR0
ZXJuIj4KLSAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgIDxzdHJp
bmc+QXV0b2hpbnRlZFNlcmlmPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9
ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+QXJpYWw8L3N0cmluZz4KLSAg
ICA8L2VkaXQ+Ci0gICAgPGVkaXQgbmFtZT0iYXV0b2hpbnQiIG1vZGU9ImFzc2lnbiI+Ci0gICAg
ICA8Ym9vbD50cnVlPC9ib29sPgotICAgIDwvZWRpdD4KLSAgICA8ZWRpdCBuYW1lPSJoaW50c3R5
bGUiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8Y29uc3Q+aGludG1lZGl1bTwvY29uc3Q+Ci0gICAg
PC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0
ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEiPgotICAgICAgPHN0cmluZz5IaW50ZWRTZXJp
Zjwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFz
c2lnbiI+Ci0gICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICAgIDxl
ZGl0IG5hbWU9ImF1dG9oaW50IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPGJvb2w+ZmFsc2U8L2Jv
b2w+Ci0gICAgPC9lZGl0PgotICAgIDxlZGl0IG5hbWU9ImhpbnRzdHlsZSIgbW9kZT0iYXNzaWdu
Ij4KLSAgICAgIDxjb25zdD5oaW50bWVkaXVtPC9jb25zdD4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0
Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgbmFtZT0iZmFtaWx5
IiBjb21wYXJlPSJlcSI+Ci0gICAgICA8c3RyaW5nPkZ1bGxBbmRBdXRvSGludGVkU2VyaWY8L3N0
cmluZz4KLSAgICA8L3Rlc3Q+Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24i
PgotICAgICAgPHN0cmluZz5BcmlhbDwvc3RyaW5nPgotICAgIDwvZWRpdD4KLSAgICA8ZWRpdCBu
YW1lPSJhdXRvaGludCIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxib29sPnRydWU8L2Jvb2w+Ci0g
ICAgPC9lZGl0PgotICAgIDxlZGl0IG5hbWU9ImhpbnRzdHlsZSIgbW9kZT0iYXNzaWduIj4KLSAg
ICAgIDxjb25zdD5oaW50ZnVsbDwvY29uc3Q+Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0g
IDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgIDx0ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFy
ZT0iZXEiPgotICAgICAgPHN0cmluZz5TdWJwaXhlbEVuYWJsZWRBcmlhbDwvc3RyaW5nPgotICAg
IDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8
c3RyaW5nPkFyaWFsPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICAgIDxlZGl0IG5hbWU9InJnYmEi
IG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8Y29uc3Q+cmdiPC9jb25zdD4KLSAgICA8L2VkaXQ+Ci0g
IDwvbWF0Y2g+Ci0KLSAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPHRlc3QgbmFtZT0i
ZmFtaWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICA8c3RyaW5nPlN1YnBpeGVsRGlzYWJsZWRBcmlh
bDwvc3RyaW5nPgotICAgIDwvdGVzdD4KLSAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFz
c2lnbiI+Ci0gICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+Ci0gICAgPC9lZGl0PgotICAgIDxl
ZGl0IG5hbWU9InJnYmEiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICA8Y29uc3Q+bm9uZTwvY29uc3Q+
Ci0gICAgPC9lZGl0PgotICA8L21hdGNoPgotCi0gIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgot
ICAgIDwhLS0gRm9udENvbmZpZyBkb2Vzbid0IGN1cnJlbnRseSBwcm92aWRlIGEgd2VsbC1kZWZp
bmVkIHdheSB0byB0dXJuIG9uCi0gICAgICAgICBzdWJwaXhlbCBwb3NpdGlvbmluZy4gIFRoaXMg
aXMganVzdCBhbiBhcmJpdHJhcnkgcGF0dGVybiB0byB1c2UgYWZ0ZXIKLSAgICAgICAgIHR1cm5p
bmcgc3VicGl4ZWwgcG9zaXRpb25pbmcgb24gZ2xvYmFsbHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9u
J3QgaGF2ZQotICAgICAgICAgaXNzdWVzIHdpdGggb3VyIHN0eWxlIGdldHRpbmcgY2FjaGVkIGZv
ciBvdGhlciB0ZXN0cy4gLS0+Ci0gICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+
Ci0gICAgICA8c3RyaW5nPlN1YnBpeGVsUG9zaXRpb25pbmc8L3N0cmluZz4KLSAgICA8L3Rlc3Q+
Ci0gICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgPHN0cmluZz5U
aW1lcyBOZXcgUm9tYW48L3N0cmluZz4KLSAgICA8L2VkaXQ+Ci0gIDwvbWF0Y2g+Ci0KLSAgPG1h
dGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgPCEtLSBTZWUgY29tbWVudHMgYWJvdmUgLS0+Ci0g
ICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICA8c3RyaW5nPlN1YnBp
eGVsUG9zaXRpb25pbmdBaGVtPC9zdHJpbmc+Ci0gICAgPC90ZXN0PgotICAgIDxlZGl0IG5hbWU9
ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgIDxzdHJpbmc+YWhlbTwvc3RyaW5nPgotICAg
IDwvZWRpdD4KLSAgPC9tYXRjaD4KLQotPC9mb250Y29uZmlnPgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJzL1dl
YktpdC9ucGFwaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3ROZXRzY2FwZVBsdWdJbi9Gb3J3YXJkaW5nSGVhZGVycy9XZWJLaXQvbnBhcGkuaAkocmV2
aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNj
YXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJzL1dlYktpdC9ucGFwaS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDkgKzAsMCBAQAotI2luY2x1ZGUgImJpbmRpbmdzL25wYXBpLmgiCi0KLS8vIFRoZXNl
IGFyZSBkZWZpbmVkIGluIFdlYkNvcmUvYnJkaWdlL25wYXBpLmggYW5kIHdlIG5lZWQgdGhlbSBv
biBMaW51eC9XaW4uCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICgwKQotI2VuZGlmCi0j
aWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAoMSkKLSNlbmRpZgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJzL1dl
YktpdC9ucGZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3ROZXRzY2FwZVBsdWdJbi9Gb3J3YXJkaW5nSGVhZGVycy9XZWJLaXQvbnBmdW5j
dGlvbnMuaAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdE5ldHNjYXBlUGx1Z0luL0ZvcndhcmRpbmdIZWFkZXJzL1dlYktpdC9ucGZ1bmN0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzAsMCBAQAotI2luY2x1ZGUgIm5wYXBpLmgiCi0j
aW5jbHVkZSAiYmluZGluZ3MvbnBmdW5jdGlvbnMuaCIKLQotLy8gTm9uLXN0YW5kYXJkIGV2ZW50
IHR5cGVzIGNhbiBiZSBwYXNzZWQgdG8gSGFuZGxlRXZlbnQuCi0vLyBucGFwaS5oIHRoYXQgY29t
ZXMgd2l0aCBXZWJLaXQuZnJhbWV3b3JrIGFkZHMgdGhlc2UgZXZlbnRzLgotI2RlZmluZSBnZXRG
b2N1c0V2ZW50ICAgICAgIChvc0V2dCArIDE2KQotI2RlZmluZSBsb3NlRm9jdXNFdmVudCAgICAg
IChvc0V2dCArIDE3KQotI2RlZmluZSBhZGp1c3RDdXJzb3JFdmVudCAgIChvc0V2dCArIDE4KQpJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdE5ldHNjYXBlUGx1Z0luL0Zv
cndhcmRpbmdIZWFkZXJzL1dlYktpdC9ucHJ1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRl
cnMvV2ViS2l0L25wcnVudGltZS5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0TmV0c2NhcGVQbHVnSW4vRm9yd2FyZGluZ0hlYWRlcnMvV2Vi
S2l0L25wcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xICswLDAgQEAKLSNpbmNsdWRlICJi
aW5kaW5ncy9ucHJ1bnRpbWUuaCIKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvcHVibGljL1dlYlByZWZlcmVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViUHJlZmVyZW5jZXMu
aAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9wdWJsaWMvV2ViUHJlZmVyZW5jZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV2ViUHJlZmVyZW5jZXNfaAotI2RlZmluZSBXZWJQcmVmZXJlbmNlc19o
Ci0KLSNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlVSTC5oIgotI2luY2x1ZGUgIldlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJUZXN0Q29tbW9u
LmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViVmlldzsKLX0KLQotbmFtZXNwYWNl
IFdlYlRlc3RSdW5uZXIgewotCi1zdHJ1Y3QgV0VCVEVTVFJVTk5FUl9FWFBPUlQgV2ViUHJlZmVy
ZW5jZXMgewotICAgIFdlYktpdDo6V2ViU3RyaW5nIHN0YW5kYXJkRm9udEZhbWlseTsKLSAgICBX
ZWJLaXQ6OldlYlN0cmluZyBmaXhlZEZvbnRGYW1pbHk7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcg
c2VyaWZGb250RmFtaWx5OwotICAgIFdlYktpdDo6V2ViU3RyaW5nIHNhbnNTZXJpZkZvbnRGYW1p
bHk7Ci0gICAgV2ViS2l0OjpXZWJTdHJpbmcgY3Vyc2l2ZUZvbnRGYW1pbHk7Ci0gICAgV2ViS2l0
OjpXZWJTdHJpbmcgZmFudGFzeUZvbnRGYW1pbHk7Ci0KLSAgICBpbnQgZGVmYXVsdEZvbnRTaXpl
OwotICAgIGludCBkZWZhdWx0Rml4ZWRGb250U2l6ZTsKLSAgICBpbnQgbWluaW11bUZvbnRTaXpl
OwotICAgIGludCBtaW5pbXVtTG9naWNhbEZvbnRTaXplOwotICAgIGludCBtaW5pbXVtQWNjZWxl
cmF0ZWQyZENhbnZhc1NpemU7Ci0KLSAgICBib29sIERPTVBhc3RlQWxsb3dlZDsKLSAgICBib29s
IFhTU0F1ZGl0b3JFbmFibGVkOwotICAgIGJvb2wgYWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRl
bnQ7Ci0gICAgYm9vbCBhbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHM7Ci0gICAgYm9vbCBhbGxv
d1J1bm5pbmdPZkluc2VjdXJlQ29udGVudDsKLSAgICBib29sIGF1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkOwotICAgIFdlYktpdDo6V2ViU3RyaW5nIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lOwot
ICAgIGJvb2wgZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZDsKLSAgICBib29sIGV4cGVyaW1lbnRhbFdl
YkdMRW5hYmxlZDsKLSAgICBib29sIGV4cGVyaW1lbnRhbENTU1JlZ2lvbnNFbmFibGVkOwotICAg
IGJvb2wgZXhwZXJpbWVudGFsQ1NTR3JpZExheW91dEVuYWJsZWQ7Ci0gICAgYm9vbCBqYXZhRW5h
YmxlZDsKLSAgICBib29sIGphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQ7Ci0gICAgYm9vbCBq
YXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5OwotICAgIGJvb2wgc3VwcG9ydHNN
dWx0aXBsZVdpbmRvd3M7Ci0gICAgYm9vbCBqYXZhU2NyaXB0RW5hYmxlZDsKLSAgICBib29sIGxv
YWRzSW1hZ2VzQXV0b21hdGljYWxseTsKLSAgICBib29sIGxvY2FsU3RvcmFnZUVuYWJsZWQ7Ci0g
ICAgYm9vbCBvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQ7Ci0gICAgYm9vbCBwbHVn
aW5zRW5hYmxlZDsKLSAgICBib29sIHNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQ7Ci0gICAg
Ym9vbCB0ZXh0QXJlYXNBcmVSZXNpemFibGU7Ci0gICAgV2ViS2l0OjpXZWJVUkwgdXNlclN0eWxl
U2hlZXRMb2NhdGlvbjsKLSAgICBib29sIHVzZXNQYWdlQ2FjaGU7Ci0gICAgYm9vbCBwYWdlQ2Fj
aGVTdXBwb3J0c1BsdWdpbnM7Ci0gICAgYm9vbCB3ZWJTZWN1cml0eUVuYWJsZWQ7Ci0gICAgYm9v
bCBhbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczsKLSAgICBXZWJLaXQ6OldlYlNldHRp
bmdzOjpFZGl0aW5nQmVoYXZpb3IgZWRpdGluZ0JlaGF2aW9yOwotICAgIGJvb2wgdGFic1RvTGlu
a3M7Ci0gICAgYm9vbCBoeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQ7Ci0gICAgYm9vbCBjYXJldEJy
b3dzaW5nRW5hYmxlZDsKLSAgICBib29sIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0Vu
YWJsZWQ7Ci0gICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVu
YWJsZWQ7Ci0gICAgYm9vbCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxF
bmFibGVkOwotICAgIGJvb2wgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ7Ci0gICAgYm9v
bCBmb3JjZUNvbXBvc2l0aW5nTW9kZTsKLSAgICBib29sIHRocmVhZGVkSFRNTFBhcnNlcjsKLSAg
ICBib29sIGFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkOwotICAgIGJvb2wgcGVyVGlsZVBhaW50
aW5nRW5hYmxlZDsKLSAgICBib29sIGFjY2VsZXJhdGVkQW5pbWF0aW9uRW5hYmxlZDsKLSAgICBi
b29sIGRlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQ7Ci0gICAgYm9vbCBtZWRpYVBsYXliYWNr
UmVxdWlyZXNVc2VyR2VzdHVyZTsKLSAgICBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZDsKLSAg
ICBib29sIGNzc0N1c3RvbUZpbHRlckVuYWJsZWQ7Ci0gICAgYm9vbCBzaG91bGRSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbjsKLSAgICBib29sIGFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
OwotICAgIGJvb2wgdG91Y2hEcmFnRHJvcEVuYWJsZWQ7Ci0KLSAgICBXZWJQcmVmZXJlbmNlcygp
IHsgcmVzZXQoKTsgfQotICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGFwcGx5VG8oV2ViS2l0
OjpXZWJWaWV3Kik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBXZWJQcmVmZXJlbmNlc19oCkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUYXNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9wdWJsaWMvV2ViVGFzay5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUYXNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlRhc2tfaAotI2RlZmluZSBXZWJUYXNrX2gKLQot
I2luY2x1ZGUgIldlYlRlc3RDb21tb24uaCIKLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFj
ZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGFza0xpc3Q7Ci0KLS8vIFdlYlRhc2sgcmVw
cmVzZW50cyBhIHRhc2sgd2hpY2ggY2FuIHJ1biBieSBXZWJUZXN0RGVsZWdhdGU6OnBvc3RUYXNr
KCkgb3IKLS8vIFdlYlRlc3REZWxlZ2F0ZTo6cG9zdERlbGF5ZWRUYXNrKCkuCi1jbGFzcyBXRUJU
RVNUUlVOTkVSX0VYUE9SVCBXZWJUYXNrIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJUYXNr
KFdlYlRhc2tMaXN0Kik7Ci0gICAgdmlydHVhbCB+V2ViVGFzaygpOwotCi0gICAgLy8gVGhlIG1h
aW4gY29kZSBvZiB0aGlzIHRhc2suCi0gICAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgcnVuKCkg
c2hvdWxkIHJldHVybiBpbW1lZGlhdGVseSBpZiBjYW5jZWwoKSB3YXMgY2FsbGVkLgotICAgIHZp
cnR1YWwgdm9pZCBydW4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKLQot
cHJvdGVjdGVkOgotICAgIFdlYlRhc2tMaXN0KiBtX3Rhc2tMaXN0OwotfTsKLQotY2xhc3MgV0VC
VEVTVFJVTk5FUl9FWFBPUlQgV2ViVGFza0xpc3QgewotcHVibGljOgotICAgIFdlYlRhc2tMaXN0
KCk7Ci0gICAgfldlYlRhc2tMaXN0KCk7Ci0gICAgdm9pZCByZWdpc3RlclRhc2soV2ViVGFzayop
OwotICAgIHZvaWQgdW5yZWdpc3RlclRhc2soV2ViVGFzayopOwotICAgIHZvaWQgcmV2b2tlQWxs
KCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp2ZWN0b3I8V2ViVGFzayo+IG1fdGFza3M7Ci19Owot
Ci0vLyBBIHRhc2sgY29udGFpbmluZyBhbiBvYmplY3QgcG9pbnRlciBvZiBjbGFzcyBULiBEZXJp
dmVkIGNsYXNzZXMgc2hvdWxkCi0vLyBvdmVycmlkZSBydW5JZlZhbGlkKCkgd2hpY2ggaW4gdHVy
biBjYW4gc2FmZWx5IGludm9rZSBtZXRob2RzIG9uIHRoZQotLy8gbV9vYmplY3QuIFRoZSBDbGFz
cyBUIG11c3QgaGF2ZSAiV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkiLgotdGVtcGxhdGU8Y2xhc3Mg
VD4KLWNsYXNzIFdlYk1ldGhvZFRhc2sgOiBwdWJsaWMgV2ViVGFzayB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgV2ViTWV0aG9kVGFzayhUKiBvYmplY3QpCi0gICAgICAgIDogV2ViVGFzayhvYmpl
Y3QtPnRhc2tMaXN0KCkpCi0gICAgICAgICwgbV9vYmplY3Qob2JqZWN0KQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIH5XZWJNZXRob2RUYXNrKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cnVuKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX29iamVjdCkKLSAgICAgICAgICAgIHJ1bklmVmFs
aWQoKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkKLSAgICB7Ci0gICAgICAg
IG1fb2JqZWN0ID0gMDsKLSAgICAgICAgbV90YXNrTGlzdC0+dW5yZWdpc3RlclRhc2sodGhpcyk7
Ci0gICAgICAgIG1fdGFza0xpc3QgPSAwOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5J
ZlZhbGlkKCkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgVCogbV9vYmplY3Q7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBXZWJUYXNrX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0Q29tbW9uLmgJ
KHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvcHVibGljL1dlYlRlc3RDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBXZWJUZXN0Q29tbW9uX2gKLSNkZWZpbmUgV2ViVGVzdENvbW1vbl9oCi0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24KLQotI2lmICFk
ZWZpbmVkKFdFQlRFU1RSVU5ORVJfSU1QTEVNRU5UQVRJT04pCi0jZGVmaW5lIFdFQlRFU1RSVU5O
RVJfSU1QTEVNRU5UQVRJT04gMAotI2VuZGlmCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBFeHBvcnRlZCBzeW1ib2xzIG5lZWQgdG8gYmUgYW5ub3RhdGVkIHdpdGggV0VCVEVTVFJVTk5F
Ul9FWFBPUlQKLQotI2lmIGRlZmluZWQoV0VCVEVTVFJVTk5FUl9ETEwpCi0KLSNpZiBkZWZpbmVk
KFdJTjMyKQotI2lmIFdFQlRFU1RSVU5ORVJfSU1QTEVNRU5UQVRJT04KLSNkZWZpbmUgV0VCVEVT
VFJVTk5FUl9FWFBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jZWxzZQotI2RlZmluZSBXRUJU
RVNUUlVOTkVSX0VYUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSNlbmRpZgotCi0jZWxzZSAv
LyBkZWZpbmVkKFdJTjMyKQotCi0jaWYgV0VCVEVTVFJVTk5FUl9JTVBMRU1FTlRBVElPTgotI2Rl
ZmluZSBXRUJURVNUUlVOTkVSX0VYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZh
dWx0IikpKQotI2Vsc2UKLSNkZWZpbmUgV0VCVEVTVFJVTk5FUl9FWFBPUlQKLSNlbmRpZgotCi0j
ZW5kaWYKLQotI2Vsc2UgLy8gZGVmaW5lZChXRUJURVNUUlVOTkVSX0RMTCkKLQotI2RlZmluZSBX
RUJURVNUUlVOTkVSX0VYUE9SVAotCi0jZW5kaWYKLQotI2VuZGlmIC8vIFdlYlRlc3RDb21tb25f
aApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMv
V2ViVGVzdERlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdERlbGVnYXRlLmgJKHJldmlzaW9uIDE0Nzcw
MSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dl
YlRlc3REZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBX
ZWJUZXN0RGVsZWdhdGVfaAotI2RlZmluZSBXZWJUZXN0RGVsZWdhdGVfaAotCi0jaW5jbHVkZSAi
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9w
dWJsaWMvV2ViVmVjdG9yLmgiCi0jaW5jbHVkZSA8c3RyaW5nPgotCi0jZGVmaW5lIFdFQlRFU1RS
VU5ORVJfTkVXX0hJU1RPUllfQ0FQVFVSRQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdl
YkdhbWVwYWRzOwotY2xhc3MgV2ViSGlzdG9yeUl0ZW07Ci1zdHJ1Y3QgV2ViUmVjdDsKLXN0cnVj
dCBXZWJVUkxFcnJvcjsKLX0KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1zdHJ1Y3Qg
V2ViUHJlZmVyZW5jZXM7Ci1jbGFzcyBXZWJUYXNrOwotY2xhc3MgV2ViVGVzdFByb3h5QmFzZTsK
LQotY2xhc3MgV2ViVGVzdERlbGVnYXRlIHsKLXB1YmxpYzoKLSAgICAvLyBTZXQgYW5kIGNsZWFy
IHRoZSBlZGl0IGNvbW1hbmQgdG8gZXhlY3V0ZSBvbiB0aGUgbmV4dCBjYWxsIHRvCi0gICAgLy8g
V2ViVmlld0NsaWVudDo6aGFuZGxlQ3VycmVudEtleWJvYXJkRXZlbnQoKS4KLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJFZGl0Q29tbWFuZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENv
bW1hbmQoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZSkg
PSAwOwotCi0gICAgLy8gU2V0IHRoZSBnYW1lcGFkcyB0byByZXR1cm4gZnJvbSBQbGF0Zm9ybTo6
c2FtcGxlR2FtZXBhZHMoKS4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0R2FtZXBhZERhdGEoY29uc3Qg
V2ViS2l0OjpXZWJHYW1lcGFkcyYpID0gMDsKLQotICAgIC8vIEFkZCBhIG1lc3NhZ2UgdG8gdGhl
IHRleHQgZHVtcCBmb3IgdGhlIGxheW91dCB0ZXN0LgotICAgIHZpcnR1YWwgdm9pZCBwcmludE1l
c3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1lc3NhZ2UpID0gMDsKLQotICAgIC8vIFRoZSBkZWxl
Z2F0ZSB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIFdlYlRhc2sgb2JqZWN0cyBhbmQgaXMgcmVzcG9u
c2libGUKLSAgICAvLyBmb3IgZGVsZXRpbmcgdGhlbS4KLSAgICB2aXJ0dWFsIHZvaWQgcG9zdFRh
c2soV2ViVGFzayopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdERlbGF5ZWRUYXNrKFdlYlRh
c2sqLCBsb25nIGxvbmcgbXMpID0gMDsKLQotICAgIC8vIFJlZ2lzdGVyIGEgbmV3IGlzb2xhdGVk
IGZpbGVzeXN0ZW0gd2l0aCB0aGUgZ2l2ZW4gZmlsZXMsIGFuZCByZXR1cm4gdGhlCi0gICAgLy8g
bmV3IGZpbGVzeXN0ZW0gaWQuCi0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyByZWdpc3Rl
cklzb2xhdGVkRmlsZVN5c3RlbShjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlN0
cmluZz4mIGFic29sdXRlRmlsZW5hbWVzKSA9IDA7Ci0KLSAgICAvLyBHZXRzIHRoZSBjdXJyZW50
IHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLgotICAgIHZpcnR1YWwg
bG9uZyBsb25nIGdldEN1cnJlbnRUaW1lSW5NaWxsaXNlY29uZCgpID0gMDsKLQotICAgIC8vIENv
bnZlcnQgdGhlIHByb3ZpZGVkIHJlbGF0aXZlIHBhdGggaW50byBhbiBhYnNvbHV0ZSBwYXRoLgot
ICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgZ2V0QWJzb2x1dGVXZWJTdHJpbmdGcm9tVVRG
OFBhdGgoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGgpID0gMDsKLQotICAgIC8vIFJlYWRzIGluIHRo
ZSBnaXZlbiBmaWxlIGFuZCByZXR1cm5zIGl0cyBjb250ZW50cyBhcyBkYXRhIFVSTC4KLSAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViVVJMIGxvY2FsRmlsZVRvRGF0YVVSTChjb25zdCBXZWJLaXQ6Oldl
YlVSTCYpID0gMDsKLQotICAgIC8vIFJlcGxhY2VzIGZpbGU6Ly8vdG1wL0xheW91dFRlc3RzLyB3
aXRoIHRoZSBhY3R1YWwgcGF0aCB0byB0aGUKLSAgICAvLyBMYXlvdXRUZXN0cyBkaXJlY3Rvcnku
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlVSTCByZXdyaXRlTGF5b3V0VGVzdHNVUkwoY29uc3Qg
c3RkOjpzdHJpbmcmIHV0ZjhVUkwpID0gMDsKLQotICAgIC8vIE1hbmFnZXMgdGhlIHNldHRpbmdz
IHRvIHVzZWQgZm9yIGxheW91dCB0ZXN0cy4KLSAgICB2aXJ0dWFsIFdlYlByZWZlcmVuY2VzKiBw
cmVmZXJlbmNlcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlQcmVmZXJlbmNlcygpID0g
MDsKLQotICAgIC8vIFJldHVybnMgYSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIGdpdmVuIGVycm9y
LgotICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWFrZVVSTEVycm9yRGVzY3JpcHRpb24oY29uc3Qg
V2ViS2l0OjpXZWJVUkxFcnJvciYpID0gMDsKLQotICAgIC8vIFJlc2l6ZXMgdGhlIFdlYlZpZXcg
dG8gdGhlIGdpdmVuIHNpemUuCi0gICAgdmlydHVhbCB2b2lkIHNldENsaWVudFdpbmRvd1JlY3Qo
Y29uc3QgV2ViS2l0OjpXZWJSZWN0JikgPSAwOwotCi0gICAgLy8gT3BlbnMgYW5kIGNsb3NlcyB0
aGUgaW5zcGVjdG9yLgotICAgIHZpcnR1YWwgdm9pZCBzaG93RGV2VG9vbHMoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNsb3NlRGV2VG9vbHMoKSA9IDA7Ci0KLSAgICAvLyBFdmFsdWF0ZSB0aGUg
Z2l2ZW4gc2NyaXB0IGluIHRoZSBEZXZUb29scyBhZ2VudC4KLSAgICB2aXJ0dWFsIHZvaWQgZXZh
bHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwgY29uc3Qgc3RkOjpzdHJpbmcmIHNjcmlw
dCkgPSAwOwotCi0gICAgLy8gQ29udHJvbHMgV2ViU1FMIGRhdGFiYXNlcy4KLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJBbGxEYXRhYmFzZXMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldERhdGFi
YXNlUXVvdGEoaW50KSA9IDA7Ci0KLSAgICAvLyBDb250cm9scyB0aGUgZGV2aWNlIHNjYWxlIGZh
Y3RvciBvZiB0aGUgbWFpbiBXZWJWaWV3IGZvciBoaWRwaSB0ZXN0cy4KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKLQotICAgIC8vIENvbnRyb2xzIHdo
aWNoIFdlYlZpZXcgc2hvdWxkIGJlIGZvY3VzZWQuCi0gICAgdmlydHVhbCB2b2lkIHNldEZvY3Vz
KFdlYlRlc3RQcm94eUJhc2UqLCBib29sKSA9IDA7Ci0KLSAgICAvLyBDb250cm9scyB3aGV0aGVy
IGFsbCBjb29raWVzIHNob3VsZCBiZSBhY2NlcHRlZCBvciB3cml0aW5nIGNvb2tpZXMgaW4gYQot
ICAgIC8vIHRoaXJkLXBhcnR5IGNvbnRleHQgaXMgYmxvY2tlZC4KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0QWNjZXB0QWxsQ29va2llcyhib29sKSA9IDA7Ci0KLSAgICAvLyBUaGUgc2FtZSBhcyByZXdy
aXRlTGF5b3V0VGVzdHNVUkwgdW5sZXNzIHRoZSByZXNvdXJjZSBpcyBhIHBhdGggc3RhcnRpbmcK
LSAgICAvLyB3aXRoIC90bXAvLCB0aGVuIHJldHVybiBhIGZpbGUgVVJMIHRvIGEgdGVtcG9yYXJ5
IGZpbGUuCi0gICAgdmlydHVhbCBzdGQ6OnN0cmluZyBwYXRoVG9Mb2NhbFJlc291cmNlKGNvbnN0
IHN0ZDo6c3RyaW5nJiByZXNvdXJjZSkgPSAwOwotCi0gICAgLy8gU2V0cyB0aGUgUE9TSVggbG9j
YWxlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCi0gICAgdmlydHVhbCB2b2lkIHNldExvY2FsZShj
b25zdCBzdGQ6OnN0cmluZyYpID0gMDsKLQotICAgIC8vIEludm9rZWQgd2hlbiB0aGUgdGVzdCBm
aW5pc2hlZC4KLSAgICB2aXJ0dWFsIHZvaWQgdGVzdEZpbmlzaGVkKCkgPSAwOwotCi0gICAgLy8g
SW52b2tlZCBpZiB0aGUgdGVzdCB0aW1lZCBvdXQuCi0gICAgdmlydHVhbCB2b2lkIHRlc3RUaW1l
ZE91dCgpID0gMDsKLQotICAgIC8vIElmIHRydWUsIG5ldmVyIGFib3J0IGEgdGVzdCBiZWNhdXNl
IG9mIGEgdGltZW91dC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0RlYnVnZ2VkKCkgPSAwOwot
Ci0gICAgLy8gVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIGEgdGVzdCBpcyBj
b25zaWRlcmVkIHRvIGhhdmUgdGltZWQKLSAgICAvLyBvdXQuCi0gICAgdmlydHVhbCBpbnQgbGF5
b3V0VGVzdFRpbWVvdXQoKSA9IDA7Ci0KLSAgICAvLyBJbnZva2VkIHdoZW4gdGhlIGVtYmVkZGVy
IHNob3VsZCBjbG9zZSBhbGwgYnV0IHRoZSBtYWluIFdlYlZpZXcuCi0gICAgdmlydHVhbCB2b2lk
IGNsb3NlUmVtYWluaW5nV2luZG93cygpID0gMDsKLQotICAgIC8vIFJldHVybnMgdGhlIGxlbmd0
aCBvZiB0aGUgYmFjay9mb3J3YXJkIGhpc3Rvcnkgb2YgdGhlIG1haW4gV2ViVmlldy4KLSAgICB2
aXJ0dWFsIGludCBuYXZpZ2F0aW9uRW50cnlDb3VudCgpID0gMDsKLQotICAgIC8vIFRoZSBmb2xs
b3dpbmcgdHJpZ2dlciBuYXZpZ2F0aW9ucyBvbiB0aGUgbWFpbiBXZWJWaXdlLgotICAgIHZpcnR1
YWwgdm9pZCBnb1RvT2Zmc2V0KGludCBvZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVs
b2FkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkVVJMRm9yRnJhbWUoY29uc3QgV2ViS2l0
OjpXZWJVUkwmLCBjb25zdCBzdGQ6OnN0cmluZyYgZnJhbWVOYW1lKSA9IDA7Ci0KLSAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgcmVzb3VyY2UgcmVxdWVzdHMgdG8gZXh0ZXJuYWwgVVJMcyBzaG91bGQg
YmUgcGVybWl0dGVkLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0V4dGVybmFsUGFnZXMoKSA9IDA7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBiYWNrL2ZvcndhcmQgaGlzdG9yeSBmb3IgdGhlIFdlYlZp
ZXcgYXNzb2NpYXRlZCB3aXRoIHRoZQotICAgIC8vIGdpdmVuIFdlYlRlc3RQcm94eUJhc2UgYXMg
d2VsbCBhcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgZW50cnkuCi0gICAgdmlydHVhbCB2b2lk
IGNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KFdlYlRlc3RQcm94eUJhc2UqLCBXZWJLaXQ6OldlYlZl
Y3RvcjxXZWJLaXQ6OldlYkhpc3RvcnlJdGVtPiosIHNpemVfdCogY3VycmVudEVudHJ5SW5kZXgp
ID0gMDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYlRlc3REZWxlZ2F0ZV9oCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0SW50ZXJm
YWNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvcHVibGljL1dlYlRlc3RJbnRlcmZhY2VzLmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvcHVibGljL1dlYlRlc3RJbnRl
cmZhY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVGVzdElu
dGVyZmFjZXNfaAotI2RlZmluZSBXZWJUZXN0SW50ZXJmYWNlc19oCi0KLSNpbmNsdWRlICJXZWJU
ZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNs
YXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViTWVkaWFTdHJlYW1DZW50ZXI7Ci1jbGFzcyBXZWJNZWRp
YVN0cmVhbUNlbnRlckNsaWVudDsKLWNsYXNzIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjsK
LWNsYXNzIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDsKLWNsYXNzIFdlYlRoZW1l
RW5naW5lOwotY2xhc3MgV2ViVVJMOwotY2xhc3MgV2ViVmlldzsKLX0KLQotbmFtZXNwYWNlIFdl
YlRlc3RSdW5uZXIgewotCi1jbGFzcyBUZXN0SW50ZXJmYWNlczsKLWNsYXNzIFdlYlRlc3REZWxl
Z2F0ZTsKLWNsYXNzIFdlYlRlc3RQcm94eUJhc2U7Ci1jbGFzcyBXZWJUZXN0UnVubmVyOwotCi1j
bGFzcyBXRUJURVNUUlVOTkVSX0VYUE9SVCBXZWJUZXN0SW50ZXJmYWNlcyB7Ci1wdWJsaWM6Ci0g
ICAgV2ViVGVzdEludGVyZmFjZXMoKTsKLSAgICB+V2ViVGVzdEludGVyZmFjZXMoKTsKLQotICAg
IHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqLCBXZWJUZXN0UHJveHlCYXNlKik7Ci0g
ICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKLSAgICB2b2lkIGJpbmRUbyhX
ZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCByZXNldEFsbCgpOwotICAgIHZvaWQgc2V0VGVz
dElzUnVubmluZyhib29sKTsKLSAgICB2b2lkIGNvbmZpZ3VyZUZvclRlc3RXaXRoVVJMKGNvbnN0
IFdlYktpdDo6V2ViVVJMJiwgYm9vbCBnZW5lcmF0ZVBpeGVscyk7Ci0KLSAgICBXZWJUZXN0UnVu
bmVyKiB0ZXN0UnVubmVyKCk7Ci0gICAgV2ViS2l0OjpXZWJUaGVtZUVuZ2luZSogdGhlbWVFbmdp
bmUoKTsKLQotICAgIFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DZW50ZXIqIGNyZWF0ZU1lZGlhU3Ry
ZWFtQ2VudGVyKFdlYktpdDo6V2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQqKTsKLSAgICBXZWJL
aXQ6OldlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciogY3JlYXRlV2ViUlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyKFdlYktpdDo6V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50Kik7Ci0K
LSNpZiBXRUJURVNUUlVOTkVSX0lNUExFTUVOVEFUSU9OCi0gICAgVGVzdEludGVyZmFjZXMqIHRl
c3RJbnRlcmZhY2VzKCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBzdGQ6OmF1dG9fcHRyPFRl
c3RJbnRlcmZhY2VzPiBtX2ludGVyZmFjZXM7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBXZWJUZXN0
SW50ZXJmYWNlc19oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UHJveHkuaAkocmV2aXNpb24g
MTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJs
aWMvV2ViVGVzdFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjA0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFdlYlRlc3RQcm94eV9oCi0jZGVmaW5lIFdlYlRlc3RQcm94eV9oCi0KLSNpbmNsdWRlICJQbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUmVjdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJVUkxFcnJvci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJVUkxSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uLmgiCi0jaW5jbHVkZSAiV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJET01NZXNzYWdlRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkRyYWdPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkVkaXRpbmdBY3Rpb24uaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYkljb25VUkwuaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5hdmln
YXRpb25Qb2xpY3kuaCIKLSNpbmNsdWRlICJXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5hdmln
YXRpb25UeXBlLmgiCi0jaW5jbHVkZSAiV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZWN1cml0
eU9yaWdpbi5oIgotI2luY2x1ZGUgIldlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGV4dEFmZmlu
aXR5LmgiCi0jaW5jbHVkZSAiV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUZXh0RGlyZWN0aW9u
LmgiCi0jaW5jbHVkZSAiV2ViVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRl
IDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNz
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q7Ci1jbGFzcyBXZWJDYWNoZWRVUkxSZXF1ZXN0OwotY2xh
c3MgV2ViRGF0YVNvdXJjZTsKLWNsYXNzIFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50OwotY2xh
c3MgV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrOwotY2xhc3MgV2ViRHJhZ0RhdGE7Ci1j
bGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYkdlb2xvY2F0aW9uQ2xpZW50OwotY2xhc3MgV2ViR2Vv
bG9jYXRpb25DbGllbnRNb2NrOwotY2xhc3MgV2ViSW1hZ2U7Ci1jbGFzcyBXZWJOb2RlOwotY2xh
c3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwotY2xhc3MgV2ViUGx1Z2luOwotY2xhc3MgV2Vi
UmFuZ2U7Ci1jbGFzcyBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci1jbGFzcyBXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXI7Ci1jbGFzcyBXZWJTcGVlY2hJbnB1dExpc3RlbmVyOwotY2xhc3MgV2Vi
U3BlZWNoUmVjb2duaXplcjsKLWNsYXNzIFdlYlNwZWxsQ2hlY2tDbGllbnQ7Ci1jbGFzcyBXZWJT
dHJpbmc7Ci1jbGFzcyBXZWJVUkw7Ci1jbGFzcyBXZWJVUkxSZXNwb25zZTsKLWNsYXNzIFdlYlVz
ZXJNZWRpYUNsaWVudDsKLWNsYXNzIFdlYlZpZXc7Ci1zdHJ1Y3QgV2ViQ29uc29sZU1lc3NhZ2U7
Ci1zdHJ1Y3QgV2ViQ29udGV4dE1lbnVEYXRhOwotc3RydWN0IFdlYlBsdWdpblBhcmFtczsKLXN0
cnVjdCBXZWJQb2ludDsKLXN0cnVjdCBXZWJTaXplOwotc3RydWN0IFdlYldpbmRvd0ZlYXR1cmVz
OwotfQotCi1jbGFzcyBTa0NhbnZhczsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1j
bGFzcyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyOwotY2xhc3MgTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXI7Ci1jbGFzcyBTcGVsbENoZWNrQ2xpZW50OwotY2xhc3MgVGVzdEludGVyZmFjZXM7
Ci1jbGFzcyBXZWJUZXN0RGVsZWdhdGU7Ci1jbGFzcyBXZWJUZXN0SW50ZXJmYWNlczsKLWNsYXNz
IFdlYlRlc3RSdW5uZXI7Ci1jbGFzcyBXZWJVc2VyTWVkaWFDbGllbnRNb2NrOwotCi1jbGFzcyBX
RUJURVNUUlVOTkVSX0VYUE9SVCBXZWJUZXN0UHJveHlCYXNlIHsKLXB1YmxpYzoKLSAgICB2b2lk
IHNldEludGVyZmFjZXMoV2ViVGVzdEludGVyZmFjZXMqKTsKLSAgICB2b2lkIHNldERlbGVnYXRl
KFdlYlRlc3REZWxlZ2F0ZSopOwotCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgV2ViS2l0OjpX
ZWJTcGVsbENoZWNrQ2xpZW50ICpzcGVsbENoZWNrQ2xpZW50KCkgY29uc3Q7Ci0KLSAgICBzdGQ6
OnN0cmluZyBjYXB0dXJlVHJlZShib29sIGRlYnVnUmVuZGVyVHJlZSk7Ci0gICAgU2tDYW52YXMq
IGNhcHR1cmVQaXhlbHMoKTsKLQotICAgIHZvaWQgc2V0TG9nQ29uc29sZU91dHB1dChib29sIGVu
YWJsZWQpOwotCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwcml2YXRlIGFnYWluLgotICAgIHZv
aWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKLQotI2lmIFdFQlRFU1RSVU5ORVJfSU1QTEVNRU5UQVRJ
T04KLSAgICB2b2lkIGRpc3BsYXkoKTsKLSAgICB2b2lkIGRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lv
bigpOwotICAgIHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOwotCi0gICAgV2ViS2l0OjpXZWJE
ZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIGRldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jaygp
OwotICAgIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrKiBnZW9sb2NhdGlvbkNsaWVu
dE1vY2soKTsKLSAgICBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1dENv
bnRyb2xsZXJNb2NrKCk7Ci0gICAgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHNwZWVjaFJlY29n
bml6ZXJNb2NrKCk7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFdlYlRlc3RQcm94eUJhc2Uo
KTsKLSAgICB+V2ViVGVzdFByb3h5QmFzZSgpOwotCi0gICAgdm9pZCBkaWRJbnZhbGlkYXRlUmVj
dChjb25zdCBXZWJLaXQ6OldlYlJlY3QmKTsKLSAgICB2b2lkIGRpZFNjcm9sbFJlY3QoaW50LCBp
bnQsIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwotICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24o
KTsKLSAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViS2l0OjpXZWJSZWN0Jik7Ci0gICAg
dm9pZCBzaG93KFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeSk7Ci0gICAgdm9pZCBkaWRBdXRv
UmVzaXplKGNvbnN0IFdlYktpdDo6V2ViU2l6ZSYpOwotICAgIHZvaWQgcG9zdEFjY2Vzc2liaWxp
dHlOb3RpZmljYXRpb24oY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgV2Vi
S2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKTsKLSAgICB2b2lkIHN0YXJ0RHJhZ2dp
bmcoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViRHJhZ0RhdGEmLCBXZWJLaXQ6
OldlYkRyYWdPcGVyYXRpb25zTWFzaywgY29uc3QgV2ViS2l0OjpXZWJJbWFnZSYsIGNvbnN0IFdl
YktpdDo6V2ViUG9pbnQmKTsKLSAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJL
aXQ6OldlYlJhbmdlJik7Ci0gICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFdlYktpdDo6
V2ViUmFuZ2UmKTsKLSAgICBib29sIHNob3VsZEluc2VydE5vZGUoY29uc3QgV2ViS2l0OjpXZWJO
b2RlJiwgY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYsIFdlYktpdDo6V2ViRWRpdGluZ0FjdGlvbik7
Ci0gICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0ZXh0
LCBjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiwgV2ViS2l0OjpXZWJFZGl0aW5nQWN0aW9uKTsKLSAg
ICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYg
ZnJvbVJhbmdlLCBjb25zdCBXZWJLaXQ6OldlYlJhbmdlJiB0b1JhbmdlLCBXZWJLaXQ6OldlYlRl
eHRBZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZyk7Ci0gICAgYm9vbCBzaG91bGREZWxldGVS
YW5nZShjb25zdCBXZWJLaXQ6OldlYlJhbmdlJik7Ci0gICAgYm9vbCBzaG91bGRBcHBseVN0eWxl
KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBzdHlsZSwgY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYp
OwotICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTZWxlY3Rp
b24oYm9vbCBpc0VtcHR5U2VsZWN0aW9uKTsKLSAgICB2b2lkIGRpZENoYW5nZUNvbnRlbnRzKCk7
Ci0gICAgdm9pZCBkaWRFbmRFZGl0aW5nKCk7Ci0gICAgYm9vbCBjcmVhdGVWaWV3KFdlYktpdDo6
V2ViRnJhbWUqIGNyZWF0b3IsIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdl
YktpdDo6V2ViV2luZG93RmVhdHVyZXMmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZnJhbWVO
YW1lLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kpOwotICAgIFdlYktpdDo6V2ViUGx1Z2lu
KiBjcmVhdGVQbHVnaW4oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViUGx1Z2lu
UGFyYW1zJik7Ci0gICAgdm9pZCBzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
Jik7Ci0gICAgdm9pZCBkaWRTdG9wTG9hZGluZygpOwotICAgIHZvaWQgc2hvd0NvbnRleHRNZW51
KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYkNvbnRleHRNZW51RGF0YSYpOwot
ICAgIFdlYktpdDo6V2ViVXNlck1lZGlhQ2xpZW50KiB1c2VyTWVkaWFDbGllbnQoKTsKLSAgICB2
b2lkIHByaW50UGFnZShXZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgV2ViS2l0OjpXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblByZXNlbnRlcigpOwotICAgIFdlYktpdDo6V2Vi
R2VvbG9jYXRpb25DbGllbnQqIGdlb2xvY2F0aW9uQ2xpZW50KCk7Ci0gICAgV2ViS2l0OjpXZWJT
cGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcihXZWJLaXQ6OldlYlNw
ZWVjaElucHV0TGlzdGVuZXIqKTsKLSAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXIqIHNw
ZWVjaFJlY29nbml6ZXIoKTsKLSAgICBXZWJLaXQ6OldlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50
KiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpOwotICAgIGJvb2wgcmVxdWVzdFBvaW50ZXJMb2Nr
KCk7Ci0gICAgdm9pZCByZXF1ZXN0UG9pbnRlclVubG9jaygpOwotICAgIGJvb2wgaXNQb2ludGVy
TG9ja2VkKCk7Ci0gICAgdm9pZCBkaWRGb2N1cygpOwotICAgIHZvaWQgZGlkQmx1cigpOwotCi0g
ICAgdm9pZCB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25z
dCBXZWJLaXQ6OldlYlVSTCYgZnJvbSwgY29uc3QgV2ViS2l0OjpXZWJVUkwmIHRvLCBkb3VibGUg
aW50ZXJ2YWwsIGRvdWJsZSBmaXJlX3RpbWUpOwotICAgIHZvaWQgZGlkQ2FuY2VsQ2xpZW50UmVk
aXJlY3QoV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQgZGlkU3RhcnRQcm92aXNpb25hbExv
YWQoV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIGRpZEZhaWxQ
cm92aXNpb25hbExvYWQoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViVVJMRXJy
b3ImKTsKLSAgICB2b2lkIGRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJLaXQ6OldlYkZyYW1l
KiwgYm9vbCBpc05ld05hdmlnYXRpb24pOwotICAgIHZvaWQgZGlkUmVjZWl2ZVRpdGxlKFdlYktp
dDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGl0bGUsIFdlYktpdDo6V2Vi
VGV4dERpcmVjdGlvbik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VJY29uKFdlYktpdDo6V2ViRnJhbWUq
LCBXZWJLaXQ6OldlYkljb25VUkw6OlR5cGUpOwotICAgIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRM
b2FkKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAgICB2b2lkIGRpZEhhbmRsZU9ubG9hZEV2ZW50cyhX
ZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBkaWRGYWlsTG9hZChXZWJLaXQ6OldlYkZyYW1l
KiwgY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYpOwotICAgIHZvaWQgZGlkRmluaXNoTG9hZChX
ZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2Uo
V2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudChX
ZWJLaXQ6OldlYkZyYW1lKik7Ci0gICAgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoV2ViS2l0
OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mLCBjb25zdCBXZWJL
aXQ6OldlYlVSTCYgaW5zZWN1cmVVUkwpOwotICAgIHZvaWQgZGlkRGV0ZWN0WFNTKFdlYktpdDo6
V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgaW5zZWN1cmVVUkwsIGJvb2wgZGlkQmxv
Y2tFbnRpcmVQYWdlKTsKLSAgICB2b2lkIGFzc2lnbklkZW50aWZpZXJUb1JlcXVlc3QoV2ViS2l0
OjpXZWJGcmFtZSosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVx
dWVzdCYpOwotICAgIHZvaWQgd2lsbFJlcXVlc3RSZXNvdXJjZShXZWJLaXQ6OldlYkZyYW1lKiwg
Y29uc3QgV2ViS2l0OjpXZWJDYWNoZWRVUkxSZXF1ZXN0Jik7Ci0gICAgYm9vbCBjYW5IYW5kbGVS
ZXF1ZXN0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmKTsK
LSAgICBXZWJLaXQ6OldlYlVSTEVycm9yIGNhbm5vdEhhbmRsZVJlcXVlc3RFcnJvcihXZWJLaXQ6
OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0Jik7Ci0gICAgdm9pZCBkaWRD
cmVhdGVEYXRhU291cmNlKFdlYktpdDo6V2ViRnJhbWUqLCBXZWJLaXQ6OldlYkRhdGFTb3VyY2Uq
KTsKLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6OldlYkZyYW1lKiwgdW5zaWduZWQg
aWRlbnRpZmllciwgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViS2l0OjpXZWJVUkxS
ZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
V2ViS2l0OjpXZWJGcmFtZSosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFdlYktpdDo6V2Vi
VVJMUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZENoYW5nZVJlc291cmNlUHJpb3JpdHkoV2ViS2l0
OjpXZWJGcmFtZSosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFdlYktpdDo6V2ViVVJMUmVx
dWVzdDo6UHJpb3JpdHkmKTsKLSAgICB2b2lkIGRpZEZpbmlzaFJlc291cmNlTG9hZChXZWJLaXQ6
OldlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllcik7Ci0gICAgdm9pZCBkaWRGYWlsUmVzb3Vy
Y2VMb2FkKFdlYktpdDo6V2ViRnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJL
aXQ6OldlYlVSTEVycm9yJik7Ci0gICAgdm9pZCB1bmFibGVUb0ltcGxlbWVudFBvbGljeVdpdGhF
cnJvcihXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYpOwotICAg
IHZvaWQgZGlkQWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJLaXQ6OldlYkNvbnNvbGVNZXNz
YWdlJiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHNvdXJjZU5hbWUsIHVuc2lnbmVkIHNvdXJj
ZUxpbmUpOwotICAgIHZvaWQgcnVuTW9kYWxBbGVydERpYWxvZyhXZWJLaXQ6OldlYkZyYW1lKiwg
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLSAgICBib29sIHJ1bk1vZGFsQ29uZmlybURpYWxv
ZyhXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLSAgICBib29s
IHJ1bk1vZGFsUHJvbXB0RGlhbG9nKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6Oldl
YlN0cmluZyYgbWVzc2FnZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGRlZmF1bHRWYWx1ZSwg
V2ViS2l0OjpXZWJTdHJpbmcqIGFjdHVhbFZhbHVlKTsKLSAgICBib29sIHJ1bk1vZGFsQmVmb3Jl
VW5sb2FkRGlhbG9nKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYp
OwotICAgIFdlYktpdDo6V2ViTmF2aWdhdGlvblBvbGljeSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uKFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmLCBXZWJL
aXQ6OldlYk5hdmlnYXRpb25UeXBlLCBjb25zdCBXZWJLaXQ6OldlYk5vZGUmIG9yaWdpbmF0aW5n
Tm9kZSwgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5IGRlZmF1bHRQb2xpY3ksIGJvb2wgaXNS
ZWRpcmVjdCk7Ci0gICAgYm9vbCB3aWxsQ2hlY2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChXZWJL
aXQ6OldlYkZyYW1lKiBzb3VyY2VGcmFtZSwgV2ViS2l0OjpXZWJGcmFtZSogdGFyZ2V0RnJhbWUs
IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBXZWJLaXQ6OldlYkRPTU1lc3NhZ2VF
dmVudCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBsb2NhdGlvbkNoYW5nZURvbmUoV2ViS2l0OjpX
ZWJGcmFtZSopOwotICAgIHZvaWQgcGFpbnRSZWN0KGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwot
ICAgIHZvaWQgcGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpOwotICAgIHZvaWQgcGFpbnRQYWdlc1dp
dGhCb3VuZGFyaWVzKCk7Ci0gICAgU2tDYW52YXMqIGNhbnZhcygpOwotICAgIHZvaWQgZGlzcGxh
eVJlcGFpbnRNYXNrKCk7Ci0KLSAgICBUZXN0SW50ZXJmYWNlcyogbV90ZXN0SW50ZXJmYWNlczsK
LSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0KLSAgICBzdGQ6OmF1dG9fcHRyPFNw
ZWxsQ2hlY2tDbGllbnQ+IG1fc3BlbGxjaGVjazsKLSAgICBzdGQ6OmF1dG9fcHRyPFdlYlVzZXJN
ZWRpYUNsaWVudE1vY2s+IG1fdXNlck1lZGlhQ2xpZW50OwotCi0gICAgLy8gUGFpbnRpbmcuCi0g
ICAgc3RkOjphdXRvX3B0cjxTa0NhbnZhcz4gbV9jYW52YXM7Ci0gICAgV2ViS2l0OjpXZWJSZWN0
IG1fcGFpbnRSZWN0OwotICAgIGJvb2wgbV9pc1BhaW50aW5nOwotICAgIHN0ZDo6bWFwPHVuc2ln
bmVkLCBzdGQ6OnN0cmluZz4gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXA7Ci0gICAgc3RkOjptYXA8
dW5zaWduZWQsIFdlYktpdDo6V2ViVVJMUmVxdWVzdD4gbV9yZXF1ZXN0TWFwOwotCi0gICAgYm9v
bCBtX2xvZ0NvbnNvbGVPdXRwdXQ7Ci0KLSAgICBzdGQ6OmF1dG9fcHRyPFdlYktpdDo6V2ViR2Vv
bG9jYXRpb25DbGllbnRNb2NrPiBtX2dlb2xvY2F0aW9uQ2xpZW50OwotICAgIHN0ZDo6YXV0b19w
dHI8V2ViS2l0OjpXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2s+IG1fZGV2aWNlT3JpZW50
YXRpb25DbGllbnQ7Ci0gICAgc3RkOjphdXRvX3B0cjxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4g
bV9zcGVlY2hSZWNvZ25pemVyOwotICAgIHN0ZDo6YXV0b19wdHI8TW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcj4gbV9zcGVlY2hJbnB1dENvbnRyb2xsZXI7Ci0KLXByaXZhdGU6Ci0gICAgV2Vi
VGVzdFByb3h5QmFzZShXZWJUZXN0UHJveHlCYXNlJik7Ci0gICAgV2ViVGVzdFByb3h5QmFzZSYg
b3BlcmF0b3I9KGNvbnN0IFdlYlRlc3RQcm94eUJhc2UmKTsKLX07Ci0KLS8vIFVzZSB0aGlzIHRl
bXBsYXRlIHRvIGluamVjdCBtZXRob2RzIGludG8geW91ciBXZWJWaWV3Q2xpZW50L1dlYkZyYW1l
Q2xpZW50Ci0vLyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlZCBmb3IgdGhlIHJ1bm5pbmcgbGF5b3V0
IHRlc3RzLgotdGVtcGxhdGU8Y2xhc3MgQmFzZSwgdHlwZW5hbWUgVD4KLWNsYXNzIFdlYlRlc3RQ
cm94eSA6IHB1YmxpYyBCYXNlLCBwdWJsaWMgV2ViVGVzdFByb3h5QmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgV2ViVGVzdFByb3h5KFQgdCkKLSAgICAgICAgOiBCYXNlKHQpCi0gICAgewot
ICAgIH0KLQotICAgIHZpcnR1YWwgfldlYlRlc3RQcm94eSgpIHsgfQotCi0gICAgLy8gV2ViVmll
d0NsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkSW52YWxpZGF0ZVJl
Y3QoY29uc3QgV2ViS2l0OjpXZWJSZWN0JiByZWN0KQotICAgIHsKLSAgICAgICAgV2ViVGVzdFBy
b3h5QmFzZTo6ZGlkSW52YWxpZGF0ZVJlY3QocmVjdCk7Ci0gICAgICAgIEJhc2U6OmRpZEludmFs
aWRhdGVSZWN0KHJlY3QpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xsUmVjdChp
bnQgZHgsIGludCBkeSwgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBjbGlwUmVjdCkKLSAgICB7Ci0g
ICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7
Ci0gICAgICAgIEJhc2U6OmRpZFNjcm9sbFJlY3QoZHgsIGR5LCBjbGlwUmVjdCk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpCi0gICAgewotICAgICAgICBXZWJU
ZXN0UHJveHlCYXNlOjpzY2hlZHVsZUNvbXBvc2l0ZSgpOwotICAgICAgICBCYXNlOjpzY2hlZHVs
ZUNvbXBvc2l0ZSgpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24o
KQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2NoZWR1bGVBbmltYXRpb24oKTsK
LSAgICAgICAgQmFzZTo6c2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgV2ViS2l0OjpXZWJSZWN0JiByZWN0KQotICAgIHsKLSAg
ICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2V0V2luZG93UmVjdChyZWN0KTsKLSAgICAgICAgQmFz
ZTo6c2V0V2luZG93UmVjdChyZWN0KTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNob3coV2Vi
S2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5IHBvbGljeSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQ
cm94eUJhc2U6OnNob3cocG9saWN5KTsKLSAgICAgICAgQmFzZTo6c2hvdyhwb2xpY3kpOwotICAg
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQXV0b1Jlc2l6ZShjb25zdCBXZWJLaXQ6OldlYlNpemUm
IG5ld1NpemUpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRBdXRvUmVzaXpl
KG5ld1NpemUpOwotICAgICAgICBCYXNlOjpkaWRBdXRvUmVzaXplKG5ld1NpemUpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgcG9zdEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb24oY29uc3QgV2Vi
S2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QsIFdlYktpdDo6V2ViQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCi0gICAgewotICAgICAgICBXZWJUZXN0UHJv
eHlCYXNlOjpwb3N0QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbihvYmplY3QsIG5vdGlmaWNhdGlv
bik7Ci0gICAgICAgIEJhc2U6OnBvc3RBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKG9iamVjdCwg
bm90aWZpY2F0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZ2dpbmcoV2Vi
S2l0OjpXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViRHJhZ0RhdGEmIGRhdGEsIFdl
YktpdDo6V2ViRHJhZ09wZXJhdGlvbnNNYXNrIG1hc2ssIGNvbnN0IFdlYktpdDo6V2ViSW1hZ2Um
IGltYWdlLCBjb25zdCBXZWJLaXQ6OldlYlBvaW50JiBwb2ludCkKLSAgICB7Ci0gICAgICAgIFdl
YlRlc3RQcm94eUJhc2U6OnN0YXJ0RHJhZ2dpbmcoZnJhbWUsIGRhdGEsIG1hc2ssIGltYWdlLCBw
b2ludCk7Ci0gICAgICAgIEJhc2U6OnN0YXJ0RHJhZ2dpbmcoZnJhbWUsIGRhdGEsIG1hc2ssIGlt
YWdlLCBwb2ludCk7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmco
Y29uc3QgV2ViS2l0OjpXZWJSYW5nZSYgcmFuZ2UpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJv
eHlCYXNlOjpzaG91bGRCZWdpbkVkaXRpbmcocmFuZ2UpOwotICAgICAgICByZXR1cm4gQmFzZTo6
c2hvdWxkQmVnaW5FZGl0aW5nKHJhbmdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZEVuZEVkaXRpbmcoY29uc3QgV2ViS2l0OjpXZWJSYW5nZSYgcmFuZ2UpCi0gICAgewotICAgICAg
ICBXZWJUZXN0UHJveHlCYXNlOjpzaG91bGRFbmRFZGl0aW5nKHJhbmdlKTsKLSAgICAgICAgcmV0
dXJuIEJhc2U6OnNob3VsZEVuZEVkaXRpbmcocmFuZ2UpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkSW5zZXJ0Tm9kZShjb25zdCBXZWJLaXQ6OldlYk5vZGUmIG5vZGUsIGNvbnN0IFdl
YktpdDo6V2ViUmFuZ2UmIHJhbmdlLCBXZWJLaXQ6OldlYkVkaXRpbmdBY3Rpb24gYWN0aW9uKQot
ICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkSW5zZXJ0Tm9kZShub2RlLCBy
YW5nZSwgYWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIEJhc2U6OnNob3VsZEluc2VydE5vZGUobm9k
ZSwgcmFuZ2UsIGFjdGlvbik7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJbnNlcnRU
ZXh0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0ZXh0LCBjb25zdCBXZWJLaXQ6OldlYlJhbmdl
JiByYW5nZSwgV2ViS2l0OjpXZWJFZGl0aW5nQWN0aW9uIGFjdGlvbikKLSAgICB7Ci0gICAgICAg
IFdlYlRlc3RQcm94eUJhc2U6OnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UsIGFjdGlvbik7
Ci0gICAgICAgIHJldHVybiBCYXNlOjpzaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLCBhY3Rp
b24pOwotICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShj
b25zdCBXZWJLaXQ6OldlYlJhbmdlJiBmcm9tUmFuZ2UsIGNvbnN0IFdlYktpdDo6V2ViUmFuZ2Um
IHRvUmFuZ2UsIFdlYktpdDo6V2ViVGV4dEFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRSYW5nZShmcm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7
Ci0gICAgICAgIHJldHVybiBCYXNlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGZyb21SYW5n
ZSwgdG9SYW5nZSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKLSAgICB9Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZERlbGV0ZVJhbmdlKGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmIHJhbmdlKQot
ICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkRGVsZXRlUmFuZ2UocmFuZ2Up
OwotICAgICAgICByZXR1cm4gQmFzZTo6c2hvdWxkRGVsZXRlUmFuZ2UocmFuZ2UpOwotICAgIH0K
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXBwbHlTdHlsZShjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgc3R5bGUsIGNvbnN0IFdlYktpdDo6V2ViUmFuZ2UmIHJhbmdlKQotICAgIHsKLSAgICAgICAg
V2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgcmFuZ2UpOwotICAgICAg
ICByZXR1cm4gQmFzZTo6c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgcmFuZ2UpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQmVnaW5FZGl0aW5nKCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQ
cm94eUJhc2U6OmRpZEJlZ2luRWRpdGluZygpOwotICAgICAgICBCYXNlOjpkaWRCZWdpbkVkaXRp
bmcoKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihib29sIGlz
RW1wdHlTZWxlY3Rpb24pCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRDaGFu
Z2VTZWxlY3Rpb24oaXNFbXB0eVNlbGVjdGlvbik7Ci0gICAgICAgIEJhc2U6OmRpZENoYW5nZVNl
bGVjdGlvbihpc0VtcHR5U2VsZWN0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZUNvbnRlbnRzKCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZENoYW5n
ZUNvbnRlbnRzKCk7Ci0gICAgICAgIEJhc2U6OmRpZENoYW5nZUNvbnRlbnRzKCk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBkaWRFbmRFZGl0aW5nKCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQ
cm94eUJhc2U6OmRpZEVuZEVkaXRpbmcoKTsKLSAgICAgICAgQmFzZTo6ZGlkRW5kRWRpdGluZygp
OwotICAgIH0KLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViVmlldyogY3JlYXRlVmlldyhXZWJLaXQ6
OldlYkZyYW1lKiBjcmVhdG9yLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYktpdDo6V2ViV2luZG93RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZnJhbWVOYW1lLCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kgcG9saWN5
KQotICAgIHsKLSAgICAgICAgaWYgKCFXZWJUZXN0UHJveHlCYXNlOjpjcmVhdGVWaWV3KGNyZWF0
b3IsIHJlcXVlc3QsIGZlYXR1cmVzLCBmcmFtZU5hbWUsIHBvbGljeSkpCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIEJhc2U6OmNyZWF0ZVZpZXcoY3JlYXRvciwgcmVxdWVz
dCwgZmVhdHVyZXMsIGZyYW1lTmFtZSwgcG9saWN5KTsKLSAgICB9Ci0gICAgV2ViS2l0OjpXZWJQ
bHVnaW4qIGNyZWF0ZVBsdWdpbihXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0
OjpXZWJQbHVnaW5QYXJhbXMmIHBhcmFtcykKLSAgICB7Ci0gICAgICAgIFdlYktpdDo6V2ViUGx1
Z2luKiBwbHVnaW4gPSBXZWJUZXN0UHJveHlCYXNlOjpjcmVhdGVQbHVnaW4oZnJhbWUsIHBhcmFt
cyk7Ci0gICAgICAgIGlmIChwbHVnaW4pCi0gICAgICAgICAgICByZXR1cm4gcGx1Z2luOwotICAg
ICAgICByZXR1cm4gQmFzZTo6Y3JlYXRlUGx1Z2luKGZyYW1lLCBwYXJhbXMpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzVGV4dChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGV4
dCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OnNldFN0YXR1c1RleHQodGV4dCk7
Ci0gICAgICAgIEJhc2U6OnNldFN0YXR1c1RleHQodGV4dCk7Ci0gICAgfQotICAgIHZpcnR1YWwg
dm9pZCBkaWRTdG9wTG9hZGluZygpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpk
aWRTdG9wTG9hZGluZygpOwotICAgICAgICBCYXNlOjpkaWRTdG9wTG9hZGluZygpOwotICAgIH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJLaXQ6OldlYkNvbnRleHRNZW51RGF0YSYgY29udGV4dE1lbnVEYXRhKQotICAg
IHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6c2hvd0NvbnRleHRNZW51KGZyYW1lLCBjb250
ZXh0TWVudURhdGEpOwotICAgICAgICBCYXNlOjpzaG93Q29udGV4dE1lbnUoZnJhbWUsIGNvbnRl
eHRNZW51RGF0YSk7Ci0gICAgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJVc2VyTWVkaWFDbGll
bnQqIHVzZXJNZWRpYUNsaWVudCgpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5
QmFzZTo6dXNlck1lZGlhQ2xpZW50KCk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwcmludFBh
Z2UoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlC
YXNlOjpwcmludFBhZ2UoZnJhbWUpOwotICAgIH0KLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViTm90
aWZpY2F0aW9uUHJlc2VudGVyKiBub3RpZmljYXRpb25QcmVzZW50ZXIoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpOwotICAg
IH0KLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR2VvbG9jYXRpb25DbGllbnQqIGdlb2xvY2F0aW9u
Q2xpZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNlOjpnZW9sb2Nh
dGlvbkNsaWVudCgpOwotICAgIH0KLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyKiBzcGVlY2hJbnB1dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVlY2hJbnB1dExp
c3RlbmVyKiBsaXN0ZW5lcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNl
OjpzcGVlY2hJbnB1dENvbnRyb2xsZXIobGlzdGVuZXIpOwotICAgIH0KLSAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2duaXplcigpCi0gICAgewotICAg
ICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplcigpOwotICAgIH0K
LSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIGRldmljZU9y
aWVudGF0aW9uQ2xpZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNl
OjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgcmVx
dWVzdFBvaW50ZXJMb2NrKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBXZWJUZXN0UHJveHlCYXNl
OjpyZXF1ZXN0UG9pbnRlckxvY2soKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RQ
b2ludGVyVW5sb2NrKCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OnJlcXVlc3RQ
b2ludGVyVW5sb2NrKCk7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJMb2NrZWQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYlRlc3RQcm94eUJhc2U6OmlzUG9pbnRlckxvY2tl
ZCgpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRm9jdXMoKQotICAgIHsKLSAgICAgICAg
V2ViVGVzdFByb3h5QmFzZTo6ZGlkRm9jdXMoKTsKLSAgICAgICAgQmFzZTo6ZGlkRm9jdXMoKTsK
LSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEJsdXIoKQotICAgIHsKLSAgICAgICAgV2ViVGVz
dFByb3h5QmFzZTo6ZGlkQmx1cigpOwotICAgICAgICBCYXNlOjpkaWRCbHVyKCk7Ci0gICAgfQot
Ci0gICAgLy8gV2ViRnJhbWVDbGllbnQgaW1wbGVtZW50YXRpb24uCi0gICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGNvbnN0
IFdlYktpdDo6V2ViVVJMJiBmcm9tLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgdG8sIGRvdWJsZSBp
bnRlcnZhbCwgZG91YmxlIGZpcmVUaW1lKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFz
ZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChmcmFtZSwgZnJvbSwgdG8sIGludGVydmFsLCBm
aXJlVGltZSk7Ci0gICAgICAgIEJhc2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoZnJhbWUs
IGZyb20sIHRvLCBpbnRlcnZhbCwgZmlyZVRpbWUpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCi0gICAgewot
ICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdChmcmFtZSk7
Ci0gICAgICAgIEJhc2U6OmRpZENhbmNlbENsaWVudFJlZGlyZWN0KGZyYW1lKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKFdlYktpdDo6V2ViRnJhbWUq
IGZyYW1lKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkU3RhcnRQcm92aXNp
b25hbExvYWQoZnJhbWUpOwotICAgICAgICBCYXNlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZChm
cmFtZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbExvYWQoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUpCi0gICAgewotICAgICAg
ICBXZWJUZXN0UHJveHlCYXNlOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25h
bExvYWQoZnJhbWUpOwotICAgICAgICBCYXNlOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbExvYWQoZnJhbWUpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJV
UkxFcnJvciYgZXJyb3IpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRGYWls
UHJvdmlzaW9uYWxMb2FkKGZyYW1lLCBlcnJvcik7Ci0gICAgICAgIEJhc2U6OmRpZEZhaWxQcm92
aXNpb25hbExvYWQoZnJhbWUsIGVycm9yKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENv
bW1pdFByb3Zpc2lvbmFsTG9hZChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgYm9vbCBpc05ld05h
dmlnYXRpb24pCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRDb21taXRQcm92
aXNpb25hbExvYWQoZnJhbWUsIGlzTmV3TmF2aWdhdGlvbik7Ci0gICAgICAgIEJhc2U6OmRpZENv
bW1pdFByb3Zpc2lvbmFsTG9hZChmcmFtZSwgaXNOZXdOYXZpZ2F0aW9uKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVUaXRsZShXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRpdGxlLCBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24gZGly
ZWN0aW9uKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkUmVjZWl2ZVRpdGxl
KGZyYW1lLCB0aXRsZSwgZGlyZWN0aW9uKTsKLSAgICAgICAgQmFzZTo6ZGlkUmVjZWl2ZVRpdGxl
KGZyYW1lLCB0aXRsZSwgZGlyZWN0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENo
YW5nZUljb24oV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIFdlYktpdDo6V2ViSWNvblVSTDo6VHlw
ZSBpY29uVHlwZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZENoYW5nZUlj
b24oZnJhbWUsIGljb25UeXBlKTsKLSAgICAgICAgQmFzZTo6ZGlkQ2hhbmdlSWNvbihmcmFtZSwg
aWNvblR5cGUpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRMb2Fk
KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFz
ZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkKGZyYW1lKTsKLSAgICAgICAgQmFzZTo6ZGlkRmluaXNo
RG9jdW1lbnRMb2FkKGZyYW1lKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEhhbmRsZU9u
bG9hZEV2ZW50cyhXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIFdlYlRl
c3RQcm94eUJhc2U6OmRpZEhhbmRsZU9ubG9hZEV2ZW50cyhmcmFtZSk7Ci0gICAgICAgIEJhc2U6
OmRpZEhhbmRsZU9ubG9hZEV2ZW50cyhmcmFtZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsTG9hZChXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJVUkxF
cnJvciYgZXJyb3IpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRGYWlsTG9h
ZChmcmFtZSwgZXJyb3IpOwotICAgICAgICBCYXNlOjpkaWRGYWlsTG9hZChmcmFtZSwgZXJyb3Ip
OwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZChXZWJLaXQ6OldlYkZyYW1l
KiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZEZpbmlzaExvYWQo
ZnJhbWUpOwotICAgICAgICBCYXNlOjpkaWRGaW5pc2hMb2FkKGZyYW1lKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB2b2lkIGRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZShXZWJLaXQ6OldlYkZyYW1l
KiBmcmFtZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZENoYW5nZUxvY2F0
aW9uV2l0aGluUGFnZShmcmFtZSk7Ci0gICAgICAgIEJhc2U6OmRpZENoYW5nZUxvY2F0aW9uV2l0
aGluUGFnZShmcmFtZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwbGF5SW5zZWN1
cmVDb250ZW50KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lKQotICAgIHsKLSAgICAgICAgV2ViVGVz
dFByb3h5QmFzZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudChmcmFtZSk7Ci0gICAgICAgIEJh
c2U6OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoZnJhbWUpOwotICAgIH0KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50KFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIGNvbnN0IFdlYktpdDo6V2ViVVJM
JiBpbnNlY3VyZVVSTCkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZFJ1bklu
c2VjdXJlQ29udGVudChmcmFtZSwgb3JpZ2luLCBpbnNlY3VyZVVSTCk7Ci0gICAgICAgIEJhc2U6
OmRpZFJ1bkluc2VjdXJlQ29udGVudChmcmFtZSwgb3JpZ2luLCBpbnNlY3VyZVVSTCk7Ci0gICAg
fQotICAgIHZpcnR1YWwgdm9pZCBkaWREZXRlY3RYU1MoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUs
IGNvbnN0IFdlYktpdDo6V2ViVVJMJiBpbnNlY3VyZVVSTCwgYm9vbCBkaWRCbG9ja0VudGlyZVBh
Z2UpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWREZXRlY3RYU1MoZnJhbWUs
IGluc2VjdXJlVVJMLCBkaWRCbG9ja0VudGlyZVBhZ2UpOwotICAgICAgICBCYXNlOjpkaWREZXRl
Y3RYU1MoZnJhbWUsIGluc2VjdXJlVVJMLCBkaWRCbG9ja0VudGlyZVBhZ2UpOwotICAgIH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRvUmVxdWVzdChXZWJLaXQ6OldlYkZyYW1l
KiBmcmFtZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
JiByZXF1ZXN0KQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6YXNzaWduSWRlbnRp
ZmllclRvUmVxdWVzdChmcmFtZSwgaWRlbnRpZmllciwgcmVxdWVzdCk7Ci0gICAgICAgIEJhc2U6
OmFzc2lnbklkZW50aWZpZXJUb1JlcXVlc3QoZnJhbWUsIGlkZW50aWZpZXIsIHJlcXVlc3QpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlcXVlc3RSZXNvdXJjZShXZWJLaXQ6OldlYkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJDYWNoZWRVUkxSZXF1ZXN0JiByZXF1ZXN0KQot
ICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6d2lsbFJlcXVlc3RSZXNvdXJjZShmcmFt
ZSwgcmVxdWVzdCk7Ci0gICAgICAgIEJhc2U6OndpbGxSZXF1ZXN0UmVzb3VyY2UoZnJhbWUsIHJl
cXVlc3QpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChXZWJLaXQ6
OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQot
ICAgIHsKLSAgICAgICAgaWYgKCFXZWJUZXN0UHJveHlCYXNlOjpjYW5IYW5kbGVSZXF1ZXN0KGZy
YW1lLCByZXF1ZXN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IEJhc2U6OmNhbkhhbmRsZVJlcXVlc3QoZnJhbWUsIHJlcXVlc3QpOwotICAgIH0KLSAgICB2aXJ0
dWFsIFdlYktpdDo6V2ViVVJMRXJyb3IgY2Fubm90SGFuZGxlUmVxdWVzdEVycm9yKFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCi0g
ICAgewotICAgICAgICByZXR1cm4gV2ViVGVzdFByb3h5QmFzZTo6Y2Fubm90SGFuZGxlUmVxdWVz
dEVycm9yKGZyYW1lLCByZXF1ZXN0KTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZENyZWF0
ZURhdGFTb3VyY2UoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIFdlYktpdDo6V2ViRGF0YVNvdXJj
ZSogZHMpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpkaWRDcmVhdGVEYXRhU291
cmNlKGZyYW1lLCBkcyk7Ci0gICAgICAgIEJhc2U6OmRpZENyZWF0ZURhdGFTb3VyY2UoZnJhbWUs
IGRzKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChXZWJLaXQ6Oldl
YkZyYW1lKiBmcmFtZSwgdW5zaWduZWQgaWRlbnRpZmllciwgV2ViS2l0OjpXZWJVUkxSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBXZWJLaXQ6OldlYlVSTFJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNl
KQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6d2lsbFNlbmRSZXF1ZXN0KGZyYW1l
LCBpZGVudGlmaWVyLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKLSAgICAgICAgQmFzZTo6
d2lsbFNlbmRSZXF1ZXN0KGZyYW1lLCBpZGVudGlmaWVyLCByZXF1ZXN0LCByZWRpcmVjdFJlc3Bv
bnNlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJLaXQ6
OldlYkZyYW1lKiBmcmFtZSwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2ViS2l0OjpXZWJV
UkxSZXNwb25zZSYgcmVzcG9uc2UpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpk
aWRSZWNlaXZlUmVzcG9uc2UoZnJhbWUsIGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKLSAgICAgICAg
QmFzZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGZyYW1lLCBpZGVudGlmaWVyLCByZXNwb25zZSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VSZXNvdXJjZVByaW9yaXR5KFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJLaXQ6OldlYlVS
TFJlcXVlc3Q6OlByaW9yaXR5JiBwcmlvcml0eSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94
eUJhc2U6OmRpZENoYW5nZVJlc291cmNlUHJpb3JpdHkoZnJhbWUsIGlkZW50aWZpZXIsIHByaW9y
aXR5KTsKLSAgICAgICAgQmFzZTo6ZGlkQ2hhbmdlUmVzb3VyY2VQcmlvcml0eShmcmFtZSwgaWRl
bnRpZmllciwgcHJpb3JpdHkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoUmVz
b3VyY2VMb2FkKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCB1bnNpZ25lZCBpZGVudGlmaWVyKQot
ICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6ZGlkRmluaXNoUmVzb3VyY2VMb2FkKGZy
YW1lLCBpZGVudGlmaWVyKTsKLSAgICAgICAgQmFzZTo6ZGlkRmluaXNoUmVzb3VyY2VMb2FkKGZy
YW1lLCBpZGVudGlmaWVyKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZXNvdXJj
ZUxvYWQoV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0
IFdlYktpdDo6V2ViVVJMRXJyb3ImIGVycm9yKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5
QmFzZTo6ZGlkRmFpbFJlc291cmNlTG9hZChmcmFtZSwgaWRlbnRpZmllciwgZXJyb3IpOwotICAg
ICAgICBCYXNlOjpkaWRGYWlsUmVzb3VyY2VMb2FkKGZyYW1lLCBpZGVudGlmaWVyLCBlcnJvcik7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCB1bmFibGVUb0ltcGxlbWVudFBvbGljeVdpdGhFcnJv
cihXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJVUkxFcnJvciYgZXJy
b3IpCi0gICAgewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjp1bmFibGVUb0ltcGxlbWVudFBv
bGljeVdpdGhFcnJvcihmcmFtZSwgZXJyb3IpOwotICAgICAgICBCYXNlOjp1bmFibGVUb0ltcGxl
bWVudFBvbGljeVdpdGhFcnJvcihmcmFtZSwgZXJyb3IpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgZGlkQWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBXZWJLaXQ6OldlYkNvbnNvbGVNZXNzYWdl
JiBtZXNzYWdlLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgc291cmNlTmFtZSwgdW5zaWduZWQg
c291cmNlTGluZSkKLSAgICB7Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OmRpZEFkZE1lc3Nh
Z2VUb0NvbnNvbGUobWVzc2FnZSwgc291cmNlTmFtZSwgc291cmNlTGluZSk7Ci0gICAgICAgIEJh
c2U6OmRpZEFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgc291cmNlTmFtZSwgc291cmNlTGlu
ZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBydW5Nb2RhbEFsZXJ0RGlhbG9nKFdlYktpdDo6
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVzc2FnZSkKLSAgICB7
Ci0gICAgICAgIFdlYlRlc3RQcm94eUJhc2U6OnJ1bk1vZGFsQWxlcnREaWFsb2coZnJhbWUsIG1l
c3NhZ2UpOwotICAgICAgICBCYXNlOjpydW5Nb2RhbEFsZXJ0RGlhbG9nKGZyYW1lLCBtZXNzYWdl
KTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIHJ1bk1vZGFsQ29uZmlybURpYWxvZyhXZWJLaXQ6
OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1lc3NhZ2UpCi0gICAg
ewotICAgICAgICBXZWJUZXN0UHJveHlCYXNlOjpydW5Nb2RhbENvbmZpcm1EaWFsb2coZnJhbWUs
IG1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gQmFzZTo6cnVuTW9kYWxDb25maXJtRGlhbG9nKGZy
YW1lLCBtZXNzYWdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCBib29sIHJ1bk1vZGFsUHJvbXB0RGlh
bG9nKFdlYktpdDo6V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbWVz
c2FnZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV2ViS2l0OjpXZWJT
dHJpbmcqIGFjdHVhbFZhbHVlKQotICAgIHsKLSAgICAgICAgV2ViVGVzdFByb3h5QmFzZTo6cnVu
TW9kYWxQcm9tcHREaWFsb2coZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgYWN0dWFsVmFs
dWUpOwotICAgICAgICByZXR1cm4gQmFzZTo6cnVuTW9kYWxQcm9tcHREaWFsb2coZnJhbWUsIG1l
c3NhZ2UsIGRlZmF1bHRWYWx1ZSwgYWN0dWFsVmFsdWUpOwotICAgIH0KLSAgICB2aXJ0dWFsIGJv
b2wgcnVuTW9kYWxCZWZvcmVVbmxvYWREaWFsb2coV2ViS2l0OjpXZWJGcmFtZSogZnJhbWUsIGNv
bnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdl
YlRlc3RQcm94eUJhc2U6OnJ1bk1vZGFsQmVmb3JlVW5sb2FkRGlhbG9nKGZyYW1lLCBtZXNzYWdl
KTsKLSAgICB9Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3kgZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbihXZWJLaXQ6OldlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViS2l0
OjpXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJLaXQ6OldlYk5hdmlnYXRpb25UeXBlIHR5cGUs
IGNvbnN0IFdlYktpdDo6V2ViTm9kZSYgb3JpZ2luYXRpbmdOb2RlLCBXZWJLaXQ6OldlYk5hdmln
YXRpb25Qb2xpY3kgZGVmYXVsdFBvbGljeSwgYm9vbCBpc1JlZGlyZWN0KQotICAgIHsKLSAgICAg
ICAgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5IHBvbGljeSA9IFdlYlRlc3RQcm94eUJhc2U6
OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb24oZnJhbWUsIHJlcXVlc3QsIHR5cGUsIG9yaWdpbmF0
aW5nTm9kZSwgZGVmYXVsdFBvbGljeSwgaXNSZWRpcmVjdCk7Ci0gICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5SWdub3JlKQotICAgICAgICAgICAgcmV0dXJu
IHBvbGljeTsKLSAgICAgICAgcmV0dXJuIEJhc2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb24o
ZnJhbWUsIHJlcXVlc3QsIHR5cGUsIG9yaWdpbmF0aW5nTm9kZSwgZGVmYXVsdFBvbGljeSwgaXNS
ZWRpcmVjdCk7Ci0gICAgfQotICAgIHZpcnR1YWwgYm9vbCB3aWxsQ2hlY2tBbmREaXNwYXRjaE1l
c3NhZ2VFdmVudChXZWJLaXQ6OldlYkZyYW1lKiBzb3VyY2VGcmFtZSwgV2ViS2l0OjpXZWJGcmFt
ZSogdGFyZ2V0RnJhbWUsIFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4gdGFyZ2V0LCBXZWJLaXQ6
OldlYkRPTU1lc3NhZ2VFdmVudCBldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChXZWJUZXN0UHJv
eHlCYXNlOjp3aWxsQ2hlY2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChzb3VyY2VGcmFtZSwgdGFy
Z2V0RnJhbWUsIHRhcmdldCwgZXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBCYXNlOjp3aWxsQ2hlY2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChzb3VyY2VG
cmFtZSwgdGFyZ2V0RnJhbWUsIHRhcmdldCwgZXZlbnQpOwotICAgIH0KLX07Ci0KLX0KLQotI2Vu
ZGlmIC8vIFdlYlRlc3RQcm94eV9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9wdWJsaWMvV2ViVGVzdFJ1bm5lci5o
CShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3B1YmxpYy9XZWJUZXN0UnVubmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV2ViVGVzdFJ1bm5lcl9oCi0jZGVmaW5lIFdlYlRlc3RSdW5uZXJfaAotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkFycmF5QnVmZmVyVmlldzsKLWNsYXNzIFdlYlBl
cm1pc3Npb25DbGllbnQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3Mg
V2ViVGVzdFJ1bm5lciB7Ci1wdWJsaWM6Ci0gICAgLy8gUmV0dXJucyBhIG1vY2sgV2ViUGVybWlz
c2lvbkNsaWVudCB0aGF0IGlzIHVzZWQgZm9yIGxheW91dCB0ZXN0cy4gQW4KLSAgICAvLyBlbWJl
ZGRlciBzaG91bGQgdXNlIHRoaXMgZm9yIGFsbCBXZWJWaWV3cyBpdCBjcmVhdGVzLgotICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50KiB3ZWJQZXJtaXNzaW9ucygpIGNvbnN0
ID0gMDsKLQotICAgIC8vIEFmdGVyIFdlYlRlc3REZWxlZ2F0ZTo6dGVzdEZpbmlzaGVkIHdhcyBp
bnZva2VkLCB0aGUgZm9sbG93aW5nIG1ldGhvZHMKLSAgICAvLyBjYW4gYmUgdXNlZCB0byBkZXRl
cm1pbmUgd2hhdCBraW5kIG9mIGR1bXAgdGhlIG1haW4gV2ViVGVzdFByb3h5IGNhbgotICAgIC8v
IHByb3ZpZGUuCi0KLSAgICAvLyBJZiB0cnVlLCBXZWJUZXN0RGVsZWdhdGU6OmF1ZGlvRGF0YSBy
ZXR1cm5zIGFuIGF1ZGlvIGR1bXAgYW5kIG5vIHRleHQKLSAgICAvLyBvciBwaXhlbCByZXN1bHRz
IGFyZSBhdmFpbGFibGUuCi0gICAgdmlydHVhbCBib29sIHNob3VsZER1bXBBc0F1ZGlvKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgV2ViS2l0OjpXZWJBcnJheUJ1ZmZlclZpZXcqIGF1
ZGlvRGF0YSgpIGNvbnN0ID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FsbCB0
byBXZWJUZXN0UHJveHk6OmNhcHR1cmVUcmVlIHdpbGwgaW52b2tlCi0gICAgLy8gV2ViVGVzdERl
bGVnYXRlOjpjYXB0dXJlSGlzdG9yeUZvcldpbmRvdy4KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
RHVtcEJhY2tGb3J3YXJkTGlzdCgpIGNvbnN0ID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBXZWJUZXN0UHJveHk6OmNhcHR1cmVQaXhlbHMgc2hvdWxkIGJlIGludm9rZWQgYWZ0ZXIKLSAg
ICAvLyBjYXB0dXJpbmcgdGV4dCByZXN1bHRzLgotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHZW5l
cmF0ZVBpeGVsUmVzdWx0cygpID0gMDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFdlYlRlc3RSdW5u
ZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCIKLQotI2luY2x1
ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJOb2RlLmgiCi0jaW5jbHVkZSAiV2Vi
VGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJU
ZXN0UnVubmVyIHsKLQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OkFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKCkKLSAgICA6IG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50cyhmYWxzZSkKLXsKLQotICAg
IGJpbmRNZXRob2QoImxvZ0FjY2Vzc2liaWxpdHlFdmVudHMiLCAmQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgi
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInJlbW92ZU5vdGlm
aWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVOb3RpZmlj
YXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKLQotICAgIGJpbmRQcm9wZXJ0eSgiZm9jdXNlZEVsZW1l
bnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJh
Y2spOwotICAgIGJpbmRQcm9wZXJ0eSgicm9vdEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OnJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2spOwotCi0gICAgYmluZE1ldGhvZCgiYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjphY2Nlc3NpYmxl
RWxlbWVudEJ5SWRHZXR0ZXJDYWxsYmFjayk7Ci0KLSAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6YmluZFRvSmF2YXNjcmlwdChXZWJGcmFtZSogZnJhbWUsIGNv
bnN0IFdlYlN0cmluZyYgY2xhc3NuYW1lKQotewotICAgIFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6
OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKLSAgICBDcHBCb3VuZENsYXNzOjpiaW5kVG9KYXZhc2Ny
aXB0KGZyYW1lLCBjbGFzc25hbWUpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpyZXNldCgpCi17Ci0gICAgbV9yb290RWxlbWVudCA9IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qo
KTsKLSAgICBtX2ZvY3VzZWRFbGVtZW50ID0gV2ViQWNjZXNzaWJpbGl0eU9iamVjdCgpOwotICAg
IG1fZWxlbWVudHMuY2xlYXIoKTsKLQotICAgIG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZh
bHNlOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzZXRGb2N1c2VkRWxlbWVu
dChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBmb2N1c2VkRWxlbWVudCkKLXsKLSAgICBt
X2ZvY3VzZWRFbGVtZW50ID0gZm9jdXNlZEVsZW1lbnQ7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRGb2N1c2VkRWxlbWVudCgpCi17Ci0g
ICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fZm9jdXNlZEVsZW1l
bnQgPSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKLSAgICByZXR1cm4gbV9lbGVt
ZW50cy5nZXRPckNyZWF0ZShtX2ZvY3VzZWRFbGVtZW50KTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldFJvb3RFbGVtZW50KCkKLXsKLSAg
ICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKLSAgICAgICAgbV9yb290RWxlbWVudCA9IG1f
d2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwotICAgIHJldHVybiBtX2VsZW1lbnRzLmNy
ZWF0ZVJvb3QobV9yb290RWxlbWVudCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpmaW5kQWNjZXNzaWJsZUVsZW1lbnRCeUlkUmVjdXJzaXZl
KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iaiwgY29uc3QgV2ViU3RyaW5nJiBpZCkK
LXsKLSAgICBpZiAob2JqLmlzTnVsbCgpIHx8IG9iai5pc0RldGFjaGVkKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgV2ViTm9kZSBub2RlID0gb2JqLm5vZGUoKTsKLSAgICBpZiAoIW5vZGUu
aXNOdWxsKCkgJiYgbm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgV2ViRWxlbWVudCBl
bGVtZW50ID0gbm9kZS50bzxXZWJFbGVtZW50PigpOwotICAgICAgICBlbGVtZW50LmdldEF0dHJp
YnV0ZSgiaWQiKTsKLSAgICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpID09IGlk
KSAKLSAgICAgICAgICAgIHJldHVybiBtX2VsZW1lbnRzLmdldE9yQ3JlYXRlKG9iaik7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IG9iai5jaGlsZENvdW50KCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewotICAgICAgICBpZiAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCogcmVzdWx0ID0gZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJl
Y3Vyc2l2ZShvYmouY2hpbGRBdChpKSwgaWQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEFjY2Vzc2libGVFbGVtZW50QnlJZChjb25zdCBzdGQ6
OnN0cmluZyYgaWQpCi17Ci0gICAgaWYgKG1fcm9vdEVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAg
IG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKLQotICAg
IGlmICghbV9yb290RWxlbWVudC51cGRhdGVCYWNraW5nU3RvcmVBbmRDaGVja1ZhbGlkaXR5KCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5
SWRSZWN1cnNpdmUobV9yb290RWxlbWVudCwgV2ViU3RyaW5nOjpmcm9tVVRGOChpZC5jX3N0cigp
KSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnNob3VsZExvZ0FjY2Vzc2li
aWxpdHlFdmVudHMoKQotewotICAgIHJldHVybiBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHM7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6Om5vdGlmaWNhdGlvblJlY2VpdmVkKGNv
bnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBu
b3RpZmljYXRpb25OYW1lKQotewotICAgIC8vIENhbGwgbm90aWZpY2F0aW9uIGxpc3RlbmVycyBv
biB0aGUgZWxlbWVudC4KLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbV9l
bGVtZW50cy5nZXRPckNyZWF0ZSh0YXJnZXQpOwotICAgIGVsZW1lbnQtPm5vdGlmaWNhdGlvblJl
Y2VpdmVkKG5vdGlmaWNhdGlvbk5hbWUpOwotCi0gICAgLy8gQ2FsbCBnbG9iYWwgbm90aWZpY2F0
aW9uIGxpc3RlbmVycy4KLSAgICBzaXplX3QgY2FsbGJhY2tDb3VudCA9IG1fbm90aWZpY2F0aW9u
Q2FsbGJhY2tzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrQ291
bnQ7IGkrKykgewotICAgICAgICBDcHBWYXJpYW50IGFyZ3VtZW50c1syXTsKLSAgICAgICAgYXJn
dW1lbnRzWzBdLnNldCgqZWxlbWVudC0+Z2V0QXNDcHBWYXJpYW50KCkpOwotICAgICAgICBhcmd1
bWVudHNbMV0uc2V0KG5vdGlmaWNhdGlvbk5hbWUpOwotICAgICAgICBDcHBWYXJpYW50IGludm9r
ZVJlc3VsdDsKLSAgICAgICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3NbaV0uaW52b2tlRGVmYXVs
dChhcmd1bWVudHMsIDIsIGludm9rZVJlc3VsdCk7Ci0gICAgfQotfQotCi12b2lkIEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fbG9nQWNjZXNzaWJp
bGl0eUV2ZW50cyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7
Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9ub3RpZmljYXRpb25DYWxsYmFja3MucHVzaF9iYWNrKGFyZ3VtZW50c1swXSk7Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJl
bW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
Zm9jdXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoKihnZXRGb2N1c2VkRWxlbWVudCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldCgqKGdldFJvb3RFbGVt
ZW50KCktPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZEdldHRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1sw
XS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGQ6OnN0cmluZyBpZCA9IGFy
Z3VtZW50c1swXS50b1N0cmluZygpOwotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGZvdW5k
RWxlbWVudCA9IGdldEFjY2Vzc2libGVFbGVtZW50QnlJZChpZCk7Ci0gICAgaWYgKCFmb3VuZEVs
ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdC0+c2V0KCooZm91bmRFbGVtZW50
LT5nZXRBc0NwcFZhcmlhbnQoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkNPTlNPTEUgTUVTU0FHRTog
SmF2YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2QgY2FsbGVkIG9uIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyXG4iKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotfQpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaAko
cmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW1f
aAotI2RlZmluZSBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtX2gKLQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNwcEJvdW5kQ2xh
c3MuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
OwotY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJWaWV3OwotfQotCi1uYW1lc3BhY2UgV2ViVGVz
dFJ1bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKLQotY2xhc3MgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7Ci1wdWJsaWM6Ci0gICAgQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIoKTsKLQotICAgIC8vIFNoYWRvdyB0byBpbmNsdWRlIGFjY2Vzc2li
aWxpdHkgaW5pdGlhbGl6YXRpb24uCi0gICAgdm9pZCBiaW5kVG9KYXZhc2NyaXB0KFdlYktpdDo6
V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgY2xhc3NuYW1lKTsKLSAgICB2b2lk
IHJlc2V0KCk7Ci0KLSAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50KGNvbnN0IFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYpOwotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldEZv
Y3VzZWRFbGVtZW50KCk7Ci0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Um9vdEVsZW1l
bnQoKTsKLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5
SWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKTsKLQotICAgIGJvb2wgc2hvdWxkTG9nQWNjZXNzaWJp
bGl0eUV2ZW50cygpOwotCi0gICAgdm9pZCBub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29uc3QgY2hhciogbm90aWZpY2F0
aW9uTmFtZSk7Ci0KLSAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdh
dGUpIHsgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOyB9Ci0gICAgdm9pZCBzZXRXZWJWaWV3KFdlYktp
dDo6V2ViVmlldyogd2ViVmlldykgeyBtX3dlYlZpZXcgPSB3ZWJWaWV3OyB9Ci0KLXByaXZhdGU6
Ci0gICAgLy8gSWYgdHJ1ZSwgd2lsbCBsb2cgYWxsIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9u
cy4KLSAgICBib29sIG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50czsKLQotICAgIC8vIEJvdW5kIG1l
dGhvZHMgYW5kIHByb3BlcnRpZXMKLSAgICB2b2lkIGxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBmYWxs
YmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIGZv
Y3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcm9vdEVs
ZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhY2Nlc3NpYmxlRWxl
bWVudEJ5SWRHZXR0ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBmaW5kQWNjZXNzaWJsZUVsZW1lbnRC
eUlkUmVjdXJzaXZlKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYsIGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiBpZCk7Ci0KLSAgICBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlP
YmplY3QgbV9mb2N1c2VkRWxlbWVudDsKLSAgICBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QgbV9yb290RWxlbWVudDsKLQotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0IG1fZWxl
bWVudHM7Ci0KLSAgICBzdGQ6OnZlY3RvcjxDcHBWYXJpYW50PiBtX25vdGlmaWNhdGlvbkNhbGxi
YWNrczsKLQotICAgIFdlYlRlc3REZWxlZ2F0ZSogbV9kZWxlZ2F0ZTsKLSAgICBXZWJLaXQ6Oldl
YlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyQ2hyb21pdW1faApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNDAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uaCIK
LQotI2luY2x1ZGUgIlRlc3RDb21tb24uaCIKLSNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNTdHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViUG9pbnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUmVjdC5oPgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFj
ZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotbmFtZXNwYWNlIHsKLQotLy8g
TWFwIHJvbGUgdmFsdWUgdG8gc3RyaW5nLCBtYXRjaGluZyBTYWZhcmkvTWFjIHBsYXRmb3JtIGlt
cGxlbWVudGF0aW9uIHRvCi0vLyBhdm9pZCByZWJhc2VsaW5pbmcgbGF5b3V0IHRlc3RzLgotc3Ry
aW5nIHJvbGVUb1N0cmluZyhXZWJBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQotewotICAgIHN0cmlu
ZyByZXN1bHQgPSAiQVhSb2xlOiBBWCI7Ci0gICAgc3dpdGNoIChyb2xlKSB7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkJ1dHRvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSYWRpb0J1dHRvbjoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJhZGlvQnV0dG9uIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUNoZWNrQm94OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
Q2hlY2tCb3giKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU2xpZGVyOgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2xpZGVyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZVRhYkdyb3VwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFiR3JvdXAi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGV4dEZpZWxkOgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEZpZWxkIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVN0YXRpY1RleHQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTdGF0aWNUZXh0
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRleHRBcmVhOgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEFyZWEiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlU2Nyb2xsQXJlYToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNjcm9sbEFyZWEi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUG9wVXBCdXR0b246Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJQb3BVcEJ1dHRvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVNZW51QnV0dG9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUJ1
dHRvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJsZToKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIlRhYmxlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZUFwcGxpY2F0aW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb24i
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JvdXA6Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJHcm91cCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSYWRp
b0dyb3VwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUmFkaW9Hcm91cCIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMaXN0OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiTGlzdCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxCYXI6Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTY3JvbGxCYXIiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlVmFsdWVJbmRpY2F0b3I6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJWYWx1ZUluZGljYXRvciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFn
ZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZU1lbnVCYXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJN
ZW51QmFyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnU6Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJNZW51Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZU1lbnVJdGVtOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUl0ZW0iKTsKLSAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiQ29sdW1uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvdzoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJvdyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVUb29sYmFyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9vbGJhciIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVCdXN5SW5kaWNhdG9yOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnVzeUluZGljYXRvciIpOwotICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVQcm9ncmVzc0luZGljYXRvcjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIlByb2dyZXNzSW5kaWNhdG9yIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdp
bmRvdzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIldpbmRvdyIpOwotICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVEcmF3ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJEcmF3ZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3lzdGVtV2lkZToKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlN5c3RlbVdpZGUiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlT3V0bGluZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk91
dGxpbmUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSW5jcmVtZW50b3I6Ci0gICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJJbmNyZW1lbnRvciIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVCcm93c2VyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnJv
d3NlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb21ib0JveDoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNvbWJvQm94Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZVNwbGl0R3JvdXA6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGxpdEdy
b3VwIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNwbGl0dGVyOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3BsaXR0ZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlQ29sb3JXZWxsOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sb3JXZWxs
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUdyb3dBcmVhOgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiR3Jvd0FyZWEiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlU2hlZXQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTaGVldCIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVIZWxwVGFnOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiSGVscFRhZyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNYXR0ZToKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1hdHRlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZVJ1bGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUnVsZXIiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVsZXJNYXJrZXI6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJSdWxlck1hcmtlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVMaW5rOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGluayIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEaXNjbG9zdXJlVHJpYW5nbGU6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJEaXNjbG9zdXJlVHJpYW5nbGUiKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlR3JpZDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkdyaWQiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ2VsbDoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkNlbGwiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uSGVh
ZGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sdW1uSGVhZGVyIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvd0hlYWRlcjoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIlJvd0hlYWRlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVXZWJD
b3JlTGluazoKLSAgICAgICAgLy8gTWFwcyB0byBMaW5rIHJvbGUuCi0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJMaW5rIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdl
TWFwTGluazoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlTWFwTGluayIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZU1hcDoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkltYWdlTWFwIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxp
c3RNYXJrZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0TWFya2VyIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkFyZWE6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJXZWJBcmVhIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUhlYWRp
bmc6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJIZWFkaW5nIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3g6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJMaXN0Qm94Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3hPcHRpb246
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Qm94T3B0aW9uIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlSGVhZGVyQ29udGFpbmVyOgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiVGFibGVIZWFkZXJDb250YWluZXIiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlRGVmaW5pdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkRlZmluaXRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVzY3JpcHRpb25M
aXN0OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVzY3JpcHRpb25MaXN0Iik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uTGlzdFRlcm06Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJEZXNjcmlwdGlvbkxpc3RUZXJtIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZURlc2NyaXB0aW9uTGlzdERldGFpbDoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIkRlc2NyaXB0aW9uTGlzdERldGFpbCIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVBbm5vdGF0aW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
QW5ub3RhdGlvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTbGlkZXJUaHVtYjoK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNsaWRlclRodW1iIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQXBwbGljYXRpb246Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJMYW5kbWFya0FwcGxpY2F0aW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZUxhbmRtYXJrQmFubmVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
TGFuZG1hcmtCYW5uZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtD
b21wbGVtZW50YXJ5OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFuZG1hcmtDb21w
bGVtZW50YXJ5Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQ29udGVu
dEluZm86Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0NvbnRlbnRJbmZv
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrTWFpbjoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTWFpbiIpOwotICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVMYW5kbWFya05hdmlnYXRpb246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJMYW5kbWFya05hdmlnYXRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
TGFuZG1hcmtTZWFyY2g6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya1Nl
YXJjaCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvbkxvZzoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTG9nIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uTWFycXVlZToKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTWFycXVlZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVBcHBsaWNhdGlvblN0YXR1czoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkFwcGxpY2F0aW9uU3RhdHVzIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxp
Y2F0aW9uVGltZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBcHBsaWNhdGlvblRp
bWVyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50OgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlRG9jdW1lbnRBcnRpY2xlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9j
dW1lbnRBcnRpY2xlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50Tm90
ZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRvY3VtZW50Tm90ZSIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudFJlZ2lvbjoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkRvY3VtZW50UmVnaW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVVzZXJJbnRlcmZhY2VUb29sdGlwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
VXNlckludGVyZmFjZVRvb2x0aXAiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVG9n
Z2xlQnV0dG9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9nZ2xlQnV0dG9uIik7
Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNhbnZhczoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkNhbnZhcyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVQYXJh
Z3JhcGg6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQYXJhZ3JhcGgiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGl2OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiRGl2Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhYmVsOgotICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFiZWwiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlRm9ybToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkZvcm0iKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlSG9yaXpvbnRhbFJ1bGU6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJIb3Jpem9udGFsUnVsZSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVMZWdlbmQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMZWdlbmQiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25BbGVydDoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIkFsZXJ0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFw
cGxpY2F0aW9uQWxlcnREaWFsb2c6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBbGVy
dERpYWxvZyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvbkRpYWxv
ZzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uRGlhbG9nIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURpcmVjdG9yeToKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkRpcmVjdG9yeSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVE
b2N1bWVudE1hdGg6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNYXRoIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUVkaXRhYmxlVGV4dDoKLSAgICAgICAgcmV0dXJuIHJl
c3VsdC5hcHBlbmQoIkVkaXRhYmxlVGV4dCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVGb290ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJGb290ZXIiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSWdub3JlZDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIklnbm9yZWQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdEl0ZW06
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0SXRlbSIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVNZW51TGlzdFBvcHVwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiTWVudUxpc3RQb3B1cCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNZW51
TGlzdE9wdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnVMaXN0T3B0aW9u
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVByZXNlbnRhdGlvbmFsOgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUHJlc2VudGF0aW9uYWwiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlU3BpbkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IlNwaW5CdXR0b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BpbkJ1dHRvblBh
cnQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGluQnV0dG9uUGFydCIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJMaXN0OgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiVGFiTGlzdCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJQYW5l
bDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYlBhbmVsIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRh
YiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUcmVlUm9sZToKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIlRyZWUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
VHJlZUdyaWQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUcmVlR3JpZCIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUcmVlSXRlbVJvbGU6Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJUcmVlSXRlbSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVV
bmtub3duOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVbmtu
b3duIik7Ci0gICAgfQotfQotCi1zdHJpbmcgZ2V0RGVzY3JpcHRpb24oY29uc3QgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIHN0cmluZyBkZXNjcmlwdGlvbiA9IG9iamVj
dC5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKS51dGY4KCk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0
aW9uLmluc2VydCgwLCAiQVhEZXNjcmlwdGlvbjogIik7Ci19Ci0KLXN0cmluZyBnZXRIZWxwVGV4
dChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIGhl
bHBUZXh0ID0gb2JqZWN0LmhlbHBUZXh0KCkudXRmOCgpOwotICAgIHJldHVybiBoZWxwVGV4dC5p
bnNlcnQoMCwgIkFYSGVscDogIik7Ci19Ci0KLXN0cmluZyBnZXRTdHJpbmdWYWx1ZShjb25zdCBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHZhbHVlOwotICAg
IGlmIChvYmplY3Qucm9sZVZhbHVlKCkgPT0gV2ViQWNjZXNzaWJpbGl0eVJvbGVDb2xvcldlbGwp
IHsKLSAgICAgICAgaW50IHIsIGcsIGI7Ci0gICAgICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAg
ICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIpOwotICAgICAgICBzbnByaW50ZihidWZmZXIs
IHNpemVvZihidWZmZXIpLCAicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCByIC8gMjU1LiwgZyAv
IDI1NS4sIGIgLyAyNTUuKTsKLSAgICAgICAgdmFsdWUgPSBidWZmZXI7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHZhbHVlID0gb2JqZWN0LnN0cmluZ1ZhbHVlKCkudXRmOCgpOwotICAgIHJldHVybiB2
YWx1ZS5pbnNlcnQoMCwgIkFYVmFsdWU6ICIpOwotfQotCi1zdHJpbmcgZ2V0Um9sZShjb25zdCBX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHJvbGVTdHJpbmcg
PSByb2xlVG9TdHJpbmcob2JqZWN0LnJvbGVWYWx1ZSgpKTsKLQotICAgIC8vIFNwZWNpYWwtY2Fz
ZSBjYW52YXMgd2l0aCBmYWxsYmFjayBjb250ZW50IGJlY2F1c2UgQ2hyb21pdW0gd2FudHMgdG8K
LSAgICAvLyB0cmVhdCB0aGlzIGFzIGVzc2VudGlhbGx5IGEgc2VwYXJhdGUgcm9sZSB0aGF0IGl0
IGNhbiBtYXAgZGlmZmVyZW50bHkgZGVwZW5kaW5nCi0gICAgLy8gb24gdGhlIHBsYXRmb3JtLgot
ICAgIGlmIChvYmplY3Qucm9sZVZhbHVlKCkgPT0gV2ViQWNjZXNzaWJpbGl0eVJvbGVDYW52YXMg
JiYgb2JqZWN0LmNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgpKQotICAgICAgICByb2xlU3RyaW5n
ICs9ICJXaXRoRmFsbGJhY2tDb250ZW50IjsKLQotICAgIHJldHVybiByb2xlU3RyaW5nOwotfQot
Ci1zdHJpbmcgZ2V0VGl0bGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQot
ewotICAgIHN0cmluZyB0aXRsZSA9IG9iamVjdC50aXRsZSgpLnV0ZjgoKTsKLSAgICByZXR1cm4g
dGl0bGUuaW5zZXJ0KDAsICJBWFRpdGxlOiAiKTsKLX0KLQotc3RyaW5nIGdldE9yaWVudGF0aW9u
KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBpZiAob2JqZWN0
LmlzVmVydGljYWwoKSkKLSAgICAgICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWFZlcnRpY2Fs
T3JpZW50YXRpb24iOwotCi0gICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWEhvcml6b250YWxP
cmllbnRhdGlvbiI7Ci19Ci0KLXN0cmluZyBnZXRWYWx1ZURlc2NyaXB0aW9uKGNvbnN0IFdlYkFj
Y2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBzdHJpbmcgdmFsdWVEZXNjcmlwdGlv
biA9IG9iamVjdC52YWx1ZURlc2NyaXB0aW9uKCkudXRmOCgpOwotICAgIHJldHVybiB2YWx1ZURl
c2NyaXB0aW9uLmluc2VydCgwLCAiQVhWYWx1ZURlc2NyaXB0aW9uOiAiKTsKLX0KLQotc3RyaW5n
IGdldEF0dHJpYnV0ZXMoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewot
ICAgIC8vIEZJWE1FOiBDb25jYXRlbmF0ZSBhbGwgYXR0cmlidXRlcyBvZiB0aGUgQWNjZXNzaWJp
bGl0eU9iamVjdC4KLSAgICBzdHJpbmcgYXR0cmlidXRlcyhnZXRUaXRsZShvYmplY3QpKTsKLSAg
ICBhdHRyaWJ1dGVzLmFwcGVuZCgiXG4iKTsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChnZXRSb2xl
KG9iamVjdCkpOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKCJcbiIpOwotICAgIGF0dHJpYnV0ZXMu
YXBwZW5kKGdldERlc2NyaXB0aW9uKG9iamVjdCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVzOwot
fQotCi0KLS8vIENvbGxlY3RzIGF0dHJpYnV0ZXMgaW50byBhIHN0cmluZywgZGVsaW1pdGVkIGJ5
IGRhc2hlcy4gVXNlZCBieSBhbGwgbWV0aG9kcwotLy8gdGhhdCBvdXRwdXQgbGlzdHMgb2YgYXR0
cmlidXRlczogYXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0NhbGxiYWNrLAotLy8gQXR0cmli
dXRlc09mQ2hpbGRyZW5DYWxsYmFjaywgZXRjLgotY2xhc3MgQXR0cmlidXRlc0NvbGxlY3RvciB7
Ci1wdWJsaWM6Ci0gICAgdm9pZCBjb2xsZWN0QXR0cmlidXRlcyhjb25zdCBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0JiBvYmplY3QpCi0gICAgewotICAgICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKCJc
bi0tLS0tLS0tLS0tLVxuIik7Ci0gICAgICAgIG1fYXR0cmlidXRlcy5hcHBlbmQoZ2V0QXR0cmli
dXRlcyhvYmplY3QpKTsKLSAgICB9Ci0KLSAgICBzdHJpbmcgYXR0cmlidXRlcygpIGNvbnN0IHsg
cmV0dXJuIG1fYXR0cmlidXRlczsgfQotCi1wcml2YXRlOgotICAgIHN0cmluZyBtX2F0dHJpYnV0
ZXM7Ci19OwotCi19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0LCBGYWN0b3J5KiBmYWN0
b3J5KQotICAgIDogbV9hY2Nlc3NpYmlsaXR5T2JqZWN0KG9iamVjdCkKLSAgICAsIG1fZmFjdG9y
eShmYWN0b3J5KQotewotCi0gICAgV0VCS0lUX0FTU0VSVChmYWN0b3J5KTsKLQotICAgIC8vCi0g
ICAgLy8gUHJvcGVydGllcwotICAgIC8vCi0KLSAgICBiaW5kUHJvcGVydHkoInJvbGUiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVy
dHkoInRpdGxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlR2V0dGVyQ2FsbGJhY2sp
OwotICAgIGJpbmRQcm9wZXJ0eSgiZGVzY3JpcHRpb24iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6ZGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJoZWxwVGV4
dCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dEdldHRlckNhbGxiYWNrKTsKLSAg
ICBiaW5kUHJvcGVydHkoInN0cmluZ1ZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ1ZhbHVlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgieCIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp4R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgieSIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9w
ZXJ0eSgid2lkdGgiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lkdGhHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJoZWlnaHQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGVpZ2h0R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaW50VmFsdWUiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFBy
b3BlcnR5KCJtaW5WYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZUdldHRl
ckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoIm1heFZhbHVlIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om1heFZhbHVlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgidmFs
dWVEZXNjcmlwdGlvbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9u
R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiY2hpbGRyZW5Db3VudCIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50R2V0dGVyQ2FsbGJhY2spOwotICAgIGJp
bmRQcm9wZXJ0eSgiaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyIiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5k
UHJvcGVydHkoInNlbGVjdGVkVGV4dFJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNl
bGVjdGVkVGV4dFJhbmdlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNFbmFi
bGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZEdldHRlckNhbGxiYWNrKTsK
LSAgICBiaW5kUHJvcGVydHkoImlzUmVxdWlyZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNSZXF1aXJlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzRm9jdXNlZCIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAg
YmluZFByb3BlcnR5KCJpc0ZvY3VzYWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Zv
Y3VzYWJsZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzU2VsZWN0ZWQiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKTsKLSAgICBi
aW5kUHJvcGVydHkoImlzU2VsZWN0YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGFibGVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc011bHRpU2VsZWN0
YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZUdldHRlckNh
bGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzU2VsZWN0ZWRPcHRpb25BY3RpdmUiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZUdldHRlckNhbGxiYWNr
KTsKLSAgICBiaW5kUHJvcGVydHkoImlzRXhwYW5kZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNFeHBhbmRlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzQ2hlY2tl
ZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayk7Ci0g
ICAgYmluZFByb3BlcnR5KCJpc1Zpc2libGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNW
aXNpYmxlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNPZmZTY3JlZW4iLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW5HZXR0ZXJDYWxsYmFjayk7Ci0gICAg
YmluZFByb3BlcnR5KCJpc0NvbGxhcHNlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Nv
bGxhcHNlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImhhc1BvcHVwIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQ
cm9wZXJ0eSgiaXNWYWxpZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ZhbGlkR2V0dGVy
Q2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNSZWFkT25seSIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1JlYWRPbmx5R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgi
b3JpZW50YXRpb24iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb25HZXR0ZXJD
YWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJjbGlja1BvaW50WCIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjbGlja1BvaW50WEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHko
ImNsaWNrUG9pbnRZIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZR2V0dGVy
Q2FsbGJhY2spOwotCi0gICAgLy8KLSAgICAvLyBNZXRob2RzCi0gICAgLy8KLQotICAgIGJpbmRN
ZXRob2QoImFsbEF0dHJpYnV0ZXMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmli
dXRlc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1l
bnRzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVu
dHNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mRG9jdW1lbnRMaW5rcyIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzQ2FsbGJh
Y2spOwotICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkNoaWxkcmVuIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuQ2FsbGJhY2spOwotICAgIGJpbmRNZXRo
b2QoImxpbmVGb3JJbmRleCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXhD
YWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYm91bmRzRm9yUmFuZ2UiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Ym91bmRzRm9yUmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgic3Ry
aW5nRm9yUmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2VDYWxs
YmFjayk7Ci0gICAgYmluZE1ldGhvZCgiY2hpbGRBdEluZGV4IiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmNoaWxkQXRJbmRleENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJlbGVtZW50QXRQ
b2ludCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQb2ludENhbGxiYWNrKTsK
LSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayk7Ci0gICAgYmlu
ZE1ldGhvZCgiYXR0cmlidXRlc09mUm93SGVhZGVycyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0dHJp
YnV0ZXNPZkNvbHVtbnMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29s
dW1uc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZSb3dzIiwgJkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayk7Ci0gICAgYmluZE1l
dGhvZCgiYXR0cmlidXRlc09mVmlzaWJsZUNlbGxzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmF0dHJpYnV0ZXNPZlZpc2libGVDZWxsc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRy
aWJ1dGVzT2ZIZWFkZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mSGVh
ZGVyQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImluZGV4SW5UYWJsZSIsICZBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjppbmRleEluVGFibGVDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgicm93
SW5kZXhSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlQ2FsbGJh
Y2spOwotICAgIGJpbmRNZXRob2QoImNvbHVtbkluZGV4UmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJjZWxs
Rm9yQ29sdW1uQW5kUm93IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5B
bmRSb3dDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgidGl0bGVVSUVsZW1lbnQiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhv
ZCgic2V0U2VsZWN0ZWRUZXh0UmFuZ2UiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2Vs
ZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlVmFsdWUi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlVmFsdWVDYWxsYmFjayk7Ci0gICAg
YmluZE1ldGhvZCgiaXNBdHRyaWJ1dGVTZXR0YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0F0dHJpYnV0ZVNldHRhYmxlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImlzUHJlc3NB
Y3Rpb25TdXBwb3J0ZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNQcmVzc0FjdGlvblN1
cHBvcnRlZENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJpc0luY3JlbWVudEFjdGlvblN1cHBv
cnRlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0luY3JlbWVudEFjdGlvblN1cHBvcnRl
ZENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJpc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZENhbGxi
YWNrKTsKLSAgICBiaW5kTWV0aG9kKCJwYXJlbnRFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnBhcmVudEVsZW1lbnRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiaW5jcmVtZW50
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudENhbGxiYWNrKTsKLSAgICBiaW5k
TWV0aG9kKCJkZWNyZW1lbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50Q2Fs
bGJhY2spOwotICAgIGJpbmRNZXRob2QoInNob3dNZW51IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNob3dNZW51Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoInByZXNzIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnByZXNzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImlzRXF1YWwi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFcXVhbENhbGxiYWNrKTsKLSAgICBiaW5kTWV0
aG9kKCJhZGROb3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
ZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVOb3Rp
ZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJ0YWtlRm9jdXMiLCAm
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGFrZUZvY3VzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRo
b2QoInNjcm9sbFRvTWFrZVZpc2libGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xs
VG9NYWtlVmlzaWJsZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZp
c2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgic2Nyb2xsVG9HbG9i
YWxQb2ludCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50Q2Fs
bGJhY2spOwotCi0gICAgYmluZEZhbGxiYWNrTWV0aG9kKCZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpmYWxsYmFja0NhbGxiYWNrKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAg
IHJldHVybiBtX2ZhY3RvcnktPmdldE9yQ3JlYXRlKGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGls
ZEF0KGluZGV4KSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFcXVhbChj
b25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG90aGVyKQotewotICAgIHJldHVy
biBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuZXF1YWxzKG90aGVyKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpub3RpZmljYXRpb25SZWNlaXZlZChjb25zdCBjaGFyKiBub3RpZmlj
YXRpb25OYW1lKQotewotICAgIHNpemVfdCBjYWxsYmFja0NvdW50ID0gbV9ub3RpZmljYXRpb25D
YWxsYmFja3Muc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3Vu
dDsgaSsrKSB7Ci0gICAgICAgIENwcFZhcmlhbnQgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50Owot
ICAgICAgICBub3RpZmljYXRpb25OYW1lQXJndW1lbnQuc2V0KG5vdGlmaWNhdGlvbk5hbWUpOwot
ICAgICAgICBDcHBWYXJpYW50IGludm9rZVJlc3VsdDsKLSAgICAgICAgbV9ub3RpZmljYXRpb25D
YWxsYmFja3NbaV0uaW52b2tlRGVmYXVsdCgmbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50LCAxLCBp
bnZva2VSZXN1bHQpOwotICAgIH0KLX0KLQotLy8KLS8vIFByb3BlcnRpZXMKLS8vCi0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRSb2xlKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldFRpdGxlKGFjY2Vzc2li
aWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2Ny
aXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0KGdldERlc2NyaXB0aW9uKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlbHBUZXh0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldEhlbHBUZXh0KGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldFN0
cmluZ1ZhbHVlKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJvdW5kaW5nQm94UmVjdCgpLngpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnlHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmJv
dW5kaW5nQm94UmVjdCgpLnkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Ondp
ZHRoR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJlY3QoKS53aWR0aCk7Ci19Ci0KLXZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5ib3Vu
ZGluZ0JveFJlY3QoKS5oZWlnaHQpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmludFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkuc3VwcG9ydHNSYW5nZVZhbHVlKCkpCi0gICAgICAgIHJlc3Vs
dC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS52YWx1ZUZvclJhbmdlKCkpOwotICAgIGVsc2Ug
aWYgKGFjY2Vzc2liaWxpdHlPYmplY3QoKS5yb2xlVmFsdWUoKSA9PSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZUhlYWRpbmcpCi0gICAgICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5o
ZWFkaW5nTGV2ZWwoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQtPnNldChhdG9pKGFjY2Vz
c2liaWxpdHlPYmplY3QoKS5zdHJpbmdWYWx1ZSgpLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubWlu
VmFsdWVGb3JSYW5nZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhW
YWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubWF4VmFsdWVGb3JSYW5nZSgpKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGdldFZhbHVlRGVzY3JpcHRpb24o
YWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y2hpbGRyZW5Db3VudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpbnQgY291bnQgPSAxOyAvLyBSb290IG9iamVjdCBhbHdheXMgaGFzIG9ubHkgb25lIGNoaWxk
LCB0aGUgV2ViVmlldy4KLSAgICBpZiAoIWlzUm9vdCgpKQotICAgICAgICBjb3VudCA9IGFjY2Vz
c2liaWxpdHlPYmplY3QoKS5jaGlsZENvdW50KCk7Ci0gICAgcmVzdWx0LT5zZXQoY291bnQpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJl
ckdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFjY2Vzc2li
aWxpdHlPYmplY3QoKS5pc0ZvY3VzZWQoKSkgewotICAgICAgICByZXN1bHQtPnNldCgtMSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbGluZU51bWJlciA9IGFjY2Vzc2liaWxp
dHlPYmplY3QoKS5zZWxlY3Rpb25FbmRMaW5lTnVtYmVyKCk7Ci0gICAgcmVzdWx0LT5zZXQobGlu
ZU51bWJlcik7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0
UmFuZ2VHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgdW5zaWduZWQg
c2VsZWN0aW9uU3RhcnQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2VsZWN0aW9uU3RhcnQoKTsK
LSAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2VsZWN0
aW9uRW5kKCk7Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCAieyVkLCAlZH0iLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIC0g
c2VsZWN0aW9uU3RhcnQpOwotCi0gICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoYnVmZmVyKSk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFibGVkR2V0dGVyQ2FsbGJh
Y2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlP
YmplY3QoKS5pc0VuYWJsZWQoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNSZXF1aXJlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNSZXF1aXJlZCgpKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRm9j
dXNlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZUdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNTZWxl
Y3RlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGVH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNj
ZXNzaWJpbGl0eU9iamVjdCgpLmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5pc011bHRpU2VsZWN0YWJsZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc1NlbGVjdGVk
T3B0aW9uQWN0aXZlKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhw
YW5kZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXQoIWFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0NvbGxhcHNlZCgpKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ2hlY2tl
ZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGVHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJp
bGl0eU9iamVjdCgpLmlzVmlzaWJsZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc09mZlNjcmVlbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNPZmZTY3JlZW4oKSk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVj
dCgpLmlzQ29sbGFwc2VkKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhh
c1BvcHVwR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5hcmlhSGFzUG9wdXAoKSk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWYWxpZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldCghYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRGV0YWNo
ZWQoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZWFkT25seUdldHRl
ckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkuaXNSZWFkT25seSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldChnZXRPcmllbnRhdGlvbihhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlja1BvaW50WEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkuY2xpY2tQb2ludCgpLngpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNsaWNrUG9pbnRZR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jbGlja1BvaW50KCkueSk7Ci19Ci0K
LS8vCi0vLyBNZXRob2RzCi0vLwotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFsbEF0
dHJpYnV0ZXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoZ2V0QXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5r
ZWRVSUVsZW1lbnRzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRy
ZW5DYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIEF0dHJpYnV0ZXNDb2xsZWN0b3IgY29sbGVjdG9yOwotICAgIHVuc2ln
bmVkIHNpemUgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRDb3VudCgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIGNvbGxlY3Rvci5jb2xsZWN0
QXR0cmlidXRlcyhhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRBdChpKSk7Ci0gICAgcmVzdWx0
LT5zZXQoY29sbGVjdG9yLmF0dHJpYnV0ZXMoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cGFyYW1ldHJpemVkQXR0cmlidXRlTmFtZXNDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICBpZiAoIWFyZ3VtZW50cy5zaXplKCkgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpKSB7
Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaW50IGluZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLQotICAgIFdlYlZlY3Rvcjxp
bnQ+IGxpbmVCcmVha3M7Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLmxpbmVCcmVha3MobGlu
ZUJyZWFrcyk7Ci0gICAgaW50IGxpbmUgPSAwOwotICAgIGludCB2ZWN0b3JTaXplID0gc3RhdGlj
X2Nhc3Q8aW50PihsaW5lQnJlYWtzLnNpemUoKSk7Ci0gICAgd2hpbGUgKGxpbmUgPCB2ZWN0b3JT
aXplICYmIGxpbmVCcmVha3NbbGluZV0gPD0gaW5kZXgpCi0gICAgICAgIGxpbmUrKzsKLSAgICBy
ZXN1bHQtPnNldChsaW5lKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3Vu
ZHNGb3JSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZEF0SW5kZXhDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmICgh
YXJndW1lbnRzLnNpemUoKSB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpIHsKLSAgICAgICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50KiBjaGlsZCA9IGdldENoaWxkQXRJbmRleChhcmd1bWVudHNbMF0udG9J
bnQzMigpKTsKLSAgICBpZiAoIWNoaWxkKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0LT5zZXQoKihjaGlsZC0+Z2V0QXND
cHBWYXJpYW50KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50
QXRQb2ludENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRz
WzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4ID0gYXJndW1lbnRz
WzBdLnRvSW50MzIoKTsKLSAgICBpbnQgeSA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAg
V2ViUG9pbnQgcG9pbnQoeCwgeSk7Ci0gICAgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBvYmogPSBh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkuaGl0VGVzdChwb2ludCk7Ci0gICAgaWYgKG9iai5pc051bGwo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LT5zZXQoKihtX2ZhY3RvcnktPmdldE9y
Q3JlYXRlKG9iaiktPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVyc0NhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dIZWFk
ZXJzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93c0NhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZWaXNp
YmxlQ2VsbHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mSGVhZGVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZUNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dJbmRleFJhbmdlQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNv
bHVtbkluZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0IG9iaiA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS50aXRsZVVJRWxl
bWVudCgpOwotICAgIGlmIChvYmouaXNOdWxsKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1bHQtPnNldCgqKG1fZmFjdG9y
eS0+Z2V0T3JDcmVhdGUob2JqKS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCZhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVu
dHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGludCBzZWxlY3Rpb25TdGFydCA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7
Ci0gICAgaW50IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvblN0YXJ0ICsgYXJndW1lbnRzWzFdLnRv
SW50MzIoKTsKLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2V0U2VsZWN0ZWRUZXh0UmFuZ2Uo
c2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlVmFsdWVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZUNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxICYmICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewot
ICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHN0cmluZyBhdHRyaWJ1dGUgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICBib29sIHNl
dHRhYmxlID0gZmFsc2U7Ci0gICAgaWYgKGF0dHJpYnV0ZSA9PSAiQVhWYWx1ZSIpCi0gICAgICAg
IHNldHRhYmxlID0gYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNhblNldFZhbHVlQXR0cmlidXRlKCk7
Ci0gICAgcmVzdWx0LT5zZXQoc2V0dGFibGUpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzUHJlc3NBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0
eU9iamVjdCgpLmNhblByZXNzKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlP
YmplY3QoKS5jYW5JbmNyZW1lbnQoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0
eU9iamVjdCgpLmNhbkRlY3JlbWVudCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpwYXJlbnRFbGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHBhcmVudCA9IG1f
ZmFjdG9yeS0+Z2V0T3JDcmVhdGUoYWNjZXNzaWJpbGl0eU9iamVjdCgpLnBhcmVudE9iamVjdCgp
KTsKLSAgICBpZiAoIXBhcmVudCkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdC0+c2V0KCoocGFyZW50LT5nZXRBc0NwcFZh
cmlhbnQoKSkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudENh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaW5jcmVtZW50KCk7Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGFjY2Vz
c2liaWxpdHlPYmplY3QoKS5kZWNyZW1lbnQoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudUNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzc0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkucHJlc3MoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0VxdWFsQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0LT5z
ZXQoYXJndW1lbnRzWzBdLmlzRXF1YWwoKmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX25vdGlmaWNhdGlvbkNhbGxiYWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
ZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGFrZUZvY3VzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zZXRGb2N1c2VkKHRydWUpOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvTWFrZVZpc2libGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNjcm9sbFRvTWFrZVZp
c2libGUoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQKLSAgICAg
ICAgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpCi0gICAgICAgIHx8ICFhcmd1bWVudHNbMV0u
aXNOdW1iZXIoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkKLSAgICAgICAg
fHwgIWFyZ3VtZW50c1szXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
eCA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7Ci0gICAgaW50IHkgPSBhcmd1bWVudHNbMV0udG9J
bnQzMigpOwotICAgIGludCB3aWR0aCA9IGFyZ3VtZW50c1syXS50b0ludDMyKCk7Ci0gICAgaW50
IGhlaWdodCA9IGFyZ3VtZW50c1szXS50b0ludDMyKCk7Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVj
dCgpLnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoV2ViUmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAyCi0gICAgICAgIHx8ICFhcmd1
bWVudHNbMF0uaXNOdW1iZXIoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsK
LSAgICBpbnQgeSA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0KLSAgICBhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkuc2Nyb2xsVG9HbG9iYWxQb2ludChXZWJQb2ludCh4LCB5KSk7Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZmFsbGJhY2tD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QgJiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OlJvb3RBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgJm9iamVjdCwgRmFjdG9yeSAqZmFjdG9yeSkK
LSAgICA6IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0LCBmYWN0b3J5KSB7IH0KLQotQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCogUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxk
QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXgpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGZhY3RvcnkoKS0+Z2V0T3JDcmVhdGUoYWNjZXNzaWJpbGl0eU9i
amVjdCgpKTsKLX0KLQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCA6On5BY2Nlc3NpYmls
aXR5VUlFbGVtZW50TGlzdCgpCi17Ci0gICAgY2xlYXIoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50TGlzdDo6Y2xlYXIoKQotewotICAgIGZvciAoRWxlbWVudExpc3Q6Oml0ZXJh
dG9yIGkgPSBtX2VsZW1lbnRzLmJlZ2luKCk7IGkgIT0gbV9lbGVtZW50cy5lbmQoKTsgKytpKQot
ICAgICAgICBkZWxldGUgKCppKTsKLSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci19Ci0KLUFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpnZXRPckNyZWF0
ZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgaWYgKG9iamVj
dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3QgZWxlbWVudENvdW50
ID0gbV9lbGVtZW50cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50
Q291bnQ7IGkrKykgewotICAgICAgICBpZiAobV9lbGVtZW50c1tpXS0+aXNFcXVhbChvYmplY3Qp
KQotICAgICAgICAgICAgcmV0dXJuIG1fZWxlbWVudHNbaV07Ci0gICAgfQotCi0gICAgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCA9IG5ldyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KG9i
amVjdCwgdGhpcyk7Ci0gICAgbV9lbGVtZW50cy5wdXNoX2JhY2soZWxlbWVudCk7Ci0gICAgcmV0
dXJuIGVsZW1lbnQ7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnRMaXN0OjpjcmVhdGVSb290KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9i
amVjdCkKLXsKLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbmV3IFJvb3RB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KG9iamVjdCwgdGhpcyk7Ci0gICAgbV9lbGVtZW50cy5wdXNo
X2JhY2soZWxlbWVudCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLX0KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oCShyZXZp
c2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtX2gKLSNk
ZWZpbmUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtX2gKLQotI2luY2x1ZGUgIkNwcEJv
dW5kQ2xhc3MuaCIKLSNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVk
ZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7Ci1wdWJsaWM6Ci0gICAgY2xh
c3MgRmFjdG9yeSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5GYWN0b3J5KCkgeyB9
Ci0gICAgICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0T3JDcmVhdGUoY29u
c3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JikgPSAwOwotICAgIH07Ci0KLSAgICBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYsIEZhY3RvcnkqKTsKLQotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0
Q2hpbGRBdEluZGV4KHVuc2lnbmVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSb290KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFcXVhbChjb25zdCBXZWJLaXQ6
OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLQotICAgIHZpcnR1YWwgdm9pZCBub3RpZmljYXRp
b25SZWNlaXZlZChjb25zdCBjaGFyICpub3RpZmljYXRpb25OYW1lKTsKLQotcHJvdGVjdGVkOgot
ICAgIGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgYWNjZXNzaWJpbGl0eU9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXNzaWJpbGl0eU9iamVjdDsgfQotCi0gICAgRmFj
dG9yeSogZmFjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFjdG9yeTsgfQotCi1wcml2YXRlOgot
ICAgIC8vIEJvdW5kIHByb3BlcnRpZXMuCi0gICAgdm9pZCByb2xlR2V0dGVyQ2FsbGJhY2soQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgdGl0bGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBkZXNjcmlwdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IGhlbHBUZXh0R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc3RyaW5nVmFs
dWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB4R2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgeUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHdpZHRoR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaGVpZ2h0
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaW50VmFsdWVHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBtaW5WYWx1ZUdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIG1heFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgdmFsdWVEZXNjcmlwdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGNoaWxkcmVuQ291bnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBpbnNlcnRpb25Qb2ludExpbmVOdW1iZXJHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBzZWxlY3RlZFRleHRSYW5nZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGlzRW5hYmxlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlz
UmVxdWlyZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0ZvY3VzZWRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0ZvY3VzYWJsZUdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzU2VsZWN0ZWRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1NlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBpc011bHRpU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGlzU2VsZWN0ZWRPcHRpb25BY3RpdmVHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBpc0V4cGFuZGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgaXNDaGVja2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgaXNWaXNpYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNPZmZT
Y3JlZW5HZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0NvbGxhcHNlZEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGhhc1BvcHVwR2V0dGVyQ2FsbGJh
Y2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNWYWxpZEdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGlzUmVhZE9ubHlHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IGNsaWNrUG9pbnRYR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2xpY2tQ
b2ludFlHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBCb3VuZCBtZXRob2Rz
LgotICAgIHZvaWQgYWxsQXR0cmlidXRlc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRy
aWJ1dGVzT2ZEb2N1bWVudExpbmtzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mQ2hpbGRyZW5DYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBwYXJhbWV0cml6ZWRBdHRy
aWJ1dGVOYW1lc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIGxpbmVGb3JJbmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIGJvdW5kc0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc3RyaW5nRm9yUmFuZ2VDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjaGlsZEF0
SW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBlbGVtZW50QXRQb2ludENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZS
b3dIZWFkZXJzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgYXR0cmlidXRlc09mQ29sdW1uc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZW
aXNpYmxlQ2VsbHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZIZWFkZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpbmRleEluVGFibGVDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByb3dJbmRleFJhbmdlQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY29s
dW1uSW5kZXhSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIGNlbGxGb3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0aXRsZVVJRWxlbWVudENhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldFNlbGVjdGVk
VGV4dFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgYXR0cmlidXRlVmFsdWVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0F0dHJpYnV0ZVNldHRhYmxlQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNQcmVzc0FjdGlvblN1
cHBvcnRlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVkQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0
ZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBwYXJlbnRFbGVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgaW5jcmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgZGVjcmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2hvd01lbnVDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBwcmVzc0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzRXF1YWxDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhZGRO
b3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdGFrZUZvY3VzQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2Ny
b2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY3JvbGxUb0ds
b2JhbFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0gICAgdm9pZCBmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLQotICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBtX2FjY2Vzc2li
aWxpdHlPYmplY3Q7Ci0gICAgRmFjdG9yeSogbV9mYWN0b3J5OwotICAgIHN0ZDo6dmVjdG9yPENw
cFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzOwotfTsKLQotCi1jbGFzcyBSb290QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IHsKLXB1
YmxpYzoKLSAgICBSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJLaXQ6OldlYkFj
Y2Vzc2liaWxpdHlPYmplY3QmLCBGYWN0b3J5Kik7Ci0KLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIGdldENoaWxkQXRJbmRleCh1bnNpZ25lZCk7Ci0gICAgdmlydHVhbCBib29s
IGlzUm9vdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLX07Ci0KLQotLy8gUHJvdmlkZXMgc2lt
cGxlIGxpZmV0aW1lIG1hbmFnZW1lbnQgb2YgdGhlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgaW5z
dGFuY2VzOgotLy8gYWxsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRzIGV2ZXIgY3JlYXRlZCBmcm9t
IHRoZSBjb250cm9sbGVyIGFyZSBzdG9yZWQgaW4KLS8vIGEgbGlzdCBhbmQgY2xlYXJlZCBleHBs
aWNpdGx5LgotY2xhc3MgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgOiBwdWJsaWMgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6RmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudExpc3QoKSB7IH0KLSAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlz
dCgpOwotCi0gICAgdm9pZCBjbGVhcigpOwotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCogZ2V0T3JDcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jik7
Ci0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogY3JlYXRlUm9vdChjb25zdCBXZWJLaXQ6Oldl
YkFjY2Vzc2liaWxpdHlPYmplY3QmKTsKLQotcHJpdmF0ZToKLSAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqPiBFbGVtZW50TGlzdDsKLSAgICBFbGVtZW50TGlz
dCBtX2VsZW1lbnRzOwotfTsKLQotfQotCi0jZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dENocm9taXVtX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL0NwcEJvdW5kQ2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcEJvdW5kQ2xhc3MuY3BwCShyZXZpc2lvbiAx
NDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9D
cHBCb3VuZENsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA5IFBhd2VsIEhhamRhbiAocGhhamRhbi5qckBjaHJvbWl1bS5vcmcp
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8g
VGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBDcHBCb3VuZENsYXNzCi0KLS8vIEhl
cmUncyB0aGUgY29udHJvbCBmbG93IG9mIGEgSlMgbWV0aG9kIGdldHRpbmcgZm9yd2FyZGVkIHRv
IGEgY2xhc3MuCi0vLyAtIFNvbWV0aGluZyBjYWxscyBvdXIgTlBPYmplY3Qgd2l0aCBhIGZ1bmN0
aW9uIGxpa2UgIkludm9rZSIuCi0vLyAtIENwcE5QT2JqZWN0J3Mgc3RhdGljIGludm9rZSgpIGZ1
bmN0aW9uIGZvcndhcmRzIGl0IHRvIGl0cyBhdHRhY2hlZAotLy8gICBDcHBCb3VuZENsYXNzJ3Mg
aW52b2tlKCkgbWV0aG9kLgotLy8gLSBDcHBCb3VuZENsYXNzIGhhcyB0aGVuIG92ZXJyaWRkZW4g
aW52b2tlKCkgdG8gbG9vayB1cCB0aGUgZnVuY3Rpb24KLS8vICAgbmFtZSBpbiBpdHMgaW50ZXJu
YWwgbWFwIG9mIG1ldGhvZHMsIGFuZCB0aGVuIGNhbGxzIHRoZSBhcHByb3ByaWF0ZQotLy8gICBt
ZXRob2QuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcHBCb3VuZENsYXNzLmgi
Ci0KLSNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIKLSNp
bmNsdWRlICJXZWJGcmFtZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNsYXNz
IENwcFZhcmlhbnRQcm9wZXJ0eUNhbGxiYWNrIDogcHVibGljIENwcEJvdW5kQ2xhc3M6OlByb3Bl
cnR5Q2FsbGJhY2sgewotcHVibGljOgotICAgIENwcFZhcmlhbnRQcm9wZXJ0eUNhbGxiYWNrKENw
cFZhcmlhbnQqIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgfQotCi0gICAgdmlydHVhbCBib29s
IGdldFZhbHVlKENwcFZhcmlhbnQqIHZhbHVlKQotICAgIHsKLSAgICAgICAgdmFsdWUtPnNldCgq
bV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZpcnR1YWwgYm9v
bCBzZXRWYWx1ZShjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fdmFs
dWUtPnNldCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBDcHBWYXJpYW50KiBtX3ZhbHVlOwotfTsKLQotY2xhc3MgR2V0dGVyUHJvcGVydHlDYWxs
YmFjayA6IHB1YmxpYyBDcHBCb3VuZENsYXNzOjpQcm9wZXJ0eUNhbGxiYWNrIHsKLXB1YmxpYzoK
LSAgICBHZXR0ZXJQcm9wZXJ0eUNhbGxiYWNrKGF1dG9fcHRyPENwcEJvdW5kQ2xhc3M6OkdldHRl
ckNhbGxiYWNrPiBjYWxsYmFjaykKLSAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0VmFsdWUoQ3BwVmFyaWFudCogdmFsdWUp
Ci0gICAgewotICAgICAgICBtX2NhbGxiYWNrLT5ydW4odmFsdWUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWUoY29uc3QgQ3BwVmFyaWFu
dCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgYXV0b19wdHI8Q3Bw
Qm91bmRDbGFzczo6R2V0dGVyQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Ci19OwotCi19Ci0KLS8vIE91
ciBzcGVjaWFsIE5QT2JqZWN0IHR5cGUuIFdlIGV4dGVuZCBhbiBOUE9iamVjdCB3aXRoIGEgcG9p
bnRlciB0byBhCi0vLyBDcHBCb3VuZENsYXNzLCB3aGljaCBpcyBqdXN0IGEgQysrIGludGVyZmFj
ZSB0aGF0IHdlIGZvcndhcmQgYWxsIE5QT2JqZWN0Ci0vLyBjYWxsYmFja3MgdG8uCi1zdHJ1Y3Qg
Q3BwTlBPYmplY3QgewotICAgIE5QT2JqZWN0IHBhcmVudDsgLy8gVGhpcyBtdXN0IGJlIHRoZSBm
aXJzdCBmaWVsZCBpbiB0aGUgc3RydWN0LgotICAgIENwcEJvdW5kQ2xhc3MqIGJvdW5kQ2xhc3M7
Ci0KLSAgICAvLwotICAgIC8vIEFsbCBmb2xsb3dpbmcgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGFy
ZSBzdGF0aWMsIGFuZCBqdXN0IHVzZWQgdG8gaW50ZXJmYWNlCi0gICAgLy8gd2l0aCBOUE9iamVj
dC9OUENsYXNzLgotICAgIC8vCi0KLSAgICAvLyBBbiBOUENsYXNzIGFzc29jaWF0ZXMgc3RhdGlj
IGZ1bmN0aW9ucyBvZiBDcHBOUE9iamVjdCB3aXRoIHRoZQotICAgIC8vIGZ1bmN0aW9uIHBvaW50
ZXJzIHVzZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCi0gICAgc3RhdGljIE5QQ2xhc3MgbnBDbGFzczsK
LQotICAgIC8vIEFsbG9jYXRlIGEgbmV3IE5QT2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBjbGFz
cy4KLSAgICBzdGF0aWMgTlBPYmplY3QqIGFsbG9jYXRlKE5QUCwgTlBDbGFzcyopOwotCi0gICAg
Ly8gRnJlZSBhbiBvYmplY3QuCi0gICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShOUE9iamVjdCop
OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBDKysgY2xhc3MgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgTlBPYmplY3QgZXhwb3NlcyB0aGUKLSAgICAvLyBnaXZlbiBwcm9wZXJ0eS4gQ2FsbGVk
IGJ5IHRoZSBKUyBydW50aW1lLgotICAgIHN0YXRpYyBib29sIGhhc1Byb3BlcnR5KE5QT2JqZWN0
KiwgTlBJZGVudGlmaWVyKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgQysrIGNsYXNz
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIE5QT2JqZWN0IGV4cG9zZXMgdGhlCi0gICAgLy8gZ2l2ZW4g
bWV0aG9kLiBDYWxsZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCi0gICAgc3RhdGljIGJvb2wgaGFzTWV0
aG9kKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKTsKLQotICAgIC8vIElmIHRoZSBnaXZlbiBtZXRo
b2QgaXMgZXhwb3NlZCBieSB0aGUgQysrIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAg
Ly8gTlBPYmplY3QsIGludm9rZXMgaXQgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFuZCByZXR1
cm5zIGEgcmVzdWx0LiBPdGhlcndpc2UsCi0gICAgLy8gcmV0dXJucyAidW5kZWZpbmVkIiAoaW4g
dGhlIEphdmFTY3JpcHQgc2Vuc2UpLiBDYWxsZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCi0gICAgc3Rh
dGljIGJvb2wgaW52b2tlKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRDb3Vu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50KiByZXN1bHQpOwotCi0gICAgLy8g
SWYgdGhlIGdpdmVuIHByb3BlcnR5IGlzIGV4cG9zZWQgYnkgdGhlIEMrKyBjbGFzcyBhc3NvY2lh
dGVkIHdpdGggdGhpcwotICAgIC8vIE5QT2JqZWN0LCByZXR1cm5zIGl0cyB2YWx1ZS4gT3RoZXJ3
aXNlLCByZXR1cm5zICJ1bmRlZmluZWQiIChpbiB0aGUKLSAgICAvLyBKYXZhU2NyaXB0IHNlbnNl
KS4gQ2FsbGVkIGJ5IHRoZSBKUyBydW50aW1lLgotICAgIHN0YXRpYyBib29sIGdldFByb3BlcnR5
KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyLCBOUFZhcmlhbnQqIHJlc3VsdCk7Ci0KLSAgICAvLyBJ
ZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXMgZXhwb3NlZCBieSB0aGUgQysrIGNsYXNzIGFzc29jaWF0
ZWQgd2l0aCB0aGlzCi0gICAgLy8gTlBPYmplY3QsIHNldHMgaXRzIHZhbHVlLiBPdGhlcndpc2Us
IGRvZXMgbm90aGluZy4gQ2FsbGVkIGJ5IHRoZSBKUwotICAgIC8vIHJ1bnRpbWUuCi0gICAgc3Rh
dGljIGJvb2wgc2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIsIGNvbnN0IE5QVmFy
aWFudCogdmFsdWUpOwotfTsKLQotLy8gQnVpbGQgQ3BwTlBPYmplY3QncyBzdGF0aWMgZnVuY3Rp
b24gcG9pbnRlcnMgaW50byBhbiBOUENsYXNzLCBmb3IgdXNlCi0vLyBpbiBjb25zdHJ1Y3Rpbmcg
TlBPYmplY3RzIGZvciB0aGUgQysrIGNsYXNzZXMuCi1OUENsYXNzIENwcE5QT2JqZWN0OjpucENs
YXNzID0gewotICAgIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OLAotICAgIENwcE5QT2JqZWN0Ojph
bGxvY2F0ZSwKLSAgICBDcHBOUE9iamVjdDo6ZGVhbGxvY2F0ZSwKLSAgICAvKiBOUEludmFsaWRh
dGVGdW5jdGlvblB0ciAqLyAwLAotICAgIENwcE5QT2JqZWN0OjpoYXNNZXRob2QsCi0gICAgQ3Bw
TlBPYmplY3Q6Omludm9rZSwKLSAgICAvKiBOUEludm9rZURlZmF1bHRGdW5jdGlvblB0ciAqLyAw
LAotICAgIENwcE5QT2JqZWN0OjpoYXNQcm9wZXJ0eSwKLSAgICBDcHBOUE9iamVjdDo6Z2V0UHJv
cGVydHksCi0gICAgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5LAotICAgIC8qIE5QUmVtb3ZlUHJv
cGVydHlGdW5jdGlvblB0ciAqLyAwCi19OwotCi1OUE9iamVjdCogQ3BwTlBPYmplY3Q6OmFsbG9j
YXRlKE5QUCBucHAsIE5QQ2xhc3MqIGFDbGFzcykKLXsKLSAgICBDcHBOUE9iamVjdCogb2JqID0g
bmV3IENwcE5QT2JqZWN0OwotICAgIC8vIG9iai0+cGFyZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQg
YnkgdGhlIE5QT2JqZWN0IGNvZGUgY2FsbGluZyB0aGlzLgotICAgIG9iai0+Ym91bmRDbGFzcyA9
IDA7Ci0gICAgcmV0dXJuICZvYmotPnBhcmVudDsKLX0KLQotdm9pZCBDcHBOUE9iamVjdDo6ZGVh
bGxvY2F0ZShOUE9iamVjdCogbnBPYmopCi17Ci0gICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAgZGVsZXRlIG9iajsKLX0KLQot
Ym9vbCBDcHBOUE9iamVjdDo6aGFzTWV0aG9kKE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVy
IGlkZW50KQotewotICAgIENwcE5QT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PENwcE5Q
T2JqZWN0Kj4obnBPYmopOwotICAgIHJldHVybiBvYmotPmJvdW5kQ2xhc3MtPmhhc01ldGhvZChp
ZGVudCk7Ci19Ci0KLWJvb2wgQ3BwTlBPYmplY3Q6Omhhc1Byb3BlcnR5KE5QT2JqZWN0KiBucE9i
aiwgTlBJZGVudGlmaWVyIGlkZW50KQotewotICAgIENwcE5QT2JqZWN0KiBvYmogPSByZWludGVy
cHJldF9jYXN0PENwcE5QT2JqZWN0Kj4obnBPYmopOwotICAgIHJldHVybiBvYmotPmJvdW5kQ2xh
c3MtPmhhc1Byb3BlcnR5KGlkZW50KTsKLX0KLQotYm9vbCBDcHBOUE9iamVjdDo6aW52b2tlKE5Q
T2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVyIGlkZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCogcmVzdWx0KQotewotICAgIENwcE5Q
T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PENwcE5QT2JqZWN0Kj4obnBPYmopOwotICAg
IHJldHVybiBvYmotPmJvdW5kQ2xhc3MtPmludm9rZShpZGVudCwgYXJndW1lbnRzLCBhcmd1bWVu
dENvdW50LCByZXN1bHQpOwotfQotCi1ib29sIENwcE5QT2JqZWN0OjpnZXRQcm9wZXJ0eShOUE9i
amVjdCogbnBPYmosIE5QSWRlbnRpZmllciBpZGVudCwgTlBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9i
aik7Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+Z2V0UHJvcGVydHkoaWRlbnQsIHJlc3Vs
dCk7Ci19Ci0KLWJvb2wgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwg
TlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQotewotICAgIENwcE5Q
T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PENwcE5QT2JqZWN0Kj4obnBPYmopOwotICAg
IHJldHVybiBvYmotPmJvdW5kQ2xhc3MtPnNldFByb3BlcnR5KGlkZW50LCB2YWx1ZSk7Ci19Ci0K
LUNwcEJvdW5kQ2xhc3M6On5DcHBCb3VuZENsYXNzKCkKLXsKLSAgICBmb3IgKE1ldGhvZExpc3Q6
Oml0ZXJhdG9yIGkgPSBtX21ldGhvZHMuYmVnaW4oKTsgaSAhPSBtX21ldGhvZHMuZW5kKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlIGktPnNlY29uZDsKLQotICAgIGZvciAoUHJvcGVydHlMaXN0Ojpp
dGVyYXRvciBpID0gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IGkgIT0gbV9wcm9wZXJ0aWVzLmVuZCgp
OyArK2kpCi0gICAgICAgIGRlbGV0ZSBpLT5zZWNvbmQ7Ci0KLSAgICAvLyBVbnJlZ2lzdGVyIG91
cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJhbWUuCi0gICAgaWYgKG1fYm91bmRUb0Zy
YW1lKQotICAgICAgICBXZWJCaW5kaW5nczo6dW5yZWdpc3Rlck9iamVjdChOUFZBUklBTlRfVE9f
T0JKRUNUKG1fc2VsZlZhcmlhbnQpKTsKLX0KLQotYm9vbCBDcHBCb3VuZENsYXNzOjpoYXNNZXRo
b2QoTlBJZGVudGlmaWVyIGlkZW50KSBjb25zdAotewotICAgIHJldHVybiBtX21ldGhvZHMuZmlu
ZChpZGVudCkgIT0gbV9tZXRob2RzLmVuZCgpOwotfQotCi1ib29sIENwcEJvdW5kQ2xhc3M6Omhh
c1Byb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9w
ZXJ0aWVzLmZpbmQoaWRlbnQpICE9IG1fcHJvcGVydGllcy5lbmQoKTsKLX0KLQotYm9vbCBDcHBC
b3VuZENsYXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlkZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5QVmFyaWFudCogcmVzdWx0KSB7Ci0gICAgTWV0aG9kTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9tZXRob2RzLmVuZCgpOwotICAgIE1ldGhvZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1ldGhv
ZCA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKLSAgICBDYWxsYmFjayogY2FsbGJhY2s7Ci0gICAg
aWYgKG1ldGhvZCA9PSBlbmQpIHsKLSAgICAgICAgaWYgKCFtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0
KCkpIHsKLSAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxiYWNrID0gbV9mYWxsYmFj
a0NhbGxiYWNrLmdldCgpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsYmFjayA9ICgqbWV0aG9k
KS5zZWNvbmQ7Ci0KLSAgICAvLyBCdWlsZCBhIENwcEFyZ3VtZW50TGlzdCBhcmd1bWVudCB2ZWN0
b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBjb21pbmcgaW4uCi0gICAgQ3BwQXJndW1lbnRMaXN0IGNw
cEFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFy
Z3VtZW50Q291bnQ7IGkrKykKLSAgICAgICAgY3BwQXJndW1lbnRzW2ldLnNldChhcmd1bWVudHNb
aV0pOwotCi0gICAgQ3BwVmFyaWFudCBjcHBSZXN1bHQ7Ci0gICAgY2FsbGJhY2stPnJ1bihjcHBB
cmd1bWVudHMsICZjcHBSZXN1bHQpOwotCi0gICAgY3BwUmVzdWx0LmNvcHlUb05QVmFyaWFudChy
ZXN1bHQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENwcEJvdW5kQ2xhc3M6OmdldFBy
b3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwgTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0Ci17Ci0g
ICAgUHJvcGVydHlMaXN0Ojpjb25zdF9pdGVyYXRvciBjYWxsYmFjayA9IG1fcHJvcGVydGllcy5m
aW5kKGlkZW50KTsKLSAgICBpZiAoY2FsbGJhY2sgPT0gbV9wcm9wZXJ0aWVzLmVuZCgpKSB7Ci0g
ICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKLSAgICBpZiAoIWNhbGxiYWNrLT5z
ZWNvbmQtPmdldFZhbHVlKCZjcHBWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
cHBWYWx1ZS5jb3B5VG9OUFZhcmlhbnQocmVzdWx0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDcHBCb3VuZENsYXNzOjpzZXRQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0
IE5QVmFyaWFudCogdmFsdWUpCi17Ci0gICAgUHJvcGVydHlMaXN0OjppdGVyYXRvciBjYWxsYmFj
ayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKLSAgICBpZiAoY2FsbGJhY2sgPT0gbV9wcm9w
ZXJ0aWVzLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDcHBWYXJpYW50IGNw
cFZhbHVlOwotICAgIGNwcFZhbHVlLnNldCgqdmFsdWUpOwotICAgIHJldHVybiAoKmNhbGxiYWNr
KS5zZWNvbmQtPnNldFZhbHVlKGNwcFZhbHVlKTsKLX0KLQotdm9pZCBDcHBCb3VuZENsYXNzOjpi
aW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxsYmFjayogY2FsbGJhY2spCi17Ci0g
ICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIo
bmFtZS5jX3N0cigpKTsKLSAgICBNZXRob2RMaXN0OjppdGVyYXRvciBvbGRDYWxsYmFjayA9IG1f
bWV0aG9kcy5maW5kKGlkZW50KTsKLSAgICBpZiAob2xkQ2FsbGJhY2sgIT0gbV9tZXRob2RzLmVu
ZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+c2Vjb25kOwotICAgICAgICBpZiAo
IWNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBtX21ldGhvZHMuZXJhc2Uob2xkQ2FsbGJhY2spOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9tZXRob2RzW2lk
ZW50XSA9IGNhbGxiYWNrOwotfQotCi12b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRHZXR0ZXJDYWxs
YmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIGF1dG9fcHRyPEdldHRlckNhbGxiYWNrPiBjYWxsYmFj
aykKLXsKLSAgICBQcm9wZXJ0eUNhbGxiYWNrKiBwcm9wZXJ0eUNhbGxiYWNrID0gY2FsbGJhY2su
Z2V0KCkgPyBuZXcgR2V0dGVyUHJvcGVydHlDYWxsYmFjayhjYWxsYmFjaykgOiAwOwotICAgIGJp
bmRQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eUNhbGxiYWNrKTsKLX0KLQotdm9pZCBDcHBCb3VuZENs
YXNzOjpiaW5kUHJvcGVydHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBDcHBWYXJpYW50KiBwcm9wKQot
ewotICAgIFByb3BlcnR5Q2FsbGJhY2sqIHByb3BlcnR5Q2FsbGJhY2sgPSBwcm9wID8gbmV3IENw
cFZhcmlhbnRQcm9wZXJ0eUNhbGxiYWNrKHByb3ApIDogMDsKLSAgICBiaW5kUHJvcGVydHkobmFt
ZSwgcHJvcGVydHlDYWxsYmFjayk7Ci19Ci0KLXZvaWQgQ3BwQm91bmRDbGFzczo6YmluZFByb3Bl
cnR5KGNvbnN0IHN0cmluZyYgbmFtZSwgUHJvcGVydHlDYWxsYmFjayogY2FsbGJhY2spCi17Ci0g
ICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIo
bmFtZS5jX3N0cigpKTsKLSAgICBQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9yIG9sZENhbGxiYWNrID0g
bV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwotICAgIGlmIChvbGRDYWxsYmFjayAhPSBtX3Byb3Bl
cnRpZXMuZW5kKCkpIHsKLSAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNrLT5zZWNvbmQ7Ci0gICAg
ICAgIGlmICghY2FsbGJhY2spIHsKLSAgICAgICAgICAgIG1fcHJvcGVydGllcy5lcmFzZShvbGRD
YWxsYmFjayk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBt
X3Byb3BlcnRpZXNbaWRlbnRdID0gY2FsbGJhY2s7Ci19Ci0KLWJvb2wgQ3BwQm91bmRDbGFzczo6
aXNNZXRob2RSZWdpc3RlcmVkKGNvbnN0IHN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBOUElk
ZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNf
c3RyKCkpOwotICAgIE1ldGhvZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGNhbGxiYWNrID0gbV9tZXRo
b2RzLmZpbmQoaWRlbnQpOwotICAgIHJldHVybiBjYWxsYmFjayAhPSBtX21ldGhvZHMuZW5kKCk7
Ci19Ci0KLUNwcFZhcmlhbnQqIENwcEJvdW5kQ2xhc3M6OmdldEFzQ3BwVmFyaWFudCgpCi17Ci0g
ICAgaWYgKCFtX3NlbGZWYXJpYW50LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGFu
IE5QT2JqZWN0IHVzaW5nIG91ciBzdGF0aWMgTlBDbGFzcy4gVGhlIGZpcnN0IGFyZ3VtZW50IChh
Ci0gICAgICAgIC8vIHBsdWdpbidzIGluc3RhbmNlIGhhbmRsZSkgaXMgcGFzc2VkIHRocm91Z2gg
dG8gdGhlIGFsbG9jYXRlIGZ1bmN0aW9uCi0gICAgICAgIC8vIGRpcmVjdGx5LCBhbmQgd2UgZG9u
J3QgdXNlIGl0LCBzbyBpdCdzIG9rIHRvIGJlIDAuCi0gICAgICAgIE5QT2JqZWN0KiBucE9iaiA9
IFdlYkJpbmRpbmdzOjpjcmVhdGVPYmplY3QoMCwgJkNwcE5QT2JqZWN0OjpucENsYXNzKTsKLSAg
ICAgICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihu
cE9iaik7Ci0gICAgICAgIG9iai0+Ym91bmRDbGFzcyA9IHRoaXM7Ci0gICAgICAgIG1fc2VsZlZh
cmlhbnQuc2V0KG5wT2JqKTsKLSAgICAgICAgV2ViQmluZGluZ3M6OnJlbGVhc2VPYmplY3QobnBP
YmopOyAvLyBDcHBWYXJpYW50IHRha2VzIHRoZSByZWZlcmVuY2UuCi0gICAgfQotICAgIFdFQktJ
VF9BU1NFUlQobV9zZWxmVmFyaWFudC5pc09iamVjdCgpKTsKLSAgICByZXR1cm4gJm1fc2VsZlZh
cmlhbnQ7Ci19Ci0KLXZvaWQgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2YXNjcmlwdChXZWJGcmFt
ZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgY2xhc3NuYW1lKQotewotICAgIC8vIEJpbmRUb1dp
bmRvd09iamVjdCB3aWxsIHRha2UgaXRzIG93biByZWZlcmVuY2UgdG8gdGhlIE5QT2JqZWN0LCBh
bmQgY2xlYW4KLSAgICAvLyB1cCBhZnRlciBpdHNlbGYuIEl0IHdpbGwgYWxzbyAoaW5kaXJlY3Rs
eSkgcmVnaXN0ZXIgdGhlIG9iamVjdCB3aXRoIFY4LAotICAgIC8vIHNvIHdlIG11c3QgcmVtZW1i
ZXIgdGhpcyBzbyB3ZSBjYW4gdW5yZWdpc3RlciBpdCB3aGVuIHdlJ3JlIGRlc3Ryb3llZC4KLSAg
ICBmcmFtZS0+YmluZFRvV2luZG93T2JqZWN0KGNsYXNzbmFtZSwgTlBWQVJJQU5UX1RPX09CSkVD
VCgqZ2V0QXNDcHBWYXJpYW50KCkpKTsKLSAgICBtX2JvdW5kVG9GcmFtZSA9IHRydWU7Ci19Ci0K
LX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0Nw
cEJvdW5kQ2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9DcHBCb3VuZENsYXNzLmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcEJvdW5kQ2xhc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IFBhd2VsIEhhamRhbiAocGhhamRhbi5qckBjaHJvbWl1bS5vcmcpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAgQ3BwQm91bmRDbGFz
cyBjbGFzczoKLSAgVGhpcyBiYXNlIGNsYXNzIHNlcnZlcyBhcyBhIHBhcmVudCBmb3IgQysrIGNs
YXNzZXMgZGVzaWduZWQgdG8gYmUgYm91bmQgdG8KLSAgSmF2YVNjcmlwdCBvYmplY3RzLgotCi0g
IFN1YmNsYXNzZXMgc2hvdWxkIGRlZmluZSB0aGUgY29uc3RydWN0b3IgdG8gYnVpbGQgdGhlIHBy
b3BlcnR5IGFuZCBtZXRob2QKLSAgbGlzdHMgbmVlZGVkIHRvIGJpbmQgdGhpcyBjbGFzcyB0byBh
IEpTIG9iamVjdC4gIFRoZXkgc2hvdWxkIGFsc28gZGVjbGFyZQotICBhbmQgZGVmaW5lIG1lbWJl
ciB2YXJpYWJsZXMgYW5kIG1ldGhvZHMgdG8gYmUgZXhwb3NlZCB0byBKUyB0aHJvdWdoCi0gIHRo
YXQgb2JqZWN0LgotKi8KLQotI2lmbmRlZiBDcHBCb3VuZENsYXNzX2gKLSNkZWZpbmUgQ3BwQm91
bmRDbGFzc19oCi0KLSNpbmNsdWRlICJDcHBWYXJpYW50LmgiCi0jaW5jbHVkZSA8bWFwPgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Y2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJTdHJpbmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0
UnVubmVyIHsKLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxDcHBWYXJpYW50PiBDcHBBcmd1bWVudExp
c3Q7Ci0KLS8vIENwcEJvdW5kQ2xhc3MgbGV0cyB5b3UgbWFwIEphdmFzY3JpcHQgbWV0aG9kIGNh
bGxzIGFuZCBwcm9wZXJ0eSBhY2Nlc3NlcwotLy8gZGlyZWN0bHkgdG8gQysrIG1ldGhvZCBjYWxs
cyBhbmQgQ3BwVmFyaWFudCogdmFyaWFibGUgYWNjZXNzLgotY2xhc3MgQ3BwQm91bmRDbGFzcyB7
Ci1wdWJsaWM6Ci0gICAgY2xhc3MgUHJvcGVydHlDYWxsYmFjayB7Ci0gICAgcHVibGljOgotICAg
ICAgICB2aXJ0dWFsIH5Qcm9wZXJ0eUNhbGxiYWNrKCkgeyB9Ci0KLSAgICAgICAgLy8gU2V0cyB8
dmFsdWV8IHRvIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIFJldHVybnMgZmFsc2UgaW4gY2Fz
ZSBvZgotICAgICAgICAvLyBmYWlsdXJlLiB8dmFsdWV8IGlzIGFsd2F5cyBub24tMC4KLSAgICAg
ICAgdmlydHVhbCBib29sIGdldFZhbHVlKENwcFZhcmlhbnQqIHJlc3VsdCkgPSAwOwotCi0gICAg
ICAgIC8vIHNldHMgdGhlIHByb3BlcnR5IHZhbHVlIHRvIHx2YWx1ZXwuIFJldHVybnMgZmFsc2Ug
aW4gY2FzZSBvZiBmYWlsdXJlLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWUoY29uc3Qg
Q3BwVmFyaWFudCYpID0gMDsKLSAgICB9OwotCi0gICAgLy8gQ2FsbGJhY2sgY2xhc3MgZm9yICJ2
b2lkIGZ1bmN0aW9uKENwcFZhcmlhbnQqKSIKLSAgICBjbGFzcyBHZXR0ZXJDYWxsYmFjayB7Ci0g
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5HZXR0ZXJDYWxsYmFjaygpIHsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcnVuKENwcFZhcmlhbnQqKSA9IDA7Ci0gICAgfTsKLQotICAgIC8vIFRo
ZSBjb25zdHJ1Y3RvciBzaG91bGQgY2FsbCBCaW5kTWV0aG9kLCBCaW5kUHJvcGVydHksIGFuZAot
ICAgIC8vIFNldEZhbGxiYWNrTWV0aG9kIGFzIG5lZWRlZCB0byBzZXQgdXAgdGhlIG1ldGhvZHMs
IHByb3BlcnRpZXMsIGFuZAotICAgIC8vIGZhbGxiYWNrIG1ldGhvZC4KLSAgICBDcHBCb3VuZENs
YXNzKCkgOiBtX2JvdW5kVG9GcmFtZShmYWxzZSkgeyB9Ci0gICAgdmlydHVhbCB+Q3BwQm91bmRD
bGFzcygpOwotCi0gICAgLy8gUmV0dXJuIGEgQ3BwVmFyaWFudCByZXByZXNlbnRpbmcgdGhpcyBj
bGFzcywgZm9yIHVzZSB3aXRoIEJpbmRQcm9wZXJ0eSgpLgotICAgIC8vIFRoZSB2YXJpYW50IHR5
cGUgaXMgZ3VhcmFudGVlZCB0byBiZSBOUFZhcmlhbnRUeXBlX09iamVjdC4KLSAgICBDcHBWYXJp
YW50KiBnZXRBc0NwcFZhcmlhbnQoKTsKLQotICAgIC8vIEdpdmVuIGEgV2ViRnJhbWUsIEJpbmRU
b0phdmFzY3JpcHQgYnVpbGRzIHRoZSBOUE9iamVjdCB0aGF0IHdpbGwgcmVwcmVzZW50Ci0gICAg
Ly8gdGhlIGNsYXNzIGFuZCBiaW5kcyBpdCB0byB0aGUgZnJhbWUncyB3aW5kb3cgdW5kZXIgdGhl
IGdpdmVuIG5hbWUuIFRoaXMKLSAgICAvLyBzaG91bGQgZ2VuZXJhbGx5IGJlIGNhbGxlZCBmcm9t
IHRoZSBXZWJWaWV3IGRlbGVnYXRlJ3MKLSAgICAvLyBXaW5kb3dPYmplY3RDbGVhcmVkKCkuIEEg
Y2xhc3Mgc28gYm91bmQgd2lsbCBiZSBhY2Nlc3NpYmxlIHRvIEphdmFTY3JpcHQKLSAgICAvLyBh
cyB3aW5kb3cuPGNsYXNzbmFtZT4uIFRoZSBvd25lciBvZiB0aGUgQ3BwQm91bmRPYmplY3QgaXMg
cmVzcG9uc2libGUgZm9yCi0gICAgLy8ga2VlcGluZyB0aGUgb2JqZWN0IGFyb3VuZCB3aGlsZSB0
aGUgZnJhbWUgaXMgYWxpdmUsIGFuZCBmb3IgZGVzdHJveWluZyBpdAotICAgIC8vIGFmdGVyd2Fy
ZHMuCi0gICAgdm9pZCBiaW5kVG9KYXZhc2NyaXB0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBX
ZWJLaXQ6OldlYlN0cmluZyYgY2xhc3NuYW1lKTsKLQotICAgIC8vIFVzZWQgYnkgYSB0ZXN0LiBS
ZXR1cm5zIHRydWUgaWYgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZXhpc3RzLAot
ICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGZhbGxiYWNrIGlzIHJlZ2lzdGVyZWQuCi0g
ICAgYm9vbCBpc01ldGhvZFJlZ2lzdGVyZWQoY29uc3Qgc3RkOjpzdHJpbmcmKSBjb25zdDsKLQot
cHJvdGVjdGVkOgotICAgIC8vIENhbGxiYWNrIGZvciAidm9pZCBmdW5jdGlvbihjb25zdCBDcHBB
cmd1ZW1udExpc3QmLCBDcHBWYXJpYW50KikiCi0gICAgY2xhc3MgQ2FsbGJhY2sgewotICAgIHB1
YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2soKSB7IH0KLSAgICAgICAgdmlydHVhbCB2
b2lkIHJ1bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikgPSAwOwotICAgIH07
Ci0KLSAgICAvLyBDYWxsYmFjayBmb3IgInZvaWQgVDo6bWV0aG9kKGNvbnN0IENwcEFyZ3VlbW50
TGlzdCYsIENwcFZhcmlhbnQqKSIKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTWVtYmVy
Q2FsbGJhY2sgOiBwdWJsaWMgQ2FsbGJhY2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgdHlwZWRl
ZiB2b2lkIChUOjoqTWV0aG9kVHlwZSkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgICAgICBNZW1iZXJDYWxsYmFjayhUKiBvYmplY3QsIE1ldGhvZFR5cGUgbWV0aG9k
KQotICAgICAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICAgICAsIG1fbWV0aG9k
KG1ldGhvZCkgeyB9Ci0gICAgICAgIHZpcnR1YWwgfk1lbWJlckNhbGxiYWNrKCkgeyB9Ci0KLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJ1bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICAobV9vYmplY3QtPipt
X21ldGhvZCkoYXJndW1lbnRzLCByZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICBUKiBtX29iamVjdDsKLSAgICAgICAgTWV0aG9kVHlwZSBtX21ldGhvZDsKLSAgICB9
OwotCi0gICAgLy8gQ2FsbGJhY2sgY2xhc3MgZm9yICJ2b2lkIFQ6Om1ldGhvZChDcHBWYXJpYW50
KikiCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIE1lbWJlckdldHRlckNhbGxiYWNrIDog
cHVibGljIEdldHRlckNhbGxiYWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdm9p
ZCAoVDo6Kk1ldGhvZFR5cGUpKENwcFZhcmlhbnQqKTsKLSAgICAgICAgTWVtYmVyR2V0dGVyQ2Fs
bGJhY2soVCogb2JqZWN0LCBNZXRob2RUeXBlIG1ldGhvZCkKLSAgICAgICAgICAgIDogbV9vYmpl
Y3Qob2JqZWN0KQotICAgICAgICAgICAgLCBtX21ldGhvZChtZXRob2QpIHsgfQotICAgICAgICB2
aXJ0dWFsIH5NZW1iZXJHZXR0ZXJDYWxsYmFjaygpIHsgfQotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBydW4oQ3BwVmFyaWFudCogcmVzdWx0KSB7IChtX29iamVjdC0+Km1fbWV0aG9kKShyZXN1bHQp
OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBUKiBtX29iamVjdDsKLSAgICAgICAgTWV0aG9k
VHlwZSBtX21ldGhvZDsKLSAgICB9OwotCi0gICAgLy8gQmluZCB0aGUgSmF2YXNjcmlwdCBtZXRo
b2QgY2FsbGVkIHRoZSBzdHJpbmcgcGFyYW1ldGVyIHRvIHRoZSBDKysgbWV0aG9kLgotICAgIHZv
aWQgYmluZENhbGxiYWNrKGNvbnN0IHN0ZDo6c3RyaW5nJiwgQ2FsbGJhY2sqKTsKLQotICAgIC8v
IEEgd3JhcHBlciBmb3IgYmluZENhbGxiYWNrLCB0byBzaW1wbGlmeSB0aGUgY29tbW9uIGNhc2Ug
b2YgYmluZGluZyBhCi0gICAgLy8gbWV0aG9kIG9uIHRoZSBjdXJyZW50IG9iamVjdC4gVGhvdWdo
IG5vdCB2ZXJpZmllZCBoZXJlLCB0aGUgbWV0aG9kIHBhcmFtZXRlcgotICAgIC8vIG11c3QgYmUg
YSBtZXRob2Qgb2YgdGhpcyBDcHBCb3VuZENsYXNzIHN1YmNsYXNzLgotICAgIHRlbXBsYXRlPGNs
YXNzIFQ+Ci0gICAgdm9pZCBiaW5kTWV0aG9kKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lLCB2b2lk
IChUOjoqbWV0aG9kKShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikpCi0gICAg
ewotICAgICAgICBDYWxsYmFjayogY2FsbGJhY2sgPSBuZXcgTWVtYmVyQ2FsbGJhY2s8VD4oc3Rh
dGljX2Nhc3Q8VCo+KHRoaXMpLCBtZXRob2QpOwotICAgICAgICBiaW5kQ2FsbGJhY2sobmFtZSwg
Y2FsbGJhY2spOwotICAgIH0KLQotICAgIC8vIEJpbmQgSmF2YXNjcmlwdCBwcm9wZXJ0eSB8bmFt
ZXwgdG8gdGhlIEMrKyBnZXR0ZXIgY2FsbGJhY2sgfGNhbGxiYWNrfC4KLSAgICAvLyBUaGlzIGNh
biBiZSB1c2VkIHRvIGNyZWF0ZSByZWFkLW9ubHkgcHJvcGVydGllcy4KLSAgICB2b2lkIGJpbmRH
ZXR0ZXJDYWxsYmFjayhjb25zdCBzdGQ6OnN0cmluZyYsIHN0ZDo6YXV0b19wdHI8R2V0dGVyQ2Fs
bGJhY2s+KTsKLQotICAgIC8vIEEgd3JhcHBlciBmb3IgQmluZEdldHRlckNhbGxiYWNrLCB0byBz
aW1wbGlmeSB0aGUgY29tbW9uIGNhc2Ugb2YgYmluZGluZyBhCi0gICAgLy8gcHJvcGVydHkgb24g
dGhlIGN1cnJlbnQgb2JqZWN0LiBUaG91Z2ggbm90IHZlcmlmaWVkIGhlcmUsIHRoZSBtZXRob2Qg
cGFyYW1ldGVyCi0gICAgLy8gbXVzdCBiZSBhIG1ldGhvZCBvZiB0aGlzIENwcEJvdW5kQ2xhc3Mg
c3ViY2xhc3MuCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIGJpbmRQcm9wZXJ0eShj
b25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgdm9pZCAoVDo6Km1ldGhvZCkoQ3BwVmFyaWFudCopKQot
ICAgIHsKLSAgICAgICAgc3RkOjphdXRvX3B0cjxHZXR0ZXJDYWxsYmFjaz4gY2FsbGJhY2sobmV3
IE1lbWJlckdldHRlckNhbGxiYWNrPFQ+KHN0YXRpY19jYXN0PFQqPih0aGlzKSwgbWV0aG9kKSk7
Ci0gICAgICAgIGJpbmRHZXR0ZXJDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7Ci0gICAgfQotCi0g
ICAgLy8gQmluZCB0aGUgSmF2YXNjcmlwdCBwcm9wZXJ0eSBjYWxsZWQgfG5hbWV8IHRvIGEgQ3Bw
VmFyaWFudC4KLSAgICB2b2lkIGJpbmRQcm9wZXJ0eShjb25zdCBzdGQ6OnN0cmluZyYsIENwcFZh
cmlhbnQqKTsKLQotICAgIC8vIEJpbmQgSmF2YXNjcmlwdCBwcm9wZXJ0eSBjYWxsZWQgfG5hbWV8
IHRvIGEgUHJvcGVydHlDYWxsYmFjay4KLSAgICAvLyBDcHBCb3VuZENsYXNzIGFzc3VtZXMgY29u
dHJvbCBvdmVyIHRoZSBsaWZlIHRpbWUgb2YgdGhlIGNhbGxiYWNrLgotICAgIHZvaWQgYmluZFBy
b3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiwgUHJvcGVydHlDYWxsYmFjayopOwotCi0gICAgLy8g
U2V0IHRoZSBmYWxsYmFjayBjYWxsYmFjaywgd2hpY2ggaXMgY2FsbGVkIHdoZW4gd2hlbiBhIGNh
bGxiYWNrIGlzCi0gICAgLy8gaW52b2tlZCB0aGF0IGlzbid0IGJvdW5kLgotICAgIC8vIElmIGl0
IGlzIDAgKGl0cyBkZWZhdWx0IHZhbHVlKSwgYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpcyB0aHJv
d24gaW4KLSAgICAvLyB0aGF0IGNhc2UgKGFzIG5vcm1hbGx5IGV4cGVjdGVkKS4gSWYgbm9uIDAs
IHRoZSBmYWxsYmFjayBtZXRob2QgaXMKLSAgICAvLyBpbnZva2VkIGFuZCB0aGUgc2NyaXB0IGNv
bnRpbnVlcyBpdHMgZXhlY3V0aW9uLgotICAgIC8vIFBhc3NpbmcgMCBjbGVhcnMgb3V0IGFueSBl
eGlzdGluZyBiaW5kaW5nLgotICAgIC8vIEl0IGlzIHVzZWQgZm9yIHRlc3RzIGFuZCBzaG91bGQg
cHJvYmFibHkgb25seSBiZSB1c2VkIGluIHN1Y2ggY2FzZXMKLSAgICAvLyBhcyBpdCBtYXkgY2F1
c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMgKGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBhCi0gICAg
Ly8gZmFsbGJhY2sgYWx3YXlzIHJldHVybnMgdHJ1ZSB3aGVuIGNoZWNrZWQgZm9yIGEgbWV0aG9k
J3MKLSAgICAvLyBleGlzdGVuY2UpLgotICAgIHZvaWQgYmluZEZhbGxiYWNrQ2FsbGJhY2soc3Rk
OjphdXRvX3B0cjxDYWxsYmFjaz4gZmFsbGJhY2tDYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIG1f
ZmFsbGJhY2tDYWxsYmFjayA9IGZhbGxiYWNrQ2FsbGJhY2s7Ci0gICAgfQotCi0gICAgLy8gQSB3
cmFwcGVyIGZvciBCaW5kRmFsbGJhY2tDYWxsYmFjaywgdG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBj
YXNlIG9mCi0gICAgLy8gYmluZGluZyBhIG1ldGhvZCBvbiB0aGUgY3VycmVudCBvYmplY3QuIFRo
b3VnaCBub3QgdmVyaWZpZWQgaGVyZSwKLSAgICAvLyB8bWV0aG9kfCBtdXN0IGJlIGEgbWV0aG9k
IG9mIHRoaXMgQ3BwQm91bmRDbGFzcyBzdWJjbGFzcy4KLSAgICAvLyBQYXNzaW5nIDAgZm9yIHxt
ZXRob2R8IGNsZWFycyBvdXQgYW55IGV4aXN0aW5nIGJpbmRpbmcuCi0gICAgdGVtcGxhdGU8Y2xh
c3MgVD4KLSAgICB2b2lkIGJpbmRGYWxsYmFja01ldGhvZCh2b2lkIChUOjoqbWV0aG9kKShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikpCi0gICAgewotICAgICAgICBpZiAobWV0
aG9kKQotICAgICAgICAgICAgYmluZEZhbGxiYWNrQ2FsbGJhY2soc3RkOjphdXRvX3B0cjxDYWxs
YmFjaz4obmV3IE1lbWJlckNhbGxiYWNrPFQ+KHN0YXRpY19jYXN0PFQqPih0aGlzKSwgbWV0aG9k
KSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiaW5kRmFsbGJhY2tDYWxsYmFjayhzdGQ6
OmF1dG9fcHRyPENhbGxiYWNrPigpKTsKLSAgICB9Ci0KLSAgICAvLyBTb21lIGZpZWxkcyBhcmUg
cHJvdGVjdGVkIGJlY2F1c2Ugc29tZSB0ZXN0cyBkZXBlbmQgb24gYWNjZXNzaW5nIHRoZW0sCi0g
ICAgLy8gYnV0IG90aGVyd2lzZSB0aGV5IHNob3VsZCBiZSBjb25zaWRlcmVkIHByaXZhdGUuCi0K
LSAgICB0eXBlZGVmIHN0ZDo6bWFwPE5QSWRlbnRpZmllciwgUHJvcGVydHlDYWxsYmFjayo+IFBy
b3BlcnR5TGlzdDsKLSAgICB0eXBlZGVmIHN0ZDo6bWFwPE5QSWRlbnRpZmllciwgQ2FsbGJhY2sq
PiBNZXRob2RMaXN0OwotICAgIC8vIFRoZXNlIG1hcHMgYXNzb2NpYXRlIG5hbWVzIHdpdGggcHJv
cGVydHkgYW5kIG1ldGhvZCBwb2ludGVycyB0byBiZQotICAgIC8vIGV4cG9zZWQgdG8gSmF2YVNj
cmlwdC4KLSAgICBQcm9wZXJ0eUxpc3QgbV9wcm9wZXJ0aWVzOwotICAgIE1ldGhvZExpc3QgbV9t
ZXRob2RzOwotCi0gICAgLy8gVGhlIGNhbGxiYWNrIGdldHMgaW52b2tlZCB3aGVuIGEgY2FsbCBp
cyBtYWRlIHRvIGFuIG5vbmV4aXN0ZW50IG1ldGhvZC4KLSAgICBzdGQ6OmF1dG9fcHRyPENhbGxi
YWNrPiBtX2ZhbGxiYWNrQ2FsbGJhY2s7Ci0KLXByaXZhdGU6Ci0gICAgLy8gTlBPYmplY3QgY2Fs
bGJhY2tzLgotICAgIGZyaWVuZCBzdHJ1Y3QgQ3BwTlBPYmplY3Q7Ci0gICAgYm9vbCBoYXNNZXRo
b2QoTlBJZGVudGlmaWVyKSBjb25zdDsKLSAgICBib29sIGludm9rZShOUElkZW50aWZpZXIsIGNv
bnN0IE5QVmFyaWFudCogYXJncywgc2l6ZV90IGFyZ0NvdW50LAotICAgICAgICAgICAgICAgIE5Q
VmFyaWFudCogcmVzdWx0KTsKLSAgICBib29sIGhhc1Byb3BlcnR5KE5QSWRlbnRpZmllcikgY29u
c3Q7Ci0gICAgYm9vbCBnZXRQcm9wZXJ0eShOUElkZW50aWZpZXIsIE5QVmFyaWFudCogcmVzdWx0
KSBjb25zdDsKLSAgICBib29sIHNldFByb3BlcnR5KE5QSWRlbnRpZmllciwgY29uc3QgTlBWYXJp
YW50Kik7Ci0KLSAgICAvLyBBIGxhemlseS1pbml0aWFsaXplZCBDcHBWYXJpYW50IHJlcHJlc2Vu
dGluZyB0aGlzIGNsYXNzLiBXZSByZXRhaW4gMQotICAgIC8vIHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdCwgYW5kIGl0IGlzIHJlbGVhc2VkIG9uIGRlbGV0aW9uLgotICAgIENwcFZhcmlhbnQgbV9z
ZWxmVmFyaWFudDsKLQotICAgIC8vIFRydWUgaWYgb3VyIG5wX29iamVjdCBoYXMgYmVlbiBib3Vu
ZCB0byBhIFdlYkZyYW1lLCBpbiB3aGljaCBjYXNlIGl0IG11c3QKLSAgICAvLyBiZSB1bnJlZ2lz
dGVyZWQgd2l0aCBWOCB3aGVuIHdlIGRlbGV0ZSBpdC4KLSAgICBib29sIG1fYm91bmRUb0ZyYW1l
OwotCi1wcml2YXRlOgotICAgIENwcEJvdW5kQ2xhc3MoQ3BwQm91bmRDbGFzcyYpOwotICAgIENw
cEJvdW5kQ2xhc3MmIG9wZXJhdG9yPShjb25zdCBDcHBCb3VuZENsYXNzJik7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBDcHBCb3VuZENsYXNzX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9DcHBWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMjQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcHBWYXJpYW50LmgiCi0KLSNpbmNsdWRlICJU
ZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIKLSNpbmNsdWRlIDxsaW1pdHM+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1l
c3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLUNwcFZhcmlhbnQ6OkNwcFZhcmlhbnQoKQotewotICAg
IHR5cGUgPSBOUFZhcmlhbnRUeXBlX051bGw7Ci19Ci0KLS8vIE5vdGUgdGhhdCBTZXQoKSBwZXJm
b3JtcyBhIGRlZXAgY29weSwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIHNhZmVseQotLy8gY2FsbCBG
cmVlRGF0YSgpIG9uIHRoZSB2YWx1ZSBpbiB0aGUgZGVzdHJ1Y3Rvci4KLUNwcFZhcmlhbnQ6OkNw
cFZhcmlhbnQoY29uc3QgQ3BwVmFyaWFudCYgb3JpZ2luYWwpCi17Ci0gICAgdHlwZSA9IE5QVmFy
aWFudFR5cGVfTnVsbDsKLSAgICBzZXQob3JpZ2luYWwpOwotfQotCi0vLyBTZWUgY29tbWVudCBm
b3IgY29weSBjb25zdHJ1Y3RvciwgYWJvdmUuCi1DcHBWYXJpYW50JiBDcHBWYXJpYW50OjpvcGVy
YXRvcj0oY29uc3QgQ3BwVmFyaWFudCYgb3JpZ2luYWwpCi17Ci0gICAgaWYgKCZvcmlnaW5hbCAh
PSB0aGlzKQotICAgICAgICBzZXQob3JpZ2luYWwpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
Q3BwVmFyaWFudDo6fkNwcFZhcmlhbnQoKQotewotICAgIGZyZWVEYXRhKCk7Ci19Ci0KLXZvaWQg
Q3BwVmFyaWFudDo6ZnJlZURhdGEoKQotewotICAgIFdlYkJpbmRpbmdzOjpyZWxlYXNlVmFyaWFu
dFZhbHVlKHRoaXMpOwotfQotCi1ib29sIENwcFZhcmlhbnQ6OmlzRXF1YWwoY29uc3QgQ3BwVmFy
aWFudCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBOUFZhcmlh
bnRUeXBlX0Jvb2w6Ci0gICAgICAgIHJldHVybiAodmFsdWUuYm9vbFZhbHVlID09IG90aGVyLnZh
bHVlLmJvb2xWYWx1ZSk7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0ludDMyOgotICAgICAgICBy
ZXR1cm4gKHZhbHVlLmludFZhbHVlID09IG90aGVyLnZhbHVlLmludFZhbHVlKTsKLSAgICBjYXNl
IE5QVmFyaWFudFR5cGVfRG91YmxlOgotICAgICAgICByZXR1cm4gKHZhbHVlLmRvdWJsZVZhbHVl
ID09IG90aGVyLnZhbHVlLmRvdWJsZVZhbHVlKTsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3Ry
aW5nOiB7Ci0gICAgICAgIGNvbnN0IE5QU3RyaW5nICp0aGlzX3ZhbHVlID0gJnZhbHVlLnN0cmlu
Z1ZhbHVlOwotICAgICAgICBjb25zdCBOUFN0cmluZyAqb3RoZXJfdmFsdWUgPSAmb3RoZXIudmFs
dWUuc3RyaW5nVmFsdWU7Ci0gICAgICAgIHVpbnQzMl90IGxlbiA9IHRoaXNfdmFsdWUtPlVURjhM
ZW5ndGg7Ci0gICAgICAgIHJldHVybiBsZW4gPT0gb3RoZXJfdmFsdWUtPlVURjhMZW5ndGgKLSAg
ICAgICAgICAgICYmICFzdHJuY21wKHRoaXNfdmFsdWUtPlVURjhDaGFyYWN0ZXJzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgb3RoZXJfdmFsdWUtPlVURjhDaGFyYWN0ZXJzLCBsZW4pOwotICAg
IH0KLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDoKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVf
Vm9pZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX09iamVj
dDogewotICAgICAgICBOUE9iamVjdCogdGhpc1ZhbHVlID0gdmFsdWUub2JqZWN0VmFsdWU7Ci0g
ICAgICAgIE5QT2JqZWN0KiBvdGhlclZhbHVlID0gb3RoZXIudmFsdWUub2JqZWN0VmFsdWU7Ci0g
ICAgICAgIHJldHVybiB0aGlzVmFsdWUtPl9jbGFzcyA9PSBvdGhlclZhbHVlLT5fY2xhc3MKLSAg
ICAgICAgICAgICYmIHRoaXNWYWx1ZS0+cmVmZXJlbmNlQ291bnQgPT0gb3RoZXJWYWx1ZS0+cmVm
ZXJlbmNlQ291bnQ7Ci0gICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
Q3BwVmFyaWFudDo6Y29weVRvTlBWYXJpYW50KE5QVmFyaWFudCogcmVzdWx0KSBjb25zdAotewot
ICAgIHJlc3VsdC0+dHlwZSA9IHR5cGU7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBO
UFZhcmlhbnRUeXBlX0Jvb2w6Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUuYm9vbFZhbHVlID0gdmFs
dWUuYm9vbFZhbHVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50
MzI6Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUuaW50VmFsdWUgPSB2YWx1ZS5pbnRWYWx1ZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0RvdWJsZToKLSAgICAgICAgcmVz
dWx0LT52YWx1ZS5kb3VibGVWYWx1ZSA9IHZhbHVlLmRvdWJsZVZhbHVlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgotICAgICAgICBXZWJCaW5kaW5nczo6
aW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weShyZXN1bHQsICZ2YWx1ZS5zdHJpbmdWYWx1
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9OdWxsOgotICAgIGNh
c2UgTlBWYXJpYW50VHlwZV9Wb2lkOgotICAgICAgICAvLyBOb3RoaW5nIHRvIHNldC4KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX09iamVjdDoKLSAgICAgICAgcmVzdWx0
LT50eXBlID0gTlBWYXJpYW50VHlwZV9PYmplY3Q7Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUub2Jq
ZWN0VmFsdWUgPSBXZWJCaW5kaW5nczo6cmV0YWluT2JqZWN0KHZhbHVlLm9iamVjdFZhbHVlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIENwcFZhcmlhbnQ6OnNldChjb25zdCBO
UFZhcmlhbnQmIG5ld1ZhbHVlKQotewotICAgIGZyZWVEYXRhKCk7Ci0gICAgc3dpdGNoIChuZXdW
YWx1ZS50eXBlKSB7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6Ci0gICAgICAgIHNldChu
ZXdWYWx1ZS52YWx1ZS5ib29sVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFy
aWFudFR5cGVfSW50MzI6Ci0gICAgICAgIHNldChuZXdWYWx1ZS52YWx1ZS5pbnRWYWx1ZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Eb3VibGU6Ci0gICAgICAgIHNl
dChuZXdWYWx1ZS52YWx1ZS5kb3VibGVWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
TlBWYXJpYW50VHlwZV9TdHJpbmc6Ci0gICAgICAgIHNldChuZXdWYWx1ZS52YWx1ZS5zdHJpbmdW
YWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9OdWxsOgotICAg
IGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgotICAgICAgICB0eXBlID0gbmV3VmFsdWUudHlwZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX09iamVjdDoKLSAgICAgICAg
c2V0KG5ld1ZhbHVlLnZhbHVlLm9iamVjdFZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
fQotCi12b2lkIENwcFZhcmlhbnQ6OnNldE51bGwoKQotewotICAgIGZyZWVEYXRhKCk7Ci0gICAg
dHlwZSA9IE5QVmFyaWFudFR5cGVfTnVsbDsKLX0KLQotdm9pZCBDcHBWYXJpYW50OjpzZXQoYm9v
bCBuZXdWYWx1ZSkKLXsKLSAgICBmcmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBl
X0Jvb2w7Ci0gICAgdmFsdWUuYm9vbFZhbHVlID0gbmV3VmFsdWU7Ci19Ci0KLXZvaWQgQ3BwVmFy
aWFudDo6c2V0KGludDMyX3QgbmV3VmFsdWUpCi17Ci0gICAgZnJlZURhdGEoKTsKLSAgICB0eXBl
ID0gTlBWYXJpYW50VHlwZV9JbnQzMjsKLSAgICB2YWx1ZS5pbnRWYWx1ZSA9IG5ld1ZhbHVlOwot
fQotCi12b2lkIENwcFZhcmlhbnQ6OnNldChkb3VibGUgbmV3VmFsdWUpCi17Ci0gICAgZnJlZURh
dGEoKTsKLSAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9Eb3VibGU7Ci0gICAgdmFsdWUuZG91Ymxl
VmFsdWUgPSBuZXdWYWx1ZTsKLX0KLQotLy8gVGhlIG5ld1ZhbHVlIG11c3QgYmUgYSBudWxsLXRl
cm1pbmF0ZWQgc3RyaW5nLgotdm9pZCBDcHBWYXJpYW50OjpzZXQoY29uc3QgY2hhciogbmV3VmFs
dWUpCi17Ci0gICAgZnJlZURhdGEoKTsKLSAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9TdHJpbmc7
Ci0gICAgTlBTdHJpbmcgbmV3U3RyaW5nID0ge25ld1ZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3RybGVuKG5ld1ZhbHVlKSl9OwotICAgIFdl
YkJpbmRpbmdzOjppbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHRoaXMsICZuZXdTdHJp
bmcpOwotfQotCi12b2lkIENwcFZhcmlhbnQ6OnNldChjb25zdCBzdHJpbmcmIG5ld1ZhbHVlKQot
ewotICAgIGZyZWVEYXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOwotICAg
IE5QU3RyaW5nIG5ld1N0cmluZyA9IHtuZXdWYWx1ZS5kYXRhKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90PihuZXdWYWx1ZS5zaXplKCkpfTsKLSAgICBX
ZWJCaW5kaW5nczo6aW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSh0aGlzLCAmbmV3U3Ry
aW5nKTsKLX0KLQotdm9pZCBDcHBWYXJpYW50OjpzZXQoY29uc3QgTlBTdHJpbmcmIG5ld1ZhbHVl
KQotewotICAgIGZyZWVEYXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOwot
ICAgIFdlYkJpbmRpbmdzOjppbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KHRoaXMsICZu
ZXdWYWx1ZSk7Ci19Ci0KLXZvaWQgQ3BwVmFyaWFudDo6c2V0KE5QT2JqZWN0KiBuZXdWYWx1ZSkK
LXsKLSAgICBmcmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBlX09iamVjdDsKLSAg
ICB2YWx1ZS5vYmplY3RWYWx1ZSA9IFdlYkJpbmRpbmdzOjpyZXRhaW5PYmplY3QobmV3VmFsdWUp
OwotfQotCi1zdHJpbmcgQ3BwVmFyaWFudDo6dG9TdHJpbmcoKSBjb25zdAotewotICAgIFdFQktJ
VF9BU1NFUlQoaXNTdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHN0cmluZyh2YWx1ZS5zdHJpbmdWYWx1
ZS5VVEY4Q2hhcmFjdGVycywKLSAgICAgICAgICAgICAgICAgIHZhbHVlLnN0cmluZ1ZhbHVlLlVU
RjhMZW5ndGgpOwotfQotCi1pbnQzMl90IENwcFZhcmlhbnQ6OnRvSW50MzIoKSBjb25zdAotewot
ICAgIGlmIChpc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5pbnRWYWx1ZTsKLSAgICBp
ZiAoaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVl
LmRvdWJsZVZhbHVlKTsKLSAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWRvdWJsZSBDcHBWYXJpYW50Ojp0b0RvdWJsZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUu
aW50VmFsdWUpOwotICAgIGlmIChpc0RvdWJsZSgpKQotICAgICAgICByZXR1cm4gdmFsdWUuZG91
YmxlVmFsdWU7Ci0gICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCi1ib29sIENwcFZhcmlhbnQ6OnRvQm9vbGVhbigpIGNvbnN0Ci17Ci0gICAgV0VCS0lU
X0FTU0VSVChpc0Jvb2woKSk7Ci0gICAgcmV0dXJuIHZhbHVlLmJvb2xWYWx1ZTsKLX0KLQotdmVj
dG9yPHN0cmluZz4gQ3BwVmFyaWFudDo6dG9TdHJpbmdWZWN0b3IoKSBjb25zdAotewotCi0gICAg
V0VCS0lUX0FTU0VSVChpc09iamVjdCgpKTsKLSAgICB2ZWN0b3I8c3RyaW5nPiBzdHJpbmdWZWN0
b3I7Ci0gICAgTlBPYmplY3QqIG5wVmFsdWUgPSB2YWx1ZS5vYmplY3RWYWx1ZTsKLSAgICBOUElk
ZW50aWZpZXIgbGVuZ3RoSWQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5nSWRlbnRpZmllcigibGVu
Z3RoIik7Ci0KLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpoYXNQcm9wZXJ0eSgwLCBucFZhbHVlLCBs
ZW5ndGhJZCkpCi0gICAgICAgIHJldHVybiBzdHJpbmdWZWN0b3I7Ci0KLSAgICBOUFZhcmlhbnQg
bGVuZ3RoVmFsdWU7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0UHJvcGVydHkoMCwgbnBWYWx1
ZSwgbGVuZ3RoSWQsICZsZW5ndGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBzdHJpbmdWZWN0b3I7
Ci0KLSAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICAvLyBUaGUgbGVuZ3RoIGlzIGEgZG91YmxlIGlu
IHNvbWUgY2FzZXMuCi0gICAgaWYgKE5QVkFSSUFOVF9JU19ET1VCTEUobGVuZ3RoVmFsdWUpKQot
ICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KE5QVkFSSUFOVF9UT19ET1VCTEUobGVu
Z3RoVmFsdWUpKTsKLSAgICBlbHNlIGlmIChOUFZBUklBTlRfSVNfSU5UMzIobGVuZ3RoVmFsdWUp
KQotICAgICAgICBsZW5ndGggPSBOUFZBUklBTlRfVE9fSU5UMzIobGVuZ3RoVmFsdWUpOwotICAg
IFdlYkJpbmRpbmdzOjpyZWxlYXNlVmFyaWFudFZhbHVlKCZsZW5ndGhWYWx1ZSk7Ci0KLSAgICAv
LyBGb3Igc2FuaXR5LCBvbmx5IGFsbG93IDEwMCBpdGVtcy4KLSAgICBsZW5ndGggPSBtaW4oMTAw
LCBsZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgLy8gR2V0IGVhY2ggb2YgdGhlIGl0ZW1zLgotICAgICAgICBjaGFyIGluZGV4SW5DaGFyWzIw
XTsgLy8gRW5vdWdoIHNpemUgdG8gc3RvcmUgMzItYml0IGludGVnZXIKLSAgICAgICAgc25wcmlu
dGYoaW5kZXhJbkNoYXIsIDIwLCAiJWQiLCBpKTsKLSAgICAgICAgc3RyaW5nIGluZGV4KGluZGV4
SW5DaGFyKTsKLSAgICAgICAgTlBJZGVudGlmaWVyIGluZGV4SWQgPSBXZWJCaW5kaW5nczo6Z2V0
U3RyaW5nSWRlbnRpZmllcihpbmRleC5jX3N0cigpKTsKLSAgICAgICAgaWYgKCFXZWJCaW5kaW5n
czo6aGFzUHJvcGVydHkoMCwgbnBWYWx1ZSwgaW5kZXhJZCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgTlBWYXJpYW50IGluZGV4VmFsdWU7Ci0gICAgICAgIGlmICghV2ViQmluZGlu
Z3M6OmdldFByb3BlcnR5KDAsIG5wVmFsdWUsIGluZGV4SWQsICZpbmRleFZhbHVlKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoTlBWQVJJQU5UX0lTX1NUUklORyhpbmRleFZh
bHVlKSkgewotICAgICAgICAgICAgc3RyaW5nIGl0ZW0oTlBWQVJJQU5UX1RPX1NUUklORyhpbmRl
eFZhbHVlKS5VVEY4Q2hhcmFjdGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgIE5QVkFSSUFO
VF9UT19TVFJJTkcoaW5kZXhWYWx1ZSkuVVRGOExlbmd0aCk7Ci0gICAgICAgICAgICBzdHJpbmdW
ZWN0b3IucHVzaF9iYWNrKGl0ZW0pOwotICAgICAgICB9Ci0gICAgICAgIFdlYkJpbmRpbmdzOjpy
ZWxlYXNlVmFyaWFudFZhbHVlKCZpbmRleFZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0cmlu
Z1ZlY3RvcjsKLX0KLQotYm9vbCBDcHBWYXJpYW50OjppbnZva2UoY29uc3Qgc3RyaW5nJiBtZXRo
b2QsIGNvbnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIENwcFZhcmlhbnQmIHJlc3VsdCkgY29uc3QKLXsKLSAg
ICBXRUJLSVRfQVNTRVJUKGlzT2JqZWN0KCkpOwotICAgIE5QSWRlbnRpZmllciBtZXRob2ROYW1l
ID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIobWV0aG9kLmNfc3RyKCkpOwotICAg
IE5QT2JqZWN0KiBucE9iamVjdCA9IHZhbHVlLm9iamVjdFZhbHVlOwotICAgIGlmICghV2ViQmlu
ZGluZ3M6Omhhc01ldGhvZCgwLCBucE9iamVjdCwgbWV0aG9kTmFtZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBOUFZhcmlhbnQgcjsKLSAgICBib29sIHN0YXR1cyA9IFdlYkJpbmRpbmdz
OjppbnZva2UoMCwgbnBPYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnRDb3Vu
dCwgJnIpOwotICAgIHJlc3VsdC5zZXQocik7Ci0gICAgcmV0dXJuIHN0YXR1czsKLX0KLQotYm9v
bCBDcHBWYXJpYW50OjppbnZva2VEZWZhdWx0KGNvbnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50cywg
dWludDMyX3QgYXJndW1lbnRDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
cHBWYXJpYW50JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgV0VCS0lUX0FTU0VSVChpc09iamVjdCgp
KTsKLSAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2YWx1ZS5vYmplY3RWYWx1ZTsKLSAgICBOUFZh
cmlhbnQgcjsKLSAgICBib29sIHN0YXR1cyA9IFdlYkJpbmRpbmdzOjppbnZva2VEZWZhdWx0KDAs
IG5wT2JqZWN0LCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsICZyKTsKLSAgICByZXN1bHQuc2V0
KHIpOwotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBWYXJpYW50LmgJ
KHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0NwcFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8q
Ci0gIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gZm9yIENwcFZhcmlhbnQsIGEg
dHlwZSB1c2VkIGJ5IEMrKyBjbGFzc2VzCi0gIHRoYXQgYXJlIHRvIGJlIGJvdW5kIHRvIEphdmFT
Y3JpcHQgb2JqZWN0cy4KLQotICBDcHBWYXJpYW50IGV4aXN0cyBwcmltYXJpbHkgYXMgYW4gaW50
ZXJmYWNlIGJldHdlZW4gQysrIGNhbGxlcnMgYW5kIHRoZQotICBjb3JyZXNwb25kaW5nIE5QVmFy
aWFudCB0eXBlLiAgQ3BwVmFyaWFudCBhbHNvIHByb3ZpZGVzIGEgbnVtYmVyIG9mCi0gIGNvbnZl
bmllbmNlIGNvbnN0cnVjdG9ycyBhbmQgYWNjZXNzb3JzLCBzbyB0aGF0IHRoZSBOUFZhcmlhbnRU
eXBlIHZhbHVlcwotICBkb24ndCBuZWVkIHRvIGJlIGV4cG9zZWQsIGFuZCBhIGRlc3RydWN0b3Ig
dG8gZnJlZSBhbnkgbWVtb3J5IGFsbG9jYXRlZCBmb3IKLSAgc3RyaW5nIHZhbHVlcy4KLSovCi0K
LSNpZm5kZWYgQ3BwVmFyaWFudF9oCi0jZGVmaW5lIENwcFZhcmlhbnRfaAotCi0jaW5jbHVkZSAi
V2ViQmluZGluZ3MuaCIKLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi1u
YW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIENwcFZhcmlhbnQgOiBwdWJsaWMgTlBW
YXJpYW50IHsKLXB1YmxpYzoKLSAgICBDcHBWYXJpYW50KCk7Ci0gICAgfkNwcFZhcmlhbnQoKTsK
LSAgICB2b2lkIHNldE51bGwoKTsKLSAgICB2b2lkIHNldChib29sKTsKLSAgICB2b2lkIHNldChp
bnQzMl90KTsKLSAgICB2b2lkIHNldChkb3VibGUpOwotCi0gICAgLy8gTm90ZSB0aGF0IHNldHRp
bmcgYSBDcHBWYXJpYW50IHRvIGEgc3RyaW5nIHZhbHVlIGludm9sdmVzIGNvcHlpbmcgdGhlCi0g
ICAgLy8gc3RyaW5nIGRhdGEsIHdoaWNoIG11c3QgYmUgZnJlZWQgd2l0aCBhIGNhbGwgdG8gZnJl
ZURhdGEoKSB3aGVuIHRoZQotICAgIC8vIENwcFZhcmlhbnQgaXMgc2V0IHRvIGEgZGlmZmVyZW50
IHZhbHVlIG9yIGlzIG5vIGxvbmdlciBuZWVkZWQuIE5vcm1hbGx5Ci0gICAgLy8gdGhpcyBpcyBo
YW5kbGVkIGJ5IHRoZSBvdGhlciBzZXQoKSBtZXRob2RzIGFuZCBieSB0aGUgZGVzdHJ1Y3Rvci4K
LSAgICB2b2lkIHNldChjb25zdCBjaGFyKik7IC8vIE11c3QgYmUgYSBudWxsLXRlcm1pbmF0ZWQg
c3RyaW5nLgotICAgIHZvaWQgc2V0KGNvbnN0IHN0ZDo6c3RyaW5nJik7Ci0gICAgdm9pZCBzZXQo
Y29uc3QgTlBTdHJpbmcmKTsKLSAgICB2b2lkIHNldChjb25zdCBOUFZhcmlhbnQmKTsKLQotICAg
IC8vIE5vdGUgdGhhdCBzZXR0aW5nIGEgQ3BwVmFyaWFudCB0byBhbiBOUE9iamVjdCBpbnZvbHZl
cyByZWYtY291bnRpbmcKLSAgICAvLyB0aGUgYWN0dWFsIG9iamVjdC4gZnJlZURhdGEoKSBzaG91
bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIENwcFZhcmlhbnQKLSAgICAvLyBpcyBubyBsb25nZXIg
bmVlZGVkLiBUaGUgb3RoZXIgc2V0KCkgbWV0aG9kcyBoYW5kbGUgdGhpcyBpbnRlcm5hbGx5Lgot
ICAgIC8vIEFsc28sIHRoZSBvYmplY3QncyBOUENsYXNzIGlzIGV4cGVjdGVkIHRvIGJlIGEgc3Rh
dGljIG9iamVjdDogbmVpdGhlcgotICAgIC8vIHRoZSBOUCBydW50aW1lIG5vciBDcHBWYXJpYW50
IHdpbGwgZXZlciBmcmVlIGl0LgotICAgIHZvaWQgc2V0KE5QT2JqZWN0Kl92YWx1ZSk7Ci0KLSAg
ICAvLyBUaGVzZSB0aHJlZSBtZXRob2RzIGFsbCBwZXJmb3JtIGRlZXAgY29waWVzIG9mIGFueSBz
dHJpbmcgZGF0YS4gVGhpcwotICAgIC8vIGFsbG93cyBsb2NhbCBDcHBWYXJpYW50cyB0byBiZSBy
ZWxlYXNlZCBieSB0aGUgZGVzdHJ1Y3RvciB3aXRob3V0Ci0gICAgLy8gY29ycnVwdGluZyB0aGVp
ciBzb3VyY2VzLiBJbiBwZXJmb3JtYW5jZS1jcml0aWNhbCBjb2RlLCBvciB3aGVuIHN0cmluZ3MK
LSAgICAvLyBhcmUgdmVyeSBsb25nLCBhdm9pZCBjcmVhdGluZyBuZXcgQ3BwVmFyaWFudHMuCi0g
ICAgLy8gSW4gY2FzZSBvZiBOUE9iamVjdCBhcyB0aGUgZGF0YSwgdGhlIGNvcHlpbmcgaW52b2x2
ZXMgcmVmLWNvdW50aW5nCi0gICAgLy8gYXMgb3Bwb3NlZCB0byBkZWVwLWNvcHlpbmcuIFRoZSBy
ZWYtY291bnRpbmcgZW5zdXJlcyB0aGF0IHNvdXJjZXMgZG9uJ3QKLSAgICAvLyBnZXQgY29ycnVw
dGVkIHdoZW4gdGhlIGNvcGllcyBnZXQgZGVzdHJveWVkLgotICAgIHZvaWQgY29weVRvTlBWYXJp
YW50KE5QVmFyaWFudCogcmVzdWx0KSBjb25zdDsKLSAgICBDcHBWYXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgQ3BwVmFyaWFudCYgb3JpZ2luYWwpOwotICAgIENwcFZhcmlhbnQoY29uc3QgQ3BwVmFy
aWFudCYgb3JpZ2luYWwpOwotCi0gICAgLy8gQ2FsbHMgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUs
IHdoaWNoIGZyZWVzIGFueSBzdHJpbmcgZGF0YQotICAgIC8vIGhlbGQgYnkgdGhlIG9iamVjdCBh
bmQgc2V0cyBpdHMgdHlwZSB0byBudWxsLgotICAgIC8vIEluIGNhc2Ugb2YgTlBPYmplY3QsIHRo
ZSBOUE5fUmVsZWFzZVZhcmlhbnRWYWx1ZSBkZWNyZW1lbnRzCi0gICAgLy8gdGhlIHJlZi1jb3Vu
dCAocmVsZWFzZXMgd2hlbiByZWYtY291bnQgYmVjb21lcyAwKQotICAgIHZvaWQgZnJlZURhdGEo
KTsKLQotICAgIC8vIENvbXBhcmVzIHRoaXMgQ3BwVmFyaWFudCdzIHR5cGUgYW5kIHZhbHVlIHRv
IGFub3RoZXIncy4gVGhleSBtdXN0IGJlCi0gICAgLy8gaWRlbnRpY2FsIGluIGJvdGggdHlwZSBh
bmQgdmFsdWUgdG8gYmUgY29uc2lkZXJlZCBlcXVhbC4gRm9yIHN0cmluZyBhbmQKLSAgICAvLyBv
YmplY3QgdHlwZXMsIGEgZGVlcCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZDsgdGhhdCBpcywgdGhl
IGNvbnRlbnRzIG9mIHRoZQotICAgIC8vIHN0cmluZ3MsIG9yIHRoZSBjbGFzc2VzIGFuZCByZWZj
b3VudHMgb2YgdGhlIG9iamVjdHMsIG11c3QgYmUgdGhlIHNhbWUsCi0gICAgLy8gYnV0IHRoZXkg
bmVlZCBub3QgYmUgdGhlIHNhbWUgcG9pbnRlcnMuCi0gICAgYm9vbCBpc0VxdWFsKGNvbnN0IENw
cFZhcmlhbnQmKSBjb25zdDsKLQotICAgIC8vIFRoZSB2YWx1ZSBvZiBhIENwcFZhcmlhbnQgbWF5
IGJlIHJlYWQgZGlyZWN0bHkgZnJvbSBpdHMgTlBWYXJpYW50IChidXQKLSAgICAvLyBzaG91bGQg
b25seSBiZSBzZXQgdXNpbmcgb25lIG9mIHRoZSBzZXQoKSBtZXRob2RzIGFib3ZlKS4gQWx0aG91
Z2ggdGhlCi0gICAgLy8gdHlwZSBvZiBhIENwcFZhcmlhbnQgaXMgbGlrZXdpc2UgcHVibGljLCBp
dCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGVzZQotICAgIC8vIGZ1bmN0aW9ucyByYXRoZXIg
dGhhbiBkaXJlY3RseSBpZiBhIGNhbGxlciB3aXNoZXMgdG8gYXZvaWQgZGVwZW5kZW5jZSBvbgot
ICAgIC8vIHRoZSBOUFZhcmlhbnRUeXBlIHZhbHVlcy4KLSAgICBib29sIGlzQm9vbCgpIGNvbnN0
IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFudFR5cGVfQm9vbCk7IH0KLSAgICBib29sIGlzSW50
MzIoKSBjb25zdCB7IHJldHVybiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0ludDMyKTsgfQotICAg
IGJvb2wgaXNEb3VibGUoKSBjb25zdCB7IHJldHVybiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0Rv
dWJsZSk7IH0KLSAgICBib29sIGlzTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gKGlzSW50MzIoKSB8
fCBpc0RvdWJsZSgpKTsgfQotICAgIGJvb2wgaXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAodHlw
ZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZyk7IH0KLSAgICBib29sIGlzVm9pZCgpIGNvbnN0IHsg
cmV0dXJuICh0eXBlID09IE5QVmFyaWFudFR5cGVfVm9pZCk7IH0KLSAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFudFR5cGVfTnVsbCk7IH0KLSAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAoaXNWb2lkKCkgfHwgaXNOdWxsKCkpOyB9Ci0gICAg
Ym9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFudFR5cGVfT2Jq
ZWN0KTsgfQotCi0gICAgLy8gQ29udmVydGVycy4gVGhlIENwcFZhcmlhbnQgbXVzdCBiZSBvZiBh
IHR5cGUgY29udmVydGlibGUgdG8gdGhlc2UgdmFsdWVzLgotICAgIC8vIEZvciBleGFtcGxlLCB0
b0ludDMyKCkgd29ya3Mgb25seSBpZiBpc051bWJlcigpIGlzIHRydWUuCi0gICAgc3RkOjpzdHJp
bmcgdG9TdHJpbmcoKSBjb25zdDsKLSAgICBpbnQzMl90IHRvSW50MzIoKSBjb25zdDsKLSAgICBk
b3VibGUgdG9Eb3VibGUoKSBjb25zdDsKLSAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0OwotICAg
IC8vIFJldHVybnMgYSB2ZWN0b3Igb2Ygc3RyaW5ncyBmb3IgdGhlIHNwZWNpZmllZCBhcmd1bWVu
dC4gVGhpcyBpcyB1c2VmdWwKLSAgICAvLyBmb3IgY29udmVydGluZyBhIEphdmFTY3JpcHQgYXJy
YXkgb2Ygc3RyaW5ncyBpbnRvIGEgdmVjdG9yIG9mIHN0cmluZ3MuCi0gICAgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+IHRvU3RyaW5nVmVjdG9yKCkgY29uc3Q7Ci0KLSAgICAvLyBJbnZva2UgbWV0
aG9kIG9mIHRoZSBnaXZlbiBuYW1lIG9uIGFuIG9iamVjdCB3aXRoIHRoZSBzdXBwbGllZCBhcmd1
bWVudHMuCi0gICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgb2JqZWN0IG9u
IHdoaWNoIHRoZSBtZXRob2QgaXMgdG8gYmUKLSAgICAvLyBpbnZva2VkLiBSZXR1cm5zIHdoZXRo
ZXIgdGhlIG1ldGhvZCB3YXMgc3VjY2Vzc2Z1bGx5IGludm9rZWQuIElmIHRoZQotICAgIC8vIG1l
dGhvZCB3YXMgaW52b2tlZCBzdWNjZXNzZnVsbHksIGFueSByZXR1cm4gdmFsdWUgaXMgc3RvcmVk
IGluIHRoZQotICAgIC8vIENwcFZhcmlhbnQgc3BlY2lmaWVkIGJ5IHJlc3VsdC4KLSAgICBib29s
IGludm9rZShjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50cywK
LSAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50LCBDcHBWYXJpYW50JiByZXN1
bHQpIGNvbnN0OwotCi0gICAgLy8gSW52b2tlIGFuIG9iamVjdCdzIGRlZmF1bHQgbWV0aG9kIHdp
dGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgc2hv
dWxkIGJlIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCBpcyB0byBiZQotICAgIC8vIGlu
dm9rZWQuIFJldHVybnMgd2hldGhlciB0aGUgbWV0aG9kIHdhcyBzdWNjZXNzZnVsbHkgaW52b2tl
ZC4gSWYgdGhlCi0gICAgLy8gbWV0aG9kIHdhcyBpbnZva2VkIHN1Y2Nlc3NmdWxseSwgYW55IHJl
dHVybiB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlCi0gICAgLy8gQ3BwVmFyaWFudCBzcGVjaWZpZWQg
YnkgcmVzdWx0LgotICAgIGJvb2wgaW52b2tlRGVmYXVsdChjb25zdCBDcHBWYXJpYW50KiBhcmd1
bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIENw
cFZhcmlhbnQmIHJlc3VsdCkgY29uc3Q7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBDcHBWYXJpYW50
X2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2
ZW50U2VuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGlzIGZpbGUgY29udGFpbnMg
dGhlIGRlZmluaXRpb24gZm9yIEV2ZW50U2VuZGVyLgotLy8KLS8vIFNvbWUgbm90ZXMgYWJvdXQg
ZHJhZyBhbmQgZHJvcCBoYW5kbGluZzoKLS8vIFdpbmRvd3MgZHJhZyBhbmQgZHJvcCBnb2VzIHRo
cm91Z2ggYSBzeXN0ZW0gY2FsbCB0byBkb0RyYWdEcm9wLiBBdCB0aGF0Ci0vLyBwb2ludCwgcHJv
Z3JhbSBjb250cm9sIGlzIGdpdmVuIHRvIFdpbmRvd3Mgd2hpY2ggdGhlbiBwZXJpb2RpY2FsbHkg
bWFrZXMKLS8vIGNhbGxiYWNrcyBpbnRvIHRoZSB3ZWJ2aWV3LiBUaGlzIHdvbid0IHdvcmsgZm9y
IGxheW91dCB0ZXN0cywgc28gaW5zdGVhZCwKLS8vIHdlIHF1ZXVlIHVwIGFsbCB0aGUgbW91c2Ug
bW92ZSBhbmQgbW91c2UgdXAgZXZlbnRzLiBXaGVuIHRoZSB0ZXN0IHRyaWVzIHRvCi0vLyBzdGFy
dCBhIGRyYWcgKGJ5IGNhbGxpbmcgRXZlblNlbmRpbmdDb250cm9sbGVyOjpkb0RyYWdEcm9wKSwg
d2UgdGFrZSB0aGUKLS8vIGV2ZW50cyBpbiB0aGUgcXVldWUgYW5kIHJlcGxheSB0aGVtLgotLy8g
VGhlIGJlaGF2aW9yIG9mIHF1ZXVpbmcgZXZlbnRzIGFuZCByZXBsYXlpbmcgdGhlbSBjYW4gYmUg
ZGlzYWJsZWQgYnkgYQotLy8gbGF5b3V0IHRlc3QgYnkgc2V0dGluZyBldmVudFNlbmRlci5kcmFn
TW9kZSB0byBmYWxzZS4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV2ZW50U2Vu
ZGVyLmgiCi0KLSNpbmNsdWRlICJLZXlDb2RlTWFwcGluZy5oIgotI2luY2x1ZGUgIk1vY2tTcGVs
bENoZWNrLmgiCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRN
ZW51RGF0YS5oIgotI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJU
ZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJUb3VjaFBvaW50LmgiCi0jaW5jbHVkZSAiV2Vi
Vmlldy5oIgotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJEcmFnRGF0YS5o
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJQb2ludC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJp
bmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0KLSNpZmRlZiBXSU4zMgotI2lu
Y2x1ZGUgIndpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBs
YXlvdXQgYmVmb3JlIGVhY2ggZXZlbnQ/Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLVdlYlBvaW50
IEV2ZW50U2VuZGVyOjpsYXN0TW91c2VQb3M7Ci1XZWJNb3VzZUV2ZW50OjpCdXR0b24gRXZlbnRT
ZW5kZXI6OnByZXNzZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwotV2ViTW91
c2VFdmVudDo6QnV0dG9uIEV2ZW50U2VuZGVyOjpsYXN0QnV0dG9uVHlwZSA9IFdlYk1vdXNlRXZl
bnQ6OkJ1dHRvbk5vbmU7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBTYXZlZEV2ZW50IHsKLSAg
ICBlbnVtIFNhdmVkRXZlbnRUeXBlIHsKLSAgICAgICAgVW5zcGVjaWZpZWQsCi0gICAgICAgIE1v
dXNlVXAsCi0gICAgICAgIE1vdXNlTW92ZSwKLSAgICAgICAgTGVhcEZvcndhcmQKLSAgICB9Owot
Ci0gICAgU2F2ZWRFdmVudFR5cGUgdHlwZTsKLSAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0
dG9uVHlwZTsgLy8gRm9yIE1vdXNlVXAuCi0gICAgV2ViUG9pbnQgcG9zOyAvLyBGb3IgTW91c2VN
b3ZlLgotICAgIGludCBtaWxsaXNlY29uZHM7IC8vIEZvciBMZWFwRm9yd2FyZC4KLQotICAgIFNh
dmVkRXZlbnQoKQotICAgICAgICA6IHR5cGUoVW5zcGVjaWZpZWQpCi0gICAgICAgICwgYnV0dG9u
VHlwZShXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lKQotICAgICAgICAsIG1pbGxpc2Vjb25kcygw
KSB7IH0KLX07Ci0KLVdlYkRyYWdEYXRhIGN1cnJlbnREcmFnRGF0YTsKLVdlYkRyYWdPcGVyYXRp
b24gY3VycmVudERyYWdFZmZlY3Q7Ci1XZWJEcmFnT3BlcmF0aW9uc01hc2sgY3VycmVudERyYWdF
ZmZlY3RzQWxsb3dlZDsKLWJvb2wgcmVwbGF5aW5nU2F2ZWRFdmVudHMgPSBmYWxzZTsKLWRlcXVl
PFNhdmVkRXZlbnQ+IG1vdXNlRXZlbnRRdWV1ZTsKLWludCB0b3VjaE1vZGlmaWVyczsKLXZlY3Rv
cjxXZWJUb3VjaFBvaW50PiB0b3VjaFBvaW50czsKLQotLy8gVGltZSBhbmQgcGxhY2Ugb2YgdGhl
IGxhc3QgbW91c2UgdXAgZXZlbnQuCi1kb3VibGUgbGFzdENsaWNrVGltZVNlYyA9IDA7Ci1XZWJQ
b2ludCBsYXN0Q2xpY2tQb3M7Ci1pbnQgY2xpY2tDb3VudCA9IDA7Ci0KLS8vIG1heGltdW0gZGlz
dGFuY2UgKGluIHNwYWNlIGFuZCB0aW1lKSBmb3IgYSBtb3VzZSBjbGljawotLy8gdG8gcmVnaXN0
ZXIgYXMgYSBkb3VibGUgb3IgdHJpcGxlIGNsaWNrCi1jb25zdCBkb3VibGUgbXVsdGlwbGVDbGlj
a1RpbWVTZWMgPSAxOwotY29uc3QgaW50IG11bHRpcGxlQ2xpY2tSYWRpdXNQaXhlbHMgPSA1Owot
Ci0vLyBIb3cgbXVjaCB3ZSBzaG91bGQgc2Nyb2xsIHBlciBldmVudCAtIHRoZSB2YWx1ZSBoZXJl
IGlzIGNob3NlbiB0bwotLy8gbWF0Y2ggdGhlIFdlYktpdCBpbXBsIGFuZCBsYXlvdXQgdGVzdCBy
ZXN1bHRzLgotY29uc3QgZmxvYXQgc2Nyb2xsYmFyUGl4ZWxzUGVyVGljayA9IDQwLjBmOwotCi1p
bmxpbmUgYm9vbCBvdXRzaWRlTXVsdGlDbGlja1JhZGl1cyhjb25zdCBXZWJQb2ludCYgYSwgY29u
c3QgV2ViUG9pbnQmIGIpCi17Ci0gICAgcmV0dXJuICgoYS54IC0gYi54KSAqIChhLnggLSBiLngp
ICsgKGEueSAtIGIueSkgKiAoYS55IC0gYi55KSkgPgotICAgICAgICBtdWx0aXBsZUNsaWNrUmFk
aXVzUGl4ZWxzICogbXVsdGlwbGVDbGlja1JhZGl1c1BpeGVsczsKLX0KLQotLy8gVXNlZCB0byBv
ZmZzZXQgdGhlIHRpbWUgdGhlIGV2ZW50IGhhbmRlciB0aGluZ3MgYW4gZXZlbnQgaGFwcGVuZWQu
IFRoaXMgaXMKLS8vIGRvbmUgc28gdGVzdHMgY2FuIHJ1biB3aXRob3V0IGEgZGVsYXksIGJ1dCBi
eXBhc3MgY2hlY2tzIHRoYXQgYXJlIHRpbWUKLS8vIGRlcGVuZGVudCAoZS5nLiwgZHJhZ2dpbmcg
aGFzIGEgdGltZW91dCB2cyBzZWxlY3Rpb24pLgotdWludDMyIHRpbWVPZmZzZXRNcyA9IDA7Ci0K
LWRvdWJsZSBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUp
Ci17Ci0gICAgcmV0dXJuIChkZWxlZ2F0ZS0+Z2V0Q3VycmVudFRpbWVJbk1pbGxpc2Vjb25kKCkg
KyB0aW1lT2Zmc2V0TXMpIC8gMTAwMC4wOwotfQotCi12b2lkIGFkdmFuY2VFdmVudFRpbWUoaW50
MzJfdCBkZWx0YU1zKQotewotICAgIHRpbWVPZmZzZXRNcyArPSBkZWx0YU1zOwotfQotCi12b2lk
IGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6OlR5cGUgdCwgV2ViTW91c2VFdmVudDo6QnV0
dG9uIGIsIGNvbnN0IFdlYlBvaW50JiBwb3MsIFdlYk1vdXNlRXZlbnQqIGUsIGRvdWJsZSB0cykK
LXsKLSAgICBlLT50eXBlID0gdDsKLSAgICBlLT5idXR0b24gPSBiOwotICAgIGUtPm1vZGlmaWVy
cyA9IDA7Ci0gICAgZS0+eCA9IHBvcy54OwotICAgIGUtPnkgPSBwb3MueTsKLSAgICBlLT5nbG9i
YWxYID0gcG9zLng7Ci0gICAgZS0+Z2xvYmFsWSA9IHBvcy55OwotICAgIGUtPnRpbWVTdGFtcFNl
Y29uZHMgPSB0czsKLSAgICBlLT5jbGlja0NvdW50ID0gY2xpY2tDb3VudDsKLX0KLQotLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQga2V5IGlzIHRoZSBzeXN0ZW0ga2V5LgotYm9vbCBh
cHBseUtleU1vZGlmaWVyKGNvbnN0IHN0cmluZyYgbW9kaWZpZXJOYW1lLCBXZWJJbnB1dEV2ZW50
KiBldmVudCkKLXsKLSAgICBib29sIGlzU3lzdGVtS2V5ID0gZmFsc2U7Ci0gICAgY29uc3QgY2hh
ciogY2hhcmFjdGVycyA9IG1vZGlmaWVyTmFtZS5jX3N0cigpOwotICAgIGlmICghc3RyY21wKGNo
YXJhY3RlcnMsICJjdHJsS2V5IikKLSNpZm5kZWYgX19BUFBMRV9fCi0gICAgICAgIHx8ICFzdHJj
bXAoY2hhcmFjdGVycywgImFkZFNlbGVjdGlvbktleSIpCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0g
ICAgICAgIGV2ZW50LT5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleTsKLSAg
ICB9IGVsc2UgaWYgKCFzdHJjbXAoY2hhcmFjdGVycywgInNoaWZ0S2V5IikgfHwgIXN0cmNtcChj
aGFyYWN0ZXJzLCAicmFuZ2VTZWxlY3Rpb25LZXkiKSkKLSAgICAgICAgZXZlbnQtPm1vZGlmaWVy
cyB8PSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleTsKLSAgICBlbHNlIGlmICghc3RyY21wKGNoYXJh
Y3RlcnMsICJhbHRLZXkiKSkgewotICAgICAgICBldmVudC0+bW9kaWZpZXJzIHw9IFdlYklucHV0
RXZlbnQ6OkFsdEtleTsKLSNpZm5kZWYgX19BUFBMRV9fCi0gICAgICAgIC8vIE9uIFdpbmRvd3Mg
YWxsIGtleXMgd2l0aCBBbHQgbW9kaWZpZXIgd2lsbCBiZSBtYXJrZWQgYXMgc3lzdGVtIGtleS4K
LSAgICAgICAgLy8gV2Uga2VlcCB0aGUgc2FtZSBiZWhhdmlvciBvbiBMaW51eCBhbmQgZXZlcnl3
aGVyZSBub24tTWFjLCBzZWU6Ci0gICAgICAgIC8vIFdlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dl
YklucHV0RXZlbnRGYWN0b3J5LmNwcAotICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIGNoYW5nZSB0
aGlzIGJlaGF2aW9yIG9uIExpbnV4LCB0aGlzIHBpZWNlIG9mIGNvZGUgbXVzdCBiZQotICAgICAg
ICAvLyBrZXB0IGluIHN5bmMgd2l0aCB0aGUgcmVsYXRlZCBjb2RlIGluIGFib3ZlIGZpbGUuCi0g
ICAgICAgIGlzU3lzdGVtS2V5ID0gdHJ1ZTsKLSNlbmRpZgotI2lmZGVmIF9fQVBQTEVfXwotICAg
IH0gZWxzZSBpZiAoIXN0cmNtcChjaGFyYWN0ZXJzLCAibWV0YUtleSIpIHx8ICFzdHJjbXAoY2hh
cmFjdGVycywgImFkZFNlbGVjdGlvbktleSIpKSB7Ci0gICAgICAgIGV2ZW50LT5tb2RpZmllcnMg
fD0gV2ViSW5wdXRFdmVudDo6TWV0YUtleTsKLSAgICAgICAgLy8gT24gTWFjIG9ubHkgY29tbWFu
ZCBrZXkgcHJlc3NlcyBhcmUgbWFya2VkIGFzIHN5c3RlbSBrZXkuCi0gICAgICAgIC8vIFNlZSB0
aGUgcmVsYXRlZCBjb2RlIGluOiBXZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJJbnB1dEV2ZW50
RmFjdG9yeS5jcHAKLSAgICAgICAgLy8gSXQgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUg
cmVsYXRlZCBjb2RlIGluIGFib3ZlIGZpbGUuCi0gICAgICAgIGlzU3lzdGVtS2V5ID0gdHJ1ZTsK
LSNlbHNlCi0gICAgfSBlbHNlIGlmICghc3RyY21wKGNoYXJhY3RlcnMsICJtZXRhS2V5IikpIHsK
LSAgICAgICAgZXZlbnQtPm1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5OwotI2Vu
ZGlmCi0gICAgfQotICAgIHJldHVybiBpc1N5c3RlbUtleTsKLX0KLQotYm9vbCBhcHBseUtleU1v
ZGlmaWVycyhjb25zdCBDcHBWYXJpYW50KiBhcmd1bWVudCwgV2ViSW5wdXRFdmVudCogZXZlbnQp
Ci17Ci0gICAgYm9vbCBpc1N5c3RlbUtleSA9IGZhbHNlOwotICAgIGlmIChhcmd1bWVudC0+aXNP
YmplY3QoKSkgewotICAgICAgICB2ZWN0b3I8c3RyaW5nPiBtb2RpZmllcnMgPSBhcmd1bWVudC0+
dG9TdHJpbmdWZWN0b3IoKTsKLSAgICAgICAgZm9yICh2ZWN0b3I8c3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaSA9IG1vZGlmaWVycy5iZWdpbigpOyBpICE9IG1vZGlmaWVycy5lbmQoKTsgKytpKQot
ICAgICAgICAgICAgaXNTeXN0ZW1LZXkgfD0gYXBwbHlLZXlNb2RpZmllcigqaSwgZXZlbnQpOwot
ICAgIH0gZWxzZSBpZiAoYXJndW1lbnQtPmlzU3RyaW5nKCkpCi0gICAgICAgIGlzU3lzdGVtS2V5
ID0gYXBwbHlLZXlNb2RpZmllcihhcmd1bWVudC0+dG9TdHJpbmcoKSwgZXZlbnQpOwotICAgIHJl
dHVybiBpc1N5c3RlbUtleTsKLX0KLQotLy8gR2V0IHRoZSBlZGl0IGNvbW1hbmQgY29ycmVzcG9u
ZGluZyB0byBhIGtleWJvYXJkIGV2ZW50LgotLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZp
ZWQgZXZlbnQgY29ycmVzcG9uZHMgdG8gYW4gZWRpdCBjb21tYW5kLCB0aGUgbmFtZQotLy8gb2Yg
dGhlIGVkaXQgY29tbWFuZCB3aWxsIGJlIHN0b3JlZCBpbiB8Km5hbWV8LgotYm9vbCBnZXRFZGl0
Q29tbWFuZChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgc3RyaW5nKiBuYW1lKQotewot
I2lmZGVmIF9fQVBQTEVfXwotICAgIC8vIFdlIG9ubHkgY2FyZXMgYWJvdXQgTGVmdCxSaWdodCxV
cCxEb3duIGtleXMgd2l0aCBDb21tYW5kIG9yIENvbW1hbmQrU2hpZnQKLSAgICAvLyBtb2RpZmll
cnMuIFRoZXNlIGtleSBldmVudHMgY29ycmVzcG9uZCB0byBzb21lIHNwZWNpYWwgbW92ZW1lbnQg
YW5kCi0gICAgLy8gc2VsZWN0aW9uIGVkaXRvciBjb21tYW5kcywgYW5kIHdhcyBzdXBwb3NlZCB0
byBiZSBoYW5kbGVkIGluCi0gICAgLy8gV2ViS2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJ
bXBsLmNwcC4gQnV0IHRoZXNlIGtleXMgd2lsbCBiZSBtYXJrZWQKLSAgICAvLyBhcyBzeXN0ZW0g
a2V5LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgaGFuZGxlZC4gVGh1cyB0aGV5IG11
c3QgYmUKLSAgICAvLyBoYW5kbGVkIHNwZWNpYWxseS4KLSAgICBpZiAoKGV2ZW50Lm1vZGlmaWVy
cyAmIH5XZWJLZXlib2FyZEV2ZW50OjpTaGlmdEtleSkgIT0gV2ViS2V5Ym9hcmRFdmVudDo6TWV0
YUtleSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChldmVudC53aW5kb3dz
S2V5Q29kZSkgewotICAgIGNhc2UgVktFWV9MRUZUOgotICAgICAgICAqbmFtZSA9ICJNb3ZlVG9C
ZWdpbm5pbmdPZkxpbmUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZLRVlfUklHSFQ6Ci0g
ICAgICAgICpuYW1lID0gIk1vdmVUb0VuZE9mTGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgVktFWV9VUDoKLSAgICAgICAgKm5hbWUgPSAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVktFWV9ET1dOOgotICAgICAgICAqbmFtZSA9ICJN
b3ZlVG9FbmRPZkRvY3VtZW50IjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChldmVudC5tb2RpZmllcnMgJiBXZWJL
ZXlib2FyZEV2ZW50OjpTaGlmdEtleSkKLSAgICAgICAgbmFtZS0+YXBwZW5kKCJBbmRNb2RpZnlT
ZWxlY3Rpb24iKTsKLQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotLy8gS2V5IGV2ZW50IGxvY2F0aW9uIGNvZGUgaW50cm9kdWNlZCBpbiBE
T00gTGV2ZWwgMy4KLS8vIFNlZSBhbHNvOiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwt
My1FdmVudHMvI2V2ZW50cy1rZXlib2FyZGV2ZW50cwotZW51bSBLZXlMb2NhdGlvbkNvZGUgewot
ICAgIERPTUtleUxvY2F0aW9uU3RhbmRhcmQgICAgICA9IDB4MDAsCi0gICAgRE9NS2V5TG9jYXRp
b25MZWZ0ICAgICAgICAgID0gMHgwMSwKLSAgICBET01LZXlMb2NhdGlvblJpZ2h0ICAgICAgICAg
PSAweDAyLAotICAgIERPTUtleUxvY2F0aW9uTnVtcGFkICAgICAgICA9IDB4MDMKLX07Ci0KLX0K
LQotRXZlbnRTZW5kZXI6OkV2ZW50U2VuZGVyKCkKLSAgICA6IG1fZGVsZWdhdGUoMCkKLXsKLSAg
ICAvLyBJbml0aWFsaXplIHRoZSBtYXAgdGhhdCBhc3NvY2lhdGVzIG1ldGhvZHMgb2YgdGhpcyBj
bGFzcyB3aXRoIHRoZSBuYW1lcwotICAgIC8vIHRoZXkgd2lsbCB1c2Ugd2hlbiBjYWxsZWQgYnkg
SmF2YVNjcmlwdC4gVGhlIGFjdHVhbCBiaW5kaW5nIG9mIHRob3NlCi0gICAgLy8gbmFtZXMgdG8g
dGhlaXIgbWV0aG9kcyB3aWxsIGJlIGRvbmUgYnkgY2FsbGluZyBiaW5kVG9KYXZhU2NyaXB0KCkg
KGRlZmluZWQKLSAgICAvLyBieSBDcHBCb3VuZENsYXNzLCB0aGUgcGFyZW50IHRvIEV2ZW50U2Vu
ZGVyKS4KLSAgICBiaW5kTWV0aG9kKCJhZGRUb3VjaFBvaW50IiwgJkV2ZW50U2VuZGVyOjphZGRU
b3VjaFBvaW50KTsKLSAgICBiaW5kTWV0aG9kKCJiZWdpbkRyYWdXaXRoRmlsZXMiLCAmRXZlbnRT
ZW5kZXI6OmJlZ2luRHJhZ1dpdGhGaWxlcyk7Ci0gICAgYmluZE1ldGhvZCgiY2FuY2VsVG91Y2hQ
b2ludCIsICZFdmVudFNlbmRlcjo6Y2FuY2VsVG91Y2hQb2ludCk7Ci0gICAgYmluZE1ldGhvZCgi
Y2xlYXJLaWxsUmluZyIsICZFdmVudFNlbmRlcjo6Y2xlYXJLaWxsUmluZyk7Ci0gICAgYmluZE1l
dGhvZCgiY2xlYXJUb3VjaFBvaW50cyIsICZFdmVudFNlbmRlcjo6Y2xlYXJUb3VjaFBvaW50cyk7
Ci0gICAgYmluZE1ldGhvZCgiY29udGV4dENsaWNrIiwgJkV2ZW50U2VuZGVyOjpjb250ZXh0Q2xp
Y2spOwotICAgIGJpbmRNZXRob2QoImNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IiwgJkV2ZW50U2Vu
ZGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeSk7Ci0gICAgYmluZE1ldGhvZCgiZGlzcGF0Y2hN
ZXNzYWdlIiwgJkV2ZW50U2VuZGVyOjpkaXNwYXRjaE1lc3NhZ2UpOwotICAgIGJpbmRNZXRob2Qo
ImR1bXBGaWxlbmFtZUJlaW5nRHJhZ2dlZCIsICZFdmVudFNlbmRlcjo6ZHVtcEZpbGVuYW1lQmVp
bmdEcmFnZ2VkKTsKLSAgICBiaW5kTWV0aG9kKCJlbmFibGVET01VSUV2ZW50TG9nZ2luZyIsICZF
dmVudFNlbmRlcjo6ZW5hYmxlRE9NVUlFdmVudExvZ2dpbmcpOwotICAgIGJpbmRNZXRob2QoImZp
cmVLZXlib2FyZEV2ZW50c1RvRWxlbWVudCIsICZFdmVudFNlbmRlcjo6ZmlyZUtleWJvYXJkRXZl
bnRzVG9FbGVtZW50KTsKLSAgICBiaW5kTWV0aG9kKCJrZXlEb3duIiwgJkV2ZW50U2VuZGVyOjpr
ZXlEb3duKTsKLSAgICBiaW5kTWV0aG9kKCJsZWFwRm9yd2FyZCIsICZFdmVudFNlbmRlcjo6bGVh
cEZvcndhcmQpOwotICAgIGJpbmRNZXRob2QoIm1vdXNlRG93biIsICZFdmVudFNlbmRlcjo6bW91
c2VEb3duKTsKLSAgICBiaW5kTWV0aG9kKCJtb3VzZU1vdmVUbyIsICZFdmVudFNlbmRlcjo6bW91
c2VNb3ZlVG8pOwotICAgIGJpbmRNZXRob2QoIm1vdXNlU2Nyb2xsQnkiLCAmRXZlbnRTZW5kZXI6
Om1vdXNlU2Nyb2xsQnkpOwotICAgIGJpbmRNZXRob2QoIm1vdXNlVXAiLCAmRXZlbnRTZW5kZXI6
Om1vdXNlVXApOwotICAgIGJpbmRNZXRob2QoIm1vdXNlRHJhZ0JlZ2luIiwgJkV2ZW50U2VuZGVy
Ojptb3VzZURyYWdCZWdpbik7Ci0gICAgYmluZE1ldGhvZCgicmVsZWFzZVRvdWNoUG9pbnQiLCAm
RXZlbnRTZW5kZXI6OnJlbGVhc2VUb3VjaFBvaW50KTsKLSAgICBiaW5kTWV0aG9kKCJzY2hlZHVs
ZUFzeW5jaHJvbm91c0NsaWNrIiwgJkV2ZW50U2VuZGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0Ns
aWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24iLCAmRXZl
bnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bik7Ci0gICAgYmluZE1ldGhvZCgi
c2V0VG91Y2hNb2RpZmllciIsICZFdmVudFNlbmRlcjo6c2V0VG91Y2hNb2RpZmllcik7Ci0gICAg
YmluZE1ldGhvZCgidGV4dFpvb21JbiIsICZFdmVudFNlbmRlcjo6dGV4dFpvb21Jbik7Ci0gICAg
YmluZE1ldGhvZCgidGV4dFpvb21PdXQiLCAmRXZlbnRTZW5kZXI6OnRleHRab29tT3V0KTsKLSAg
ICBiaW5kTWV0aG9kKCJ0b3VjaENhbmNlbCIsICZFdmVudFNlbmRlcjo6dG91Y2hDYW5jZWwpOwot
ICAgIGJpbmRNZXRob2QoInRvdWNoRW5kIiwgJkV2ZW50U2VuZGVyOjp0b3VjaEVuZCk7Ci0gICAg
YmluZE1ldGhvZCgidG91Y2hNb3ZlIiwgJkV2ZW50U2VuZGVyOjp0b3VjaE1vdmUpOwotICAgIGJp
bmRNZXRob2QoInRvdWNoU3RhcnQiLCAmRXZlbnRTZW5kZXI6OnRvdWNoU3RhcnQpOwotICAgIGJp
bmRNZXRob2QoInVwZGF0ZVRvdWNoUG9pbnQiLCAmRXZlbnRTZW5kZXI6OnVwZGF0ZVRvdWNoUG9p
bnQpOwotICAgIGJpbmRNZXRob2QoImdlc3R1cmVGbGluZ0NhbmNlbCIsICZFdmVudFNlbmRlcjo6
Z2VzdHVyZUZsaW5nQ2FuY2VsKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlRmxpbmdTdGFydCIs
ICZFdmVudFNlbmRlcjo6Z2VzdHVyZUZsaW5nU3RhcnQpOwotICAgIGJpbmRNZXRob2QoImdlc3R1
cmVTY3JvbGxCZWdpbiIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbEJlZ2luKTsKLSAgICBi
aW5kTWV0aG9kKCJnZXN0dXJlU2Nyb2xsRW5kIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xs
RW5kKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlU2Nyb2xsRmlyc3RQb2ludCIsICZFdmVudFNl
bmRlcjo6Z2VzdHVyZVNjcm9sbEZpcnN0UG9pbnQpOwotICAgIGJpbmRNZXRob2QoImdlc3R1cmVT
Y3JvbGxVcGRhdGUiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxVcGRhdGUpOwotICAgIGJp
bmRNZXRob2QoImdlc3R1cmVTY3JvbGxVcGRhdGVXaXRob3V0UHJvcGFnYXRpb24iLCAmRXZlbnRT
ZW5kZXI6Omdlc3R1cmVTY3JvbGxVcGRhdGVXaXRob3V0UHJvcGFnYXRpb24pOwotICAgIGJpbmRN
ZXRob2QoImdlc3R1cmVUYXAiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVUYXApOwotICAgIGJpbmRN
ZXRob2QoImdlc3R1cmVUYXBEb3duIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlVGFwRG93bik7Ci0g
ICAgYmluZE1ldGhvZCgiZ2VzdHVyZVRhcENhbmNlbCIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVRh
cENhbmNlbCk7Ci0gICAgYmluZE1ldGhvZCgiZ2VzdHVyZUxvbmdQcmVzcyIsICZFdmVudFNlbmRl
cjo6Z2VzdHVyZUxvbmdQcmVzcyk7Ci0gICAgYmluZE1ldGhvZCgiZ2VzdHVyZUxvbmdUYXAiLCAm
RXZlbnRTZW5kZXI6Omdlc3R1cmVMb25nVGFwKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlVHdv
RmluZ2VyVGFwIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlVHdvRmluZ2VyVGFwKTsKLSAgICBiaW5k
TWV0aG9kKCJ6b29tUGFnZUluIiwgJkV2ZW50U2VuZGVyOjp6b29tUGFnZUluKTsKLSAgICBiaW5k
TWV0aG9kKCJ6b29tUGFnZU91dCIsICZFdmVudFNlbmRlcjo6em9vbVBhZ2VPdXQpOwotICAgIGJp
bmRNZXRob2QoInNjYWxlUGFnZUJ5IiwgJkV2ZW50U2VuZGVyOjpzY2FsZVBhZ2VCeSk7Ci0KLSAg
ICAvLyBXaGVuIHNldCB0byB0cnVlICh0aGUgZGVmYXVsdCB2YWx1ZSksIHdlIGJhdGNoIG1vdXNl
IG1vdmUgYW5kIG1vdXNlIHVwCi0gICAgLy8gZXZlbnRzIHNvIHdlIGNhbiBzaW11bGF0ZSBkcmFn
ICYgZHJvcC4KLSAgICBiaW5kUHJvcGVydHkoImRyYWdNb2RlIiwgJmRyYWdNb2RlKTsKLSNpZmRl
ZiBXSU4zMgotICAgIGJpbmRQcm9wZXJ0eSgiV01fS0VZRE9XTiIsICZ3bUtleURvd24pOwotICAg
IGJpbmRQcm9wZXJ0eSgiV01fS0VZVVAiLCAmd21LZXlVcCk7Ci0gICAgYmluZFByb3BlcnR5KCJX
TV9DSEFSIiwgJndtQ2hhcik7Ci0gICAgYmluZFByb3BlcnR5KCJXTV9ERUFEQ0hBUiIsICZ3bURl
YWRDaGFyKTsKLSAgICBiaW5kUHJvcGVydHkoIldNX1NZU0tFWURPV04iLCAmd21TeXNLZXlEb3du
KTsKLSAgICBiaW5kUHJvcGVydHkoIldNX1NZU0tFWVVQIiwgJndtU3lzS2V5VXApOwotICAgIGJp
bmRQcm9wZXJ0eSgiV01fU1lTQ0hBUiIsICZ3bVN5c0NoYXIpOwotICAgIGJpbmRQcm9wZXJ0eSgi
V01fU1lTREVBRENIQVIiLCAmd21TeXNEZWFkQ2hhcik7Ci0jZW5kaWYKLX0KLQotRXZlbnRTZW5k
ZXI6On5FdmVudFNlbmRlcigpCi17Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNldENvbnRleHRN
ZW51RGF0YShjb25zdCBXZWJDb250ZXh0TWVudURhdGEmIGNvbnRleHRNZW51RGF0YSkKLXsKLSAg
ICBtX2xhc3RDb250ZXh0TWVudURhdGEgPSBhdXRvX3B0cjxXZWJDb250ZXh0TWVudURhdGE+KG5l
dyBXZWJDb250ZXh0TWVudURhdGEoY29udGV4dE1lbnVEYXRhKSk7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXI6OnJlc2V0KCkKLXsKLSAgICAvLyBUaGUgdGVzdCBzaG91bGQgaGF2ZSBmaW5pc2hlZCBh
IGRyYWcgYW5kIHRoZSBtb3VzZSBidXR0b24gc3RhdGUuCi0gICAgV0VCS0lUX0FTU0VSVChjdXJy
ZW50RHJhZ0RhdGEuaXNOdWxsKCkpOwotICAgIGN1cnJlbnREcmFnRGF0YS5yZXNldCgpOwotICAg
IGN1cnJlbnREcmFnRWZmZWN0ID0gV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBj
dXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkID0gV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uTm9uZTsK
LSAgICBwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKLSAgICBkcmFn
TW9kZS5zZXQodHJ1ZSk7Ci0jaWZkZWYgV0lOMzIKLSAgICB3bUtleURvd24uc2V0KFdNX0tFWURP
V04pOwotICAgIHdtS2V5VXAuc2V0KFdNX0tFWVVQKTsKLSAgICB3bUNoYXIuc2V0KFdNX0NIQVIp
OwotICAgIHdtRGVhZENoYXIuc2V0KFdNX0RFQURDSEFSKTsKLSAgICB3bVN5c0tleURvd24uc2V0
KFdNX1NZU0tFWURPV04pOwotICAgIHdtU3lzS2V5VXAuc2V0KFdNX1NZU0tFWVVQKTsKLSAgICB3
bVN5c0NoYXIuc2V0KFdNX1NZU0NIQVIpOwotICAgIHdtU3lzRGVhZENoYXIuc2V0KFdNX1NZU0RF
QURDSEFSKTsKLSNlbmRpZgotICAgIGxhc3RNb3VzZVBvcyA9IFdlYlBvaW50KDAsIDApOwotICAg
IGxhc3RDbGlja1RpbWVTZWMgPSAwOwotICAgIGxhc3RDbGlja1BvcyA9IFdlYlBvaW50KDAsIDAp
OwotICAgIGNsaWNrQ291bnQgPSAwOwotICAgIGxhc3RCdXR0b25UeXBlID0gV2ViTW91c2VFdmVu
dDo6QnV0dG9uTm9uZTsKLSAgICB0aW1lT2Zmc2V0TXMgPSAwOwotICAgIHRvdWNoTW9kaWZpZXJz
ID0gMDsKLSAgICB0b3VjaFBvaW50cy5jbGVhcigpOwotICAgIG1fdGFza0xpc3QucmV2b2tlQWxs
KCk7Ci0gICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uID0gV2ViUG9pbnQoMCwgMCk7Ci19Ci0K
LXZvaWQgRXZlbnRTZW5kZXI6OmRvRHJhZ0Ryb3AoY29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRh
LCBXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaykKLXsKLSAgICBXZWJNb3VzZUV2ZW50IGV2ZW50
OwotICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93biwgcHJlc3NlZEJ1
dHRvbiwgbGFzdE1vdXNlUG9zLCAmZXZlbnQsIGdldEN1cnJlbnRFdmVudFRpbWVTZWMobV9kZWxl
Z2F0ZSkpOwotICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGV2ZW50LngsIGV2ZW50LnkpOwotICAg
IFdlYlBvaW50IHNjcmVlblBvaW50KGV2ZW50Lmdsb2JhbFgsIGV2ZW50Lmdsb2JhbFkpOwotICAg
IGN1cnJlbnREcmFnRGF0YSA9IGRyYWdEYXRhOwotICAgIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93
ZWQgPSBtYXNrOwotICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0
RHJhZ0VudGVyKGRyYWdEYXRhLCBjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIGN1cnJlbnREcmFn
RWZmZWN0c0FsbG93ZWQsIDApOwotCi0gICAgLy8gRmluaXNoIHByb2Nlc3NpbmcgZXZlbnRzLgot
ICAgIHJlcGxheVNhdmVkRXZlbnRzKCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmR1bXBGaWxl
bmFtZUJlaW5nRHJhZ2dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKLXsK
LSAgICBXZWJTdHJpbmcgZmlsZW5hbWU7Ci0gICAgV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpJdGVt
PiBpdGVtcyA9IGN1cnJlbnREcmFnRGF0YS5pdGVtcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLnN0b3JhZ2VU
eXBlID09IFdlYkRyYWdEYXRhOjpJdGVtOjpTdG9yYWdlVHlwZUJpbmFyeURhdGEpIHsKLSAgICAg
ICAgICAgIGZpbGVuYW1lID0gaXRlbXNbaV0udGl0bGU7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RkOjpzdHJpbmco
IkZpbGVuYW1lIGJlaW5nIGRyYWdnZWQ6ICIpICsgZmlsZW5hbWUudXRmOCgpLmRhdGEoKSArICJc
biIpOwotfQotCi1XZWJNb3VzZUV2ZW50OjpCdXR0b24gRXZlbnRTZW5kZXI6OmdldEJ1dHRvblR5
cGVGcm9tQnV0dG9uTnVtYmVyKGludCBidXR0b25Db2RlKQotewotICAgIGlmICghYnV0dG9uQ29k
ZSkKLSAgICAgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQ7Ci0gICAgaWYgKGJ1
dHRvbkNvZGUgPT0gMikKLSAgICAgICAgcmV0dXJuIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0
OwotICAgIHJldHVybiBXZWJNb3VzZUV2ZW50OjpCdXR0b25NaWRkbGU7Ci19Ci0KLWludCBFdmVu
dFNlbmRlcjo6Z2V0QnV0dG9uTnVtYmVyRnJvbVNpbmdsZUFyZyhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbnQgYnV0dG9uQ29kZSA9IDA7Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICBidXR0
b25Db2RlID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICByZXR1cm4gYnV0dG9uQ29kZTsK
LX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihXZWJNb3Vz
ZUV2ZW50OjpCdXR0b24gYnV0dG9uVHlwZSkKLXsKLSAgICBpZiAoKGdldEN1cnJlbnRFdmVudFRp
bWVTZWMobV9kZWxlZ2F0ZSkgLSBsYXN0Q2xpY2tUaW1lU2VjIDwgbXVsdGlwbGVDbGlja1RpbWVT
ZWMpCi0gICAgICAgICYmICghb3V0c2lkZU11bHRpQ2xpY2tSYWRpdXMobGFzdE1vdXNlUG9zLCBs
YXN0Q2xpY2tQb3MpKQotICAgICAgICAmJiAoYnV0dG9uVHlwZSA9PSBsYXN0QnV0dG9uVHlwZSkp
Ci0gICAgICAgICsrY2xpY2tDb3VudDsKLSAgICBlbHNlIHsKLSAgICAgICAgY2xpY2tDb3VudCA9
IDE7Ci0gICAgICAgIGxhc3RCdXR0b25UeXBlID0gYnV0dG9uVHlwZTsKLSAgICB9Ci19Ci0KLS8v
Ci0vLyBJbXBsZW1lbnRlZCBqYXZhc2NyaXB0IG1ldGhvZHMuCi0vLwotCi12b2lkIEV2ZW50U2Vu
ZGVyOjptb3VzZURvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0KSAvLyBDb3VsZCBiZSAwIGlmIGludm9rZWQg
YXN5bmNocm9ub3VzbHkuCi0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgd2Vidmll
dygpLT5sYXlvdXQoKTsKLQotICAgIGludCBidXR0b25OdW1iZXIgPSBnZXRCdXR0b25OdW1iZXJG
cm9tU2luZ2xlQXJnKGFyZ3VtZW50cyk7Ci0gICAgV0VCS0lUX0FTU0VSVChidXR0b25OdW1iZXIg
IT0gLTEpOwotCi0gICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvblR5cGUgPSBnZXRCdXR0
b25UeXBlRnJvbUJ1dHRvbk51bWJlcihidXR0b25OdW1iZXIpOwotCi0gICAgdXBkYXRlQ2xpY2tD
b3VudEZvckJ1dHRvbihidXR0b25UeXBlKTsKLQotICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0g
ICAgcHJlc3NlZEJ1dHRvbiA9IGJ1dHRvblR5cGU7Ci0gICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5w
dXRFdmVudDo6TW91c2VEb3duLCBidXR0b25UeXBlLCBsYXN0TW91c2VQb3MsICZldmVudCwgZ2V0
Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKSk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPj0gMiAmJiAoYXJndW1lbnRzWzFdLmlzT2JqZWN0KCkgfHwgYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpKQotICAgICAgICBhcHBseUtleU1vZGlmaWVycygmKGFyZ3VtZW50c1sxXSksICZldmVu
dCk7Ci0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBF
dmVudFNlbmRlcjo6bW91c2VVcChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChyZXN1bHQpIC8vIENvdWxkIGJlIDAgaWYgaW52
b2tlZCBhc3luY2hyb25vdXNseS4KLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICB3
ZWJ2aWV3KCktPmxheW91dCgpOwotCi0gICAgaW50IGJ1dHRvbk51bWJlciA9IGdldEJ1dHRvbk51
bWJlckZyb21TaW5nbGVBcmcoYXJndW1lbnRzKTsKLSAgICBXRUJLSVRfQVNTRVJUKGJ1dHRvbk51
bWJlciAhPSAtMSk7Ci0KLSAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uVHlwZSA9IGdl
dEJ1dHRvblR5cGVGcm9tQnV0dG9uTnVtYmVyKGJ1dHRvbk51bWJlcik7Ci0KLSAgICBpZiAoaXNE
cmFnTW9kZSgpICYmICFyZXBsYXlpbmdTYXZlZEV2ZW50cykgewotICAgICAgICBTYXZlZEV2ZW50
IHNhdmVkRXZlbnQ7Ci0gICAgICAgIHNhdmVkRXZlbnQudHlwZSA9IFNhdmVkRXZlbnQ6Ok1vdXNl
VXA7Ci0gICAgICAgIHNhdmVkRXZlbnQuYnV0dG9uVHlwZSA9IGJ1dHRvblR5cGU7Ci0gICAgICAg
IG1vdXNlRXZlbnRRdWV1ZS5wdXNoX2JhY2soc2F2ZWRFdmVudCk7Ci0gICAgICAgIHJlcGxheVNh
dmVkRXZlbnRzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV2ViTW91c2VFdmVudCBldmVudDsK
LSAgICAgICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VVcCwgYnV0dG9uVHlw
ZSwgbGFzdE1vdXNlUG9zLCAmZXZlbnQsIGdldEN1cnJlbnRFdmVudFRpbWVTZWMobV9kZWxlZ2F0
ZSkpOwotICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIChhcmd1bWVudHNbMV0u
aXNPYmplY3QoKSB8fCBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkpCi0gICAgICAgICAgICBhcHBs
eUtleU1vZGlmaWVycygmKGFyZ3VtZW50c1sxXSksICZldmVudCk7Ci0gICAgICAgIGRvTW91c2VV
cChldmVudCk7Ci0gICAgfQotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpkb01vdXNlVXAoY29uc3Qg
V2ViTW91c2VFdmVudCYgZSkKLXsKLSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZSk7
Ci0KLSAgICBwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKLSAgICBs
YXN0Q2xpY2tUaW1lU2VjID0gZS50aW1lU3RhbXBTZWNvbmRzOwotICAgIGxhc3RDbGlja1BvcyA9
IGxhc3RNb3VzZVBvczsKLQotICAgIC8vIElmIHdlJ3JlIGluIGEgZHJhZyBvcGVyYXRpb24sIGNv
bXBsZXRlIGl0LgotICAgIGlmIChjdXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGUueCwgZS55KTsKLSAgICBXZWJQb2lu
dCBzY3JlZW5Qb2ludChlLmdsb2JhbFgsIGUuZ2xvYmFsWSk7Ci0gICAgZmluaXNoRHJhZ0FuZERy
b3AoZSwgd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ092ZXIoY2xpZW50UG9pbnQsIHNjcmVlblBv
aW50LCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkLCAwKSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5k
ZXI6OmZpbmlzaERyYWdBbmREcm9wKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGUsIFdlYktpdDo6V2Vi
RHJhZ09wZXJhdGlvbiBkcmFnRWZmZWN0KQotewotICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGUu
eCwgZS55KTsKLSAgICBXZWJQb2ludCBzY3JlZW5Qb2ludChlLmdsb2JhbFgsIGUuZ2xvYmFsWSk7
Ci0gICAgY3VycmVudERyYWdFZmZlY3QgPSBkcmFnRWZmZWN0OwotICAgIGlmIChjdXJyZW50RHJh
Z0VmZmVjdCkKLSAgICAgICAgd2VidmlldygpLT5kcmFnVGFyZ2V0RHJvcChjbGllbnRQb2ludCwg
c2NyZWVuUG9pbnQsIDApOwotICAgIGVsc2UKLSAgICAgICAgd2VidmlldygpLT5kcmFnVGFyZ2V0
RHJhZ0xlYXZlKCk7Ci0gICAgd2VidmlldygpLT5kcmFnU291cmNlRW5kZWRBdChjbGllbnRQb2lu
dCwgc2NyZWVuUG9pbnQsIGN1cnJlbnREcmFnRWZmZWN0KTsKLSAgICB3ZWJ2aWV3KCktPmRyYWdT
b3VyY2VTeXN0ZW1EcmFnRW5kZWQoKTsKLQotICAgIGN1cnJlbnREcmFnRGF0YS5yZXNldCgpOwot
fQotCi12b2lkIEV2ZW50U2VuZGVyOjptb3VzZU1vdmVUbyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB3
ZWJ2aWV3KCktPmxheW91dCgpOwotCi0gICAgV2ViUG9pbnQgbW91c2VQb3MoYXJndW1lbnRzWzBd
LnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvSW50MzIoKSk7Ci0KLSAgICBpZiAoaXNEcmFnTW9k
ZSgpICYmIHByZXNzZWRCdXR0b24gPT0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdCAmJiAhcmVw
bGF5aW5nU2F2ZWRFdmVudHMpIHsKLSAgICAgICAgU2F2ZWRFdmVudCBzYXZlZEV2ZW50OwotICAg
ICAgICBzYXZlZEV2ZW50LnR5cGUgPSBTYXZlZEV2ZW50OjpNb3VzZU1vdmU7Ci0gICAgICAgIHNh
dmVkRXZlbnQucG9zID0gbW91c2VQb3M7Ci0gICAgICAgIG1vdXNlRXZlbnRRdWV1ZS5wdXNoX2Jh
Y2soc2F2ZWRFdmVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgV2ViTW91c2VFdmVudCBldmVu
dDsKLSAgICAgICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VNb3ZlLCBwcmVz
c2VkQnV0dG9uLCBtb3VzZVBvcywgJmV2ZW50LCBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKG1fZGVs
ZWdhdGUpKTsKLSAgICAgICAgZG9Nb3VzZU1vdmUoZXZlbnQpOwotICAgIH0KLX0KLQotdm9pZCBF
dmVudFNlbmRlcjo6ZG9Nb3VzZU1vdmUoY29uc3QgV2ViTW91c2VFdmVudCYgZSkKLXsKLSAgICBs
YXN0TW91c2VQb3MgPSBXZWJQb2ludChlLngsIGUueSk7Ci0KLSAgICB3ZWJ2aWV3KCktPmhhbmRs
ZUlucHV0RXZlbnQoZSk7Ci0KLSAgICBpZiAocHJlc3NlZEJ1dHRvbiA9PSBXZWJNb3VzZUV2ZW50
OjpCdXR0b25Ob25lIHx8IGN1cnJlbnREcmFnRGF0YS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGUueCwgZS55KTsKLSAgICBXZWJQb2ludCBzY3Jl
ZW5Qb2ludChlLmdsb2JhbFgsIGUuZ2xvYmFsWSk7Ci0gICAgY3VycmVudERyYWdFZmZlY3QgPSB3
ZWJ2aWV3KCktPmRyYWdUYXJnZXREcmFnT3ZlcihjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIGN1
cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQsIDApOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjprZXlE
b3duKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGJvb2wgZ2VuZXJhdGVDaGFyID0gZmFsc2U7Ci0KLSAgICAvLyBGSVhN
RTogSSdtIG5vdCBleGFjdGx5IHN1cmUgaG93IHdlIHNob3VsZCBjb252ZXJ0IHRoZSBzdHJpbmcg
dG8gYSBrZXkKLSAgICAvLyBldmVudC4gVGhpcyBzZWVtcyB0byB3b3JrIGluIHRoZSBjYXNlcyBJ
IHRlc3RlZC4KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFsc28gZ2VuZXJhdGUgYSBLRVlfVVA/
Ci0gICAgc3RyaW5nIGNvZGVTdHIgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLQotICAgIC8v
IENvbnZlcnQgXG4gLT4gVktfUkVUVVJOLiBTb21lIGxheW91dCB0ZXN0cyB1c2UgXG4gdG8gbWVh
biAiRW50ZXIiLCB3aGVuCi0gICAgLy8gV2luZG93cyB1c2VzIFxyIGZvciAiRW50ZXIiLgotICAg
IGludCBjb2RlID0gMDsKLSAgICBpbnQgdGV4dCA9IDA7Ci0gICAgYm9vbCBuZWVkc1NoaWZ0S2V5
TW9kaWZpZXIgPSBmYWxzZTsKLSAgICBpZiAoIlxuIiA9PSBjb2RlU3RyKSB7Ci0gICAgICAgIGdl
bmVyYXRlQ2hhciA9IHRydWU7Ci0gICAgICAgIHRleHQgPSBjb2RlID0gVktFWV9SRVRVUk47Ci0g
ICAgfSBlbHNlIGlmICgicmlnaHRBcnJvdyIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZL
RVlfUklHSFQ7Ci0gICAgZWxzZSBpZiAoImRvd25BcnJvdyIgPT0gY29kZVN0cikKLSAgICAgICAg
Y29kZSA9IFZLRVlfRE9XTjsKLSAgICBlbHNlIGlmICgibGVmdEFycm93IiA9PSBjb2RlU3RyKQot
ICAgICAgICBjb2RlID0gVktFWV9MRUZUOwotICAgIGVsc2UgaWYgKCJ1cEFycm93IiA9PSBjb2Rl
U3RyKQotICAgICAgICBjb2RlID0gVktFWV9VUDsKLSAgICBlbHNlIGlmICgiaW5zZXJ0IiA9PSBj
b2RlU3RyKQotICAgICAgICBjb2RlID0gVktFWV9JTlNFUlQ7Ci0gICAgZWxzZSBpZiAoImRlbGV0
ZSIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZLRVlfREVMRVRFOwotICAgIGVsc2UgaWYg
KCJwYWdlVXAiID09IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSBWS0VZX1BSSU9SOwotICAgIGVs
c2UgaWYgKCJwYWdlRG93biIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZLRVlfTkVYVDsK
LSAgICBlbHNlIGlmICgiaG9tZSIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IFZLRVlfSE9N
RTsKLSAgICBlbHNlIGlmICgiZW5kIiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gVktFWV9F
TkQ7Ci0gICAgZWxzZSBpZiAoInByaW50U2NyZWVuIiA9PSBjb2RlU3RyKQotICAgICAgICBjb2Rl
ID0gVktFWV9TTkFQU0hPVDsKLSAgICBlbHNlIGlmICgibWVudSIgPT0gY29kZVN0cikKLSAgICAg
ICAgY29kZSA9IFZLRVlfQVBQUzsKLSAgICBlbHNlIGlmICgibGVmdENvbnRyb2wiID09IGNvZGVT
dHIpCi0gICAgICAgIGNvZGUgPSBWS0VZX0xDT05UUk9MOwotICAgIGVsc2UgaWYgKCJyaWdodENv
bnRyb2wiID09IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSBWS0VZX1JDT05UUk9MOwotICAgIGVs
c2UgaWYgKCJsZWZ0U2hpZnQiID09IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSBWS0VZX0xTSElG
VDsKLSAgICBlbHNlIGlmICgicmlnaHRTaGlmdCIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9
IFZLRVlfUlNISUZUOwotICAgIGVsc2UgaWYgKCJsZWZ0QWx0IiA9PSBjb2RlU3RyKQotICAgICAg
ICBjb2RlID0gVktFWV9MTUVOVTsKLSAgICBlbHNlIGlmICgicmlnaHRBbHQiID09IGNvZGVTdHIp
Ci0gICAgICAgIGNvZGUgPSBWS0VZX1JNRU5VOwotICAgIGVsc2UgewotICAgICAgICAvLyBDb21w
YXJlIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCB0aGUgZnVuY3Rpb24ta2V5IG5hbWVzIGRlZmluZWQg
YnkgdGhlCi0gICAgICAgIC8vIERPTSBzcGVjIChpLmUuICJGMSIsLi4uLCJGMjQiKS4gSWYgdGhl
IGlucHV0IHN0cmluZyBpcyBhIGZ1bmN0aW9uLWtleQotICAgICAgICAvLyBuYW1lLCBzZXQgaXRz
IGtleSBjb2RlLgotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSAyNDsgKytpKSB7Ci0gICAg
ICAgICAgICBjaGFyIGZ1bmN0aW9uQ2hhcnNbMTBdOwotICAgICAgICAgICAgc25wcmludGYoZnVu
Y3Rpb25DaGFycywgMTAsICJGJWQiLCBpKTsKLSAgICAgICAgICAgIHN0cmluZyBmdW5jdGlvbktl
eU5hbWUoZnVuY3Rpb25DaGFycyk7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25LZXlOYW1lID09
IGNvZGVTdHIpIHsKLSAgICAgICAgICAgICAgICBjb2RlID0gVktFWV9GMSArIChpIC0gMSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFjb2RlKSB7Ci0gICAgICAgICAgICBXZWJTdHJpbmcgd2ViQ29kZVN0ciA9IFdlYlN0cmlu
Zzo6ZnJvbVVURjgoY29kZVN0ci5kYXRhKCksIGNvZGVTdHIuc2l6ZSgpKTsKLSAgICAgICAgICAg
IFdFQktJVF9BU1NFUlQod2ViQ29kZVN0ci5sZW5ndGgoKSA9PSAxKTsKLSAgICAgICAgICAgIHRl
eHQgPSBjb2RlID0gd2ViQ29kZVN0ci5kYXRhKClbMF07Ci0gICAgICAgICAgICBuZWVkc1NoaWZ0
S2V5TW9kaWZpZXIgPSBuZWVkc1NoaWZ0TW9kaWZpZXIoY29kZSk7Ci0gICAgICAgICAgICBpZiAo
KGNvZGUgJiAweEZGKSA+PSAnYScgJiYgKGNvZGUgJiAweEZGKSA8PSAneicpCi0gICAgICAgICAg
ICAgICAgY29kZSAtPSAnYScgLSAnQSc7Ci0gICAgICAgICAgICBnZW5lcmF0ZUNoYXIgPSB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCIoIiA9PSBjb2RlU3RyKSB7Ci0gICAgICAgICAg
ICBjb2RlID0gJzknOwotICAgICAgICAgICAgbmVlZHNTaGlmdEtleU1vZGlmaWVyID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZvciBvbmUgZ2VuZXJhdGVkIGtleWJvYXJkIGV2
ZW50LCB3ZSBuZWVkIHRvIGdlbmVyYXRlIGEga2V5RG93bi9rZXlVcAotICAgIC8vIHBhaXI7IHJl
ZmVyIHRvIEV2ZW50U2VuZGVyLmNwcCBpbiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4uCi0gICAg
Ly8gT24gV2luZG93cywgd2UgbWlnaHQgYWxzbyBuZWVkIHRvIGdlbmVyYXRlIGEgY2hhciBldmVu
dCB0byBtaW1pYyB0aGUKLSAgICAvLyBXaW5kb3dzIGV2ZW50IGZsb3c7IG9uIG90aGVyIHBsYXRm
b3JtcyB3ZSBjcmVhdGUgYSBtZXJnZWQgZXZlbnQgYW5kIHRlc3QKLSAgICAvLyB0aGUgZXZlbnQg
ZmxvdyB0aGF0IHRoYXQgcGxhdGZvcm0gcHJvdmlkZXMuCi0gICAgV2ViS2V5Ym9hcmRFdmVudCBl
dmVudERvd24sIGV2ZW50Q2hhciwgZXZlbnRVcDsKLSAgICBldmVudERvd24udHlwZSA9IFdlYklu
cHV0RXZlbnQ6OlJhd0tleURvd247Ci0gICAgZXZlbnREb3duLm1vZGlmaWVycyA9IDA7Ci0gICAg
ZXZlbnREb3duLndpbmRvd3NLZXlDb2RlID0gY29kZTsKLSNpZiBkZWZpbmVkKF9fbGludXhfXykg
JiYgVVNFKEdUSykKLSAgICBldmVudERvd24ubmF0aXZlS2V5Q29kZSA9IE5hdGl2ZUtleUNvZGVG
b3JXaW5kb3dzS2V5Q29kZShjb2RlKTsKLSNlbmRpZgotCi0gICAgaWYgKGdlbmVyYXRlQ2hhcikg
ewotICAgICAgICBldmVudERvd24udGV4dFswXSA9IHRleHQ7Ci0gICAgICAgIGV2ZW50RG93bi51
bm1vZGlmaWVkVGV4dFswXSA9IHRleHQ7Ci0gICAgfQotICAgIGV2ZW50RG93bi5zZXRLZXlJZGVu
dGlmaWVyRnJvbVdpbmRvd3NLZXlDb2RlKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+
PSAyICYmIChhcmd1bWVudHNbMV0uaXNPYmplY3QoKSB8fCBhcmd1bWVudHNbMV0uaXNTdHJpbmco
KSkpCi0gICAgICAgIGV2ZW50RG93bi5pc1N5c3RlbUtleSA9IGFwcGx5S2V5TW9kaWZpZXJzKCYo
YXJndW1lbnRzWzFdKSwgJmV2ZW50RG93bik7Ci0KLSAgICBpZiAobmVlZHNTaGlmdEtleU1vZGlm
aWVyKQotICAgICAgICBldmVudERvd24ubW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OlNoaWZ0
S2V5OwotCi0gICAgLy8gU2VlIGlmIEtleUxvY2F0aW9uIGFyZ3VtZW50IGlzIGdpdmVuLgotICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDMgJiYgYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkpIHsK
LSAgICAgICAgaW50IGxvY2F0aW9uID0gYXJndW1lbnRzWzJdLnRvSW50MzIoKTsKLSAgICAgICAg
aWYgKGxvY2F0aW9uID09IERPTUtleUxvY2F0aW9uTnVtcGFkKQotICAgICAgICAgICAgZXZlbnRE
b3duLm1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpJc0tleVBhZDsKLSAgICB9Ci0KLSAgICBl
dmVudENoYXIgPSBldmVudFVwID0gZXZlbnREb3duOwotICAgIGV2ZW50VXAudHlwZSA9IFdlYklu
cHV0RXZlbnQ6OktleVVwOwotICAgIC8vIEV2ZW50U2VuZGVyLm0gZm9yY2VzIGEgbGF5b3V0IGhl
cmUsIHdpdGggYXQgbGVhc3Qgb25lCi0gICAgLy8gdGVzdCAoZmFzdC9mb3Jtcy9mb2N1cy1jb250
cm9sLXRvLXBhZ2UuaHRtbCkgcmVseWluZyBvbiB0aGlzLgotICAgIHdlYnZpZXcoKS0+bGF5b3V0
KCk7Ci0KLSAgICAvLyBJbiB0aGUgYnJvd3NlciwgaWYgYSBrZXlib2FyZCBldmVudCBjb3JyZXNw
b25kcyB0byBhbiBlZGl0b3IgY29tbWFuZCwKLSAgICAvLyB0aGUgY29tbWFuZCB3aWxsIGJlIGRp
c3BhdGNoZWQgdG8gdGhlIHJlbmRlcmVyIGp1c3QgYmVmb3JlIGRpc3BhdGNoaW5nCi0gICAgLy8g
dGhlIGtleWJvYXJkIGV2ZW50LCBhbmQgdGhlbiBpdCB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZQot
ICAgIC8vIFJlbmRlclZpZXc6OmhhbmRsZUN1cnJlbnRLZXlib2FyZEV2ZW50KCkgbWV0aG9kLCB3
aGljaCBpcyBjYWxsZWQgZnJvbQotICAgIC8vIHRoaXJkX3BhcnR5L1dlYktpdC9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJbXBsLmNwcC4KLSAgICAvLyBXZSBqdXN0IHNp
bXVsYXRlIHRoZSBzYW1lIGJlaGF2aW9yIGhlcmUuCi0gICAgc3RyaW5nIGVkaXRDb21tYW5kOwot
ICAgIGlmIChnZXRFZGl0Q29tbWFuZChldmVudERvd24sICZlZGl0Q29tbWFuZCkpCi0gICAgICAg
IG1fZGVsZWdhdGUtPnNldEVkaXRDb21tYW5kKGVkaXRDb21tYW5kLCAiIik7Ci0KLSAgICB3ZWJ2
aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnREb3duKTsKLQotICAgIGlmIChjb2RlID09IFZL
RVlfRVNDQVBFICYmICFjdXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpIHsKLSAgICAgICAgV2ViTW91
c2VFdmVudCBldmVudDsKLSAgICAgICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91
c2VEb3duLCBwcmVzc2VkQnV0dG9uLCBsYXN0TW91c2VQb3MsICZldmVudCwgZ2V0Q3VycmVudEV2
ZW50VGltZVNlYyhtX2RlbGVnYXRlKSk7Ci0gICAgICAgIGZpbmlzaERyYWdBbmREcm9wKGV2ZW50
LCBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Ob25lKTsKLSAgICB9Ci0KLSAgICBtX2RlbGVnYXRl
LT5jbGVhckVkaXRDb21tYW5kKCk7Ci0KLSAgICBpZiAoZ2VuZXJhdGVDaGFyKSB7Ci0gICAgICAg
IGV2ZW50Q2hhci50eXBlID0gV2ViSW5wdXRFdmVudDo6Q2hhcjsKLSAgICAgICAgZXZlbnRDaGFy
LmtleUlkZW50aWZpZXJbMF0gPSAnXDAnOwotICAgICAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0
RXZlbnQoZXZlbnRDaGFyKTsKLSAgICB9Ci0KLSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZl
bnQoZXZlbnRVcCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmRpc3BhdGNoTWVzc2FnZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotCi0jaWZkZWYgV0lOMzIKLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA9PSAzKSB7Ci0gICAgICAgIC8vIEdyYWIgdGhlIG1lc3NhZ2UgaWQgdG8gc2VlIGlmIHdl
IG5lZWQgdG8gZGlzcGF0Y2ggaXQuCi0gICAgICAgIGludCBtc2cgPSBhcmd1bWVudHNbMF0udG9J
bnQzMigpOwotCi0gICAgICAgIC8vIFdlYktpdCdzIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBz
dHVmZnMgYSBNU0cgc3RydWN0IGFuZCB1c2VzCi0gICAgICAgIC8vIFRyYW5zbGF0ZU1lc3NhZ2Ug
YW5kIERpc3BhdGNoTWVzc2FnZS4gV2UgdXNlIGEgV2ViS2V5Ym9hcmRFdmVudCwgd2hpY2gKLSAg
ICAgICAgLy8gZG9lc24ndCBuZWVkIHRvIHJlY2VpdmUgdGhlIERlYWRDaGFyIGFuZCBTeXNEZWFk
Q2hhciBtZXNzYWdlcy4KLSAgICAgICAgaWYgKG1zZyA9PSBXTV9ERUFEQ0hBUiB8fCBtc2cgPT0g
V01fU1lTREVBRENIQVIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgd2Vidmlldygp
LT5sYXlvdXQoKTsKLQotICAgICAgICB1bnNpZ25lZCBsb25nIGxwYXJhbSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKLSAgICAgICAgd2Vidmll
dygpLT5oYW5kbGVJbnB1dEV2ZW50KFdlYklucHV0RXZlbnRGYWN0b3J5OjprZXlib2FyZEV2ZW50
KDAsIG1zZywgYXJndW1lbnRzWzFdLnRvSW50MzIoKSwgbHBhcmFtKSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1ib29sIEV2
ZW50U2VuZGVyOjpuZWVkc1NoaWZ0TW9kaWZpZXIoaW50IGtleUNvZGUpCi17Ci0gICAgLy8gSWYg
Y29kZSBpcyBhbiB1cHBlcmNhc2UgbGV0dGVyLCBhc3NpZ24gYSBTSElGVCBrZXkgdG8KLSAgICAv
LyBldmVudERvd24ubW9kaWZpZXIsIHRoaXMgbG9naWMgY29tZXMgZnJvbQotICAgIC8vIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAKLSAgICByZXR1cm4gKGtleUNvZGUg
JiAweEZGKSA+PSAnQScgJiYgKGtleUNvZGUgJiAweEZGKSA8PSAnWic7Ci19Ci0KLXZvaWQgRXZl
bnRTZW5kZXI6OmxlYXBGb3J3YXJkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpbnQgbWlsbGlzZWNvbmRzID0gYXJndW1lbnRzWzBdLnRvSW50MzIo
KTsKLSAgICBpZiAoaXNEcmFnTW9kZSgpICYmIHByZXNzZWRCdXR0b24gPT0gV2ViTW91c2VFdmVu
dDo6QnV0dG9uTGVmdCAmJiAhcmVwbGF5aW5nU2F2ZWRFdmVudHMpIHsKLSAgICAgICAgU2F2ZWRF
dmVudCBzYXZlZEV2ZW50OwotICAgICAgICBzYXZlZEV2ZW50LnR5cGUgPSBTYXZlZEV2ZW50OjpM
ZWFwRm9yd2FyZDsKLSAgICAgICAgc2F2ZWRFdmVudC5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29u
ZHM7Ci0gICAgICAgIG1vdXNlRXZlbnRRdWV1ZS5wdXNoX2JhY2soc2F2ZWRFdmVudCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGRvTGVhcEZvcndhcmQobWlsbGlzZWNvbmRzKTsKLX0KLQotdm9pZCBF
dmVudFNlbmRlcjo6ZG9MZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQotewotICAgIGFkdmFu
Y2VFdmVudFRpbWUobWlsbGlzZWNvbmRzKTsKLX0KLQotLy8gQXBwbGUncyBwb3J0IG9mIFdlYktp
dCB6b29tcyBieSBhIGZhY3RvciBvZiAxLjIgKHNlZQotLy8gV2ViS2l0L1dlYlZpZXcvV2ViVmll
dy5tbSkKLXZvaWQgRXZlbnRTZW5kZXI6OnRleHRab29tSW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKHRy
dWUsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkgKyAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dGV4dFpvb21PdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKHRy
dWUsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkgLSAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBFdmVudFNlbmRlcjo6em9vbVBhZ2VJbihjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgd2VidmlldygpLT5zZXRab29tTGV2ZWwoZmFs
c2UsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkgKyAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBFdmVudFNlbmRlcjo6em9vbVBhZ2VPdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKGZh
bHNlLCB3ZWJ2aWV3KCktPnpvb21MZXZlbCgpIC0gMSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNjYWxlUGFnZUJ5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlz
TnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMF0u
dG9Eb3VibGUoKSk7Ci0gICAgaW50IHggPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIGlu
dCB5ID0gYXJndW1lbnRzWzJdLnRvSW50MzIoKTsKLSAgICB3ZWJ2aWV3KCktPnNldFBhZ2VTY2Fs
ZUZhY3RvcihzY2FsZUZhY3RvciwgV2ViUG9pbnQoeCwgeSkpOwotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjptb3VzZVNjcm9sbEJ5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaGFuZGxlTW91
c2VXaGVlbChhcmd1bWVudHMsIHJlc3VsdCwgZmFsc2UpOwotfQotCi12b2lkIEV2ZW50U2VuZGVy
Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGhhbmRsZU1vdXNlV2hlZWwoYXJndW1lbnRz
LCByZXN1bHQsIHRydWUpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpyZXBsYXlTYXZlZEV2ZW50
cygpCi17Ci0gICAgcmVwbGF5aW5nU2F2ZWRFdmVudHMgPSB0cnVlOwotICAgIHdoaWxlICghbW91
c2VFdmVudFF1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgU2F2ZWRFdmVudCBlID0gbW91c2VFdmVu
dFF1ZXVlLmZyb250KCk7Ci0gICAgICAgIG1vdXNlRXZlbnRRdWV1ZS5wb3BfZnJvbnQoKTsKLQot
ICAgICAgICBzd2l0Y2ggKGUudHlwZSkgewotICAgICAgICBjYXNlIFNhdmVkRXZlbnQ6Ok1vdXNl
TW92ZTogewotICAgICAgICAgICAgV2ViTW91c2VFdmVudCBldmVudDsKLSAgICAgICAgICAgIGlu
aXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZSwgcHJlc3NlZEJ1dHRvbiwgZS5w
b3MsICZldmVudCwgZ2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKSk7Ci0gICAgICAg
ICAgICBkb01vdXNlTW92ZShldmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFNhdmVkRXZlbnQ6OkxlYXBGb3J3YXJkOgotICAgICAgICAgICAgZG9MZWFw
Rm9yd2FyZChlLm1pbGxpc2Vjb25kcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTYXZlZEV2ZW50OjpNb3VzZVVwOiB7Ci0gICAgICAgICAgICBXZWJNb3VzZUV2ZW50IGV2ZW50
OwotICAgICAgICAgICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VVcCwgZS5i
dXR0b25UeXBlLCBsYXN0TW91c2VQb3MsICZldmVudCwgZ2V0Q3VycmVudEV2ZW50VGltZVNlYyht
X2RlbGVnYXRlKSk7Ci0gICAgICAgICAgICBkb01vdXNlVXAoZXZlbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlcGxheWluZ1Nh
dmVkRXZlbnRzID0gZmFsc2U7Ci19Ci0KLS8vIEJlY2F1c2UgYWN0dWFsIGNvbnRleHQgbWVudSBp
cyBpbXBsZW1lbnRlZCBieSB0aGUgYnJvd3NlciBzaWRlLCAKLS8vIHRoaXMgZnVuY3Rpb24gZG9l
cyBvbmx5IHdoYXQgTGF5b3V0VGVzdHMgYXJlIGV4cGVjdGluZzoKLS8vIC0gTWFueSB0ZXN0IGNo
ZWNrcyB0aGUgY291bnQgb2YgaXRlbXMuIFNvIHJldHVybmluZyBub24temVybyB2YWx1ZSBtYWtl
cyBzZW5zZS4KLS8vIC0gU29tZSB0ZXN0IGNvbXBhcmVzIHRoZSBjb3VudCBiZWZvcmUgYW5kIGFm
dGVyIHNvbWUgYWN0aW9uLiBTbyBjaGFuZ2luZyB0aGUgY291bnQgYmFzZWQgb24gZmxhZ3MKLS8v
ICAgYWxzbyBtYWtlcyBzZW5zZS4gVGhpcyBmdW5jdGlvbiBpcyBkb2luZyBzdWNoIGZvciBzb21l
IGZsYWdzLgotLy8gLSBTb21lIHRlc3QgZXZlbiBjaGVja3MgYWN0dWFsIHN0cmluZyBjb250ZW50
LiBTbyBwcm92aWRpbmcgaXQgd291bGQgYmUgYWxzbyBoZWxwZnVsLgotLy8KLXN0YXRpYyB2ZWN0
b3I8V2ViU3RyaW5nPiBtYWtlTWVudUl0ZW1TdHJpbmdzRm9yKFdlYkNvbnRleHRNZW51RGF0YSog
Y29udGV4dE1lbnUsIFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgLy8gVGhlc2Ug
Y29uc3RhbnRzIGFyZSBiYXNlZCBvbiBTYWZhcmkncyBjb250ZXh0IG1lbnUgYmVjYXVzZSB0ZXN0
cyBhcmUgbWFkZSBmb3IgaXQuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vbkVkaXRhYmxlTWVu
dVN0cmluZ3NbXSA9IHsgIkJhY2siLCAiUmVsb2FkIFBhZ2UiLCAiT3BlbiBpbiBEYXNoYmFvcmQi
LCAiPHNlcGFyYXRvcj4iLCAiVmlldyBTb3VyY2UiLCAiU2F2ZSBQYWdlIEFzIiwgIlByaW50IFBh
Z2UiLCAiSW5zcGVjdCBFbGVtZW50IiwgMCB9OwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlZGl0
YWJsZU1lbnVTdHJpbmdzW10gPSB7ICJDdXQiLCAiQ29weSIsICI8c2VwYXJhdG9yPiIsICJQYXN0
ZSIsICJTcGVsbGluZyBhbmQgR3JhbW1hciIsICJTdWJzdGl0dXRpb25zLCBUcmFuc2Zvcm1hdGlv
bnMiLCAiRm9udCIsICJTcGVlY2giLCAiUGFyYWdyYXBoIERpcmVjdGlvbiIsICI8c2VwYXJhdG9y
PiIsIDAgfTsKLQotICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtb3VzZSBldmVudHMg
YXJlIGNhbmNlbGxlYWJsZS4KLSAgICBpZiAoIWNvbnRleHRNZW51KQotICAgICAgICByZXR1cm4g
dmVjdG9yPFdlYlN0cmluZz4oKTsKLQotICAgIHZlY3RvcjxXZWJTdHJpbmc+IHN0cmluZ3M7Ci0K
LSAgICBpZiAoY29udGV4dE1lbnUtPmlzRWRpdGFibGUpIHsKLSAgICAgICAgZm9yIChjb25zdCBj
aGFyKiogaXRlbSA9IGVkaXRhYmxlTWVudVN0cmluZ3M7ICppdGVtOyArK2l0ZW0pIAotICAgICAg
ICAgICAgc3RyaW5ncy5wdXNoX2JhY2soV2ViU3RyaW5nOjpmcm9tVVRGOCgqaXRlbSkpOwotICAg
ICAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiBzdWdnZXN0aW9uczsKLSAgICAgICAgTW9ja1NwZWxs
Q2hlY2s6OmZpbGxTdWdnZXN0aW9uTGlzdChjb250ZXh0TWVudS0+bWlzc3BlbGxlZFdvcmQsICZz
dWdnZXN0aW9ucyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VnZ2VzdGlvbnMu
c2l6ZSgpOyArK2kpIAotICAgICAgICAgICAgc3RyaW5ncy5wdXNoX2JhY2soc3VnZ2VzdGlvbnNb
aV0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoY29uc3QgY2hhcioqIGl0ZW0gPSBub25F
ZGl0YWJsZU1lbnVTdHJpbmdzOyAqaXRlbTsgKytpdGVtKSAKLSAgICAgICAgICAgIHN0cmluZ3Mu
cHVzaF9iYWNrKFdlYlN0cmluZzo6ZnJvbVVURjgoKml0ZW0pKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gc3RyaW5nczsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Y29udGV4dENsaWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgd2Vi
dmlldygpLT5sYXlvdXQoKTsKLQotICAgIHVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oV2ViTW91
c2VFdmVudDo6QnV0dG9uUmlnaHQpOwotCi0gICAgLy8gQ2xlYXJzIGxhc3QgY29udGV4dCBtZW51
IGRhdGEgYmVjYXVzZSB3ZSBuZWVkIHRvIGtub3cgaWYgdGhlIGNvbnRleHQgbWVudSBiZSByZXF1
ZXN0ZWQgCi0gICAgLy8gYWZ0ZXIgZm9sbG93aW5nIG1vdXNlIGV2ZW50cy4KLSAgICBtX2xhc3RD
b250ZXh0TWVudURhdGEucmVzZXQoKTsKLQotICAgIC8vIEdlbmVyYXRlIHJpZ2h0IG1vdXNlIGRv
d24gYW5kIHVwLgotICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0gICAgLy8gVGhpcyBpcyBhIGhh
Y2sgdG8gd29yayBhcm91bmQgb25seSBhbGxvd2luZyBhIHNpbmdsZSBwcmVzc2VkIGJ1dHRvbiBz
aW5jZSB3ZSB3YW50IHRvCi0gICAgLy8gdGVzdCB0aGUgY2FzZSB3aGVyZSBib3RoIHRoZSBsZWZ0
IGFuZCByaWdodCBtb3VzZSBidXR0b25zIGFyZSBwcmVzc2VkLgotICAgIGlmIChwcmVzc2VkQnV0
dG9uID09IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmUpCi0gICAgICAgIHByZXNzZWRCdXR0b24g
PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDsKLSAgICBpbml0TW91c2VFdmVudChXZWJJbnB1
dEV2ZW50OjpNb3VzZURvd24sIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0LCBsYXN0TW91c2VQ
b3MsICZldmVudCwgZ2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKSk7Ci0gICAgd2Vi
dmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLQotI2lmZGVmIFdJTjMyCi0gICAgaW5p
dE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VVcCwgV2ViTW91c2VFdmVudDo6QnV0dG9u
UmlnaHQsIGxhc3RNb3VzZVBvcywgJmV2ZW50LCBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKG1fZGVs
ZWdhdGUpKTsKLSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwotCi0gICAg
cHJlc3NlZEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmU7Ci0jZW5kaWYKLQotICAg
IHJlc3VsdC0+c2V0KFdlYkJpbmRpbmdzOjptYWtlU3RyaW5nQXJyYXkobWFrZU1lbnVJdGVtU3Ry
aW5nc0ZvcihtX2xhc3RDb250ZXh0TWVudURhdGEuZ2V0KCksIG1fZGVsZWdhdGUpKSk7Ci19Ci0K
LWNsYXNzIE1vdXNlRG93blRhc2s6IHB1YmxpYyBXZWJNZXRob2RUYXNrPEV2ZW50U2VuZGVyPiB7
Ci1wdWJsaWM6Ci0gICAgTW91c2VEb3duVGFzayhFdmVudFNlbmRlciogb2JqLCBjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZykKLSAgICAgICAgOiBXZWJNZXRob2RUYXNrPEV2ZW50U2VuZGVyPihv
YmopLCBtX2FyZ3VtZW50cyhhcmcpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkg
eyBtX29iamVjdC0+bW91c2VEb3duKG1fYXJndW1lbnRzLCAwKTsgfQotCi1wcml2YXRlOgotICAg
IENwcEFyZ3VtZW50TGlzdCBtX2FyZ3VtZW50czsKLX07Ci0KLWNsYXNzIE1vdXNlVXBUYXNrOiBw
dWJsaWMgV2ViTWV0aG9kVGFzazxFdmVudFNlbmRlcj4gewotcHVibGljOgotICAgIE1vdXNlVXBU
YXNrKEV2ZW50U2VuZGVyKiBvYmosIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJnKQotICAgICAg
ICA6IFdlYk1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+KG9iaiksIG1fYXJndW1lbnRzKGFyZykgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5tb3VzZVVwKG1fYXJn
dW1lbnRzLCAwKTsgfQotCi1wcml2YXRlOgotICAgIENwcEFyZ3VtZW50TGlzdCBtX2FyZ3VtZW50
czsKLX07Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzQ2xpY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgTW91c2VE
b3duVGFzayh0aGlzLCBhcmd1bWVudHMpKTsKLSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcg
TW91c2VVcFRhc2sodGhpcywgYXJndW1lbnRzKSk7Ci19Ci0KLWNsYXNzIEtleURvd25UYXNrIDog
cHVibGljIFdlYk1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+IHsKLXB1YmxpYzoKLSAgICBLZXlEb3du
VGFzayhFdmVudFNlbmRlciogb2JqLCBjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZykKLSAgICAg
ICAgOiBXZWJNZXRob2RUYXNrPEV2ZW50U2VuZGVyPihvYmopLCBtX2FyZ3VtZW50cyhhcmcpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgeyBtX29iamVjdC0+a2V5RG93bihtX2Fy
Z3VtZW50cywgMCk7IH0KLQotcHJpdmF0ZToKLSAgICBDcHBBcmd1bWVudExpc3QgbV9hcmd1bWVu
dHM7Ci19OwotCi12b2lkIEV2ZW50U2VuZGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgS2V5
RG93blRhc2sodGhpcywgYXJndW1lbnRzKSk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmJlZ2lu
RHJhZ1dpdGhGaWxlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIGN1cnJlbnREcmFnRGF0YS5pbml0aWFsaXplKCk7Ci0gICAgdmVj
dG9yPHN0cmluZz4gZmlsZXMgPSBhcmd1bWVudHNbMF0udG9TdHJpbmdWZWN0b3IoKTsKLSAgICBX
ZWJWZWN0b3I8V2ViU3RyaW5nPiBhYnNvbHV0ZUZpbGVuYW1lcyhmaWxlcy5zaXplKCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2Vi
RHJhZ0RhdGE6Okl0ZW0gaXRlbTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IFdlYkRyYWdE
YXRhOjpJdGVtOjpTdG9yYWdlVHlwZUZpbGVuYW1lOwotICAgICAgICBpdGVtLmZpbGVuYW1lRGF0
YSA9IG1fZGVsZWdhdGUtPmdldEFic29sdXRlV2ViU3RyaW5nRnJvbVVURjhQYXRoKGZpbGVzW2ld
KTsKLSAgICAgICAgY3VycmVudERyYWdEYXRhLmFkZEl0ZW0oaXRlbSk7Ci0gICAgICAgIGFic29s
dXRlRmlsZW5hbWVzW2ldID0gaXRlbS5maWxlbmFtZURhdGE7Ci0gICAgfQotICAgIGN1cnJlbnRE
cmFnRGF0YS5zZXRGaWxlc3lzdGVtSWQobV9kZWxlZ2F0ZS0+cmVnaXN0ZXJJc29sYXRlZEZpbGVT
eXN0ZW0oYWJzb2x1dGVGaWxlbmFtZXMpKTsKLSAgICBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2Vk
ID0gV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uQ29weTsKLQotICAgIC8vIFByb3ZpZGUgYSBkcmFn
IHNvdXJjZS4KLSAgICB3ZWJ2aWV3KCktPmRyYWdUYXJnZXREcmFnRW50ZXIoY3VycmVudERyYWdE
YXRhLCBsYXN0TW91c2VQb3MsIGxhc3RNb3VzZVBvcywgY3VycmVudERyYWdFZmZlY3RzQWxsb3dl
ZCwgMCk7Ci0KLSAgICAvLyBkcmFnTW9kZSBzYXZlcyBldmVudHMgYW5kIHRoZW4gcmVwbGF5cyB0
aGVtIGxhdGVyLiBXZSBkb24ndCBuZWVkL3dhbnQgdGhhdC4KLSAgICBkcmFnTW9kZS5zZXQoZmFs
c2UpOwotCi0gICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBldmVudFNlbmRlciB0aGluayBhIGRyYWcg
aXMgaW4gcHJvZ3Jlc3MuCi0gICAgcHJlc3NlZEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRv
bkxlZnQ7Ci0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6
YWRkVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgV2ViVG91Y2hQb2lu
dCB0b3VjaFBvaW50OwotICAgIHRvdWNoUG9pbnQuc3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0
ZVByZXNzZWQ7Ci0gICAgdG91Y2hQb2ludC5wb3NpdGlvbiA9IFdlYlBvaW50KGFyZ3VtZW50c1sw
XS50b0ludDMyKCksIGFyZ3VtZW50c1sxXS50b0ludDMyKCkpOwotICAgIHRvdWNoUG9pbnQuc2Ny
ZWVuUG9zaXRpb24gPSB0b3VjaFBvaW50LnBvc2l0aW9uOwotCi0gICAgaW50IGxvd2VzdElkID0g
MDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdWNoUG9pbnRzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGlmICh0b3VjaFBvaW50c1tpXS5pZCA9PSBsb3dlc3RJZCkKLSAgICAgICAgICAg
IGxvd2VzdElkKys7Ci0gICAgfQotICAgIHRvdWNoUG9pbnQuaWQgPSBsb3dlc3RJZDsKLSAgICB0
b3VjaFBvaW50cy5wdXNoX2JhY2sodG91Y2hQb2ludCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6
OmNsZWFyVG91Y2hQb2ludHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIHRvdWNoUG9pbnRzLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnJlbGVhc2VUb3VjaFBvaW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50c1swXS50b0lu
dDMyKCk7Ci0gICAgV0VCS0lUX0FTU0VSVChpbmRleCA8IHRvdWNoUG9pbnRzLnNpemUoKSk7Ci0K
LSAgICBXZWJUb3VjaFBvaW50KiB0b3VjaFBvaW50ID0gJnRvdWNoUG9pbnRzW2luZGV4XTsKLSAg
ICB0b3VjaFBvaW50LT5zdGF0ZSA9IFdlYlRvdWNoUG9pbnQ6OlN0YXRlUmVsZWFzZWQ7Ci19Ci0K
LXZvaWQgRXZlbnRTZW5kZXI6OnNldFRvdWNoTW9kaWZpZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLQotICAgIGludCBtYXNrID0gMDsKLSAgICBjb25zdCBzdHJpbmcga2V5TmFtZSA9IGFyZ3Vt
ZW50c1swXS50b1N0cmluZygpOwotICAgIGlmIChrZXlOYW1lID09ICJzaGlmdCIpCi0gICAgICAg
IG1hc2sgPSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleTsKLSAgICBlbHNlIGlmIChrZXlOYW1lID09
ICJhbHQiKQotICAgICAgICBtYXNrID0gV2ViSW5wdXRFdmVudDo6QWx0S2V5OwotICAgIGVsc2Ug
aWYgKGtleU5hbWUgPT0gImN0cmwiKQotICAgICAgICBtYXNrID0gV2ViSW5wdXRFdmVudDo6Q29u
dHJvbEtleTsKLSAgICBlbHNlIGlmIChrZXlOYW1lID09ICJtZXRhIikKLSAgICAgICAgbWFzayA9
IFdlYklucHV0RXZlbnQ6Ok1ldGFLZXk7Ci0KLSAgICBpZiAoYXJndW1lbnRzWzFdLnRvQm9vbGVh
bigpKQotICAgICAgICB0b3VjaE1vZGlmaWVycyB8PSBtYXNrOwotICAgIGVsc2UKLSAgICAgICAg
dG91Y2hNb2RpZmllcnMgJj0gfm1hc2s7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnVwZGF0ZVRv
dWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGlu
ZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBXRUJLSVRfQVNTRVJUKGluZGV4IDwg
dG91Y2hQb2ludHMuc2l6ZSgpKTsKLQotICAgIFdlYlBvaW50IHBvc2l0aW9uKGFyZ3VtZW50c1sx
XS50b0ludDMyKCksIGFyZ3VtZW50c1syXS50b0ludDMyKCkpOwotICAgIFdlYlRvdWNoUG9pbnQq
IHRvdWNoUG9pbnQgPSAmdG91Y2hQb2ludHNbaW5kZXhdOwotICAgIHRvdWNoUG9pbnQtPnN0YXRl
ID0gV2ViVG91Y2hQb2ludDo6U3RhdGVNb3ZlZDsKLSAgICB0b3VjaFBvaW50LT5wb3NpdGlvbiA9
IHBvc2l0aW9uOwotICAgIHRvdWNoUG9pbnQtPnNjcmVlblBvc2l0aW9uID0gcG9zaXRpb247Ci19
Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmNhbmNlbFRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIo
KTsKLSAgICBXRUJLSVRfQVNTRVJUKGluZGV4IDwgdG91Y2hQb2ludHMuc2l6ZSgpKTsKLQotICAg
IFdlYlRvdWNoUG9pbnQqIHRvdWNoUG9pbnQgPSAmdG91Y2hQb2ludHNbaW5kZXhdOwotICAgIHRv
dWNoUG9pbnQtPnN0YXRlID0gV2ViVG91Y2hQb2ludDo6U3RhdGVDYW5jZWxsZWQ7Ci19Ci0KLXZv
aWQgRXZlbnRTZW5kZXI6OnNlbmRDdXJyZW50VG91Y2hFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50
OjpUeXBlIHR5cGUpCi17Ci0gICAgV0VCS0lUX0FTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
V2ViVG91Y2hFdmVudDo6dG91Y2hlc0xlbmd0aENhcCkgPiB0b3VjaFBvaW50cy5zaXplKCkpOwot
ICAgIHdlYnZpZXcoKS0+bGF5b3V0KCk7Ci0KLSAgICBXZWJUb3VjaEV2ZW50IHRvdWNoRXZlbnQ7
Ci0gICAgdG91Y2hFdmVudC50eXBlID0gdHlwZTsKLSAgICB0b3VjaEV2ZW50Lm1vZGlmaWVycyA9
IHRvdWNoTW9kaWZpZXJzOwotICAgIHRvdWNoRXZlbnQudGltZVN0YW1wU2Vjb25kcyA9IGdldEN1
cnJlbnRFdmVudFRpbWVTZWMobV9kZWxlZ2F0ZSk7Ci0gICAgdG91Y2hFdmVudC50b3VjaGVzTGVu
Z3RoID0gdG91Y2hQb2ludHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
b3VjaFBvaW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgdG91Y2hFdmVudC50b3VjaGVzW2ldID0g
dG91Y2hQb2ludHNbaV07Ci0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KHRvdWNoRXZl
bnQpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdWNoUG9pbnRzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIFdlYlRvdWNoUG9pbnQqIHRvdWNoUG9pbnQgPSAmdG91Y2hQb2ludHNb
aV07Ci0gICAgICAgIGlmICh0b3VjaFBvaW50LT5zdGF0ZSA9PSBXZWJUb3VjaFBvaW50OjpTdGF0
ZVJlbGVhc2VkKSB7Ci0gICAgICAgICAgICB0b3VjaFBvaW50cy5lcmFzZSh0b3VjaFBvaW50cy5i
ZWdpbigpICsgaSk7Ci0gICAgICAgICAgICAtLWk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdG91Y2hQb2ludC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0ZVN0YXRpb25hcnk7Ci0g
ICAgfQotfQotCi12b2lkIEV2ZW50U2VuZGVyOjptb3VzZURyYWdCZWdpbihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIFdlYk1vdXNl
V2hlZWxFdmVudCBldmVudDsKLSAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3Vz
ZVdoZWVsLCBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lLCBsYXN0TW91c2VQb3MsICZldmVudCwg
Z2V0Q3VycmVudEV2ZW50VGltZVNlYyhtX2RlbGVnYXRlKSk7Ci0gICAgZXZlbnQucGhhc2UgPSBX
ZWJNb3VzZVdoZWVsRXZlbnQ6OlBoYXNlQmVnYW47Ci0gICAgZXZlbnQuaGFzUHJlY2lzZVNjcm9s
bGluZ0RlbHRhcyA9IHRydWU7Ci0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50
KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6aGFuZGxlTW91c2VXaGVlbChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0LCBib29sIGNvbnRpbnVvdXMp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yY2UgYSBsYXlvdXQgaGVyZSBqdXN0IHRv
IG1ha2Ugc3VyZSBldmVyeSBwb3NpdGlvbiBoYXMgYmVlbgotICAgIC8vIGRldGVybWluZWQgYmVm
b3JlIHdlIHNlbmQgZXZlbnRzIChhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgbWV0aG9kcwotICAg
IC8vIHRoYXQgc2VuZCBhbiBldmVudCBkbykuCi0gICAgd2VidmlldygpLT5sYXlvdXQoKTsKLQot
ICAgIGludCBob3Jpem9udGFsID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBpbnQgdmVy
dGljYWwgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIGludCBwYWdlZCA9IGZhbHNlOwot
ICAgIGludCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzID0gZmFsc2U7Ci0KLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+IDIgJiYgYXJndW1lbnRzWzJdLmlzQm9vbCgpKQotICAgICAgICBwYWdl
ZCA9IGFyZ3VtZW50c1syXS50b0Jvb2xlYW4oKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMyAmJiBhcmd1bWVudHNbM10uaXNCb29sKCkpCi0gICAgICAgIGhhc1ByZWNpc2VTY3JvbGxp
bmdEZWx0YXMgPSBhcmd1bWVudHNbM10udG9Cb29sZWFuKCk7Ci0KLSAgICBXZWJNb3VzZVdoZWVs
RXZlbnQgZXZlbnQ7Ci0gICAgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VXaGVl
bCwgcHJlc3NlZEJ1dHRvbiwgbGFzdE1vdXNlUG9zLCAmZXZlbnQsIGdldEN1cnJlbnRFdmVudFRp
bWVTZWMobV9kZWxlZ2F0ZSkpOwotICAgIGV2ZW50LndoZWVsVGlja3NYID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGhvcml6b250YWwpOwotICAgIGV2ZW50LndoZWVsVGlja3NZID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZlcnRpY2FsKTsKLSAgICBldmVudC5kZWx0YVggPSBldmVudC53aGVlbFRpY2tzWDsK
LSAgICBldmVudC5kZWx0YVkgPSBldmVudC53aGVlbFRpY2tzWTsKLSAgICBldmVudC5zY3JvbGxC
eVBhZ2UgPSBwYWdlZDsKLSAgICBldmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzID0gaGFz
UHJlY2lzZVNjcm9sbGluZ0RlbHRhczsKLQotICAgIGlmIChjb250aW51b3VzKSB7Ci0gICAgICAg
IGV2ZW50LndoZWVsVGlja3NYIC89IHNjcm9sbGJhclBpeGVsc1BlclRpY2s7Ci0gICAgICAgIGV2
ZW50LndoZWVsVGlja3NZIC89IHNjcm9sbGJhclBpeGVsc1BlclRpY2s7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZXZlbnQuZGVsdGFYICo9IHNjcm9sbGJhclBpeGVsc1BlclRpY2s7Ci0gICAgICAg
IGV2ZW50LmRlbHRhWSAqPSBzY3JvbGxiYXJQaXhlbHNQZXJUaWNrOwotICAgIH0KLSAgICB3ZWJ2
aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0
b3VjaEVuZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgc2VuZEN1cnJlbnRUb3VjaEV2ZW50KFdlYklucHV0
RXZlbnQ6OlRvdWNoRW5kKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dG91Y2hNb3ZlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLSAgICBzZW5kQ3VycmVudFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hN
b3ZlKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dG91Y2hTdGFydChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgc2VuZEN1cnJlbnRUb3VjaEV2ZW50KFdlYklucHV0RXZlbnQ6OlRvdWNoU3RhcnQpOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjp0b3VjaENhbmNlbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgc2VuZEN1
cnJlbnRUb3VjaEV2ZW50KFdlYklucHV0RXZlbnQ6OlRvdWNoQ2FuY2VsKTsKLX0KLQotdm9pZCBF
dmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbEJlZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0g
ICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbiwgYXJndW1l
bnRzKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbEVuZChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Ny
b2xsRW5kLCBhcmd1bWVudHMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xs
VXBkYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGUsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXI6Omdlc3R1cmVTY3JvbGxVcGRhdGVXaXRob3V0UHJvcGFnYXRpb24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9s
bFVwZGF0ZVdpdGhvdXRQcm9wYWdhdGlvbiwgYXJndW1lbnRzKTsKLX0KLQotdm9pZCBFdmVudFNl
bmRlcjo6Z2VzdHVyZVRhcChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGdlc3R1cmVFdmVu
dChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwLCBhcmd1bWVudHMpOwotfQotCi12b2lkIEV2ZW50
U2VuZGVyOjpnZXN0dXJlVGFwRG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGdlc3R1
cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93biwgYXJndW1lbnRzKTsKLX0KLQot
dm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcENhbmNlbChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwQ2FuY2VsLCBhcmd1
bWVudHMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlTG9uZ1ByZXNzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVM
b25nUHJlc3MsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVMb25n
VGFwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVMb25nVGFwLCBhcmd1bWVudHMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpn
ZXN0dXJlVHdvRmluZ2VyVGFwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2
ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUd29GaW5nZXJUYXAsIGFyZ3VtZW50cyk7Ci19Ci0K
LXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxGaXJzdFBvaW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFdlYlBvaW50IHBvaW50KGFyZ3VtZW50c1swXS50b0ludDMyKCksIGFyZ3VtZW50c1sx
XS50b0ludDMyKCkpOwotICAgIG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbiA9IHBvaW50OwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6VHlwZSB0eXBl
LCBjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0u
aXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUG9pbnQgcG9pbnQoYXJndW1l
bnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvSW50MzIoKSk7Ci0KLSAgICBXZWJHZXN0
dXJlRXZlbnQgZXZlbnQ7Ci0gICAgZXZlbnQudHlwZSA9IHR5cGU7Ci0KLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGU6Ci0gICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlV2l0aG91dFByb3BhZ2F0aW9u
OgotICAgICAgICBldmVudC5kYXRhLnNjcm9sbFVwZGF0ZS5kZWx0YVggPSBzdGF0aWNfY2FzdDxm
bG9hdD4oYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOwotICAgICAgICBldmVudC5kYXRhLnNjcm9s
bFVwZGF0ZS5kZWx0YVkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzFdLnRvRG91Ymxl
KCkpOwotICAgICAgICBldmVudC54ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLng7Ci0gICAg
ICAgIGV2ZW50LnkgPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueTsKLSAgICAgICAgbV9jdXJy
ZW50R2VzdHVyZUxvY2F0aW9uLnggPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueCArIGV2ZW50
LmRhdGEuc2Nyb2xsVXBkYXRlLmRlbHRhWDsKLSAgICAgICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0
aW9uLnkgPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueSArIGV2ZW50LmRhdGEuc2Nyb2xsVXBk
YXRlLmRlbHRhWTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdl
c3R1cmVTY3JvbGxCZWdpbjoKLSAgICAgICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uID0gV2Vi
UG9pbnQocG9pbnQueCwgcG9pbnQueSk7Ci0gICAgICAgIGV2ZW50LnggPSBtX2N1cnJlbnRHZXN0
dXJlTG9jYXRpb24ueDsKLSAgICAgICAgZXZlbnQueSA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlv
bi55OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3Jv
bGxFbmQ6Ci0gICAgICAgIGV2ZW50LnggPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueDsKLSAg
ICAgICAgZXZlbnQueSA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi55OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXA6Ci0gICAgICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID49IDMpCi0gICAgICAgICAgICBldmVudC5kYXRhLnRhcC50YXBDb3VudCA9
IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICBldmVudC5kYXRhLnRhcC50YXBDb3VudCA9IDE7Ci0gICAgICAgIGV2ZW50
LnggPSBwb2ludC54OwotICAgICAgICBldmVudC55ID0gcG9pbnQueTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjoKLSAgICAgICAgZXZlbnQu
eCA9IHBvaW50Lng7Ci0gICAgICAgIGV2ZW50LnkgPSBwb2ludC55OwotICAgICAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA+PSA0KSB7Ci0gICAgICAgICAgICBldmVudC5kYXRhLnRhcERvd24ud2lk
dGggPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotICAgICAg
ICAgICAgZXZlbnQuZGF0YS50YXBEb3duLmhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1
bWVudHNbM10udG9Eb3VibGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwQ2FuY2VsOgotICAgICAgICBldmVudC54ID0gcG9p
bnQueDsKLSAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZUxvbmdQcmVzczoKLSAgICAgICAgZXZlbnQueCA9IHBv
aW50Lng7Ci0gICAgICAgIGV2ZW50LnkgPSBwb2ludC55OwotICAgICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+PSA0KSB7Ci0gICAgICAgICAgICBldmVudC5kYXRhLmxvbmdQcmVzcy53aWR0aCA9
IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7Ci0gICAgICAgICAg
ICBldmVudC5kYXRhLmxvbmdQcmVzcy5oZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1l
bnRzWzNdLnRvRG91YmxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2ViSW5wdXRFdmVudDo6R2VzdHVyZUxvbmdUYXA6Ci0gICAgICAgIGV2ZW50LnggPSBwb2ludC54
OwotICAgICAgICBldmVudC55ID0gcG9pbnQueTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPj0gNCkgewotICAgICAgICAgICAgZXZlbnQuZGF0YS5sb25nUHJlc3Mud2lkdGggPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotICAgICAgICAgICAgZXZl
bnQuZGF0YS5sb25nUHJlc3MuaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1sz
XS50b0RvdWJsZSgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYklu
cHV0RXZlbnQ6Okdlc3R1cmVUd29GaW5nZXJUYXA6Ci0gICAgICAgIGV2ZW50LnggPSBwb2ludC54
OwotICAgICAgICBldmVudC55ID0gcG9pbnQueTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPj0gNCkgewotICAgICAgICAgICAgZXZlbnQuZGF0YS50d29GaW5nZXJUYXAuZmlyc3RGaW5n
ZXJXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7Ci0g
ICAgICAgICAgICBldmVudC5kYXRhLnR3b0ZpbmdlclRhcC5maXJzdEZpbmdlckhlaWdodCA9IHN0
YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbM10udG9Eb3VibGUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLQotICAgIGV2ZW50Lmdsb2JhbFggPSBldmVudC54OwotICAgIGV2ZW50
Lmdsb2JhbFkgPSBldmVudC55OwotICAgIGV2ZW50LnRpbWVTdGFtcFNlY29uZHMgPSBnZXRDdXJy
ZW50RXZlbnRUaW1lU2VjKG1fZGVsZWdhdGUpOwotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRF
dmVudChldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVGbGluZ0NhbmNlbChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmICghYXJndW1lbnRzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgV2ViR2VzdHVyZUV2ZW50IGV2ZW50OwotICAgIGV2ZW50LnR5cGUg
PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdDYW5jZWw7Ci0gICAgZXZlbnQudGltZVN0YW1w
U2Vjb25kcyA9IGdldEN1cnJlbnRFdmVudFRpbWVTZWMobV9kZWxlZ2F0ZSk7Ci0gICAgd2Vidmll
dygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Z2Vz
dHVyZUZsaW5nU3RhcnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgaSsrKQotICAgICAgICBpZiAoIWFyZ3VtZW50c1tpXS5pc051bWJlcigpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgV2ViR2VzdHVyZUV2ZW50IGV2ZW50OwotICAgIGV2ZW50LnR5cGUg
PSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDsKLQotICAgIGV2ZW50LnggPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzBdLnRvRG91YmxlKCkpOwotICAgIGV2ZW50LnkgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzFdLnRvRG91YmxlKCkpOwotICAgIGV2ZW50Lmds
b2JhbFggPSBldmVudC54OwotICAgIGV2ZW50Lmdsb2JhbFkgPSBldmVudC55OwotCi0gICAgZXZl
bnQuZGF0YS5mbGluZ1N0YXJ0LnZlbG9jaXR5WCA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVu
dHNbMl0udG9Eb3VibGUoKSk7Ci0gICAgZXZlbnQuZGF0YS5mbGluZ1N0YXJ0LnZlbG9jaXR5WSA9
IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbM10udG9Eb3VibGUoKSk7Ci0gICAgZXZlbnQu
dGltZVN0YW1wU2Vjb25kcyA9IGdldEN1cnJlbnRFdmVudFRpbWVTZWMobV9kZWxlZ2F0ZSk7Ci0g
ICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLX0KLQotLy8KLS8vIFVuaW1w
bGVtZW50ZWQgc3R1YnMKLS8vCi0KLXZvaWQgRXZlbnRTZW5kZXI6OmVuYWJsZURPTVVJRXZlbnRM
b2dnaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6ZmlyZUtleWJvYXJk
RXZlbnRzVG9FbGVtZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Y2xl
YXJLaWxsUmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIu
aAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LS8qCi0gIEV2ZW50U2VuZGVyIGNsYXNzOgotICBCb3VuZCB0byBhIEphdmFTY3JpcHQgd2luZG93
LmV2ZW50U2VuZGVyIG9iamVjdCB1c2luZwotICBDcHBCb3VuZENsYXNzOjpiaW5kVG9KYXZhc2Ny
aXB0KCksIHRoaXMgYWxsb3dzIGxheW91dCB0ZXN0cyB0byBmaXJlIERPTSBldmVudHMuCi0qLwot
Ci0jaWZuZGVmIEV2ZW50U2VuZGVyX2gKLSNkZWZpbmUgRXZlbnRTZW5kZXJfaAotCi0jaW5jbHVk
ZSAiQ3BwQm91bmRDbGFzcy5oIgotI2luY2x1ZGUgIldlYkRyYWdPcGVyYXRpb24uaCIKLSNpbmNs
dWRlICJXZWJJbnB1dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPG1l
bW9yeT4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUG9pbnQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci1jbGFzcyBXZWJEcmFnRGF0YTsKLWNsYXNzIFdlYlZpZXc7Ci1zdHJ1Y3QgV2ViQ29udGV4dE1l
bnVEYXRhOwotfQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3RE
ZWxlZ2F0ZTsKLQotY2xhc3MgRXZlbnRTZW5kZXIgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7Ci1w
dWJsaWM6Ci0gICAgRXZlbnRTZW5kZXIoKTsKLSAgICB+RXZlbnRTZW5kZXIoKTsKLQotICAgIHZv
aWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkgeyBtX2RlbGVnYXRlID0g
ZGVsZWdhdGU7IH0KLSAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3
KSB7IG1fd2ViVmlldyA9IHdlYlZpZXc7IH0KLQotICAgIHZvaWQgc2V0Q29udGV4dE1lbnVEYXRh
KGNvbnN0IFdlYktpdDo6V2ViQ29udGV4dE1lbnVEYXRhJik7Ci0KLSAgICAvLyBSZXNldHMgc29t
ZSBzdGF0aWMgdmFyaWFibGUgc3RhdGUuCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgLy8gU2lt
dWxhdGUgZHJhZyZkcm9wIHN5c3RlbSBjYWxsLgotICAgIHZvaWQgZG9EcmFnRHJvcChjb25zdCBX
ZWJLaXQ6OldlYkRyYWdEYXRhJiwgV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uc01hc2spOwotCi0g
ICAgLy8gVGVzdCBoZWxwZXIgZm9yIGRyYWdnaW5nIG91dCBpbWFnZXMuCi0gICAgdm9pZCBkdW1w
RmlsZW5hbWVCZWluZ0RyYWdnZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotCi0gICAgLy8gSlMgY2FsbGJhY2sgbWV0aG9kcy4KLSAgICB2b2lkIGNvbnRleHRDbGljayhj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBtb3VzZURvd24o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbW91c2VVcChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBtb3VzZU1vdmVU
byhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBsZWFwRm9y
d2FyZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBrZXlE
b3duKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRpc3Bh
dGNoTWVzc2FnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8g
RklYTUU6IFRoZXNlIGFyZW4ndCByZWFsbHkgZXZlbnRzLiBUaGV5IHNob3VsZCBiZSBtb3ZlZCB0
byBsYXlvdXQgY29udHJvbGxlci4KLSAgICB2b2lkIHRleHRab29tSW4oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdGV4dFpvb21PdXQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgem9vbVBhZ2VJbihjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB6b29tUGFnZU91dChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY2FsZVBhZ2VCeShjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIG1vdXNlRHJhZ0Jl
Z2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG1vdXNl
U2Nyb2xsQnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
Y29udGludW91c01vdXNlU2Nyb2xsQnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgc2NoZWR1bGVBc3luY2hyb25vdXNDbGljayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURv
d24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYmVnaW5E
cmFnV2l0aEZpbGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICBD
cHBWYXJpYW50IGRyYWdNb2RlOwotCi0gICAgdm9pZCBhZGRUb3VjaFBvaW50KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNhbmNlbFRvdWNoUG9pbnQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2xlYXJUb3VjaFBv
aW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByZWxl
YXNlVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHRvdWNoQ2FuY2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHRvdWNoRW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHRvdWNoTW92ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCB0b3VjaFN0YXJ0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIHVwZGF0ZVRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBnZXN0dXJlRmxpbmdDYW5jZWwoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZUZsaW5nU3RhcnQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZVNj
cm9sbEJlZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IGdlc3R1cmVTY3JvbGxFbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgZ2VzdHVyZVNjcm9sbEZpcnN0UG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZVNjcm9sbFVwZGF0ZShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlU2Nyb2xsVXBkYXRlV2l0
aG91dFByb3BhZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGdlc3R1cmVUYXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgZ2VzdHVyZVRhcERvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgZ2VzdHVyZVRhcENhbmNlbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlTG9uZ1ByZXNzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGdlc3R1cmVMb25nVGFwKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGdlc3R1cmVUd29GaW5nZXJUYXAo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZUV2
ZW50KFdlYktpdDo6V2ViSW5wdXRFdmVudDo6VHlwZSwgY29uc3QgQ3BwQXJndW1lbnRMaXN0Jik7
Ci0KLSAgICAvLyBVbmltcGxlbWVudGVkIHN0dWJzCi0gICAgdm9pZCBlbmFibGVET01VSUV2ZW50
TG9nZ2luZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBm
aXJlS2V5Ym9hcmRFdmVudHNUb0VsZW1lbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgY2xlYXJLaWxsUmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBQcm9wZXJ0aWVzIHVzZWQgaW4gbGF5b3V0IHRlc3RzLgot
I2lmIGRlZmluZWQoT1NfV0lOKQotICAgIENwcFZhcmlhbnQgd21LZXlEb3duOwotICAgIENwcFZh
cmlhbnQgd21LZXlVcDsKLSAgICBDcHBWYXJpYW50IHdtQ2hhcjsKLSAgICBDcHBWYXJpYW50IHdt
RGVhZENoYXI7Ci0gICAgQ3BwVmFyaWFudCB3bVN5c0tleURvd247Ci0gICAgQ3BwVmFyaWFudCB3
bVN5c0tleVVwOwotICAgIENwcFZhcmlhbnQgd21TeXNDaGFyOwotICAgIENwcFZhcmlhbnQgd21T
eXNEZWFkQ2hhcjsKLSNlbmRpZgotCi0gICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1
cm4gJm1fdGFza0xpc3Q7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYnZp
ZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7IH0KLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBkcmFn
TW9kZSBpcyB0cnVlLgotICAgIGJvb2wgaXNEcmFnTW9kZSgpIHsgcmV0dXJuIGRyYWdNb2RlLmlz
Qm9vbCgpICYmIGRyYWdNb2RlLnRvQm9vbGVhbigpOyB9Ci0KLSAgICAvLyBTb21ldGltZXMgd2Ug
cXVldWUgdXAgbW91c2UgbW92ZSBhbmQgbW91c2UgdXAgZXZlbnRzIGZvciBkcmFnIGRyb3AKLSAg
ICAvLyBoYW5kbGluZyBwdXJwb3Nlcy4gVGhlc2UgbWV0aG9kcyBkaXNwYXRjaCB0aGUgZXZlbnQu
Ci0gICAgdm9pZCBkb01vdXNlTW92ZShjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmKTsKLSAg
ICB2b2lkIGRvTW91c2VVcChjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmKTsKLSAgICBzdGF0
aWMgdm9pZCBkb0xlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpOwotICAgIHZvaWQgcmVwbGF5
U2F2ZWRFdmVudHMoKTsKLQotICAgIC8vIEhlbHBlciB0byByZXR1cm4gdGhlIGJ1dHRvbiB0eXBl
IGdpdmVuIGEgYnV0dG9uIGNvZGUKLSAgICBzdGF0aWMgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpC
dXR0b24gZ2V0QnV0dG9uVHlwZUZyb21CdXR0b25OdW1iZXIoaW50KTsKLQotICAgIC8vIEhlbHBl
ciB0byBleHRyYWN0IHRoZSBidXR0b24gbnVtYmVyIGZyb20gdGhlIG9wdGlvbmFsIGFyZ3VtZW50
IGluCi0gICAgLy8gbW91c2VEb3duIGFuZCBtb3VzZVVwCi0gICAgc3RhdGljIGludCBnZXRCdXR0
b25OdW1iZXJGcm9tU2luZ2xlQXJnKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYpOwotCi0gICAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQga2V5IGNvZGUgcGFzc2VkIGluIG5lZWRzIGEg
c2hpZnQga2V5Ci0gICAgLy8gbW9kaWZpZXIgdG8gYmUgcGFzc2VkIGludG8gdGhlIGdlbmVyYXRl
ZCBldmVudC4KLSAgICBib29sIG5lZWRzU2hpZnRNb2RpZmllcihpbnQpOwotCi0gICAgdm9pZCBm
aW5pc2hEcmFnQW5kRHJvcChjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmLCBXZWJLaXQ6Oldl
YkRyYWdPcGVyYXRpb24pOwotICAgIHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihXZWJL
aXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbik7Ci0KLSAgICAvLyBDb21wb3NlIGEgdG91Y2ggZXZl
bnQgZnJvbSB0aGUgY3VycmVudCB0b3VjaCBwb2ludHMgYW5kIHNlbmQgaXQuCi0gICAgdm9pZCBz
ZW5kQ3VycmVudFRvdWNoRXZlbnQoY29uc3QgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpUeXBlKTsK
LQotICAgIC8vIEhhbmRsZSBhIHJlcXVlc3QgdG8gc2VuZCBhIHdoZWVsIGV2ZW50LgotICAgIHZv
aWQgaGFuZGxlTW91c2VXaGVlbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kiwg
Ym9vbCBjb250aW51b3VzKTsKLQotICAgIFdlYlRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0KLSAgICBX
ZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0gICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZp
ZXc7Ci0KLSAgICBzdGQ6OmF1dG9fcHRyPFdlYktpdDo6V2ViQ29udGV4dE1lbnVEYXRhPiBtX2xh
c3RDb250ZXh0TWVudURhdGE7Ci0KLSAgICAvLyBMb2NhdGlvbiBvZiB0aGUgdG91Y2ggcG9pbnQg
dGhhdCBpbml0aWF0ZWQgYSBnZXN0dXJlLgotICAgIFdlYktpdDo6V2ViUG9pbnQgbV9jdXJyZW50
R2VzdHVyZUxvY2F0aW9uOwotCi0gICAgLy8gTG9jYXRpb24gb2YgbGFzdCBtb3VzZU1vdmVUbyBl
dmVudC4KLSAgICBzdGF0aWMgV2ViS2l0OjpXZWJQb2ludCBsYXN0TW91c2VQb3M7Ci0KLSAgICAv
LyBDdXJyZW50bHkgcHJlc3NlZCBtb3VzZSBidXR0b24gKExlZnQvUmlnaHQvTWlkZGxlIG9yIE5v
bmUpCi0gICAgc3RhdGljIFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0dG9uIHByZXNzZWRCdXR0
b247Ci0KLSAgICAvLyBUaGUgbGFzdCBidXR0b24gbnVtYmVyIHBhc3NlZCB0byBtb3VzZURvd24g
YW5kIG1vdXNlVXAuCi0gICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2xpY2sg
Y291bnQgY29udGludWVzIHRvCi0gICAgLy8gaW5jcmVtZW50IG9yIG5vdC4KLSAgICBzdGF0aWMg
V2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b24gbGFzdEJ1dHRvblR5cGU7Ci19OwotCi19Ci0K
LSNlbmRpZiAvLyBFdmVudFNlbmRlcl9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZENv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1HYW1lcGFkQ29udHJv
bGxlcjo6R2FtZXBhZENvbnRyb2xsZXIoKQotewotICAgIGJpbmRNZXRob2QoImNvbm5lY3QiLCAm
R2FtZXBhZENvbnRyb2xsZXI6OmNvbm5lY3QpOwotICAgIGJpbmRNZXRob2QoImRpc2Nvbm5lY3Qi
LCAmR2FtZXBhZENvbnRyb2xsZXI6OmRpc2Nvbm5lY3QpOwotICAgIGJpbmRNZXRob2QoInNldElk
IiwgJkdhbWVwYWRDb250cm9sbGVyOjpzZXRJZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QnV0dG9u
Q291bnQiLCAmR2FtZXBhZENvbnRyb2xsZXI6OnNldEJ1dHRvbkNvdW50KTsKLSAgICBiaW5kTWV0
aG9kKCJzZXRCdXR0b25EYXRhIiwgJkdhbWVwYWRDb250cm9sbGVyOjpzZXRCdXR0b25EYXRhKTsK
LSAgICBiaW5kTWV0aG9kKCJzZXRBeGlzQ291bnQiLCAmR2FtZXBhZENvbnRyb2xsZXI6OnNldEF4
aXNDb3VudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXhpc0RhdGEiLCAmR2FtZXBhZENvbnRyb2xs
ZXI6OnNldEF4aXNEYXRhKTsKLQotICAgIGJpbmRGYWxsYmFja01ldGhvZCgmR2FtZXBhZENvbnRy
b2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2spOwotCi0gICAgcmVzZXQoKTsKLX0KLQotdm9pZCBHYW1l
cGFkQ29udHJvbGxlcjo6YmluZFRvSmF2YXNjcmlwdChXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdl
YlN0cmluZyYgY2xhc3NuYW1lKQotewotICAgIENwcEJvdW5kQ2xhc3M6OmJpbmRUb0phdmFzY3Jp
cHQoZnJhbWUsIGNsYXNzbmFtZSk7Ci19Ci0KLXZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldERl
bGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgbV9kZWxlZ2F0ZSA9IGRl
bGVnYXRlOwotfQotCi12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpyZXNldCgpCi17Ci0gICAgbWVt
c2V0KCZtX2dhbWVwYWRzLCAwLCBzaXplb2YobV9nYW1lcGFkcykpOwotfQotCi12b2lkIEdhbWVw
YWRDb250cm9sbGVyOjpjb25uZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDEpIHsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJJbnZhbGlkIGFyZ3MiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAgICBpZiAoaW5kZXgg
PCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkczo6aXRl
bXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRl
eF0uY29ubmVjdGVkID0gdHJ1ZTsKLSAgICBtX2dhbWVwYWRzLmxlbmd0aCA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2Fw
OyArK2kpCi0gICAgICAgIGlmIChtX2dhbWVwYWRzLml0ZW1zW2ldLmNvbm5lY3RlZCkKLSAgICAg
ICAgICAgIG1fZ2FtZXBhZHMubGVuZ3RoID0gaSArIDE7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2Ft
ZXBhZERhdGEobV9nYW1lcGFkcyk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
R2FtZXBhZENvbnRyb2xsZXI6OmRpc2Nvbm5lY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkgewotICAg
ICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkludmFsaWQgYXJncyIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9IGFyZ3NbMF0udG9JbnQzMigpOwotICAgIGlm
IChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVw
YWRzOjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2dhbWVwYWRzLml0
ZW1zW2luZGV4XS5jb25uZWN0ZWQgPSBmYWxzZTsKLSAgICBtX2dhbWVwYWRzLmxlbmd0aCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1z
TGVuZ3RoQ2FwOyArK2kpCi0gICAgICAgIGlmIChtX2dhbWVwYWRzLml0ZW1zW2ldLmNvbm5lY3Rl
ZCkKLSAgICAgICAgICAgIG1fZ2FtZXBhZHMubGVuZ3RoID0gaSArIDE7Ci0gICAgbV9kZWxlZ2F0
ZS0+c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpIHsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJJbnZhbGlkIGFyZ3MiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAg
ICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJH
YW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgc3RkOjpzdHJp
bmcgc3JjID0gYXJnc1sxXS50b1N0cmluZygpOwotICAgIGNvbnN0IGNoYXIqIHAgPSBzcmMuY19z
dHIoKTsKLSAgICBtZW1zZXQobV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uaWQsIDAsIHNpemVvZiht
X2dhbWVwYWRzLml0ZW1zW2luZGV4XS5pZCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICpw
ICYmIGkgPCBXZWJLaXQ6OldlYkdhbWVwYWQ6OmlkTGVuZ3RoQ2FwIC0gMTsgKytpKQotICAgICAg
ICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5pZFtpXSA9ICpwKys7Ci0gICAgbV9kZWxlZ2F0ZS0+
c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldEJ1dHRvbkNvdW50KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDIpIHsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJJbnZhbGlkIGFyZ3MiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50MzIo
KTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0
OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaW50
IGJ1dHRvbnMgPSBhcmdzWzFdLnRvSW50MzIoKTsKLSAgICBpZiAoYnV0dG9ucyA8IDAgfHwgYnV0
dG9ucyA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZDo6YnV0dG9uc0xlbmd0
aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5idXR0
b25zTGVuZ3RoID0gYnV0dG9uczsKLSAgICBtX2RlbGVnYXRlLT5zZXRHYW1lcGFkRGF0YShtX2dh
bWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJv
bGxlcjo6c2V0QnV0dG9uRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzKSB7Ci0gICAgICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZSgiSW52YWxpZCBhcmdzIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMyKCk7Ci0gICAgaWYgKGluZGV4IDwg
MCB8fCBpbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1z
TGVuZ3RoQ2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGludCBidXR0b24gPSBhcmdzWzFdLnRv
SW50MzIoKTsKLSAgICBpZiAoYnV0dG9uIDwgMCB8fCBidXR0b24gPj0gc3RhdGljX2Nhc3Q8aW50
PihXZWJLaXQ6OldlYkdhbWVwYWQ6OmJ1dHRvbnNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47
Ci0gICAgZG91YmxlIGRhdGEgPSBhcmdzWzJdLnRvRG91YmxlKCk7Ci0gICAgbV9nYW1lcGFkcy5p
dGVtc1tpbmRleF0uYnV0dG9uc1tidXR0b25dID0gZGF0YTsKLSAgICBtX2RlbGVnYXRlLT5zZXRH
YW1lcGFkRGF0YShtX2dhbWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBHYW1lcGFkQ29udHJvbGxlcjo6c2V0QXhpc0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpIHsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJJbnZhbGlkIGFyZ3MiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAg
ICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJH
YW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaW50IGF4ZXMg
PSBhcmdzWzFdLnRvSW50MzIoKTsKLSAgICBpZiAoYXhlcyA8IDAgfHwgYXhlcyA+PSBzdGF0aWNf
Y2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZDo6YXhlc0xlbmd0aENhcCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5heGVzTGVuZ3RoID0gYXhlczsKLSAg
ICBtX2RlbGVnYXRlLT5zZXRHYW1lcGFkRGF0YShtX2dhbWVwYWRzKTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6c2V0QXhpc0RhdGEoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMykgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkludmFs
aWQgYXJncyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9IGFyZ3Nb
MF0udG9JbnQzMigpOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8
aW50PihXZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpbnQgYXhpcyA9IGFyZ3NbMV0udG9JbnQzMigpOwotICAgIGlmIChheGlzIDwgMCB8
fCBheGlzID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkOjpheGVzTGVuZ3Ro
Q2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSBkYXRhID0gYXJnc1syXS50b0RvdWJs
ZSgpOwotICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmF4ZXNbYXhpc10gPSBkYXRhOwotICAg
IG1fZGVsZWdhdGUtPnNldEdhbWVwYWREYXRhKG1fZ2FtZXBhZHMpOwotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2RlbGVn
YXRlLT5wcmludE1lc3NhZ2UoIkNPTlNPTEUgTUVTU0FHRTogSmF2YVNjcmlwdCBFUlJPUjogdW5r
bm93biBtZXRob2QgY2FsbGVkIG9uIEdhbWVwYWRDb250cm9sbGVyXG4iKTsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5o
CShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEdhbWVwYWRDb250cm9sbGVyX2gKLSNkZWZpbmUgR2FtZXBhZENvbnRyb2xs
ZXJfaAotCi0jaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJH
YW1lcGFkcy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkdhbWVwYWRzOwotY2xh
c3MgV2ViRnJhbWU7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2Vi
VGVzdERlbGVnYXRlOwotCi1jbGFzcyBHYW1lcGFkQ29udHJvbGxlciA6IHB1YmxpYyBDcHBCb3Vu
ZENsYXNzIHsKLXB1YmxpYzoKLSAgICBHYW1lcGFkQ29udHJvbGxlcigpOwotCi0gICAgdm9pZCBi
aW5kVG9KYXZhc2NyaXB0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgY2xhc3NuYW1lKTsKLSAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0ZSopOwot
ICAgIHZvaWQgcmVzZXQoKTsKLQotcHJpdmF0ZToKLSAgICAvLyBCb3VuZCBtZXRob2RzIGFuZCBw
cm9wZXJ0aWVzCi0gICAgdm9pZCBjb25uZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgc2V0SWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgc2V0QnV0dG9uQ291bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0QnV0dG9uRGF0YShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRBeGlzQ291bnQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0QXhpc0RhdGEoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZmFsbGJhY2tDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICBXZWJLaXQ6OldlYkdhbWVw
YWRzIG1fZ2FtZXBhZHM7Ci0KLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBHYW1lcGFkQ29udHJvbGxlcl9oCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvS2V5
Q29kZU1hcHBpbmcuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2RlTWFwcGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5Q29k
ZU1hcHBpbmcuaCIKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1pbnQgTmF0aXZlS2V5
Q29kZUZvcldpbmRvd3NLZXlDb2RlKGludCBrZXlzeW0pCi17Ci0jaWYgZGVmaW5lZChfX2xpbnV4
X18pICYmIFVTRShHVEspCi0gICAgLy8gU2VlIC91c3Ivc2hhcmUvWDExL3hrYi9rZXljb2Rlcy8q
Ci0gICAgc3RhdGljIGNvbnN0IGludCBhc2NpaVRvS2V5Q29kZVtdID0gewotICAgICAgICAwLAot
ICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICAw
LAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICAyMiwKLSAgICAgICAgMjMsCi0gICAg
ICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIDM2LAotICAgICAgICAwLAot
ICAgICAgICAwLAotICAgICAgICA1MCwKLSAgICAgICAgMzcsCi0gICAgICAgIDY0LAotICAgICAg
ICAxMjcsCi0gICAgICAgIDY2LAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICAwLAot
ICAgICAgICAwLAotICAgICAgICAxMzEsCi0gICAgICAgIDAsCi0gICAgICAgIDksCi0gICAgICAg
IDEwMCwKLSAgICAgICAgMTAyLAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICA2NSwg
Ly8gJyAnCi0gICAgICAgIDExMiwgLy8gJyEnCi0gICAgICAgIDExNywgLy8gJyInCi0gICAgICAg
IDExNSwgLy8gJyMnCi0gICAgICAgIDExMCwgLy8gJyQnCi0gICAgICAgIDExMywgLy8gJyUnCi0g
ICAgICAgIDExMSwgLy8gJyYnCi0gICAgICAgIDExNCwgLy8gJycnCi0gICAgICAgIDExNiwgLy8g
JygnCi0gICAgICAgIDAsIC8vICcpJwotICAgICAgICAxMDcsIC8vICcqJwotICAgICAgICAwLCAv
LyAnKycKLSAgICAgICAgMCwgLy8gJywnCi0gICAgICAgIDExOCwgLy8gJy0nCi0gICAgICAgIDEx
OSwgLy8gJy4nCi0gICAgICAgIDE0NiwgLy8gJy8nCi0gICAgICAgIDE5LCAvLyAnMCcKLSAgICAg
ICAgMTAsIC8vICcxJwotICAgICAgICAxMSwgLy8gJzInCi0gICAgICAgIDEyLCAvLyAnMycKLSAg
ICAgICAgMTMsIC8vICc0JwotICAgICAgICAxNCwgLy8gJzUnCi0gICAgICAgIDE1LCAvLyAnNicK
LSAgICAgICAgMTYsIC8vICc3JwotICAgICAgICAxNywgLy8gJzgnCi0gICAgICAgIDE4LCAvLyAn
OScKLSAgICAgICAgMCwgLy8gJzonCi0gICAgICAgIDAsIC8vICc7JwotICAgICAgICAwLCAvLyAn
PCcKLSAgICAgICAgMCwgLy8gJz0nCi0gICAgICAgIDAsIC8vICc+JwotICAgICAgICAwLCAvLyAn
PycKLSAgICAgICAgMCwgLy8gJ0AnCi0gICAgICAgIDM4LCAvLyAnQScKLSAgICAgICAgNTYsIC8v
ICdCJwotICAgICAgICA1NCwgLy8gJ0MnCi0gICAgICAgIDQwLCAvLyAnRCcKLSAgICAgICAgMjYs
IC8vICdFJwotICAgICAgICA0MSwgLy8gJ0YnCi0gICAgICAgIDQyLCAvLyAnRycKLSAgICAgICAg
NDMsIC8vICdIJwotICAgICAgICAzMSwgLy8gJ0knCi0gICAgICAgIDQ0LCAvLyAnSicKLSAgICAg
ICAgNDUsIC8vICdLJwotICAgICAgICA0NiwgLy8gJ0wnCi0gICAgICAgIDU4LCAvLyAnTScKLSAg
ICAgICAgNTcsIC8vICdOJwotICAgICAgICAzMiwgLy8gJ08nCi0gICAgICAgIDMzLCAvLyAnUCcK
LSAgICAgICAgMjQsIC8vICdRJwotICAgICAgICAyNywgLy8gJ1InCi0gICAgICAgIDM5LCAvLyAn
UycKLSAgICAgICAgMjgsIC8vICdUJwotICAgICAgICAzMCwgLy8gJ1UnCi0gICAgICAgIDU1LCAv
LyAnVicKLSAgICAgICAgMjUsIC8vICdXJwotICAgICAgICA1MywgLy8gJ1gnCi0gICAgICAgIDI5
LCAvLyAnWScKLSAgICAgICAgNTIsIC8vICdaJwotICAgICAgICAxMzMsIC8vICdbJwotICAgICAg
ICAxMzQsIC8vICdcJwotICAgICAgICAxMzUsIC8vICddJwotICAgICAgICAwLCAvLyAnXicKLSAg
ICAgICAgMCwgLy8gJ18nCi0gICAgICAgIDkwLCAvLyAnYCcKLSAgICAgICAgMzgsIC8vICdhJwot
ICAgICAgICA1NiwgLy8gJ2InCi0gICAgICAgIDU0LCAvLyAnYycKLSAgICAgICAgNDAsIC8vICdk
JwotICAgICAgICAyNiwgLy8gJ2UnCi0gICAgICAgIDQxLCAvLyAnZicKLSAgICAgICAgNDIsIC8v
ICdnJwotICAgICAgICA0MywgLy8gJ2gnCi0gICAgICAgIDMxLCAvLyAnaScKLSAgICAgICAgNDQs
IC8vICdqJwotICAgICAgICA0NSwgLy8gJ2snCi0gICAgICAgIDQ2LCAvLyAnbCcKLSAgICAgICAg
NTgsIC8vICdtJwotICAgICAgICA1NywgLy8gJ24nCi0gICAgICAgIDMyLCAvLyAnbycKLSAgICAg
ICAgMzMsIC8vICdwJwotICAgICAgICAyNCwgLy8gJ3EnCi0gICAgICAgIDI3LCAvLyAncicKLSAg
ICAgICAgMzksIC8vICdzJwotICAgICAgICAyOCwgLy8gJ3QnCi0gICAgICAgIDMwLCAvLyAndScK
LSAgICAgICAgNTUsIC8vICd2JwotICAgICAgICAyNSwgLy8gJ3cnCi0gICAgICAgIDUzLCAvLyAn
eCcKLSAgICAgICAgMjksIC8vICd5JwotICAgICAgICA1MiwgLy8gJ3onCi0gICAgICAgIDk2LCAv
LyAneycKLSAgICAgICAgMCwgLy8gJ3wnCi0gICAgICAgIDAsIC8vICd9JwotICAgICAgICAwLCAv
LyAnficKLSAgICAgICAgMCwgLy8gREVMCi0gICAgfTsKLQotICAgIGlmIChrZXlzeW0gPD0gMTI3
KQotICAgICAgICByZXR1cm4gYXNjaWlUb0tleUNvZGVba2V5c3ltXTsKLQotICAgIHN3aXRjaCAo
a2V5c3ltKSB7Ci0gICAgY2FzZSBWS0VZX1BSSU9SOgotICAgICAgICByZXR1cm4gMTEyOwotICAg
IGNhc2UgVktFWV9ORVhUOgotICAgICAgICByZXR1cm4gMTE3OwotICAgIGNhc2UgVktFWV9FTkQ6
Ci0gICAgICAgIHJldHVybiAxMTU7Ci0gICAgY2FzZSBWS0VZX0hPTUU6Ci0gICAgICAgIHJldHVy
biAxMTA7Ci0gICAgY2FzZSBWS0VZX0xFRlQ6Ci0gICAgICAgIHJldHVybiAxMTM7Ci0gICAgY2Fz
ZSBWS0VZX1VQOgotICAgICAgICByZXR1cm4gMTExOwotICAgIGNhc2UgVktFWV9SSUdIVDoKLSAg
ICAgICAgcmV0dXJuIDExNDsKLSAgICBjYXNlIFZLRVlfRE9XTjoKLSAgICAgICAgcmV0dXJuIDEx
NjsKLSAgICBjYXNlIFZLRVlfU05BUFNIT1Q6Ci0gICAgICAgIHJldHVybiAxMDc7Ci0gICAgY2Fz
ZSBWS0VZX0lOU0VSVDoKLSAgICAgICAgcmV0dXJuIDExODsKLSAgICBjYXNlIFZLRVlfREVMRVRF
OgotICAgICAgICByZXR1cm4gMTE5OwotICAgIGNhc2UgVktFWV9BUFBTOgotICAgICAgICByZXR1
cm4gMTM1OwotICAgIGNhc2UgVktFWV9GMToKLSAgICBjYXNlIFZLRVlfRjEgKyAxOgotICAgIGNh
c2UgVktFWV9GMSArIDI6Ci0gICAgY2FzZSBWS0VZX0YxICsgMzoKLSAgICBjYXNlIFZLRVlfRjEg
KyA0OgotICAgIGNhc2UgVktFWV9GMSArIDU6Ci0gICAgY2FzZSBWS0VZX0YxICsgNjoKLSAgICBj
YXNlIFZLRVlfRjEgKyA3OgotICAgIGNhc2UgVktFWV9GMSArIDg6Ci0gICAgY2FzZSBWS0VZX0Yx
ICsgOToKLSAgICBjYXNlIFZLRVlfRjEgKyAxMDoKLSAgICBjYXNlIFZLRVlfRjEgKyAxMToKLSAg
ICBjYXNlIFZLRVlfRjEgKyAxMjoKLSAgICBjYXNlIFZLRVlfRjEgKyAxMzoKLSAgICBjYXNlIFZL
RVlfRjEgKyAxNDoKLSAgICBjYXNlIFZLRVlfRjEgKyAxNToKLSAgICBjYXNlIFZLRVlfRjEgKyAx
NjoKLSAgICBjYXNlIFZLRVlfRjEgKyAxNzoKLSAgICBjYXNlIFZLRVlfRjEgKyAxODoKLSAgICBj
YXNlIFZLRVlfRjEgKyAxOToKLSAgICBjYXNlIFZLRVlfRjEgKyAyMDoKLSAgICBjYXNlIFZLRVlf
RjEgKyAyMToKLSAgICBjYXNlIFZLRVlfRjEgKyAyMjoKLSAgICBjYXNlIFZLRVlfRjEgKyAyMzoK
LSAgICAgICAgcmV0dXJuIDY3ICsgKGtleXN5bSAtIFZLRVlfRjEpOwotICAgIGNhc2UgVktFWV9M
U0hJRlQ6Ci0gICAgICAgIHJldHVybiA1MDsKLSAgICBjYXNlIFZLRVlfUlNISUZUOgotICAgICAg
ICByZXR1cm4gNjI7Ci0gICAgY2FzZSBWS0VZX0xDT05UUk9MOgotICAgICAgICByZXR1cm4gMzc7
Ci0gICAgY2FzZSBWS0VZX1JDT05UUk9MOgotICAgICAgICByZXR1cm4gMTA1OwotICAgIGNhc2Ug
VktFWV9MTUVOVToKLSAgICAgICAgcmV0dXJuIDY0OwotICAgIGNhc2UgVktFWV9STUVOVToKLSAg
ICAgICAgcmV0dXJuIDEwODsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSNlbHNlCi0gICAgcmV0dXJuIGtleXN5bSAtIGtleXN5bTsKLSNlbmRpZgotfQotCi19Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9LZXlDb2Rl
TWFwcGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL0tleUNvZGVNYXBwaW5nLmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0tleUNvZGVNYXBwaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgS2V5Q29kZU1hcHBpbmdfaAot
I2RlZmluZSBLZXlDb2RlTWFwcGluZ19oCi0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQot
Ly8gVGhlIGtleWNvZGVzIG1hdGNoIHRoZSB2YWx1ZXMgb2YgdGhlIHZpcnR1YWwga2V5Y29kZXMg
Zm91bmQgaGVyZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93
cy9kZXNrdG9wL2RkMzc1NzMxKHY9dnMuODUpLmFzcHgKLWVudW0gewotICAgIFZLRVlfUkVUVVJO
ICAgPSAweDBELAotICAgIFZLRVlfRVNDQVBFICAgPSAweDFCLAotICAgIFZLRVlfUFJJT1IgICAg
PSAweDIxLAotICAgIFZLRVlfTkVYVCAgICAgPSAweDIyLAotICAgIFZLRVlfRU5EICAgICAgPSAw
eDIzLAotICAgIFZLRVlfSE9NRSAgICAgPSAweDI0LAotICAgIFZLRVlfTEVGVCAgICAgPSAweDI1
LAotICAgIFZLRVlfVVAgICAgICAgPSAweDI2LAotICAgIFZLRVlfUklHSFQgICAgPSAweDI3LAot
ICAgIFZLRVlfRE9XTiAgICAgPSAweDI4LAotICAgIFZLRVlfU05BUFNIT1QgPSAweDJDLAotICAg
IFZLRVlfSU5TRVJUICAgPSAweDJELAotICAgIFZLRVlfREVMRVRFICAgPSAweDJFLAotICAgIFZL
RVlfQVBQUyAgICAgPSAweDVELAotICAgIFZLRVlfRjEgICAgICAgPSAweDcwLAotICAgIFZLRVlf
TFNISUZUICAgPSAweEEwLAotICAgIFZLRVlfUlNISUZUICAgPSAweEExLAotICAgIFZLRVlfTENP
TlRST0wgPSAweEEyLAotICAgIFZLRVlfUkNPTlRST0wgPSAweEEzLAotICAgIFZLRVlfTE1FTlUg
ICAgPSAweEE0LAotICAgIFZLRVlfUk1FTlUgICAgPSAweEE1LAotfTsKLQotLy8gTWFwIGEgd2lu
ZG93cyBrZXljb2RlIHRvIGEgbmF0aXZlIGtleWNvZGUgb24gT1MoTElOVVgpICYmIFVTRShHVEsp
LgotaW50IE5hdGl2ZUtleUNvZGVGb3JXaW5kb3dzS2V5Q29kZShpbnQga2V5c3ltKTsKLQotfQot
Ci0jZW5kaWYgLy8gS2V5Q29kZU1hcHBpbmdfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0NvbnN0cmFpbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3Ry
YWludHMuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrQ29uc3RyYWludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEVfV0VCUlRDCi0j
aW5jbHVkZSAiTW9ja0NvbnN0cmFpbnRzLmgiCi0KLSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFD
b25zdHJhaW50cy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2Vi
VGVzdFJ1bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWJvb2wgaXNTdXBwb3J0ZWQoY29uc3QgV2Vi
U3RyaW5nJiBjb25zdHJhaW50KQotewotICAgIHJldHVybiBjb25zdHJhaW50ID09ICJ2YWxpZF9h
bmRfc3VwcG9ydGVkXzEiIHx8IGNvbnN0cmFpbnQgPT0gInZhbGlkX2FuZF9zdXBwb3J0ZWRfMiI7
Ci19Ci0KLWJvb2wgaXNWYWxpZChjb25zdCBXZWJTdHJpbmcmIGNvbnN0cmFpbnQpCi17Ci0gICAg
cmV0dXJuIGlzU3VwcG9ydGVkKGNvbnN0cmFpbnQpIHx8IGNvbnN0cmFpbnQgPT0gInZhbGlkX2J1
dF91bnN1cHBvcnRlZF8xIiB8fCBjb25zdHJhaW50ID09ICJ2YWxpZF9idXRfdW5zdXBwb3J0ZWRf
MiI7Ci19Ci0KLX0KLQotYm9vbCBNb2NrQ29uc3RyYWludHM6OnZlcmlmeUNvbnN0cmFpbnRzKGNv
bnN0IFdlYk1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzKQotewotICAgIFdlYlZlY3RvcjxX
ZWJNZWRpYUNvbnN0cmFpbnQ+IG1hbmRhdG9yeUNvbnN0cmFpbnRzOwotICAgIGNvbnN0cmFpbnRz
LmdldE1hbmRhdG9yeUNvbnN0cmFpbnRzKG1hbmRhdG9yeUNvbnN0cmFpbnRzKTsKLSAgICBpZiAo
bWFuZGF0b3J5Q29uc3RyYWludHMuc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWFuZGF0b3J5Q29uc3RyYWludHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGNv
bnN0IFdlYk1lZGlhQ29uc3RyYWludCYgY3VyciA9IG1hbmRhdG9yeUNvbnN0cmFpbnRzW2ldOwot
ICAgICAgICAgICAgaWYgKCFpc1N1cHBvcnRlZChjdXJyLm1fbmFtZSkgfHwgY3Vyci5tX3ZhbHVl
ICE9ICIxIikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBXZWJWZWN0b3I8V2ViTWVkaWFDb25zdHJhaW50PiBvcHRpb25hbENvbnN0cmFpbnRz
OwotICAgIGNvbnN0cmFpbnRzLmdldE9wdGlvbmFsQ29uc3RyYWludHMob3B0aW9uYWxDb25zdHJh
aW50cyk7Ci0gICAgaWYgKG9wdGlvbmFsQ29uc3RyYWludHMuc2l6ZSgpKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb3B0aW9uYWxDb25zdHJhaW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgY29uc3QgV2ViTWVkaWFDb25zdHJhaW50JiBjdXJyID0gb3B0aW9uYWxDb25z
dHJhaW50c1tpXTsKLSAgICAgICAgICAgIGlmICghaXNWYWxpZChjdXJyLm1fbmFtZSkgfHwgY3Vy
ci5tX3ZhbHVlICE9ICIwIikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxF
X1dFQlJUQwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvTW9ja0NvbnN0cmFpbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0NvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDE0Nzcw
MSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tD
b25zdHJhaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1vY2tD
b25zdHJhaW50c19oCi0jZGVmaW5lIE1vY2tDb25zdHJhaW50c19oCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotY2xhc3MgV2ViTWVkaWFDb25zdHJhaW50czsKLX0KLQotbmFtZXNwYWNlIFdlYlRlc3RS
dW5uZXIgewotCi1jbGFzcyBNb2NrQ29uc3RyYWludHMgewotcHVibGljOgotICAgIHN0YXRpYyBi
b29sIHZlcmlmeUNvbnN0cmFpbnRzKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFDb25zdHJhaW50cyYp
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTW9ja0NvbnN0cmFpbnRzX2gKLQpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja0dyYW1tYXJDaGVjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja0dyYW1tYXJDaGVjay5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tHcmFtbWFyQ2hlY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm0vY2hyb21pdW0v
cHVibGljL1dlYkNTdHJpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldlYlRleHRD
aGVja2luZ1Jlc3VsdC5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotYm9vbCBNb2NrR3JhbW1hckNoZWNrOjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBX
ZWJTdHJpbmcmIHRleHQsIHZlY3RvcjxXZWJUZXh0Q2hlY2tpbmdSZXN1bHQ+KiByZXN1bHRzKQot
ewotICAgIFdFQktJVF9BU1NFUlQocmVzdWx0cyk7Ci0gICAgc3RyaW5nMTYgc3RyaW5nVGV4dCA9
IHRleHQ7Ci0gICAgaWYgKGZpbmRfaWYoc3RyaW5nVGV4dC5iZWdpbigpLCBzdHJpbmdUZXh0LmVu
ZCgpLCBpc0FTQ0lJQWxwaGEpID09IHN0cmluZ1RleHQuZW5kKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gRmluZCBtYXRjaGluZyBncmFtbWF0aWNhbCBlcnJvcnMgZnJvbSBrbm93
biBvbmVzLiBUaGlzIGZ1bmN0aW9uIGhhcyB0bwotICAgIC8vIGNoZWNrIGFsbCBlcnJvcnMgYmVj
YXVzZSB0aGUgZ2l2ZW4gdGV4dCBtYXkgY29uc2lzdCBvZiB0d28gb3IgbW9yZQotICAgIC8vIHNl
bnRlbmNlcyB0aGF0IGhhdmUgZ3JhbW1hdGljYWwgZXJyb3JzLgotICAgIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgewotICAgICAgICBjb25zdCBjaGFyKiB0ZXh0OwotICAgICAgICBpbnQgbG9jYXRpb247
Ci0gICAgICAgIGludCBsZW5ndGg7Ci0gICAgfSBncmFtbWFyRXJyb3JzW10gPSB7Ci0gICAgICAg
IHsiSSBoYXZlIGEgaXNzdWUuIiwgNywgMX0sCi0gICAgICAgIHsiSSBoYXZlIGFuIGdyYXBlLiIs
IDcsIDJ9LAotICAgICAgICB7IkkgaGF2ZSBhbiBraXdpLiIsIDcsIDJ9LAotICAgICAgICB7Ikkg
aGF2ZSBhbiBtdXNjYXQuIiwgNywgMn0sCi0gICAgICAgIHsiWW91IGhhcyB0aGUgcmlnaHQuIiwg
NCwgM30sCi0gICAgICAgIHsiYXBwbGUgb3JhbmdlIHp6LiIsIDAsIDE2fSwKLSAgICAgICAgeyJh
cHBsZSB6eiBvcmFuZ2UuIiwgMCwgMTZ9LAotICAgICAgICB7ImFwcGxlLHp6LG9yYW5nZS4iLCAw
LCAxNn0sCi0gICAgICAgIHsib3JhbmdlLHp6LGFwcGxlLiIsIDAsIDE2fSwKLSAgICAgICAgeyJ0
aGUgdGhlIGFkbGogYWRhYXNqIHNka2xqLiB0aGVyZSB0aGVyZSIsIDAsIDM4fSwKLSAgICAgICAg
eyJ6eiBhcHBsZSBvcmFuZ2UuIiwgMCwgMTZ9LAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBBUlJBWVNJWkVfVU5TQUZFKGdyYW1tYXJFcnJvcnMpOyArK2kpIHsKLSAgICAgICAg
aW50IG9mZnNldCA9IDA7Ci0gICAgICAgIHN0cmluZzE2IGVycm9yKGdyYW1tYXJFcnJvcnNbaV0u
dGV4dCwgZ3JhbW1hckVycm9yc1tpXS50ZXh0ICsgc3RybGVuKGdyYW1tYXJFcnJvcnNbaV0udGV4
dCkpOwotICAgICAgICB3aGlsZSAoKG9mZnNldCA9IHN0cmluZ1RleHQuZmluZChlcnJvciwgb2Zm
c2V0KSkgIT0gc3RyaW5nMTY6Om5wb3MpIHsKLSAgICAgICAgICAgIHJlc3VsdHMtPnB1c2hfYmFj
ayhXZWJUZXh0Q2hlY2tpbmdSZXN1bHQoV2ViVGV4dENoZWNraW5nVHlwZUdyYW1tYXIsIG9mZnNl
dCArIGdyYW1tYXJFcnJvcnNbaV0ubG9jYXRpb24sIGdyYW1tYXJFcnJvcnNbaV0ubGVuZ3RoKSk7
Ci0gICAgICAgICAgICBvZmZzZXQgKz0gZ3JhbW1hckVycm9yc1tpXS5sZW5ndGg7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNoZWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9j
a0dyYW1tYXJDaGVjay5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrR3JhbW1hckNoZWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja0dyYW1tYXJDaGVja19oCi0jZGVmaW5lIE1v
Y2tHcmFtbWFyQ2hlY2tfaAotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViU3RyaW5nOwotc3RydWN0IFdlYlRleHRDaGVja2luZ1Jlc3VsdDsKLQot
fQotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLS8vIEEgbW9jayBpbXBsZW1lbnRhdGlv
biBvZiBhIGdyYW1tYXItY2hlY2tlciB1c2VkIGZvciBXZWJLaXQgdGVzdHMuIFRoaXMgY2xhc3MK
LS8vIG9ubHkgaW1wbGVtZW50cyB0aGUgbWluaW1hbCBmdW5jdGlvbmFyaXRpZXMgcmVxdWlyZWQg
YnkgV2ViS2l0IHRlc3RzLCBpLmUuCi0vLyB0aGlzIGNsYXNzIGp1c3QgY29tcGFyZXMgdGhlIGdp
dmVuIHN0cmluZyB3aXRoIGtub3duIGdyYW1tYXIgbWlzdGFrZXMgaW4KLS8vIHdlYmtpdCB0ZXN0
cyBhbmQgYWRkcyBncmFtbWFyIG1hcmtlcnMgb24gdGhlbS4gRXZlbiB0aG91Z2ggdGhpcyBpcyBz
dWZmaWNlbnQKLS8vIGZvciB3ZWJraXQgdGVzdHMsIHRoaXMgY2xhc3MgaXMgbm90IHN1aXRhYmxl
IGZvciBhbnkgb3RoZXIgdXNhZ2VzLgotY2xhc3MgTW9ja0dyYW1tYXJDaGVjayB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIGJvb2wgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmLCBzdGQ6OnZlY3RvcjxXZWJLaXQ6OldlYlRleHRDaGVja2luZ1Jlc3VsdD4qKTsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIE1vY2tTcGVsbENoZWNrX2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tTcGVsbENoZWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2Nr
U3BlbGxDaGVjay5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tTcGVsbENoZWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNb2NrU3Bl
bGxDaGVjay5oIgotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQg
YXBwZW5kKFdlYlZlY3RvcjxXZWJTdHJpbmc+KiBkYXRhLCBjb25zdCBXZWJTdHJpbmcmIGl0ZW0p
Ci17Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0KGRhdGEtPnNpemUoKSArIDEpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS0+c2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
c3VsdFtpXSA9ICgqZGF0YSlbaV07Ci0gICAgcmVzdWx0W2RhdGEtPnNpemUoKV0gPSBpdGVtOwot
ICAgIGRhdGEtPnN3YXAocmVzdWx0KTsKLX0KLQotfQotCi1Nb2NrU3BlbGxDaGVjazo6TW9ja1Nw
ZWxsQ2hlY2soKQotICAgIDogbV9pbml0aWFsaXplZChmYWxzZSkgeyB9Ci0KLU1vY2tTcGVsbENo
ZWNrOjp+TW9ja1NwZWxsQ2hlY2soKSB7IH0KLQotYm9vbCBNb2NrU3BlbGxDaGVjazo6c3BlbGxD
aGVja1dvcmQoY29uc3QgV2ViU3RyaW5nJiB0ZXh0LCBpbnQqIG1pc3NwZWxsZWRPZmZzZXQsIGlu
dCogbWlzc3BlbGxlZExlbmd0aCkKLXsKLSAgICBXRUJLSVRfQVNTRVJUKG1pc3NwZWxsZWRPZmZz
ZXQpOwotICAgIFdFQktJVF9BU1NFUlQobWlzc3BlbGxlZExlbmd0aCk7Ci0KLSAgICAvLyBJbml0
aWFsaXplIHRoaXMgc3BlbGxjaGVja2VyLgotICAgIGluaXRpYWxpemVJZk5lZWRlZCgpOwotCi0g
ICAgLy8gUmVzZXQgdGhlIHJlc3VsdCB2YWx1ZXMgYXMgb3VyIHNwZWxsY2hlY2tlciBkb2VzLgot
ICAgICptaXNzcGVsbGVkT2Zmc2V0ID0gMDsKLSAgICAqbWlzc3BlbGxlZExlbmd0aCA9IDA7Ci0K
LSAgICAvLyBDb252ZXJ0IHRvIGEgc3RyaW5nMTYgYmVjYXVzZSB3ZSBzdG9yZSBzdHJpbmcxNiBp
bnN0YW5jZXMgaW4KLSAgICAvLyBtX21pc3NwZWxsZWRXb3JkcyBhbmQgV2ViU3RyaW5nIGhhcyBu
byBmaW5kKCkuCi0gICAgc3RyaW5nMTYgc3RyaW5nVGV4dCA9IHRleHQ7Ci0gICAgaW50IHNraXBw
ZWRMZW5ndGggPSAwOwotCi0gICAgd2hpbGUgKCFzdHJpbmdUZXh0LmVtcHR5KCkpIHsKLSAgICAg
ICAgLy8gRXh0cmFjdCB0aGUgZmlyc3QgcG9zc2libGUgRW5nbGlzaCB3b3JkIGZyb20gdGhlIGdp
dmVuIHN0cmluZy4KLSAgICAgICAgLy8gVGhlIGdpdmVuIHN0cmluZyBtYXkgaW5jbHVkZSBub24t
QVNDSUkgY2hhcmFjdGVycyBvciBudW1iZXJzLiBTbywgd2UKLSAgICAgICAgLy8gc2hvdWxkIGZp
bHRlciBvdXQgc3VjaCBjaGFyYWN0ZXJzIGJlZm9yZSBzdGFydCBsb29raW5nIHVwIG91cgotICAg
ICAgICAvLyBtaXNzcGVsbGVkLXdvcmQgdGFibGUuCi0gICAgICAgIC8vIChUaGlzIGlzIGEgc2lt
cGxlIHZlcnNpb24gb2Ygb3VyIFNwZWxsQ2hlY2tXb3JkSXRlcmF0b3IgY2xhc3MuKQotICAgICAg
ICAvLyBJZiB0aGUgZ2l2ZW4gc3RyaW5nIGRvZXNuJ3QgaW5jbHVkZSBhbnkgQVNDSUkgY2hhcmFj
dGVycywgd2UgY2FuIHRyZWF0IHRoZQotICAgICAgICAvLyBzdHJpbmcgYXMgdmFsaWQgb25lLgot
ICAgICAgICBzdHJpbmcxNjo6aXRlcmF0b3IgZmlyc3RDaGFyID0gZmluZF9pZihzdHJpbmdUZXh0
LmJlZ2luKCksIHN0cmluZ1RleHQuZW5kKCksIGlzQVNDSUlBbHBoYSk7Ci0gICAgICAgIGlmIChm
aXJzdENoYXIgPT0gc3RyaW5nVGV4dC5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpbnQgd29yZE9mZnNldCA9IGRpc3RhbmNlKHN0cmluZ1RleHQuYmVnaW4oKSwgZmly
c3RDaGFyKTsKLSAgICAgICAgaW50IG1heFdvcmRMZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0
cmluZ1RleHQubGVuZ3RoKCkpIC0gd29yZE9mZnNldDsKLSAgICAgICAgaW50IHdvcmRMZW5ndGg7
Ci0gICAgICAgIHN0cmluZzE2IHdvcmQ7Ci0KLSAgICAgICAgLy8gTG9vayB1cCBvdXIgbWlzc3Bl
bGxlZC13b3JkIHRhYmxlIHRvIGNoZWNrIGlmIHRoZSBleHRyYWN0ZWQgd29yZCBpcyBhCi0gICAg
ICAgIC8vIGtub3duIG1pc3NwZWxsZWQgd29yZCwgYW5kIHJldHVybiB0aGUgb2Zmc2V0IGFuZCB0
aGUgbGVuZ3RoIG9mIHRoZQotICAgICAgICAvLyBleHRyYWN0ZWQgd29yZCBpZiB0aGlzIHdvcmQg
aXMgYSBrbm93biBtaXNzcGVsbGVkIHdvcmQuCi0gICAgICAgIC8vIChTZWUgdGhlIGNvbW1lbnQg
aW4gTW9ja1NwZWxsQ2hlY2s6OmluaXRpYWxpemVJZk5lZWRlZCgpIHdoeSB3ZSB1c2UgYQotICAg
ICAgICAvLyBtaXNzcGVsbGVkLXdvcmQgdGFibGUuKQotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fbWlzc3BlbGxlZFdvcmRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICB3b3Jk
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihtX21pc3NwZWxsZWRXb3Jkcy5hdChpKS5sZW5ndGgo
KSkgPiBtYXhXb3JkTGVuZ3RoID8gbWF4V29yZExlbmd0aCA6IHN0YXRpY19jYXN0PGludD4obV9t
aXNzcGVsbGVkV29yZHMuYXQoaSkubGVuZ3RoKCkpOwotICAgICAgICAgICAgd29yZCA9IHN0cmlu
Z1RleHQuc3Vic3RyKHdvcmRPZmZzZXQsIHdvcmRMZW5ndGgpOwotICAgICAgICAgICAgaWYgKHdv
cmQgPT0gbV9taXNzcGVsbGVkV29yZHMuYXQoaSkgJiYgKHN0YXRpY19jYXN0PGludD4oc3RyaW5n
VGV4dC5sZW5ndGgoKSkgPT0gd29yZE9mZnNldCArIHdvcmRMZW5ndGggfHwgaXNOb3RBU0NJSUFs
cGhhKHN0cmluZ1RleHRbd29yZE9mZnNldCArIHdvcmRMZW5ndGhdKSkpIHsKLSAgICAgICAgICAg
ICAgICAqbWlzc3BlbGxlZE9mZnNldCA9IHdvcmRPZmZzZXQgKyBza2lwcGVkTGVuZ3RoOwotICAg
ICAgICAgICAgICAgICptaXNzcGVsbGVkTGVuZ3RoID0gd29yZExlbmd0aDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgqbWlz
c3BlbGxlZExlbmd0aCA+IDApCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBzdHJpbmcx
Njo6aXRlcmF0b3IgbGFzdENoYXIgPSBmaW5kX2lmKHN0cmluZ1RleHQuYmVnaW4oKSArIHdvcmRP
ZmZzZXQsIHN0cmluZ1RleHQuZW5kKCksIGlzTm90QVNDSUlBbHBoYSk7Ci0gICAgICAgIGlmIChs
YXN0Q2hhciA9PSBzdHJpbmdUZXh0LmVuZCgpKQotICAgICAgICAgICAgd29yZExlbmd0aCA9IHN0
YXRpY19jYXN0PGludD4oc3RyaW5nVGV4dC5sZW5ndGgoKSkgLSB3b3JkT2Zmc2V0OwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB3b3JkTGVuZ3RoID0gZGlzdGFuY2UoZmlyc3RDaGFyLCBsYXN0
Q2hhcik7Ci0KLSAgICAgICAgV0VCS0lUX0FTU0VSVCgwIDwgd29yZE9mZnNldCArIHdvcmRMZW5n
dGgpOwotICAgICAgICBzdHJpbmdUZXh0ID0gc3RyaW5nVGV4dC5zdWJzdHIod29yZE9mZnNldCAr
IHdvcmRMZW5ndGgpOwotICAgICAgICBza2lwcGVkTGVuZ3RoICs9IHdvcmRPZmZzZXQgKyB3b3Jk
TGVuZ3RoOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBNb2NrU3BlbGxD
aGVjazo6aGFzSW5DYWNoZShjb25zdCBXZWJTdHJpbmcmIHdvcmQpCi17Ci0gICAgcmV0dXJuIHdv
cmQgPT0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiU3BlbGwgd2VsbGNvbWUuIElzIGl0IGJyb2tlbj8i
KSB8fCB3b3JkID09IFdlYlN0cmluZzo6ZnJvbVVURjgoIlNwZWxsIHdlbGxjb21lLlx4MDA3RiIp
OwotfQotCi12b2lkIE1vY2tTcGVsbENoZWNrOjpmaWxsU3VnZ2VzdGlvbkxpc3QoY29uc3QgV2Vi
U3RyaW5nJiB3b3JkLCBXZWJWZWN0b3I8V2ViU3RyaW5nPiogc3VnZ2VzdGlvbnMpCi17Ci0gICAg
aWYgKHdvcmQgPT0gV2ViU3RyaW5nOjpmcm9tVVRGOCgid2VsbGNvbWUiKSkKLSAgICAgICAgYXBw
ZW5kKHN1Z2dlc3Rpb25zLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ3ZWxjb21lIikpOwotICAgIGVs
c2UgaWYgKHdvcmQgPT0gV2ViU3RyaW5nOjpmcm9tVVRGOCgidXBwZXIgY2FzZSIpKQotICAgICAg
ICBhcHBlbmQoc3VnZ2VzdGlvbnMsIFdlYlN0cmluZzo6ZnJvbVVURjgoInVwcGVyY2FzZSIpKTsK
LX0KLQotYm9vbCBNb2NrU3BlbGxDaGVjazo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKLXsKLSAgICAv
LyBFeGl0IGlmIHdlIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIG9iamVjdC4KLSAgICBp
ZiAobV9pbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ3JlYXRl
IGEgdGFibGUgdGhhdCBjb25zaXN0cyBvZiBtaXNzcGVsbGVkIHdvcmRzIHVzZWQgaW4gV2ViS2l0
IGxheW91dAotICAgIC8vIHRlc3RzLgotICAgIC8vIFNpbmNlIFdlYktpdCBsYXlvdXQgdGVzdHMg
ZG9uJ3QgaGF2ZSBzbyBtYW55IG1pc3NwZWxsZWQgd29yZHMgYXMKLSAgICAvLyB3ZWxsLXNwZWxs
ZWQgd29yZHMsIGl0IGlzIGVhc2llciB0byBjb21wYXJlIHRoZSBnaXZlbiB3b3JkIHdpdGggbWlz
c3BlbGxlZAotICAgIC8vIG9uZXMgdGhhbiB0byBjb21wYXJlIHdpdGggd2VsbC1zcGVsbGVkIG9u
ZXMuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIG1pc3NwZWxsZWRXb3Jkc1tdID0gewotICAgICAg
ICAvLyBUaGVzZSB3b3JkcyBhcmUga25vd24gbWlzc3BlbGxlZCB3b3JkcyBpbiB3ZWJraXQgdGVz
dHMuCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBvdGhlciBtaXNzcGVsbGVkIHdvcmRzIGluIHdl
YmtpdCB0ZXN0cywgcGxlYXNlIGFkZCB0aGVtIGluCi0gICAgICAgIC8vIHRoaXMgYXJyYXkuCi0g
ICAgICAgICJmb28iLAotICAgICAgICAiRm9vIiwKLSAgICAgICAgImJheiIsCi0gICAgICAgICJm
byIsCi0gICAgICAgICJMaWJlcnR5RiIsCi0gICAgICAgICJjaGVsbG8iLAotICAgICAgICAieHh4
dGVzdHh4eCIsCi0gICAgICAgICJYWHh4eCIsCi0gICAgICAgICJUZXh0eCIsCi0gICAgICAgICJi
bG9ja3F1b3RlZCIsCi0gICAgICAgICJhc2QiLAotICAgICAgICAiTG9yZW0iLAotICAgICAgICAi
TnVuYyIsCi0gICAgICAgICJDdXJhYml0dXIiLAotICAgICAgICAiZXUiLAotICAgICAgICAiYWRs
aiIsCi0gICAgICAgICJhZGFhc2oiLAotICAgICAgICAic2RrbGoiLAotICAgICAgICAiamxrZHMi
LAotICAgICAgICAianNhYWRhIiwKLSAgICAgICAgImpsZGEiLAotICAgICAgICAienoiLAotICAg
ICAgICAiY29udGVudEVkaXRhYmxlIiwKLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB3b3JkcyBh
cmUgdXNlZCBieSB1bml0IHRlc3RzLgotICAgICAgICAiaWZtbXAiLAotICAgICAgICAicXdlcnR5
dWlvcGFzZCIsCi0gICAgICAgICJxd2VydHl1aW9wYXNkZiIsCi0gICAgICAgICJ1cHBlciBjYXNl
IiwKLSAgICAgICAgIndlbGxjb21lIgotICAgIH07Ci0KLSAgICBtX21pc3NwZWxsZWRXb3Jkcy5j
bGVhcigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKG1pc3NwZWxsZWRX
b3Jkcyk7ICsraSkKLSAgICAgICAgbV9taXNzcGVsbGVkV29yZHMucHVzaF9iYWNrKHN0cmluZzE2
KG1pc3NwZWxsZWRXb3Jkc1tpXSwgbWlzc3BlbGxlZFdvcmRzW2ldICsgc3RybGVuKG1pc3NwZWxs
ZWRXb3Jkc1tpXSkpKTsKLQotICAgIC8vIE1hcmsgYXMgaW5pdGlhbGl6ZWQgdG8gcHJldmVudCB0
aGlzIG9iamVjdCBmcm9tIGJlaW5nIGluaXRpYWxpemVkIHR3aWNlCi0gICAgLy8gb3IgbW9yZS4K
LSAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKLQotICAgIC8vIFNpbmNlIHRoaXMgTW9ja1NwZWxs
Q2hlY2sgY2xhc3MgZG9lc24ndCBkb3dubG9hZCBkaWN0aW9uYXJpZXMsIHRoaXMKLSAgICAvLyBm
dW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tT
cGVsbENoZWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2suaAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1NwZWxsQ2hlY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2NrU3BlbGxDaGVja19o
Ci0jZGVmaW5lIE1vY2tTcGVsbENoZWNrX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViVmVjdG9yLmgiCi0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7Ci0KLS8vIEEgbW9jayBpbXBsZW1lbnRhdGlvbiBvZiBhIHNwZWxsLWNoZWNrZXIgdXNlZCBm
b3IgV2ViS2l0IHRlc3RzLgotLy8gVGhpcyBjbGFzcyBvbmx5IGltcGxlbWVudHMgdGhlIG1pbmlt
YWwgZnVuY3Rpb25hcml0aWVzIHJlcXVpcmVkIGJ5IFdlYktpdAotLy8gdGVzdHMsIGkuZS4gdGhp
cyBjbGFzcyBqdXN0IGNvbXBhcmVzIHRoZSBnaXZlbiBzdHJpbmcgd2l0aCBrbm93biBtaXNzcGVs
bGVkCi0vLyB3b3JkcyBpbiB3ZWJraXQgdGVzdHMgYW5kIG1hcmsgdGhlbSBhcyBtaXNzc3BlbGxl
ZC4KLS8vIEV2ZW4gdGhvdWdoIHRoaXMgaXMgc3VmZmljZW50IGZvciB3ZWJraXQgdGVzdHMsIHRo
aXMgY2xhc3MgaXMgbm90IHN1aXRhYmxlCi0vLyBmb3IgYW55IG90aGVyIHVzYWdlcy4KLWNsYXNz
IE1vY2tTcGVsbENoZWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBmaWxsU3VnZ2VzdGlv
bkxpc3QoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHdvcmQsIFdlYktpdDo6V2ViVmVjdG9yPFdl
YktpdDo6V2ViU3RyaW5nPiogc3VnZ2VzdGlvbnMpOwotCi0gICAgTW9ja1NwZWxsQ2hlY2soKTsK
LSAgICB+TW9ja1NwZWxsQ2hlY2soKTsKLQotICAgIC8vIENoZWNrcyB0aGUgc3BlbGxpbmdzIG9m
IHRoZSBzcGVjaWZpZWQgdGV4dC4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBp
ZiB0aGUgdGV4dCBjb25zaXN0cyBvZiB2YWxpZCB3b3JkcywgYW5kCi0gICAgLy8gcmV0dXJucyBm
YWxzZSBpZiBpdCBpbmNsdWRlcyBpbnZhbGlkIHdvcmRzLgotICAgIC8vIFdoZW4gdGhlIGdpdmVu
IHRleHQgaW5jbHVkZXMgaW52YWxpZCB3b3JkcywgdGhpcyBmdW5jdGlvbiBzZXRzIHRoZQotICAg
IC8vIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBpbnZhbGlkIHdvcmQgdG8gbWlzc3BlbGxlZE9mZnNl
dCwgYW5kIHRoZSBsZW5ndGggb2YKLSAgICAvLyB0aGUgZmlyc3QgaW52YWxpZCB3b3JkIHRvIG1p
c3NwZWxsZWRMZW5ndGgsIHJlc3BlY3RpdmVseS4KLSAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB0
aGUgZ2l2ZW4gdGV4dCBpcyAiICAgenogenoiLCB0aGlzIGZ1bmN0aW9uIHNldHMgMyB0bwotICAg
IC8vIG1pc3NwZWxsZWRPZmZzZXQgYW5kIDIgdG8gbWlzc3BlbGxlZExlbmd0aCwgcmVzcGVjdGl2
ZWx5LgotICAgIGJvb2wgc3BlbGxDaGVja1dvcmQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIHRl
eHQsIGludCogbWlzc3BlbGxlZE9mZnNldCwgaW50KiBtaXNzcGVsbGVkTGVuZ3RoKTsKLQotICAg
IC8vIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdGV4dCBjYW4gYmUgc3BlbGwgY2hlY2tl
ZCBpbW1lZGlhdGVseSB1c2luZwotICAgIC8vIHRoZSBzcGVsbCBjaGVja2VyIGNhY2hlLgotICAg
IGJvb2wgaGFzSW5DYWNoZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgdGV4dCk7Ci0KLXByaXZh
dGU6Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgcmVzb3VyY2VzIGlmIHdlIG5lZWQg
dG8gaW5pdGlhbGl6ZSBpdC4KLSAgICAvLyBJbml0aWFsaXppbmcgdGhpcyBvYmplY3QgbWF5IHRh
a2UgbG9uZyB0aW1lLiBUbyBwcmV2ZW50IGZyb20gaHVydGluZwotICAgIC8vIHRoZSBwZXJmb3Jt
YW5jZSBvZiB0ZXN0X3NoZWxsLCB3ZSBpbml0aWFsaXplIHRoaXMgb2JqZWN0IHdoZW4KLSAgICAv
LyBTcGVsbENoZWNrV29yZCgpIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgLy8g
VG8gYmUgY29tcGxpYW50IHdpdGggU3BlbGxDaGVjazpJbml0aWFsaXplSWZOZWVkZWQoKSwgdGhp
cyBmdW5jdGlvbgotICAgIC8vIHJldHVybnMgdHJ1ZSBpZiB0aGlzIG9iamVjdCBpcyBkb3dubG9h
ZGluZyBhIGRpY3Rpb25hcnksIG90aGVyd2lzZQotICAgIC8vIGl0IHJldHVybnMgZmFsc2UuCi0g
ICAgYm9vbCBpbml0aWFsaXplSWZOZWVkZWQoKTsKLQotICAgIC8vIEEgdGFibGUgdGhhdCBjb25z
aXN0cyBvZiBtaXNzcGVsbGVkIHdvcmRzLgotICAgIHN0ZDo6dmVjdG9yPHN0cmluZzE2PiBtX21p
c3NwZWxsZWRXb3JkczsKLQotICAgIC8vIEEgZmxhZyByZXByZXNlbnRpbmcgd2hldGhlciBvciBu
b3QgdGhpcyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQuCi0gICAgYm9vbCBtX2luaXRpYWxpemVkOwot
fTsKLQotfQotCi0jZW5kaWYgLy8gTW9ja1NwZWxsQ2hlY2tfaApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9Nb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViTWVk
aWFTdHJlYW1DZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFX1dFQlJUQwotI2luY2x1ZGUgIk1vY2tXZWJNZWRp
YVN0cmVhbUNlbnRlci5oIgotCi0jaW5jbHVkZSA8cHVibGljL1dlYkF1ZGlvRGVzdGluYXRpb25D
b25zdW1lci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbS5oPgotI2luY2x1ZGUg
PHB1YmxpYy9XZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudC5oPgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJNZWRpYVN0cmVhbVNvdXJjZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJNZWRpYVN0cmVhbVNv
dXJjZXNSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3RyZWFtVHJhY2suaD4K
LSNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVy
OjpNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIoV2ViTWVkaWFTdHJlYW1DZW50ZXJDbGllbnQqIGNs
aWVudCkKLXsKLX0KLQotdm9pZCBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXI6OnF1ZXJ5TWVkaWFT
dHJlYW1Tb3VyY2VzKGNvbnN0IFdlYk1lZGlhU3RyZWFtU291cmNlc1JlcXVlc3QmIHJlcXVlc3Qp
Ci17Ci0gICAgV2ViVmVjdG9yPFdlYk1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZXMsIHZp
ZGVvU291cmNlczsKLSAgICByZXF1ZXN0LmRpZENvbXBsZXRlUXVlcnkoYXVkaW9Tb3VyY2VzLCB2
aWRlb1NvdXJjZXMpOwotfQotCi12b2lkIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkRW5h
YmxlTWVkaWFTdHJlYW1UcmFjayhjb25zdCBXZWJNZWRpYVN0cmVhbSYsIGNvbnN0IFdlYk1lZGlh
U3RyZWFtVHJhY2smIGNvbXBvbmVudCkKLXsKLSAgICBjb21wb25lbnQuc291cmNlKCkuc2V0UmVh
ZHlTdGF0ZShXZWJNZWRpYVN0cmVhbVNvdXJjZTo6UmVhZHlTdGF0ZUxpdmUpOwotfQotCi12b2lk
IE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcjo6ZGlkRGlzYWJsZU1lZGlhU3RyZWFtVHJhY2soY29u
c3QgV2ViTWVkaWFTdHJlYW0mLCBjb25zdCBXZWJNZWRpYVN0cmVhbVRyYWNrJiBjb21wb25lbnQp
Ci17Ci0gICAgY29tcG9uZW50LnNvdXJjZSgpLnNldFJlYWR5U3RhdGUoV2ViTWVkaWFTdHJlYW1T
b3VyY2U6OlJlYWR5U3RhdGVNdXRlZCk7Ci19Ci0KLWJvb2wgTW9ja1dlYk1lZGlhU3RyZWFtQ2Vu
dGVyOjpkaWRBZGRNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IFdlYk1lZGlhU3RyZWFtJiwgY29uc3Qg
V2ViTWVkaWFTdHJlYW1UcmFjayYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTW9j
a1dlYk1lZGlhU3RyZWFtQ2VudGVyOjpkaWRSZW1vdmVNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IFdl
Yk1lZGlhU3RyZWFtJiwgY29uc3QgV2ViTWVkaWFTdHJlYW1UcmFjayYpCi17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyOjpkaWRTdG9wTG9jYWxN
ZWRpYVN0cmVhbShjb25zdCBXZWJNZWRpYVN0cmVhbSYgc3RyZWFtKQotewotfQotCi1jbGFzcyBN
b2NrV2ViQXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyIDogcHVibGljIFdlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+TW9ja1dlYkF1ZGlvRGVzdGluYXRp
b25Db25zdW1lcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JtYXQoc2l6ZV90IG51bWJl
ck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBjb25zdW1lQXVkaW8oY29uc3QgV2ViVmVjdG9yPGNvbnN0IGZsb2F0Kj4mLCBzaXplX3Qg
bnVtYmVyX29mX2ZyYW1lcykgT1ZFUlJJREUgeyB9Ci19OwotCi12b2lkIE1vY2tXZWJNZWRpYVN0
cmVhbUNlbnRlcjo6ZGlkQ3JlYXRlTWVkaWFTdHJlYW0oV2ViTWVkaWFTdHJlYW0mIHN0cmVhbSkK
LXsKLSAgICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1UcmFjaz4gYXVkaW9Db21wb25lbnRzOwot
ICAgIHN0cmVhbS5hdWRpb1NvdXJjZXMoYXVkaW9Db21wb25lbnRzKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF1ZGlvQ29tcG9uZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJN
ZWRpYVN0cmVhbVNvdXJjZSBzb3VyY2UgPSBhdWRpb0NvbXBvbmVudHNbaV0uc291cmNlKCk7Ci0g
ICAgICAgIGlmIChzb3VyY2UucmVxdWlyZXNBdWRpb0NvbnN1bWVyKCkpIHsKLSAgICAgICAgICAg
IE1vY2tXZWJBdWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIqIGNvbnN1bWVyID0gbmV3IE1vY2tXZWJB
dWRpb0Rlc3RpbmF0aW9uQ29uc3VtZXIoKTsKLSAgICAgICAgICAgIHNvdXJjZS5hZGRBdWRpb0Nv
bnN1bWVyKGNvbnN1bWVyKTsKLSAgICAgICAgICAgIHNvdXJjZS5yZW1vdmVBdWRpb0NvbnN1bWVy
KGNvbnN1bWVyKTsKLSAgICAgICAgICAgIGRlbGV0ZSBjb25zdW1lcjsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFX1dFQlJUQwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJNZWRpYVN0
cmVhbUNlbnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0
aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1vY2tX
ZWJNZWRpYVN0cmVhbUNlbnRlcl9oCi0jZGVmaW5lIE1vY2tXZWJNZWRpYVN0cmVhbUNlbnRlcl9o
Ci0KLSNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhU3Ry
ZWFtQ2VudGVyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViTWVkaWFTdHJlYW1D
ZW50ZXJDbGllbnQ7Ci19OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIE1v
Y2tXZWJNZWRpYVN0cmVhbUNlbnRlciA6IHB1YmxpYyBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtQ2Vu
dGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNb2NrV2ViTWVkaWFTdHJlYW1DZW50ZXIoV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbUNlbnRlckNsaWVudCopOwotCi0gICAgdmlydHVhbCB2b2lkIHF1
ZXJ5TWVkaWFTdHJlYW1Tb3VyY2VzKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2Vz
UmVxdWVzdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkaWRFbmFibGVNZWRpYVN0cmVh
bVRyYWNrKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0mLCBjb25zdCBXZWJLaXQ6OldlYk1l
ZGlhU3RyZWFtVHJhY2smKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRGlzYWJsZU1l
ZGlhU3RyZWFtVHJhY2soY29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbSYsIGNvbnN0IFdlYktp
dDo6V2ViTWVkaWFTdHJlYW1UcmFjayYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBkaWRB
ZGRNZWRpYVN0cmVhbVRyYWNrKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJlYW0mLCBjb25zdCBX
ZWJLaXQ6OldlYk1lZGlhU3RyZWFtVHJhY2smKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGlkUmVtb3ZlTWVkaWFTdHJlYW1UcmFjayhjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtJiwg
Y29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVRyYWNrJikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFN0b3BMb2NhbE1lZGlhU3RyZWFtKGNvbnN0IFdlYktpdDo6V2ViTWVkaWFTdHJl
YW0mKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlTWVkaWFTdHJlYW0oV2Vi
S2l0OjpXZWJNZWRpYVN0cmVhbSYpIE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIE1vY2tXZWJN
ZWRpYVN0cmVhbUNlbnRlcigpIHsgfQotfTsKLQotfQotCi0jZW5kaWYgLy8gTW9ja1dlYk1lZGlh
U3RyZWFtQ2VudGVyX2gKLQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRD
RFRNRlNlbmRlckhhbmRsZXIuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEVfV0VCUlRDCi0jaW5jbHVkZSAiTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyLmgi
Ci0KLSNpbmNsdWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNp
bmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3VyY2UuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViUlRDRFRNRlNlbmRlckhhbmRsZXJDbGllbnQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBEVE1GU2VuZGVyVG9uZVRh
c2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXI+IHsK
LXB1YmxpYzoKLSAgICBEVE1GU2VuZGVyVG9uZVRhc2soTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5k
bGVyKiBvYmplY3QsIFdlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyQ2xpZW50KiBjbGllbnQpCi0gICAg
ICAgIDogV2ViTWV0aG9kVGFzazxNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXI+KG9iamVjdCkK
LSAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIFdlYlN0cmluZyB0b25l
cyA9IG1fb2JqZWN0LT5jdXJyZW50VG9uZUJ1ZmZlcigpOwotICAgICAgICBtX29iamVjdC0+Y2xl
YXJUb25lQnVmZmVyKCk7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRQbGF5VG9uZSh0b25lcyk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIFdlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyQ2xpZW50KiBtX2Ns
aWVudDsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1Nb2NrV2ViUlRDRFRNRlNlbmRl
ckhhbmRsZXI6Ok1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlcihjb25zdCBXZWJNZWRpYVN0cmVh
bVRyYWNrJiB0cmFjaywgV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY2xpZW50
KDApCi0gICAgLCBtX3RyYWNrKHRyYWNrKQotICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKLXsK
LX0KLQotdm9pZCBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXI6OnNldENsaWVudChXZWJSVENE
VE1GU2VuZGVySGFuZGxlckNsaWVudCogY2xpZW50KQotewotICAgIG1fY2xpZW50ID0gY2xpZW50
OwotfQotCi1XZWJTdHJpbmcgTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyOjpjdXJyZW50VG9u
ZUJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1fdG9uZUJ1ZmZlcjsKLX0KLQotYm9vbCBNb2NrV2Vi
UlRDRFRNRlNlbmRlckhhbmRsZXI6OmNhbkluc2VydERUTUYoKQotewotICAgIGFzc2VydChtX2Ns
aWVudCAmJiAhbV90cmFjay5pc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fdHJhY2suc291cmNlKCku
dHlwZSgpID09IFdlYk1lZGlhU3RyZWFtU291cmNlOjpUeXBlQXVkaW8gJiYgbV90cmFjay5pc0Vu
YWJsZWQoKSAmJiBtX3RyYWNrLnNvdXJjZSgpLnJlYWR5U3RhdGUoKSA9PSBXZWJNZWRpYVN0cmVh
bVNvdXJjZTo6UmVhZHlTdGF0ZUxpdmU7Ci19Ci0KLWJvb2wgTW9ja1dlYlJUQ0RUTUZTZW5kZXJI
YW5kbGVyOjppbnNlcnREVE1GKGNvbnN0IFdlYlN0cmluZyYgdG9uZXMsIGxvbmcgZHVyYXRpb24s
IGxvbmcgaW50ZXJUb25lR2FwKQotewotICAgIGFzc2VydChtX2NsaWVudCk7Ci0gICAgaWYgKCFj
YW5JbnNlcnREVE1GKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fdG9uZUJ1ZmZl
ciA9IHRvbmVzOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBEVE1GU2VuZGVyVG9uZVRh
c2sodGhpcywgbV9jbGllbnQpKTsKLSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgRFRNRlNl
bmRlclRvbmVUYXNrKHRoaXMsIG1fY2xpZW50KSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0K
LQotI2VuZGlmIC8vIEVOQUJMRV9XRUJSVEMKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01v
Y2tXZWJSVENEVE1GU2VuZGVySGFuZGxlci5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDRFRNRlNlbmRl
ckhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2NrV2ViUlRDRFRN
RlNlbmRlckhhbmRsZXJfaAotI2RlZmluZSBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXJfaAot
Ci0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIKLSNpbmNsdWRl
IDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSVENE
VE1GU2VuZGVySGFuZGxlci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KLQotbmFt
ZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBXZWJUZXN0RGVsZWdhdGU7Ci0KLWNsYXNz
IE1vY2tXZWJSVENEVE1GU2VuZGVySGFuZGxlciA6IHB1YmxpYyBXZWJLaXQ6OldlYlJUQ0RUTUZT
ZW5kZXJIYW5kbGVyIHsKLXB1YmxpYzoKLSAgICBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXIo
Y29uc3QgV2ViS2l0OjpXZWJNZWRpYVN0cmVhbVRyYWNrJiwgV2ViVGVzdERlbGVnYXRlKik7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50KFdlYktpdDo6V2ViUlRDRFRNRlNlbmRlckhhbmRs
ZXJDbGllbnQqKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTdHJpbmcgY3Vy
cmVudFRvbmVCdWZmZXIoKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgYm9vbCBjYW5JbnNlcnRE
VE1GKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGluc2VydERUTUYoY29uc3QgV2ViS2l0
OjpXZWJTdHJpbmcmIHRvbmVzLCBsb25nIGR1cmF0aW9uLCBsb25nIGludGVyVG9uZUdhcCkgT1ZF
UlJJREU7Ci0KLSAgICAvLyBXZWJUYXNrIHJlbGF0ZWQgbWV0aG9kcwotICAgIFdlYlRhc2tMaXN0
KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0gICAgdm9pZCBjbGVhclRvbmVC
dWZmZXIoKSB7IG1fdG9uZUJ1ZmZlci5yZXNldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgTW9ja1dl
YlJUQ0RUTUZTZW5kZXJIYW5kbGVyKCk7Ci0KLSAgICBXZWJLaXQ6OldlYlJUQ0RUTUZTZW5kZXJI
YW5kbGVyQ2xpZW50KiBtX2NsaWVudDsKLSAgICBXZWJLaXQ6OldlYk1lZGlhU3RyZWFtVHJhY2sg
bV90cmFjazsKLSAgICBXZWJLaXQ6OldlYlN0cmluZyBtX3RvbmVCdWZmZXI7Ci0gICAgV2ViVGFz
a0xpc3QgbV90YXNrTGlzdDsKLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBNb2NrV2ViUlRDRFRNRlNlbmRlckhhbmRsZXJfaApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5jcHAJKHJl
dmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL01vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEVfV0VCUlRDCi0jaW5jbHVkZSAiTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5o
IgotCi0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0j
aW5jbHVkZSA8cHVibGljL1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudC5oPgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNz
IERhdGFDaGFubmVsUmVhZHlTdGF0ZVRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxNb2NrV2Vi
UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiB7Ci1wdWJsaWM6Ci0gICAgRGF0YUNoYW5uZWxSZWFkeVN0
YXRlVGFzayhNb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyKiBvYmplY3QsIFdlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlckNsaWVudCogZGF0YUNoYW5uZWxDbGllbnQsIFdlYlJUQ0RhdGFDaGFubmVs
SGFuZGxlckNsaWVudDo6UmVhZHlTdGF0ZSBzdGF0ZSkKLSAgICAgICAgOiBXZWJNZXRob2RUYXNr
PE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXI+KG9iamVjdCkKLSAgICAgICAgLCBtX2RhdGFD
aGFubmVsQ2xpZW50KGRhdGFDaGFubmVsQ2xpZW50KQotICAgICAgICAsIG1fc3RhdGUoc3RhdGUp
Ci0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREUK
LSAgICB7Ci0gICAgICAgIG1fZGF0YUNoYW5uZWxDbGllbnQtPmRpZENoYW5nZVJlYWR5U3RhdGUo
bV9zdGF0ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFdlYlJUQ0RhdGFDaGFubmVsSGFuZGxl
ckNsaWVudCogbV9kYXRhQ2hhbm5lbENsaWVudDsKLSAgICBXZWJSVENEYXRhQ2hhbm5lbEhhbmRs
ZXJDbGllbnQ6OlJlYWR5U3RhdGUgbV9zdGF0ZTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotCi1Nb2NrV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyOjpNb2NrV2ViUlRDRGF0YUNoYW5uZWxI
YW5kbGVyKFdlYlN0cmluZyBsYWJlbCwgYm9vbCByZWxpYWJsZSwgV2ViVGVzdERlbGVnYXRlKiBk
ZWxlZ2F0ZSkKLSAgICA6IG1fY2xpZW50KDApCi0gICAgLCBtX2xhYmVsKGxhYmVsKQotICAgICwg
bV9yZWxpYWJsZShyZWxpYWJsZSkKLSAgICAsIG1fZGVsZWdhdGUoZGVsZWdhdGUpCi17Ci19Ci0K
LXZvaWQgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KFdlYlJUQ0RhdGFD
aGFubmVsSGFuZGxlckNsaWVudCogY2xpZW50KQotewotICAgIG1fY2xpZW50ID0gY2xpZW50Owot
ICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3IERhdGFD
aGFubmVsUmVhZHlTdGF0ZVRhc2sodGhpcywgbV9jbGllbnQsIFdlYlJUQ0RhdGFDaGFubmVsSGFu
ZGxlckNsaWVudDo6UmVhZHlTdGF0ZU9wZW4pKTsKLX0KLQotdW5zaWduZWQgbG9uZyBNb2NrV2Vi
UlRDRGF0YUNoYW5uZWxIYW5kbGVyOjpidWZmZXJlZEFtb3VudCgpCi17Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWJvb2wgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0RhdGEo
Y29uc3QgV2ViU3RyaW5nJiBkYXRhKQotewotICAgIGFzc2VydChtX2NsaWVudCk7Ci0gICAgbV9j
bGllbnQtPmRpZFJlY2VpdmVTdHJpbmdEYXRhKGRhdGEpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIGFzc2VydChtX2NsaWVudCk7Ci0gICAgbV9j
bGllbnQtPmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEsIHNpemUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXI6OmNsb3NlKCkKLXsKLSAgICBh
c3NlcnQobV9jbGllbnQpOwotICAgIG1fZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBEYXRhQ2hhbm5l
bFJlYWR5U3RhdGVUYXNrKHRoaXMsIG1fY2xpZW50LCBXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXJD
bGllbnQ6OlJlYWR5U3RhdGVDbG9zZWQpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFX1dF
QlJUQwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
TW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENEYXRhQ2hhbm5lbEhh
bmRsZXIuaAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTW9ja1dlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlcl9oCi0jZGVmaW5lIE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRs
ZXJfaAotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIKLSNp
bmNsdWRlIDxwdWJsaWMvV2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmg+Ci0jaW5jbHVkZSA8cHVi
bGljL1dlYlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFdl
YlRlc3REZWxlZ2F0ZTsKLQotY2xhc3MgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlciA6IHB1
YmxpYyBXZWJLaXQ6OldlYlJUQ0RhdGFDaGFubmVsSGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgTW9j
a1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcihXZWJLaXQ6OldlYlN0cmluZyBsYWJlbCwgYm9vbCBy
ZWxpYWJsZSwgV2ViVGVzdERlbGVnYXRlKik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2xpZW50
KFdlYktpdDo6V2ViUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50KikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyBsYWJlbCgpIE9WRVJSSURFIHsgcmV0dXJuIG1fbGFi
ZWw7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWxpYWJsZSgpIE9WRVJSSURFIHsgcmV0dXJuIG1f
cmVsaWFibGU7IH0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFN0cmluZ0RhdGEoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2VuZFJhd0RhdGEoY29uc3Qg
Y2hhciosIHNpemVfdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgT1ZFUlJJ
REU7Ci0KLSAgICAvLyBXZWJUYXNrIHJlbGF0ZWQgbWV0aG9kcwotICAgIFdlYlRhc2tMaXN0KiB0
YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgTW9ja1dl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlcigpOwotCi0gICAgV2ViS2l0OjpXZWJSVENEYXRhQ2hhbm5l
bEhhbmRsZXJDbGllbnQqIG1fY2xpZW50OwotICAgIFdlYktpdDo6V2ViU3RyaW5nIG1fbGFiZWw7
Ci0gICAgYm9vbCBtX3JlbGlhYmxlOwotICAgIFdlYlRhc2tMaXN0IG1fdGFza0xpc3Q7Ci0gICAg
V2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotfTsKLQotfQotCi0jZW5kaWYgLy8gTW9ja1dl
YlJUQ0RhdGFDaGFubmVsSGFuZGxlcl9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmNwcAkocmV2aXNpb24gMTQ3NzAxKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlJU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzA4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEVfV0VCUlRDCi0jaW5jbHVkZSAiTW9j
a1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oIgotCi0jaW5jbHVkZSAiTW9ja0NvbnN0cmFp
bnRzLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyLmgiCi0jaW5jbHVk
ZSAiTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oIgotI2luY2x1ZGUgIlRlc3RJbnRlcmZh
Y2VzLmgiCi0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSA8cHVibGljL1dl
Yk1lZGlhQ29uc3RyYWludHMuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW0uaD4K
LSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oPgotI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxwdWJsaWMv
V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1Nlc3Np
b25EZXNjcmlwdGlvblJlcXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDU3RhdHNSZXF1
ZXN0Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1N0YXRzUmVzcG9uc2UuaD4KLSNpbmNsdWRl
IDxwdWJsaWMvV2ViUlRDVm9pZFJlcXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFJUQ1Nlc3Npb25EZXNj
cmlwdGlvblJlcXVlc3RTdWNjZWRlZFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxNb2NrV2Vi
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyPiB7Ci1wdWJsaWM6Ci0gICAgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uUmVxdWVzdFN1Y2NlZGVkVGFzayhNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
KiBvYmplY3QsIGNvbnN0IFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgcmVzdWx0KQotICAgICAgICA6IFdlYk1l
dGhvZFRhc2s8TW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcj4ob2JqZWN0KQotICAgICAg
ICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERQotICAgIHsK
LSAgICAgICAgbV9yZXF1ZXN0LnJlcXVlc3RTdWNjZWVkZWQobV9yZXN1bHQpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBXZWJSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0IG1fcmVxdWVzdDsK
LSAgICBXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24gbV9yZXN1bHQ7Ci19OwotCi1jbGFzcyBSVENT
ZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0RmFpbGVkVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNr
PE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IHsKLXB1YmxpYzoKLSAgICBSVENTZXNz
aW9uRGVzY3JpcHRpb25SZXF1ZXN0RmFpbGVkVGFzayhNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyKiBvYmplY3QsIGNvbnN0IFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3QmIHJl
cXVlc3QpCi0gICAgICAgIDogV2ViTWV0aG9kVGFzazxNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyPihvYmplY3QpCi0gICAgICAgICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREUKLSAgICB7Ci0gICAg
ICAgIG1fcmVxdWVzdC5yZXF1ZXN0RmFpbGVkKCJURVNUX0VSUk9SIik7Ci0gICAgfQotCi1wcml2
YXRlOgotICAgIFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3QgbV9yZXF1ZXN0OwotfTsK
LQotY2xhc3MgUlRDU3RhdHNSZXF1ZXN0U3VjY2VlZGVkVGFzayA6IHB1YmxpYyBXZWJNZXRob2RU
YXNrPE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI+IHsKLXB1YmxpYzoKLSAgICBSVENT
dGF0c1JlcXVlc3RTdWNjZWVkZWRUYXNrKE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIq
IG9iamVjdCwgY29uc3QgV2ViS2l0OjpXZWJSVENTdGF0c1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFdlYktpdDo6V2ViUlRDU3RhdHNSZXNwb25zZSYgcmVzcG9uc2UpCi0gICAgICAgIDogV2ViTWV0
aG9kVGFzazxNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyPihvYmplY3QpCi0gICAgICAg
ICwgbV9yZXF1ZXN0KHJlcXVlc3QpCi0gICAgICAgICwgbV9yZXNwb25zZShyZXNwb25zZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERQotICAg
IHsKLSAgICAgICAgbV9yZXF1ZXN0LnJlcXVlc3RTdWNjZWVkZWQobV9yZXNwb25zZSk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFdlYktpdDo6V2ViUlRDU3RhdHNSZXF1ZXN0IG1fcmVxdWVzdDsK
LSAgICBXZWJLaXQ6OldlYlJUQ1N0YXRzUmVzcG9uc2UgbV9yZXNwb25zZTsKLX07Ci0KLWNsYXNz
IFJUQ1ZvaWRSZXF1ZXN0VGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPE1vY2tXZWJSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXI+IHsKLXB1YmxpYzoKLSAgICBSVENWb2lkUmVxdWVzdFRhc2soTW9j
a1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciogb2JqZWN0LCBjb25zdCBXZWJSVENWb2lkUmVx
dWVzdCYgcmVxdWVzdCwgYm9vbCBzdWNjZWVkZWQpCi0gICAgICAgIDogV2ViTWV0aG9kVGFzazxN
b2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyPihvYmplY3QpCi0gICAgICAgICwgbV9yZXF1
ZXN0KHJlcXVlc3QpCi0gICAgICAgICwgbV9zdWNjZWVkZWQoc3VjY2VlZGVkKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFCi0gICAgewotICAg
ICAgICBpZiAobV9zdWNjZWVkZWQpCi0gICAgICAgICAgICBtX3JlcXVlc3QucmVxdWVzdFN1Y2Nl
ZWRlZCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlcXVlc3QucmVxdWVzdEZhaWxl
ZCgiVEVTVF9FUlJPUiIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXZWJSVENWb2lkUmVxdWVz
dCBtX3JlcXVlc3Q7Ci0gICAgYm9vbCBtX3N1Y2NlZWRlZDsKLX07Ci0KLWNsYXNzIFJUQ1BlZXJD
b25uZWN0aW9uU3RhdGVUYXNrIDogcHVibGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlJUQ1BlZXJD
b25uZWN0aW9uSGFuZGxlcj4gewotcHVibGljOgotICAgIFJUQ1BlZXJDb25uZWN0aW9uU3RhdGVU
YXNrKE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIG9iamVjdCwgV2ViUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQsIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudDo6SUNFQ29ubmVjdGlvblN0YXRlIGNvbm5lY3Rpb25TdGF0ZSwgV2ViUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpJQ0VHYXRoZXJpbmdTdGF0ZSBnYXRoZXJpbmdTdGF0ZSkK
LSAgICAgICAgOiBXZWJNZXRob2RUYXNrPE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI+
KG9iamVjdCkKLSAgICAgICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgICAgICwgbV9jb25uZWN0
aW9uU3RhdGUoY29ubmVjdGlvblN0YXRlKQotICAgICAgICAsIG1fZ2F0aGVyaW5nU3RhdGUoZ2F0
aGVyaW5nU3RhdGUpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlk
KCkgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VJQ0VHYXRoZXJp
bmdTdGF0ZShtX2dhdGhlcmluZ1N0YXRlKTsKLSAgICAgICAgbV9jbGllbnQtPmRpZENoYW5nZUlD
RUNvbm5lY3Rpb25TdGF0ZShtX2Nvbm5lY3Rpb25TdGF0ZSk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2Vi
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpJQ0VDb25uZWN0aW9uU3RhdGUgbV9jb25u
ZWN0aW9uU3RhdGU7Ci0gICAgV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpJQ0VH
YXRoZXJpbmdTdGF0ZSBtX2dhdGhlcmluZ1N0YXRlOwotfTsKLQotY2xhc3MgUmVtb3RlRGF0YUNo
YW5uZWxUYXNrIDogcHVibGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9u
SGFuZGxlcj4gewotcHVibGljOgotICAgIFJlbW90ZURhdGFDaGFubmVsVGFzayhNb2NrV2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyKiBvYmplY3QsIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudCogY2xpZW50LCBXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQotICAgICAgICA6IFdl
Yk1ldGhvZFRhc2s8TW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcj4ob2JqZWN0KQotICAg
ICAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAgICAgLCBtX2RlbGVnYXRlKGRlbGVnYXRlKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFCi0g
ICAgewotICAgICAgICBXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIqIHJlbW90ZURhdGFDaGFubmVs
ID0gbmV3IE1vY2tXZWJSVENEYXRhQ2hhbm5lbEhhbmRsZXIoIk1vY2tSZW1vdGVEYXRhQ2hhbm5l
bCIsIHRydWUsIG1fZGVsZWdhdGUpOwotICAgICAgICBtX2NsaWVudC0+ZGlkQWRkUmVtb3RlRGF0
YUNoYW5uZWwocmVtb3RlRGF0YUNoYW5uZWwpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBXZWJS
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXJDbGllbnQqIG1fY2xpZW50OwotICAgIFdlYlRlc3REZWxl
Z2F0ZSogbV9kZWxlZ2F0ZTsKLX07Ci0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1Nb2NrV2Vi
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
KFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogY2xpZW50LCBUZXN0SW50ZXJmYWNl
cyogaW50ZXJmYWNlcykKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fc3RvcHBlZChm
YWxzZSkKLSAgICAsIG1fc3RyZWFtQ291bnQoMCkKLSAgICAsIG1faW50ZXJmYWNlcyhpbnRlcmZh
Y2VzKQotewotfQotCi1ib29sIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmluaXRp
YWxpemUoY29uc3QgV2ViUlRDQ29uZmlndXJhdGlvbiYsIGNvbnN0IFdlYk1lZGlhQ29uc3RyYWlu
dHMmIGNvbnN0cmFpbnRzKQotewotICAgIGlmIChNb2NrQ29uc3RyYWludHM6OnZlcmlmeUNvbnN0
cmFpbnRzKGNvbnN0cmFpbnRzKSkgewotICAgICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCkt
PnBvc3RUYXNrKG5ldyBSVENQZWVyQ29ubmVjdGlvblN0YXRlVGFzayh0aGlzLCBtX2NsaWVudCwg
V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50OjpJQ0VDb25uZWN0aW9uU3RhdGVDb21w
bGV0ZWQsIFdlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudDo6SUNFR2F0aGVyaW5nU3Rh
dGVDb21wbGV0ZSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6Y3JlYXRl
T2ZmZXIoY29uc3QgV2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgV2ViTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMpCi17Ci0gICAgV2ViU3RyaW5nIHNo
b3VsZFN1Y2NlZWQ7Ci0gICAgaWYgKGNvbnN0cmFpbnRzLmdldE1hbmRhdG9yeUNvbnN0cmFpbnRW
YWx1ZSgic3VjY2VlZCIsIHNob3VsZFN1Y2NlZWQpICYmIHNob3VsZFN1Y2NlZWQgPT0gInRydWUi
KSB7Ci0gICAgICAgIFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBzZXNzaW9uRGVzY3JpcHRpb247
Ci0gICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbi5pbml0aWFsaXplKCJvZmZlciIsICJsb2NhbCIp
OwotICAgICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCktPnBvc3RUYXNrKG5ldyBSVENTZXNz
aW9uRGVzY3JpcHRpb25SZXF1ZXN0U3VjY2VkZWRUYXNrKHRoaXMsIHJlcXVlc3QsIHNlc3Npb25E
ZXNjcmlwdGlvbikpOwotICAgIH0gZWxzZQotICAgICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRl
KCktPnBvc3RUYXNrKG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb25SZXF1ZXN0RmFpbGVkVGFzayh0
aGlzLCByZXF1ZXN0KSk7Ci19Ci0KLXZvaWQgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
cjo6Y3JlYXRlQW5zd2VyKGNvbnN0IFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFdlYk1lZGlhQ29uc3RyYWludHMmKQotewotICAgIGlmICghbV9yZW1vdGVE
ZXNjcmlwdGlvbi5pc051bGwoKSkgewotICAgICAgICBXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24g
c2Vzc2lvbkRlc2NyaXB0aW9uOwotICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb24uaW5pdGlhbGl6
ZSgiYW5zd2VyIiwgImxvY2FsIik7Ci0gICAgICAgIG1faW50ZXJmYWNlcy0+ZGVsZWdhdGUoKS0+
cG9zdFRhc2sobmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3RTdWNjZWRlZFRhc2sodGhp
cywgcmVxdWVzdCwgc2Vzc2lvbkRlc2NyaXB0aW9uKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
aW50ZXJmYWNlcy0+ZGVsZWdhdGUoKS0+cG9zdFRhc2sobmV3IFJUQ1Nlc3Npb25EZXNjcmlwdGlv
blJlcXVlc3RGYWlsZWRUYXNrKHRoaXMsIHJlcXVlc3QpKTsKLX0KLQotdm9pZCBNb2NrV2ViUlRD
UGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFdlYlJUQ1Zv
aWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24mIGxvY2Fs
RGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFsb2NhbERlc2NyaXB0aW9uLmlzTnVsbCgpICYmIGxv
Y2FsRGVzY3JpcHRpb24uc2RwKCkgPT0gImxvY2FsIikgewotICAgICAgICBtX2xvY2FsRGVzY3Jp
cHRpb24gPSBsb2NhbERlc2NyaXB0aW9uOwotICAgICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRl
KCktPnBvc3RUYXNrKG5ldyBSVENWb2lkUmVxdWVzdFRhc2sodGhpcywgcmVxdWVzdCwgdHJ1ZSkp
OwotICAgIH0gZWxzZQotICAgICAgICBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCktPnBvc3RUYXNr
KG5ldyBSVENWb2lkUmVxdWVzdFRhc2sodGhpcywgcmVxdWVzdCwgZmFsc2UpKTsKLX0KLQotdm9p
ZCBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpzZXRSZW1vdGVEZXNjcmlwdGlvbihj
b25zdCBXZWJSVENWb2lkUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uJiByZW1vdGVEZXNjcmlwdGlvbikKLXsKLSAgICBpZiAoIXJlbW90ZURlc2NyaXB0aW9u
LmlzTnVsbCgpICYmIHJlbW90ZURlc2NyaXB0aW9uLnNkcCgpID09ICJyZW1vdGUiKSB7Ci0gICAg
ICAgIG1fcmVtb3RlRGVzY3JpcHRpb24gPSByZW1vdGVEZXNjcmlwdGlvbjsKLSAgICAgICAgbV9p
bnRlcmZhY2VzLT5kZWxlZ2F0ZSgpLT5wb3N0VGFzayhuZXcgUlRDVm9pZFJlcXVlc3RUYXNrKHRo
aXMsIHJlcXVlc3QsIHRydWUpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9pbnRlcmZhY2VzLT5k
ZWxlZ2F0ZSgpLT5wb3N0VGFzayhuZXcgUlRDVm9pZFJlcXVlc3RUYXNrKHRoaXMsIHJlcXVlc3Qs
IGZhbHNlKSk7Ci19Ci0KLVdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBNb2NrV2ViUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyOjpsb2NhbERlc2NyaXB0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9sb2Nh
bERlc2NyaXB0aW9uOwotfQotCi1XZWJSVENTZXNzaW9uRGVzY3JpcHRpb24gTW9ja1dlYlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlcjo6cmVtb3RlRGVzY3JpcHRpb24oKQotewotICAgIHJldHVybiBt
X3JlbW90ZURlc2NyaXB0aW9uOwotfQotCi1ib29sIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhh
bmRsZXI6OnVwZGF0ZUlDRShjb25zdCBXZWJSVENDb25maWd1cmF0aW9uJiwgY29uc3QgV2ViTWVk
aWFDb25zdHJhaW50cyYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTW9ja1dlYlJU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6YWRkSUNFQ2FuZGlkYXRlKGNvbnN0IFdlYlJUQ0lDRUNh
bmRpZGF0ZSYgaWNlQ2FuZGlkYXRlKQotewotICAgIG1fY2xpZW50LT5kaWRHZW5lcmF0ZUlDRUNh
bmRpZGF0ZShpY2VDYW5kaWRhdGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1vY2tX
ZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmFkZFN0cmVhbShjb25zdCBXZWJNZWRpYVN0cmVh
bSYgc3RyZWFtLCBjb25zdCBXZWJNZWRpYUNvbnN0cmFpbnRzJikKLXsKLSAgICArK21fc3RyZWFt
Q291bnQ7Ci0gICAgbV9jbGllbnQtPm5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcjo6cmVtb3ZlU3Ry
ZWFtKGNvbnN0IFdlYk1lZGlhU3RyZWFtJiBzdHJlYW0pCi17Ci0gICAgLS1tX3N0cmVhbUNvdW50
OwotICAgIG1fY2xpZW50LT5uZWdvdGlhdGlvbk5lZWRlZCgpOwotfQotCi12b2lkIE1vY2tXZWJS
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmdldFN0YXRzKGNvbnN0IFdlYlJUQ1N0YXRzUmVxdWVz
dCYgcmVxdWVzdCkKLXsKLSAgICBXZWJSVENTdGF0c1Jlc3BvbnNlIHJlc3BvbnNlID0gcmVxdWVz
dC5jcmVhdGVSZXNwb25zZSgpOwotICAgIGRvdWJsZSBjdXJyZW50RGF0ZSA9IG1faW50ZXJmYWNl
cy0+ZGVsZWdhdGUoKS0+Z2V0Q3VycmVudFRpbWVJbk1pbGxpc2Vjb25kKCk7Ci0gICAgaWYgKHJl
cXVlc3QuaGFzU2VsZWN0b3IoKSkgewotICAgICAgICBXZWJNZWRpYVN0cmVhbSBzdHJlYW0gPSBy
ZXF1ZXN0LnN0cmVhbSgpOwotICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gY2hlY2sgdGhh
dCB0aGUgZmV0Y2hlZCB2YWx1ZXMgYXJlIHZhbGlkLgotICAgICAgICBzaXplX3QgcmVwb3J0SW5k
ZXggPSByZXNwb25zZS5hZGRSZXBvcnQoIk1vY2sgdmlkZW8iLCAic3NyYyIsIGN1cnJlbnREYXRl
KTsKLSAgICAgICAgcmVzcG9uc2UuYWRkU3RhdGlzdGljKHJlcG9ydEluZGV4LCAidHlwZSIsICJ2
aWRlbyIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9zdHJl
YW1Db3VudDsgKytpKSB7Ci0gICAgICAgICAgICBzaXplX3QgcmVwb3J0SW5kZXggPSByZXNwb25z
ZS5hZGRSZXBvcnQoIk1vY2sgYXVkaW8iLCAic3NyYyIsIGN1cnJlbnREYXRlKTsKLSAgICAgICAg
ICAgIHJlc3BvbnNlLmFkZFN0YXRpc3RpYyhyZXBvcnRJbmRleCwgInR5cGUiLCAiYXVkaW8iKTsK
LSAgICAgICAgICAgIHJlcG9ydEluZGV4ID0gcmVzcG9uc2UuYWRkUmVwb3J0KCJNb2NrIHZpZGVv
IiwgInNzcmMiLCBjdXJyZW50RGF0ZSk7Ci0gICAgICAgICAgICByZXNwb25zZS5hZGRTdGF0aXN0
aWMocmVwb3J0SW5kZXgsICJ0eXBlIiwgInZpZGVvIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
bV9pbnRlcmZhY2VzLT5kZWxlZ2F0ZSgpLT5wb3N0VGFzayhuZXcgUlRDU3RhdHNSZXF1ZXN0U3Vj
Y2VlZGVkVGFzayh0aGlzLCByZXF1ZXN0LCByZXNwb25zZSkpOwotfQotCi1XZWJSVENEYXRhQ2hh
bm5lbEhhbmRsZXIqIE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OmNyZWF0ZURhdGFD
aGFubmVsKGNvbnN0IFdlYlN0cmluZyYgbGFiZWwsIGJvb2wgcmVsaWFibGUpCi17Ci0gICAgbV9p
bnRlcmZhY2VzLT5kZWxlZ2F0ZSgpLT5wb3N0VGFzayhuZXcgUmVtb3RlRGF0YUNoYW5uZWxUYXNr
KHRoaXMsIG1fY2xpZW50LCBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCkpKTsKLQotICAgIHJldHVy
biBuZXcgTW9ja1dlYlJUQ0RhdGFDaGFubmVsSGFuZGxlcihsYWJlbCwgcmVsaWFibGUsIG1faW50
ZXJmYWNlcy0+ZGVsZWdhdGUoKSk7Ci19Ci0KLVdlYlJUQ0RUTUZTZW5kZXJIYW5kbGVyKiBNb2Nr
V2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyOjpjcmVhdGVEVE1GU2VuZGVyKGNvbnN0IFdlYk1l
ZGlhU3RyZWFtVHJhY2smIHRyYWNrKQotewotICAgIHJldHVybiBuZXcgTW9ja1dlYlJUQ0RUTUZT
ZW5kZXJIYW5kbGVyKHRyYWNrLCBtX2ludGVyZmFjZXMtPmRlbGVnYXRlKCkpOwotfQotCi12b2lk
IE1vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI6OnN0b3AoKQotewotICAgIG1fc3RvcHBl
ZCA9IHRydWU7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRV9XRUJSVEMKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJSVENQZWVyQ29u
bmVjdGlvbkhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgJKHJl
dmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL01vY2tXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyX2gK
LSNkZWZpbmUgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcl9oCi0KLSNpbmNsdWRlICJU
ZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJS
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlJUQ1Nlc3Npb25EZXNjcmlwdGlv
blJlcXVlc3QuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViUlRDU3RhdHNSZXF1ZXN0Lmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyQ2xpZW50
OwotfTsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBUZXN0SW50ZXJmYWNl
czsKLQotY2xhc3MgTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciA6IHB1YmxpYyBXZWJL
aXQ6OldlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciB7Ci1wdWJsaWM6Ci0gICAgTW9ja1dlYlJU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJLaXQ6OldlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ckNsaWVudCosIFRlc3RJbnRlcmZhY2VzKik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6
ZShjb25zdCBXZWJLaXQ6OldlYlJUQ0NvbmZpZ3VyYXRpb24mLCBjb25zdCBXZWJLaXQ6OldlYk1l
ZGlhQ29uc3RyYWludHMmKSBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVPZmZl
cihjb25zdCBXZWJLaXQ6OldlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvblJlcXVlc3QmLCBjb25zdCBX
ZWJLaXQ6OldlYk1lZGlhQ29uc3RyYWludHMmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQW5zd2VyKGNvbnN0IFdlYktpdDo6V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uUmVxdWVz
dCYsIGNvbnN0IFdlYktpdDo6V2ViTWVkaWFDb25zdHJhaW50cyYpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFdlYktpdDo6V2ViUlRDVm9pZFJl
cXVlc3QmLCBjb25zdCBXZWJLaXQ6OldlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBXZWJLaXQ6Oldl
YlJUQ1ZvaWRSZXF1ZXN0JiwgY29uc3QgV2ViS2l0OjpXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24m
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
IGxvY2FsRGVzY3JpcHRpb24oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZURlc2NyaXB0aW9uKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBib29sIHVwZGF0ZUlDRShjb25zdCBXZWJLaXQ6OldlYlJUQ0NvbmZpZ3VyYXRpb24mLCBj
b25zdCBXZWJLaXQ6OldlYk1lZGlhQ29uc3RyYWludHMmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGJvb2wgYWRkSUNFQ2FuZGlkYXRlKGNvbnN0IFdlYktpdDo6V2ViUlRDSUNFQ2FuZGlkYXRlJikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGFkZFN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1l
ZGlhU3RyZWFtJiwgY29uc3QgV2ViS2l0OjpXZWJNZWRpYUNvbnN0cmFpbnRzJikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVN0cmVhbShjb25zdCBXZWJLaXQ6OldlYk1lZGlhU3Ry
ZWFtJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFN0YXRzKGNvbnN0IFdlYktpdDo6
V2ViUlRDU3RhdHNSZXF1ZXN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlJU
Q0RhdGFDaGFubmVsSGFuZGxlciogY3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIGxhYmVsLCBib29sIHJlbGlhYmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViUlRDRFRNRlNlbmRlckhhbmRsZXIqIGNyZWF0ZURUTUZTZW5kZXIoY29uc3QgV2ViS2l0
OjpXZWJNZWRpYVN0cmVhbVRyYWNrJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3Ao
KSBPVkVSUklERTsKLQotICAgIC8vIFdlYlRhc2sgcmVsYXRlZCBtZXRob2RzCi0gICAgV2ViVGFz
a0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0KLQotcHJpdmF0ZToKLSAg
ICBNb2NrV2ViUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKCkgeyB9Ci0KLSAgICBXZWJLaXQ6Oldl
YlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlckNsaWVudCogbV9jbGllbnQ7Ci0gICAgYm9vbCBtX3N0
b3BwZWQ7Ci0gICAgV2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICBXZWJLaXQ6OldlYlJUQ1Nl
c3Npb25EZXNjcmlwdGlvbiBtX2xvY2FsRGVzY3JpcHRpb247Ci0gICAgV2ViS2l0OjpXZWJSVENT
ZXNzaW9uRGVzY3JpcHRpb24gbV9yZW1vdGVEZXNjcmlwdGlvbjsKLSAgICBpbnQgbV9zdHJlYW1D
b3VudDsKLSAgICBUZXN0SW50ZXJmYWNlcyogbV9pbnRlcmZhY2VzOwotfTsKLQotfQotCi0jZW5k
aWYgLy8gTW9ja1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlcl9oCi0KSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJXZWJTcGVlY2hJbnB1dExpc3Rl
bmVyLmgiCi0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSA8cHVibGljL1dl
YkNTdHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+Ci0KLSNpZiBFTkFCTEVf
SU5QVVRfU1BFRUNICi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLVdlYlNw
ZWVjaElucHV0UmVzdWx0QXJyYXkgbWFrZVJlY3RSZXN1bHQoY29uc3QgV2ViUmVjdCYgcmVjdCkK
LXsKLSAgICBjaGFyIGJ1ZmZlclsxMDBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlciksICIlZCwlZCwlZCwlZCIsIHJlY3QueCwgcmVjdC55LCByZWN0LndpZHRoLCByZWN0Lmhl
aWdodCk7Ci0KLSAgICBXZWJTcGVlY2hJbnB1dFJlc3VsdCByZXM7Ci0gICAgcmVzLmFzc2lnbihX
ZWJTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpKSwgMS4w
KTsKLQotICAgIFdlYlNwZWVjaElucHV0UmVzdWx0QXJyYXkgcmVzdWx0czsKLSAgICByZXN1bHRz
LmFzc2lnbigmcmVzLCAxKTsKLSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotfQotCi1Nb2NrV2Vi
U3BlZWNoSW5wdXRDb250cm9sbGVyOjpNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYlNw
ZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQotICAgIDogbV9saXN0ZW5lcihsaXN0ZW5lcikK
LSAgICAsIG1fc3BlZWNoVGFzaygwKQotICAgICwgbV9yZWNvcmRpbmcoZmFsc2UpCi0gICAgLCBt
X3JlcXVlc3RJZCgtMSkKLSAgICAsIG1fZHVtcFJlY3QoZmFsc2UpCi0gICAgLCBtX2RlbGVnYXRl
KDApCi17Ci19Ci0KLU1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6On5Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyKCkKLXsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9s
bGVyOjpzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQotewotICAgIG1fZGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
OjphZGRNb2NrUmVjb2duaXRpb25SZXN1bHQoY29uc3QgV2ViU3RyaW5nJiByZXN1bHQsIGRvdWJs
ZSBjb25maWRlbmNlLCBjb25zdCBXZWJTdHJpbmcmIGxhbmd1YWdlKQotewotICAgIFdlYlNwZWVj
aElucHV0UmVzdWx0IHJlczsKLSAgICByZXMuYXNzaWduKHJlc3VsdCwgY29uZmlkZW5jZSk7Ci0K
LSAgICBpZiAobGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICBtX3Jlc3VsdHNGb3JFbXB0eUxh
bmd1YWdlLnB1c2hfYmFjayhyZXMpOwotICAgIGVsc2UgewotICAgICAgICBzdHJpbmcgbGFuZ1N0
cmluZyA9IGxhbmd1YWdlLnV0ZjgoKTsKLSAgICAgICAgaWYgKG1fcmVjb2duaXRpb25SZXN1bHRz
LmZpbmQobGFuZ1N0cmluZykgPT0gbV9yZWNvZ25pdGlvblJlc3VsdHMuZW5kKCkpCi0gICAgICAg
ICAgICBtX3JlY29nbml0aW9uUmVzdWx0c1tsYW5nU3RyaW5nXSA9IHZlY3RvcjxXZWJTcGVlY2hJ
bnB1dFJlc3VsdD4oKTsKLSAgICAgICAgbV9yZWNvZ25pdGlvblJlc3VsdHNbbGFuZ1N0cmluZ10u
cHVzaF9iYWNrKHJlcyk7Ci0gICAgfQotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXI6OnNldER1bXBSZWN0KGJvb2wgZHVtcFJlY3QpCi17Ci0gICAgbV9kdW1wUmVjdCA9IGR1
bXBSZWN0OwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OmNsZWFyUmVz
dWx0cygpCi17Ci0gICAgbV9yZXN1bHRzRm9yRW1wdHlMYW5ndWFnZS5jbGVhcigpOwotICAgIG1f
cmVjb2duaXRpb25SZXN1bHRzLmNsZWFyKCk7Ci0gICAgbV9kdW1wUmVjdCA9IGZhbHNlOwotfQot
Ci1ib29sIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OnN0YXJ0UmVjb2duaXRpb24oaW50
IHJlcXVlc3RJZCwgY29uc3QgV2ViUmVjdCYgZWxlbWVudFJlY3QsIGNvbnN0IFdlYlN0cmluZyYg
bGFuZ3VhZ2UsIGNvbnN0IFdlYlN0cmluZyYgZ3JhbW1hciwgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mIG9yaWdpbikKLXsKLSAgICBpZiAobV9zcGVlY2hUYXNrKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBtX3JlcXVlc3RJZCA9IHJlcXVlc3RJZDsKLSAgICBtX3JlcXVlc3RSZWN0ID0g
ZWxlbWVudFJlY3Q7Ci0gICAgbV9yZWNvcmRpbmcgPSB0cnVlOwotICAgIG1fbGFuZ3VhZ2UgPSBs
YW5ndWFnZS51dGY4KCk7Ci0KLSAgICBtX3NwZWVjaFRhc2sgPSBuZXcgU3BlZWNoVGFzayh0aGlz
KTsKLSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhtX3NwZWVjaFRhc2spOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6Y2FuY2VsUmVj
b2duaXRpb24oaW50IHJlcXVlc3RJZCkKLXsKLSAgICBpZiAobV9zcGVlY2hUYXNrKSB7Ci0gICAg
ICAgIFdFQktJVF9BU1NFUlQocmVxdWVzdElkID09IG1fcmVxdWVzdElkKTsKLQotICAgICAgICBt
X3NwZWVjaFRhc2stPnN0b3AoKTsKLSAgICAgICAgbV9yZWNvcmRpbmcgPSBmYWxzZTsKLSAgICAg
ICAgbV9saXN0ZW5lci0+ZGlkQ29tcGxldGVSZWNvZ25pdGlvbihtX3JlcXVlc3RJZCk7Ci0gICAg
ICAgIG1fcmVxdWVzdElkID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcjo6c3RvcFJlY29yZGluZyhpbnQgcmVxdWVzdElkKQotewotICAgIFdFQktJVF9B
U1NFUlQocmVxdWVzdElkID09IG1fcmVxdWVzdElkKTsKLSAgICBpZiAobV9zcGVlY2hUYXNrICYm
IG1fcmVjb3JkaW5nKSB7Ci0gICAgICAgIG1fc3BlZWNoVGFzay0+c3RvcCgpOwotICAgICAgICBz
cGVlY2hUYXNrRmlyZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaElucHV0Q29u
dHJvbGxlcjo6c3BlZWNoVGFza0ZpcmVkKCkKLXsKLSAgICBpZiAobV9yZWNvcmRpbmcpIHsKLSAg
ICAgICAgbV9yZWNvcmRpbmcgPSBmYWxzZTsKLSAgICAgICAgbV9saXN0ZW5lci0+ZGlkQ29tcGxl
dGVSZWNvcmRpbmcobV9yZXF1ZXN0SWQpOwotCi0gICAgICAgIG1fc3BlZWNoVGFzayA9IG5ldyBT
cGVlY2hUYXNrKHRoaXMpOwotICAgICAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhtX3NwZWVjaFRh
c2spOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvb2wgbm9SZXN1bHRzRm91bmQgPSBmYWxzZTsK
LSAgICAgICAgLy8gV2UgdGFrZSBhIGNvcHkgb2YgdGhlIHJlcXVlc3RJZCBoZXJlIHNvIHRoYXQg
aWYgc2NyaXB0cyBkZXN0cm95ZWQgdGhlIGlucHV0IGVsZW1lbnQKLSAgICAgICAgLy8gaW5zaWRl
IG9uZSBvZiB0aGUgY2FsbGJhY2tzIGJlbG93LCB3ZSdsbCBzdGlsbCBrbm93IHdoYXQgdGhpcyBz
ZXNzaW9uJ3MgcmVxdWVzdElkIHdhcy4KLSAgICAgICAgaW50IHJlcXVlc3RJZCA9IG1fcmVxdWVz
dElkOwotICAgICAgICBtX3JlcXVlc3RJZCA9IDA7Ci0KLSAgICAgICAgaWYgKG1fZHVtcFJlY3Qp
IHsKLSAgICAgICAgICAgIG1fbGlzdGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJ
ZCwgbWFrZVJlY3RSZXN1bHQobV9yZXF1ZXN0UmVjdCkpOwotICAgICAgICB9IGVsc2UgaWYgKG1f
bGFuZ3VhZ2UuZW1wdHkoKSkgewotICAgICAgICAgICAgLy8gRW1wdHkgbGFuZ3VhZ2UgY2FzZSBt
dXN0IGJlIGhhbmRsZWQgc2VwYXJhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIEhhc2hNYXAg
YW5kIGVtcHR5IGtleXMuCi0gICAgICAgICAgICBpZiAoIW1fcmVzdWx0c0ZvckVtcHR5TGFuZ3Vh
Z2UuZW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtX2xpc3RlbmVyLT5zZXRSZWNvZ25pdGlvblJl
c3VsdChyZXF1ZXN0SWQsIG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2UpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIG5vUmVzdWx0c0ZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChtX3JlY29nbml0aW9uUmVzdWx0cy5maW5kKG1fbGFuZ3Vh
Z2UpICE9IG1fcmVjb2duaXRpb25SZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIG1fbGlz
dGVuZXItPnNldFJlY29nbml0aW9uUmVzdWx0KHJlcXVlc3RJZCwgbV9yZWNvZ25pdGlvblJlc3Vs
dHNbbV9sYW5ndWFnZV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5vUmVz
dWx0c0ZvdW5kID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChub1Jlc3VsdHNGb3Vu
ZCkgewotICAgICAgICAgICAgLy8gQ2FuJ3QgYXZvaWQgc2V0dGluZyBhIHJlc3VsdCBldmVuIGlm
IG5vIHJlc3VsdCB3YXMgc2V0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UuCi0gICAgICAgICAgICAv
LyBUaGlzIHdvdWxkIGF2b2lkIGdlbmVyYXRpbmcgdGhlIGV2ZW50cyB1c2VkIHRvIGNoZWNrIHRo
ZSByZXN1bHRzIGFuZCB0aGUgdGVzdCB3b3VsZCB0aW1lb3V0LgotICAgICAgICAgICAgc3RyaW5n
IGVycm9yKCJlcnJvcjogbm8gcmVzdWx0IGZvdW5kIGZvciBsYW5ndWFnZSAnIik7Ci0gICAgICAg
ICAgICBlcnJvci5hcHBlbmQobV9sYW5ndWFnZSk7Ci0gICAgICAgICAgICBlcnJvci5hcHBlbmQo
IiciKTsKLQotICAgICAgICAgICAgV2ViU3BlZWNoSW5wdXRSZXN1bHQgcmVzOwotICAgICAgICAg
ICAgcmVzLmFzc2lnbihXZWJTdHJpbmc6OmZyb21VVEY4KGVycm9yKSwgMS4wKTsKLQotICAgICAg
ICAgICAgdmVjdG9yPFdlYlNwZWVjaElucHV0UmVzdWx0PiByZXN1bHRzOwotICAgICAgICAgICAg
cmVzdWx0cy5wdXNoX2JhY2socmVzKTsKLQotICAgICAgICAgICAgbV9saXN0ZW5lci0+c2V0UmVj
b2duaXRpb25SZXN1bHQocmVxdWVzdElkLCByZXN1bHRzKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcjo6U3BlZWNoVGFzazo6U3BlZWNoVGFzayhN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBtb2NrKQotICAgIDogV2ViTWV0aG9kVGFzazxN
b2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPjo6V2ViTWV0aG9kVGFzayhtb2NrKQotewotfQot
Ci12b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVjaFRhc2s6OnN0b3AoKQot
ewotICAgIG1fb2JqZWN0LT5tX3NwZWVjaFRhc2sgPSAwOwotICAgIGNhbmNlbCgpOwotICAgIGRl
bGV0ZSB0aGlzOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI6OlNwZWVj
aFRhc2s6OnJ1bklmVmFsaWQoKQotewotICAgIG1fb2JqZWN0LT5tX3NwZWVjaFRhc2sgPSAwOwot
ICAgIG1fb2JqZWN0LT5zcGVlY2hUYXNrRmlyZWQoKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL01vY2tXZWJTcGVl
Y2hJbnB1dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
X2gKLSNkZWZpbmUgTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJU
ZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgiCi0jaW5j
bHVkZSAiV2ViU3BlZWNoSW5wdXRSZXN1bHQuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5j
bHVkZSA8bWFwPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJTZWN1
cml0eU9yaWdpbjsKLWNsYXNzIFdlYlNwZWVjaElucHV0TGlzdGVuZXI7Ci1jbGFzcyBXZWJTdHJp
bmc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVn
YXRlOwotCi1jbGFzcyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyIDogcHVibGljIFdlYktp
dDo6V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBNb2Nr
V2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciop
OwotICAgIH5Nb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIGFkZE1v
Y2tSZWNvZ25pdGlvblJlc3VsdChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgcmVzdWx0LCBkb3Vi
bGUgY29uZmlkZW5jZSwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGxhbmd1YWdlKTsKLSAgICB2
b2lkIHNldER1bXBSZWN0KGJvb2wpOwotICAgIHZvaWQgY2xlYXJSZXN1bHRzKCk7Ci0gICAgdm9p
ZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKLQotICAgIC8vIFdlYlNwZWVjaElucHV0
Q29udHJvbGxlciBpbXBsZW1lbnRhdGlvbjoKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRSZWNvZ25p
dGlvbihpbnQgcmVxdWVzdElkLCBjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGVsZW1lbnRSZWN0LCBj
b25zdCBXZWJLaXQ6OldlYlN0cmluZyYgbGFuZ3VhZ2UsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiBncmFtbWFyLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIGNhbmNlbFJlY29nbml0aW9uKGludCByZXF1ZXN0SWQpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBzdG9wUmVjb3JkaW5nKGludCByZXF1ZXN0SWQpIE9WRVJSSURF
OwotCi0gICAgV2ViVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1fdGFza0xpc3Q7IH0K
LQotcHJpdmF0ZToKLSAgICB2b2lkIHNwZWVjaFRhc2tGaXJlZCgpOwotCi0gICAgY2xhc3MgU3Bl
ZWNoVGFzayA6IHB1YmxpYyBXZWJNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNwZWVjaFRhc2soTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlciopOwotICAgICAgICB2b2lkIHN0b3AoKTsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJREU7Ci0gICAgfTsKLQotICAgIFdl
YktpdDo6V2ViU3BlZWNoSW5wdXRMaXN0ZW5lciogbV9saXN0ZW5lcjsKLQotICAgIFdlYlRhc2tM
aXN0IG1fdGFza0xpc3Q7Ci0gICAgU3BlZWNoVGFzayogbV9zcGVlY2hUYXNrOwotCi0gICAgYm9v
bCBtX3JlY29yZGluZzsKLSAgICBpbnQgbV9yZXF1ZXN0SWQ7Ci0gICAgV2ViS2l0OjpXZWJSZWN0
IG1fcmVxdWVzdFJlY3Q7Ci0gICAgc3RkOjpzdHJpbmcgbV9sYW5ndWFnZTsKLQotICAgIHN0ZDo6
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxXZWJLaXQ6OldlYlNwZWVjaElucHV0UmVzdWx0
PiA+IG1fcmVjb2duaXRpb25SZXN1bHRzOwotICAgIHN0ZDo6dmVjdG9yPFdlYktpdDo6V2ViU3Bl
ZWNoSW5wdXRSZXN1bHQ+IG1fcmVzdWx0c0ZvckVtcHR5TGFuZ3VhZ2U7Ci0gICAgYm9vbCBtX2R1
bXBSZWN0OwotCi0gICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gTW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlcl9oCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwCShyZXZpc2lvbiAxNDc3MDEpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3Bl
ZWNoUmVjb2duaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQ4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIu
aCIKLQotI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAi
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudC5oIgotI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5o
IgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFt
ZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBUYXNrIGNsYXNzIGZv
ciBjYWxsaW5nIGEgY2xpZW50IGZ1bmN0aW9uIHRoYXQgZG9lcyBub3QgdGFrZSBhbnkgcGFyYW1l
dGVycy4KLXR5cGVkZWYgdm9pZCAoV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6KkNsaWVudEZ1
bmN0aW9uUG9pbnRlcikoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKTsKLWNsYXNz
IENsaWVudENhbGxUYXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrIHsK
LXB1YmxpYzoKLSAgICBDbGllbnRDYWxsVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9j
aywgQ2xpZW50RnVuY3Rpb25Qb2ludGVyIGZ1bmN0aW9uKQotICAgICAgICA6IE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyOjpUYXNrKG1vY2spCi0gICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURFIHsgKG1fcmVj
b2duaXplci0+Y2xpZW50KCktPiptX2Z1bmN0aW9uKShtX3JlY29nbml6ZXItPmhhbmRsZSgpKTsg
fQotCi1wcml2YXRlOgotICAgIENsaWVudEZ1bmN0aW9uUG9pbnRlciBtX2Z1bmN0aW9uOwotfTsK
LQotLy8gVGFzayBmb3IgZGVsaXZlcmluZyBhIHJlc3VsdCBldmVudC4KLWNsYXNzIFJlc3VsdFRh
c2sgOiBwdWJsaWMgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlRhc2sgewotcHVibGljOgotICAg
IFJlc3VsdFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1vY2ssIGNvbnN0IFdlYlN0cmlu
ZyB0cmFuc2NyaXB0LCBmbG9hdCBjb25maWRlbmNlKQotICAgICAgICA6IE1vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyOjpUYXNrKG1vY2spCi0gICAgICAgICwgbV90cmFuc2NyaXB0KHRyYW5zY3JpcHQp
Ci0gICAgICAgICwgbV9jb25maWRlbmNlKGNvbmZpZGVuY2UpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgV2ViVmVjdG9yPFdl
YlN0cmluZz4gdHJhbnNjcmlwdHMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7Ci0gICAgICAgIFdl
YlZlY3RvcjxmbG9hdD4gY29uZmlkZW5jZXMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7Ci0gICAg
ICAgIHRyYW5zY3JpcHRzWzBdID0gbV90cmFuc2NyaXB0OwotICAgICAgICBjb25maWRlbmNlc1sw
XSA9IG1fY29uZmlkZW5jZTsKLSAgICAgICAgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0aW9u
UmVzdWx0PiBmaW5hbFJlc3VsdHMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7Ci0gICAgICAgIFdl
YlZlY3RvcjxXZWJTcGVlY2hSZWNvZ25pdGlvblJlc3VsdD4gaW50ZXJpbVJlc3VsdHM7Ci0gICAg
ICAgIGZpbmFsUmVzdWx0c1swXS5hc3NpZ24odHJhbnNjcmlwdHMsIGNvbmZpZGVuY2VzLCB0cnVl
KTsKLQotICAgICAgICBtX3JlY29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzdWx0cyht
X3JlY29nbml6ZXItPmhhbmRsZSgpLCBmaW5hbFJlc3VsdHMsIGludGVyaW1SZXN1bHRzKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViU3RyaW5nIG1fdHJhbnNjcmlwdDsKLSAgICBmbG9hdCBt
X2NvbmZpZGVuY2U7Ci19OwotCi0vLyBUYXNrIGZvciBkZWxpdmVyaW5nIGEgbm9tYXRjaCBldmVu
dC4KLWNsYXNzIE5vTWF0Y2hUYXNrIDogcHVibGljIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpU
YXNrIHsKLXB1YmxpYzoKLSAgICBOb01hdGNoVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciog
bW9jaykgOiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayhtb2NrKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUgeyBtX3JlY29nbml6ZXItPmNsaWVudCgpLT5kaWRSZWNl
aXZlTm9NYXRjaChtX3JlY29nbml6ZXItPmhhbmRsZSgpLCBXZWJTcGVlY2hSZWNvZ25pdGlvblJl
c3VsdCgpKTsgfQotfTsKLQotLy8gVGFzayBmb3IgZGVsaXZlcmluZyBhbiBlcnJvciBldmVudC4K
LWNsYXNzIEVycm9yVGFzayA6IHB1YmxpYyBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6VGFzayB7
Ci1wdWJsaWM6Ci0gICAgRXJyb3JUYXNrKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKiBtb2NrLCBX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpFcnJvckNvZGUgY29kZSwgY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlKQotICAgICAgICA6IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpUYXNrKG1vY2sp
Ci0gICAgICAgICwgbV9jb2RlKGNvZGUpCi0gICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERSB7IG1fcmVjb2du
aXplci0+Y2xpZW50KCktPmRpZFJlY2VpdmVFcnJvcihtX3JlY29nbml6ZXItPmhhbmRsZSgpLCBt
X21lc3NhZ2UsIG1fY29kZSk7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJTcGVlY2hSZWNvZ25pemVy
Q2xpZW50OjpFcnJvckNvZGUgbV9jb2RlOwotICAgIFdlYlN0cmluZyBtX21lc3NhZ2U7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZQotCi1Nb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6TW9ja1dlYlNwZWVj
aFJlY29nbml6ZXIoKQotICAgIDogbV93YXNBYm9ydGVkKGZhbHNlKQotICAgICwgbV90YXNrUXVl
dWVSdW5uaW5nKGZhbHNlKQotICAgICwgbV9kZWxlZ2F0ZSgwKQotewotfQotCi1Nb2NrV2ViU3Bl
ZWNoUmVjb2duaXplcjo6fk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCkKLXsKLSAgICBjbGVhclRh
c2tRdWV1ZSgpOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzZXREZWxlZ2F0
ZShXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQotewotICAgIG1fZGVsZWdhdGUgPSBkZWxlZ2F0
ZTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnQoY29uc3QgV2ViU3Bl
ZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSwgY29uc3QgV2ViU3BlZWNoUmVjb2duaXRpb25Q
YXJhbXMmIHBhcmFtcywgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQotewotICAg
IG1fd2FzQWJvcnRlZCA9IGZhbHNlOwotICAgIG1faGFuZGxlID0gaGFuZGxlOwotICAgIG1fY2xp
ZW50ID0gY2xpZW50OwotCi0gICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxs
VGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkU3RhcnQpKTsKLSAgICBt
X3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydEF1ZGlvKSk7Ci0gICAgbV90YXNrUXVldWUucHVzaF9i
YWNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6
ZGlkU3RhcnRTb3VuZCkpOwotCi0gICAgaWYgKCFtX21vY2tUcmFuc2NyaXB0cy5lbXB0eSgpKSB7
Ci0gICAgICAgIFdFQktJVF9BU1NFUlQobV9tb2NrVHJhbnNjcmlwdHMuc2l6ZSgpID09IG1fbW9j
a0NvbmZpZGVuY2VzLnNpemUoKSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X21vY2tUcmFuc2NyaXB0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fdGFza1F1ZXVlLnB1
c2hfYmFjayhuZXcgUmVzdWx0VGFzayh0aGlzLCBtX21vY2tUcmFuc2NyaXB0c1tpXSwgbV9tb2Nr
Q29uZmlkZW5jZXNbaV0pKTsKLQotICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5jbGVhcigpOwot
ICAgICAgICBtX21vY2tDb25maWRlbmNlcy5jbGVhcigpOwotICAgIH0gZWxzZQotICAgICAgICBt
X3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IE5vTWF0Y2hUYXNrKHRoaXMpKTsKLQotICAgIG1fdGFz
a1F1ZXVlLnB1c2hfYmFjayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29n
bml6ZXJDbGllbnQ6OmRpZEVuZFNvdW5kKSk7Ci0gICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5l
dyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5k
QXVkaW8pKTsKLSAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRo
aXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmQpKTsKLQotICAgIHN0YXJ0VGFz
a1F1ZXVlKCk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3AoY29uc3Qg
V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudCogY2xpZW50KQotewotICAgIG1faGFuZGxlID0gaGFuZGxlOwotICAgIG1fY2xpZW50ID0g
Y2xpZW50OwotCi0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICBXRUJLSVRfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KGNv
bnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUsIFdlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICBtX2hhbmRsZSA9IGhhbmRsZTsKLSAgICBtX2NsaWVu
dCA9IGNsaWVudDsKLQotICAgIGNsZWFyVGFza1F1ZXVlKCk7Ci0gICAgbV93YXNBYm9ydGVkID0g
dHJ1ZTsKLSAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMs
ICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmQpKTsKLSAgICBzdGFydFRhc2tRdWV1
ZSgpOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjphZGRNb2NrUmVzdWx0KGNv
bnN0IFdlYlN0cmluZyYgdHJhbnNjcmlwdCwgZmxvYXQgY29uZmlkZW5jZSkKLXsKLSAgICBtX21v
Y2tUcmFuc2NyaXB0cy5wdXNoX2JhY2sodHJhbnNjcmlwdCk7Ci0gICAgbV9tb2NrQ29uZmlkZW5j
ZXMucHVzaF9iYWNrKGNvbmZpZGVuY2UpOwotfQotCi12b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyOjpzZXRFcnJvcihjb25zdCBXZWJTdHJpbmcmIGVycm9yLCBjb25zdCBXZWJTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6RXJyb3JDb2RlIGNvZGU7
Ci0gICAgaWYgKGVycm9yID09ICJPdGhlckVycm9yIikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVj
aFJlY29nbml6ZXJDbGllbnQ6Ok90aGVyRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5v
U3BlZWNoRXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6
Tm9TcGVlY2hFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiQWJvcnRlZEVycm9yIikKLSAg
ICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkFib3J0ZWRFcnJvcjsKLSAg
ICBlbHNlIGlmIChlcnJvciA9PSAiQXVkaW9DYXB0dXJlRXJyb3IiKQotICAgICAgICBjb2RlID0g
V2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6QXVkaW9DYXB0dXJlRXJyb3I7Ci0gICAgZWxzZSBp
ZiAoZXJyb3IgPT0gIk5ldHdvcmtFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpOZXR3b3JrRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIk5vdEFs
bG93ZWRFcnJvciIpCi0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpO
b3RBbGxvd2VkRXJyb3I7Ci0gICAgZWxzZSBpZiAoZXJyb3IgPT0gIlNlcnZpY2VOb3RBbGxvd2Vk
RXJyb3IiKQotICAgICAgICBjb2RlID0gV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6U2Vydmlj
ZU5vdEFsbG93ZWRFcnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiQmFkR3JhbW1hckVycm9y
IikKLSAgICAgICAgY29kZSA9IFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OkJhZEdyYW1tYXJF
cnJvcjsKLSAgICBlbHNlIGlmIChlcnJvciA9PSAiTGFuZ3VhZ2VOb3RTdXBwb3J0ZWRFcnJvciIp
Ci0gICAgICAgIGNvZGUgPSBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpMYW5ndWFnZU5vdFN1
cHBvcnRlZEVycm9yOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJUYXNr
UXVldWUoKTsKLSAgICBtX3Rhc2tRdWV1ZS5wdXNoX2JhY2sobmV3IEVycm9yVGFzayh0aGlzLCBj
b2RlLCBtZXNzYWdlKSk7Ci0gICAgbV90YXNrUXVldWUucHVzaF9iYWNrKG5ldyBDbGllbnRDYWxs
VGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSk7Ci0gICAgc3Rh
cnRUYXNrUXVldWUoKTsKLX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6c3RhcnRU
YXNrUXVldWUoKQotewotICAgIGlmIChtX3Rhc2tRdWV1ZVJ1bm5pbmcpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgU3RlcFRhc2sodGhpcykpOwotICAgIG1f
dGFza1F1ZXVlUnVubmluZyA9IHRydWU7Ci19Ci0KLXZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXI6OmNsZWFyVGFza1F1ZXVlKCkKLXsKLSAgICB3aGlsZSAoIW1fdGFza1F1ZXVlLmVtcHR5KCkp
IHsKLSAgICAgICAgZGVsZXRlIG1fdGFza1F1ZXVlLmZyb250KCk7Ci0gICAgICAgIG1fdGFza1F1
ZXVlLnBvcF9mcm9udCgpOwotICAgIH0KLSAgICBtX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsK
LX0KLQotdm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6U3RlcFRhc2s6OnJ1bklmVmFsaWQo
KQotewotICAgIGlmIChtX29iamVjdC0+bV90YXNrUXVldWUuZW1wdHkoKSkgewotICAgICAgICBt
X29iamVjdC0+bV90YXNrUXVldWVSdW5uaW5nID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBUYXNrKiB0YXNrID0gbV9vYmplY3QtPm1fdGFza1F1ZXVlLmZyb250KCk7Ci0g
ICAgbV9vYmplY3QtPm1fdGFza1F1ZXVlLnBvcF9mcm9udCgpOwotICAgIHRhc2stPnJ1bigpOwot
ICAgIGRlbGV0ZSB0YXNrOwotCi0gICAgaWYgKG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZS5lbXB0eSgp
KSB7Ci0gICAgICAgIG1fb2JqZWN0LT5tX3Rhc2tRdWV1ZVJ1bm5pbmcgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fb2JqZWN0LT5tX2RlbGVnYXRlLT5wb3N0VGFzayhu
ZXcgU3RlcFRhc2sobV9vYmplY3QpKTsKLX0KLQotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9N
b2NrV2ViU3BlZWNoUmVjb2duaXplci5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Nb2NrV2ViU3BlZWNoUmVjb2duaXpl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcl9oCi0jZGVmaW5lIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gK
LQotI2luY2x1ZGUgIlRlc3RDb21tb24uaCIKLSNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25pemVy
LmgiCi0jaW5jbHVkZSAiV2ViVGFzay5oIgotI2luY2x1ZGUgPGRlcXVlPgotI2luY2x1ZGUgPHZl
Y3Rvcj4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJTcGVlY2hSZWNvZ25pdGlvbkhh
bmRsZTsKLWNsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zOwotY2xhc3MgV2ViU3BlZWNo
UmVjb2duaXplckNsaWVudDsKLX0KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFz
cyBXZWJUZXN0RGVsZWdhdGU7Ci0KLWNsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyIDogcHVi
bGljIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciB7Ci1wdWJsaWM6Ci0gICAgTW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXIoKTsKLSAgICB+TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKTsKLQotICAg
IHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKik7Ci0KLSAgICAvLyBXZWJTcGVlY2hS
ZWNvZ25pemVyIGltcGxlbWVudGF0aW9uOgotICAgIHZpcnR1YWwgdm9pZCBzdGFydChjb25zdCBX
ZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgY29uc3QgV2ViS2l0OjpXZWJTcGVl
Y2hSZWNvZ25pdGlvblBhcmFtcyYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCop
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wKGNvbnN0IFdlYktpdDo6V2ViU3BlZWNo
UmVjb2duaXRpb25IYW5kbGUmLCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoY29uc3QgV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCopIE9W
RVJSSURFOwotCi0gICAgLy8gTWV0aG9kcyBhY2Nlc3NlZCBieSBsYXlvdXQgdGVzdHM6Ci0gICAg
dm9pZCBhZGRNb2NrUmVzdWx0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0cmFuc2NyaXB0LCBm
bG9hdCBjb25maWRlbmNlKTsKLSAgICB2b2lkIHNldEVycm9yKGNvbnN0IFdlYktpdDo6V2ViU3Ry
aW5nJiBlcnJvciwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wg
d2FzQWJvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQWJvcnRlZDsgfQotCi0gICAgLy8gTWV0
aG9kcyBhY2Nlc3NlZCBmcm9tIFRhc2sgb2JqZWN0czoKLSAgICBXZWJLaXQ6OldlYlNwZWVjaFJl
Y29nbml6ZXJDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgV2ViS2l0
OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlKCkgeyByZXR1cm4gbV9oYW5kbGU7
IH0KLSAgICBXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQot
Ci0gICAgY2xhc3MgVGFzayB7Ci0gICAgcHVibGljOgotICAgICAgICBUYXNrKE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyKiByZWNvZ25pemVyKSA6IG1fcmVjb2duaXplcihyZWNvZ25pemVyKSB7IH0K
LSAgICAgICAgdmlydHVhbCB+VGFzaygpIHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkg
PSAwOwotICAgIHByb3RlY3RlZDoKLSAgICAgICAgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1f
cmVjb2duaXplcjsKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgc3RhcnRUYXNrUXVldWUo
KTsKLSAgICB2b2lkIGNsZWFyVGFza1F1ZXVlKCk7Ci0KLSAgICBXZWJUYXNrTGlzdCBtX3Rhc2tM
aXN0OwotICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUgbV9oYW5kbGU7Ci0g
ICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBtX2NsaWVudDsKLSAgICBzdGQ6
OnZlY3RvcjxXZWJLaXQ6OldlYlN0cmluZz4gbV9tb2NrVHJhbnNjcmlwdHM7Ci0gICAgc3RkOjp2
ZWN0b3I8ZmxvYXQ+IG1fbW9ja0NvbmZpZGVuY2VzOwotICAgIGJvb2wgbV93YXNBYm9ydGVkOwot
Ci0gICAgLy8gUXVldWUgb2YgdGFza3MgdG8gYmUgcnVuLgotICAgIHN0ZDo6ZGVxdWU8VGFzayo+
IG1fdGFza1F1ZXVlOwotICAgIGJvb2wgbV90YXNrUXVldWVSdW5uaW5nOwotCi0gICAgV2ViVGVz
dERlbGVnYXRlKiBtX2RlbGVnYXRlOwotCi0gICAgLy8gVGFzayBmb3Igc3RlcHBpbmcgdGhlIHF1
ZXVlLgotICAgIGNsYXNzIFN0ZXBUYXNrIDogcHVibGljIFdlYk1ldGhvZFRhc2s8TW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0ZXBUYXNrKE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyKiBvYmplY3QpIDogV2ViTWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoUmVj
b2duaXplcj4ob2JqZWN0KSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBP
VkVSUklERTsKLSAgICB9OwotfTsKLQotfQotCi0jZW5kaWYgLy8gTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXJfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvTm90aWZpY2F0aW9uUHJlc2VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3Bw
CShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFX05PVElGSUNBVElP
TlMKLSNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXIuaCIKLQotI2luY2x1ZGUgIldlYktp
dC5oIgotI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvbi5oIgotI2luY2x1ZGUgIldlYk5vdGlmaWNh
dGlvblBlcm1pc3Npb25DYWxsYmFjay5oIgotI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgi
Ci0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSAiZ29vZ2xldXJsL3NyYy9n
dXJsLmgiCi0jaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dl
YlN0cmluZy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotbmFtZXNwYWNlIHsKLQotV2ViU3RyaW5nIGlkZW50aWZpZXJGb3JOb3RpZmljYXRpb24o
Y29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pCi17Ci0gICAgaWYgKG5vdGlmaWNh
dGlvbi5pc0hUTUwoKSkKLSAgICAgICAgcmV0dXJuIG5vdGlmaWNhdGlvbi51cmwoKS5zcGVjKCku
dXRmMTYoKTsKLSAgICByZXR1cm4gbm90aWZpY2F0aW9uLnRpdGxlKCk7Ci19Ci0KLXZvaWQgZGVm
ZXJyZWREaXNwbGF5RGlzcGF0Y2godm9pZCogY29udGV4dCkKLXsKLSAgICBXZWJOb3RpZmljYXRp
b24qIG5vdGlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PFdlYk5vdGlmaWNhdGlvbio+KGNvbnRleHQp
OwotICAgIG5vdGlmaWNhdGlvbi0+ZGlzcGF0Y2hEaXNwbGF5RXZlbnQoKTsKLSAgICBkZWxldGUg
bm90aWZpY2F0aW9uOwotfQotCi19Ci0KLU5vdGlmaWNhdGlvblByZXNlbnRlcjo6Tm90aWZpY2F0
aW9uUHJlc2VudGVyKCkKLSAgICA6IG1fZGVsZWdhdGUoMCkKLXsKLX0KLQotTm90aWZpY2F0aW9u
UHJlc2VudGVyOjp+Tm90aWZpY2F0aW9uUHJlc2VudGVyKCkKLXsKLX0KLQotdm9pZCBOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OmdyYW50UGVybWlzc2lvbihjb25zdCBXZWJTdHJpbmcmIG9yaWdpbikK
LXsKLSAgICBtX2FsbG93ZWRPcmlnaW5zLmluc2VydChvcmlnaW4udXRmOCgpKTsKLX0KLQotYm9v
bCBOb3RpZmljYXRpb25QcmVzZW50ZXI6OnNpbXVsYXRlQ2xpY2soY29uc3QgV2ViU3RyaW5nJiB0
aXRsZSkKLXsKLSAgICBzdHJpbmcgaWQodGl0bGUudXRmOCgpKTsKLSAgICBpZiAobV9hY3RpdmVO
b3RpZmljYXRpb25zLmZpbmQoaWQpID09IG1fYWN0aXZlTm90aWZpY2F0aW9ucy5lbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmlj
YXRpb24gPSBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZmluZChpZCktPnNlY29uZDsKLSAgICBXZWJO
b3RpZmljYXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKLSAgICBldmVudFRhcmdldC5k
aXNwYXRjaENsaWNrRXZlbnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVGhlIG91dHB1
dCBmcm9tIGFsbCB0aGVzZSBtZXRob2RzIG1hdGNoZXMgd2hhdCBEdW1wUmVuZGVyVHJlZSBwcm9k
dWNlcy4KLWJvb2wgTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93KGNvbnN0IFdlYk5vdGlmaWNh
dGlvbiYgbm90aWZpY2F0aW9uKQotewotICAgIFdlYlN0cmluZyBpZGVudGlmaWVyID0gaWRlbnRp
ZmllckZvck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pOwotICAgIGlmICghbm90aWZpY2F0aW9u
LnJlcGxhY2VJZCgpLmlzRW1wdHkoKSkgewotICAgICAgICBzdHJpbmcgcmVwbGFjZUlkKG5vdGlm
aWNhdGlvbi5yZXBsYWNlSWQoKS51dGY4KCkpOwotICAgICAgICBpZiAobV9yZXBsYWNlbWVudHMu
ZmluZChyZXBsYWNlSWQpICE9IG1fcmVwbGFjZW1lbnRzLmVuZCgpKQotICAgICAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiUkVQTEFDSU5HIE5PVElGSUNBVElPTiAiKSAr
IG1fcmVwbGFjZW1lbnRzLmZpbmQocmVwbGFjZUlkKS0+c2Vjb25kICsgIlxuIik7Ci0KLSAgICAg
ICAgbV9yZXBsYWNlbWVudHNbcmVwbGFjZUlkXSA9IGlkZW50aWZpZXIudXRmOCgpOwotICAgIH0K
LQotICAgIGlmIChub3RpZmljYXRpb24uaXNIVE1MKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnBy
aW50TWVzc2FnZShzdHJpbmcoIkRFU0tUT1AgTk9USUZJQ0FUSU9OOiBjb250ZW50cyBhdCAiKSAr
IHN0cmluZyhub3RpZmljYXRpb24udXJsKCkuc3BlYygpKSArICJcbiIpOwotICAgIGVsc2Ugewot
ICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkRFU0tUT1AgTk9USUZJQ0FUSU9OOiIp
OwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uobm90aWZpY2F0aW9uLmRpcmVjdGlv
bigpID09IFdlYlRleHREaXJlY3Rpb25SaWdodFRvTGVmdCA/ICIoUlRMKSIgOiAiIik7Ci0gICAg
ICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiIGljb24gIik7Ci0gICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZShub3RpZmljYXRpb24uaWNvblVSTCgpLmlzRW1wdHkoKSA/ICIiIDog
bm90aWZpY2F0aW9uLmljb25VUkwoKS5zcGVjKCkuZGF0YSgpKTsKLSAgICAgICAgbV9kZWxlZ2F0
ZS0+cHJpbnRNZXNzYWdlKCIsIHRpdGxlICIpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1l
c3NhZ2Uobm90aWZpY2F0aW9uLnRpdGxlKCkuaXNFbXB0eSgpID8gIiIgOiBub3RpZmljYXRpb24u
dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdl
KCIsIHRleHQgIik7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShub3RpZmljYXRp
b24uYm9keSgpLmlzRW1wdHkoKSA/ICIiIDogbm90aWZpY2F0aW9uLmJvZHkoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAgIH0KLQot
ICAgIHN0cmluZyBpZChpZGVudGlmaWVyLnV0ZjgoKSk7Ci0gICAgbV9hY3RpdmVOb3RpZmljYXRp
b25zW2lkXSA9IG5vdGlmaWNhdGlvbjsKLQotICAgIFBsYXRmb3JtOjpjdXJyZW50KCktPmNhbGxP
bk1haW5UaHJlYWQoZGVmZXJyZWREaXNwbGF5RGlzcGF0Y2gsIG5ldyBXZWJOb3RpZmljYXRpb24o
bm90aWZpY2F0aW9uKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgTm90aWZpY2F0aW9u
UHJlc2VudGVyOjpjYW5jZWwoY29uc3QgV2ViTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pCi17
Ci0gICAgV2ViU3RyaW5nIGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRm9yTm90aWZpY2F0aW9uKG5v
dGlmaWNhdGlvbik7Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiREVTS1RP
UCBOT1RJRklDQVRJT04gQ0xPU0VEOiAiKSArIHN0cmluZyhpZGVudGlmaWVyLnV0ZjgoKSkgKyAi
XG4iKTsKLSAgICBXZWJOb3RpZmljYXRpb24gZXZlbnRUYXJnZXQobm90aWZpY2F0aW9uKTsKLSAg
ICBldmVudFRhcmdldC5kaXNwYXRjaENsb3NlRXZlbnQoZmFsc2UpOwotCi0gICAgc3RyaW5nIGlk
KGlkZW50aWZpZXIudXRmOCgpKTsKLSAgICBtX2FjdGl2ZU5vdGlmaWNhdGlvbnMuZXJhc2UoaWQp
OwotfQotCi12b2lkIE5vdGlmaWNhdGlvblByZXNlbnRlcjo6b2JqZWN0RGVzdHJveWVkKGNvbnN0
IFdlYktpdDo6V2ViTm90aWZpY2F0aW9uJiBub3RpZmljYXRpb24pCi17Ci0gICAgV2ViU3RyaW5n
IGlkZW50aWZpZXIgPSBpZGVudGlmaWVyRm9yTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbik7Ci0g
ICAgc3RyaW5nIGlkKGlkZW50aWZpZXIudXRmOCgpKTsKLSAgICBtX2FjdGl2ZU5vdGlmaWNhdGlv
bnMuZXJhc2UoaWQpOwotfQotCi1XZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb24g
Tm90aWZpY2F0aW9uUHJlc2VudGVyOjpjaGVja1Blcm1pc3Npb24oY29uc3QgV2ViU2VjdXJpdHlP
cmlnaW4mIG9yaWdpbikKLXsKLSAgICAvLyBDaGVjayB3aXRoIHRoZSBsYXlvdXQgdGVzdCBjb250
cm9sbGVyCi0gICAgV2ViU3RyaW5nIG9yaWdpblN0cmluZyA9IG9yaWdpbi50b1N0cmluZygpOwot
ICAgIGJvb2wgYWxsb3dlZCA9IG1fYWxsb3dlZE9yaWdpbnMuZmluZChzdHJpbmcob3JpZ2luU3Ry
aW5nLnV0ZjgoKSkpICE9IG1fYWxsb3dlZE9yaWdpbnMuZW5kKCk7Ci0gICAgcmV0dXJuIGFsbG93
ZWQgPyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6OlBlcm1pc3Npb25BbGxvd2VkCi0gICAgICAg
IDogV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpQZXJtaXNzaW9uRGVuaWVkOwotfQotCi12b2lk
IE5vdGlmaWNhdGlvblByZXNlbnRlcjo6cmVxdWVzdFBlcm1pc3Npb24oCi0gICAgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwKLSAgICBXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2Fs
bGJhY2sqIGNhbGxiYWNrKQotewotICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiREVTS1RP
UCBOT1RJRklDQVRJT04gUEVSTUlTU0lPTiBSRVFVRVNURUQ6ICIgKyBzdHJpbmcob3JpZ2luLnRv
U3RyaW5nKCkudXRmOCgpKSArICJcbiIpOwotICAgIGNhbGxiYWNrLT5wZXJtaXNzaW9uUmVxdWVz
dENvbXBsZXRlKCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRV9OT1RJRklDQVRJT05TCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9Ob3RpZmlj
YXRpb25QcmVzZW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXIuaAkocmV2aXNpb24gMTQ3
NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvTm90
aWZpY2F0aW9uUHJlc2VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTm90aWZpY2F0aW9uUHJlc2VudGVyX2gKLSNkZWZpbmUgTm90aWZpY2F0aW9uUHJlc2VudGVy
X2gKLQotI2luY2x1ZGUgIldlYk5vdGlmaWNhdGlvbi5oIgotI2luY2x1ZGUgIldlYk5vdGlmaWNh
dGlvblByZXNlbnRlci5oIgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxzZXQ+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3RE
ZWxlZ2F0ZTsKLQotLy8gQSBjbGFzcyB0aGF0IGltcGxlbWVudHMgV2ViTm90aWZpY2F0aW9uUHJl
c2VudGVyIGZvciB0aGUgVGVzdFJ1bm5lciBsaWJyYXJ5LgotY2xhc3MgTm90aWZpY2F0aW9uUHJl
c2VudGVyIDogcHVibGljIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHsKLXB1Ymxp
YzoKLSAgICBOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKLSAgICB2aXJ0dWFsIH5Ob3RpZmljYXRp
b25QcmVzZW50ZXIoKTsKLQotICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBk
ZWxlZ2F0ZSkgeyBtX2RlbGVnYXRlID0gZGVsZWdhdGU7IH0KLQotICAgIC8vIENhbGxlZCBieSB0
aGUgVGVzdFJ1bm5lciB0byBzaW11bGF0ZSBhIHVzZXIgZ3JhbnRpbmcgcGVybWlzc2lvbi4KLSAg
ICB2b2lkIGdyYW50UGVybWlzc2lvbihjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgb3JpZ2luKTsK
LQotICAgIC8vIENhbGxlZCBieSB0aGUgVGVzdFJ1bm5lciB0byBzaW11bGF0ZSBhIHVzZXIgY2xp
Y2tpbmcgb24gYSBub3RpZmljYXRpb24uCi0gICAgYm9vbCBzaW11bGF0ZUNsaWNrKGNvbnN0IFdl
YktpdDo6V2ViU3RyaW5nJiBub3RpZmljYXRpb25JZGVudGlmaWVyKTsKLQotICAgIC8vIFdlYktp
dDo6V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIGludGVyZmFjZQotICAgIHZpcnR1YWwgYm9vbCBz
aG93KGNvbnN0IFdlYktpdDo6V2ViTm90aWZpY2F0aW9uJik7Ci0gICAgdmlydHVhbCB2b2lkIGNh
bmNlbChjb25zdCBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbiYpOwotICAgIHZpcnR1YWwgdm9pZCBv
YmplY3REZXN0cm95ZWQoY29uc3QgV2ViS2l0OjpXZWJOb3RpZmljYXRpb24mKTsKLSAgICB2aXJ0
dWFsIFBlcm1pc3Npb24gY2hlY2tQZXJtaXNzaW9uKGNvbnN0IFdlYktpdDo6V2ViU2VjdXJpdHlP
cmlnaW4mKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oY29uc3QgV2ViS2l0
OjpXZWJTZWN1cml0eU9yaWdpbiYsIFdlYktpdDo6V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbkNh
bGxiYWNrKik7Ci0KLSAgICB2b2lkIHJlc2V0KCkgeyBtX2FsbG93ZWRPcmlnaW5zLmNsZWFyKCk7
IH0KLQotcHJpdmF0ZToKLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0KLSAgICAv
LyBTZXQgb2YgYWxsb3dlZCBvcmlnaW5zLgotICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX2Fs
bG93ZWRPcmlnaW5zOwotCi0gICAgLy8gTWFwIG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLgotICAg
IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBXZWJLaXQ6OldlYk5vdGlmaWNhdGlvbj4gbV9hY3RpdmVO
b3RpZmljYXRpb25zOwotCi0gICAgLy8gTWFwIG9mIGFjdGl2ZSByZXBsYWNlbWVudCBJRHMgdG8g
dGhlIHRpdGxlcyBvZiB0aG9zZSBub3RpZmljYXRpb25zCi0gICAgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIHN0ZDo6c3RyaW5nPiBtX3JlcGxhY2VtZW50czsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIE5v
dGlmaWNhdGlvblByZXNlbnRlcl9oCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50
LmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvU3BlbGxDaGVja0NsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BlbGxDaGVja0NsaWVu
dC5oIgotCi0jaW5jbHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgotI2luY2x1ZGUgIldlYlRlc3RE
ZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIldlYlRleHRDaGVja2luZ0NvbXBsZXRpb24uaCIKLSNpbmNs
dWRlICJXZWJUZXh0Q2hlY2tpbmdSZXN1bHQuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotbmFt
ZXNwYWNlIHsKLQotY2xhc3MgSG9zdE1ldGhvZFRhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxT
cGVsbENoZWNrQ2xpZW50PiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkIChTcGVsbENoZWNr
Q2xpZW50OjoqQ2FsbGJhY2tNZXRob2RUeXBlKSgpOwotICAgIEhvc3RNZXRob2RUYXNrKFNwZWxs
Q2hlY2tDbGllbnQqIG9iamVjdCwgQ2FsbGJhY2tNZXRob2RUeXBlIGNhbGxiYWNrKQotICAgICAg
ICA6IFdlYk1ldGhvZFRhc2s8U3BlbGxDaGVja0NsaWVudD4ob2JqZWN0KQotICAgICAgICAsIG1f
Y2FsbGJhY2soY2FsbGJhY2spCi0gICAgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxp
ZCgpIHsgKG1fb2JqZWN0LT4qbV9jYWxsYmFjaykoKTsgfQotCi1wcml2YXRlOgotICAgIENhbGxi
YWNrTWV0aG9kVHlwZSBtX2NhbGxiYWNrOwotfTsKLQotfQotCi1TcGVsbENoZWNrQ2xpZW50OjpT
cGVsbENoZWNrQ2xpZW50KCkKLSAgICA6IG1fbGFzdFJlcXVlc3RlZFRleHRDaGVja2luZ0NvbXBs
ZXRpb24oMCkKLXsKLX0KLQotU3BlbGxDaGVja0NsaWVudDo6flNwZWxsQ2hlY2tDbGllbnQoKQot
ewotfQotCi12b2lkIFNwZWxsQ2hlY2tDbGllbnQ6OnNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0
ZSogZGVsZWdhdGUpCi17Ci0gICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi0vLyBXZWJL
aXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQKLXZvaWQgU3BlbGxDaGVja0NsaWVudDo6c3BlbGxDaGVj
ayhjb25zdCBXZWJTdHJpbmcmIHRleHQsIGludCYgbWlzc3BlbGxlZE9mZnNldCwgaW50JiBtaXNz
cGVsbGVkTGVuZ3RoLCBXZWJWZWN0b3I8V2ViU3RyaW5nPiogb3B0aW9uYWxTdWdnZXN0aW9ucykK
LXsKLSAgICAvLyBDaGVjayB0aGUgc3BlbGxpbmcgb2YgdGhlIGdpdmVuIHRleHQuCi0gICAgbV9z
cGVsbGNoZWNrLnNwZWxsQ2hlY2tXb3JkKHRleHQsICZtaXNzcGVsbGVkT2Zmc2V0LCAmbWlzc3Bl
bGxlZExlbmd0aCk7Ci19Ci0KLXZvaWQgU3BlbGxDaGVja0NsaWVudDo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY29uc3QgV2ViU3RyaW5nJiB0ZXh0LCBXZWJUZXh0Q2hlY2tpbmdUeXBlTWFzayBtYXNr
LCBXZWJWZWN0b3I8V2ViVGV4dENoZWNraW5nUmVzdWx0Piogd2ViUmVzdWx0cykKLXsKLSAgICB2
ZWN0b3I8V2ViVGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGlmIChtYXNrICYgV2Vi
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7Ci0gICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOwot
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKLSAgICAgICAgY29uc3QgV2Vi
VUNoYXIqIGRhdGEgPSB0ZXh0LmRhdGEoKTsKLSAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0
aCkgewotICAgICAgICAgICAgaW50IG1pc3NwZWxsZWRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAg
ICBpbnQgbWlzc3BlbGxlZExlbmd0aCA9IDA7Ci0gICAgICAgICAgICBtX3NwZWxsY2hlY2suc3Bl
bGxDaGVja1dvcmQoV2ViU3RyaW5nKCZkYXRhW29mZnNldF0sIGxlbmd0aCAtIG9mZnNldCksICZt
aXNzcGVsbGVkUG9zaXRpb24sICZtaXNzcGVsbGVkTGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICgh
bWlzc3BlbGxlZExlbmd0aCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFdl
YlRleHRDaGVja2luZ1Jlc3VsdCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQudHlwZSA9IFdl
YlRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgIHJlc3VsdC5sb2NhdGlvbiA9
IG9mZnNldCArIG1pc3NwZWxsZWRQb3NpdGlvbjsKLSAgICAgICAgICAgIHJlc3VsdC5sZW5ndGgg
PSBtaXNzcGVsbGVkTGVuZ3RoOwotICAgICAgICAgICAgcmVzdWx0cy5wdXNoX2JhY2socmVzdWx0
KTsKLSAgICAgICAgICAgIG9mZnNldCArPSBtaXNzcGVsbGVkUG9zaXRpb24gKyBtaXNzcGVsbGVk
TGVuZ3RoOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtYXNrICYgV2ViVGV4dENoZWNraW5n
VHlwZUdyYW1tYXIpCi0gICAgICAgIE1vY2tHcmFtbWFyQ2hlY2s6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKHRleHQsICZyZXN1bHRzKTsKLSAgICB3ZWJSZXN1bHRzLT5hc3NpZ24ocmVzdWx0cyk7Ci19
Ci0KLXZvaWQgU3BlbGxDaGVja0NsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZUZXh0KGNvbnN0IFdl
YlN0cmluZyYgdGV4dCwgV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbiogY29tcGxldGlvbikKLXsK
LSAgICBpZiAodGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGNvbXBsZXRpb24pCi0gICAg
ICAgICAgICBjb21wbGV0aW9uLT5kaWRDYW5jZWxDaGVja2luZ1RleHQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fbGFzdFJlcXVlc3RlZFRleHRDaGVja2luZ0NvbXBsZXRpb24g
PSBjb21wbGV0aW9uOwotICAgIG1fbGFzdFJlcXVlc3RlZFRleHRDaGVja1N0cmluZyA9IHRleHQ7
Ci0gICAgaWYgKG1fc3BlbGxjaGVjay5oYXNJbkNhY2hlKHRleHQpKQotICAgICAgICBmaW5pc2hM
YXN0VGV4dENoZWNrKCk7Ci0gICAgZWxzZQotICAgICAgICBtX2RlbGVnYXRlLT5wb3N0RGVsYXll
ZFRhc2sobmV3IEhvc3RNZXRob2RUYXNrKHRoaXMsICZTcGVsbENoZWNrQ2xpZW50OjpmaW5pc2hM
YXN0VGV4dENoZWNrKSwgMCk7Ci19Ci0KLXZvaWQgU3BlbGxDaGVja0NsaWVudDo6ZmluaXNoTGFz
dFRleHRDaGVjaygpCi17Ci0gICAgdmVjdG9yPFdlYlRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0
czsKLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBzdHJpbmcxNiB0ZXh0ID0gbV9sYXN0UmVxdWVz
dGVkVGV4dENoZWNrU3RyaW5nOwotICAgIHdoaWxlICh0ZXh0Lmxlbmd0aCgpKSB7Ci0gICAgICAg
IGludCBtaXNzcGVsbGVkUG9zaXRpb24gPSAwOwotICAgICAgICBpbnQgbWlzc3BlbGxlZExlbmd0
aCA9IDA7Ci0gICAgICAgIG1fc3BlbGxjaGVjay5zcGVsbENoZWNrV29yZChXZWJTdHJpbmcodGV4
dCksICZtaXNzcGVsbGVkUG9zaXRpb24sICZtaXNzcGVsbGVkTGVuZ3RoKTsKLSAgICAgICAgaWYg
KCFtaXNzcGVsbGVkTGVuZ3RoKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFdlYlZlY3Rv
cjxXZWJTdHJpbmc+IHN1Z2dlc3Rpb25zOwotICAgICAgICBtX3NwZWxsY2hlY2suZmlsbFN1Z2dl
c3Rpb25MaXN0KFdlYlN0cmluZyh0ZXh0LnN1YnN0cihtaXNzcGVsbGVkUG9zaXRpb24sIG1pc3Nw
ZWxsZWRMZW5ndGgpKSwgJnN1Z2dlc3Rpb25zKTsKLSAgICAgICAgcmVzdWx0cy5wdXNoX2JhY2so
V2ViVGV4dENoZWNraW5nUmVzdWx0KFdlYlRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgb2Zmc2V0
ICsgbWlzc3BlbGxlZFBvc2l0aW9uLCBtaXNzcGVsbGVkTGVuZ3RoLCBzdWdnZXN0aW9ucy5pc0Vt
cHR5KCkgPyBXZWJTdHJpbmcoKSA6IHN1Z2dlc3Rpb25zWzBdKSk7Ci0gICAgICAgIHRleHQgPSB0
ZXh0LnN1YnN0cihtaXNzcGVsbGVkUG9zaXRpb24gKyBtaXNzcGVsbGVkTGVuZ3RoKTsKLSAgICAg
ICAgb2Zmc2V0ICs9IG1pc3NwZWxsZWRQb3NpdGlvbiArIG1pc3NwZWxsZWRMZW5ndGg7Ci0gICAg
fQotICAgIE1vY2tHcmFtbWFyQ2hlY2s6OmNoZWNrR3JhbW1hck9mU3RyaW5nKG1fbGFzdFJlcXVl
c3RlZFRleHRDaGVja1N0cmluZywgJnJlc3VsdHMpOwotICAgIG1fbGFzdFJlcXVlc3RlZFRleHRD
aGVja2luZ0NvbXBsZXRpb24tPmRpZEZpbmlzaENoZWNraW5nVGV4dChyZXN1bHRzKTsKLSAgICBt
X2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdDb21wbGV0aW9uID0gMDsKLX0KLQotV2ViU3RyaW5n
IFNwZWxsQ2hlY2tDbGllbnQ6OmF1dG9Db3JyZWN0V29yZChjb25zdCBXZWJTdHJpbmcmKQotewot
ICAgIC8vIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGFzIE1hYyBXZWJLaXQgKCdXZWJLaXRTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbScpCi0gICAgLy8gZG9lcy4gKElmIHRoaXMgZnVuY3Rpb24g
cmV0dXJucyBhIG5vbi1lbXB0eSBzdHJpbmcsIFdlYktpdCByZXBsYWNlcyB0aGUKLSAgICAvLyBn
aXZlbiBtaXNzcGVsbGVkIHN0cmluZyB3aXRoIHRoZSByZXN1bHQgb25lLiBUaGlzIHByb2Nlc3Mg
ZXhlY3V0ZXMgc29tZQotICAgIC8vIGVkaXRvciBjb21tYW5kcyBhbmQgY2F1c2VzIGxheW91dC10
ZXN0IGZhaWx1cmVzLikKLSAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci19Ci0KLX0KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1NwZWxsQ2hlY2tDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL3NyYy9TcGVsbENoZWNrQ2xpZW50LmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1NwZWxsQ2hlY2tDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTcGVsbENoZWNrQ2xpZW50X2gK
LSNkZWZpbmUgU3BlbGxDaGVja0NsaWVudF9oCi0KLSNpbmNsdWRlICJNb2NrU3BlbGxDaGVjay5o
IgotI2luY2x1ZGUgIldlYlNwZWxsQ2hlY2tDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgi
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwot
Ci1jbGFzcyBTcGVsbENoZWNrQ2xpZW50IDogcHVibGljIFdlYktpdDo6V2ViU3BlbGxDaGVja0Ns
aWVudCB7Ci1wdWJsaWM6Ci0gICAgU3BlbGxDaGVja0NsaWVudCgpOwotICAgIHZpcnR1YWwgflNw
ZWxsQ2hlY2tDbGllbnQoKTsKLQotICAgIHZvaWQgc2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRl
Kik7Ci0KLSAgICBXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsg
fQotICAgIE1vY2tTcGVsbENoZWNrKiBtb2NrU3BlbGxDaGVjaygpIHsgcmV0dXJuICZtX3NwZWxs
Y2hlY2s7IH0KLQotICAgIC8vIFdlYktpdDo6V2ViU3BlbGxDaGVja0NsaWVudCBpbXBsZW1lbnRh
dGlvbi4KLSAgICB2aXJ0dWFsIHZvaWQgc3BlbGxDaGVjayhjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYsIGludCYgb2Zmc2V0LCBpbnQmIGxlbmd0aCwgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpX
ZWJTdHJpbmc+KiBvcHRpb25hbFN1Z2dlc3Rpb25zKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCBXZWJLaXQ6OldlYlRleHRD
aGVja2luZ1R5cGVNYXNrLCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYlRleHRDaGVja2lu
Z1Jlc3VsdD4qKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZUZXh0KGNvbnN0
IFdlYktpdDo6V2ViU3RyaW5nJiwgV2ViS2l0OjpXZWJUZXh0Q2hlY2tpbmdDb21wbGV0aW9uKik7
Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYlN0cmluZyBhdXRvQ29ycmVjdFdvcmQoY29uc3QgV2Vi
S2l0OjpXZWJTdHJpbmcmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGZpbmlzaExhc3RUZXh0Q2hl
Y2soKTsKLQotICAgIC8vIFRoZSBtb2NrIHNwZWxsY2hlY2tlciB1c2VkIGluIHNwZWxsQ2hlY2so
KS4KLSAgICBNb2NrU3BlbGxDaGVjayBtX3NwZWxsY2hlY2s7Ci0KLSAgICBXZWJLaXQ6OldlYlN0
cmluZyBtX2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tTdHJpbmc7Ci0gICAgV2ViS2l0OjpXZWJUZXh0
Q2hlY2tpbmdDb21wbGV0aW9uKiBtX2xhc3RSZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdDb21wbGV0aW9u
OwotCi0gICAgV2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLQotICAgIFdlYlRlc3REZWxlZ2F0ZSog
bV9kZWxlZ2F0ZTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNwZWxsQ2hlY2tDbGllbnRfaApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1v
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvVGVzdENvbW1vbi5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVz
dENvbW1vbi5oIgotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1
bm5lciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLWNvbnN0IGNoYXIgbGF5b3V0VGVzdHNQYXR0ZXJuW10g
PSAiL0xheW91dFRlc3RzLyI7Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBsYXlvdXRUZXN0c1Bh
dHRlcm5TaXplID0gc2l6ZW9mKGxheW91dFRlc3RzUGF0dGVybikgLSAxOwotY29uc3QgY2hhciBm
aWxlVXJsUGF0dGVybltdID0gImZpbGU6LyI7Ci1jb25zdCBjaGFyIGZpbGVUZXN0UHJlZml4W10g
PSAiKGZpbGUgdGVzdCk6IjsKLWNvbnN0IGNoYXIgZGF0YVVybFBhdHRlcm5bXSA9ICJkYXRhOiI7
Ci1jb25zdCBzdHJpbmc6OnNpemVfdHlwZSBkYXRhVXJsUGF0dGVyblNpemUgPSBzaXplb2YoZGF0
YVVybFBhdHRlcm4pIC0gMTsKLQotfQotCi1zdHJpbmcgbm9ybWFsaXplTGF5b3V0VGVzdFVSTChj
b25zdCBzdHJpbmcmIHVybCkKLXsKLSAgICBzdHJpbmcgcmVzdWx0ID0gdXJsOwotICAgIHNpemVf
dCBwb3M7Ci0gICAgaWYgKCF1cmwuZmluZChmaWxlVXJsUGF0dGVybikgJiYgKChwb3MgPSB1cmwu
ZmluZChsYXlvdXRUZXN0c1BhdHRlcm4pKSAhPSBzdHJpbmc6Om5wb3MpKSB7Ci0gICAgICAgIC8v
IGFkanVzdCBmaWxlIFVSTHMgdG8gbWF0Y2ggdXBzdHJlYW0gcmVzdWx0cy4KLSAgICAgICAgcmVz
dWx0LnJlcGxhY2UoMCwgcG9zICsgbGF5b3V0VGVzdHNQYXR0ZXJuU2l6ZSwgZmlsZVRlc3RQcmVm
aXgpOwotICAgIH0gZWxzZSBpZiAoIXVybC5maW5kKGRhdGFVcmxQYXR0ZXJuKSkgewotICAgICAg
ICAvLyBVUkwtZXNjYXBlIGRhdGEgVVJMcyB0byBtYXRjaCByZXN1bHRzIHVwc3RyZWFtLgotICAg
ICAgICBzdHJpbmcgcGF0aCA9IHVybC5zdWJzdHIoZGF0YVVybFBhdHRlcm5TaXplKTsKLSAgICAg
ICAgcmVzdWx0LnJlcGxhY2UoZGF0YVVybFBhdHRlcm5TaXplLCB1cmwubGVuZ3RoKCksIHBhdGgp
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdENvbW1v
bi5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9UZXN0Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgVGVzdENvbW1vbl9oCi0jZGVmaW5lIFRlc3RDb21tb25faAotCi0jaW5jbHVkZSA8
YmFzZS9jb21waWxlcl9zcGVjaWZpYy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDb21tb24uaD4K
LSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lmIGRlZmluZWQoV0lO
MzIpCi0jZGVmaW5lIHNucHJpbnRmKHN0ciwgc2l6ZSwgLi4uKSBfc25wcmludGZfcyhzdHIsIHNp
emUsIHNpemUsIF9fVkFfQVJHU19fKQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhKGNoYXIgY2gpIHsgcmV0dXJuIChjaCB8IDB4
MjApID49ICdhJyAmJiAoY2ggfCAweDIwKSA8PSAneic7IH0KLQotaW5saW5lIGJvb2wgaXNOb3RB
U0NJSUFscGhhKGNoYXIgY2gpIHsgcmV0dXJuICFpc0FTQ0lJQWxwaGEoY2gpOyB9Ci0KLXN0ZDo6
c3RyaW5nIG5vcm1hbGl6ZUxheW91dFRlc3RVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCk7Ci0K
LX0KLQotI2VuZGlmIC8vIFRlc3RDb21tb25faApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZh
Y2VzLmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2Vz
LmgiCi0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgiCi0jaW5j
bHVkZSAiRXZlbnRTZW5kZXIuaCIKLSNpbmNsdWRlICJHYW1lcGFkQ29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIlRlc3RSdW5uZXIuaCIKLSNpbmNsdWRlICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCi0j
aW5jbHVkZSAiV2ViQ2FjaGUuaCIKLSNpbmNsdWRlICJXZWJLaXQuaCIKLSNpbmNsdWRlICJXZWJS
dW50aW1lRmVhdHVyZXMuaCIKLSNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8cHVibGljL1dlYlVSTC5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotVGVzdEludGVyZmFjZXM6OlRlc3RJbnRlcmZhY2VzKCkKLSAgICA6IG1fYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIobmV3IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkpCi0gICAgLCBtX2V2
ZW50U2VuZGVyKG5ldyBFdmVudFNlbmRlcigpKQotICAgICwgbV9nYW1lcGFkQ29udHJvbGxlcihu
ZXcgR2FtZXBhZENvbnRyb2xsZXIoKSkKLSAgICAsIG1fdGV4dElucHV0Q29udHJvbGxlcihuZXcg
VGV4dElucHV0Q29udHJvbGxlcigpKQotICAgICwgbV90ZXN0UnVubmVyKG5ldyBUZXN0UnVubmVy
KHRoaXMpKQotICAgICwgbV93ZWJWaWV3KDApCi0gICAgLCBtX2RlbGVnYXRlKDApCi17Ci0gICAg
V2ViS2l0OjpzZXRMYXlvdXRUZXN0TW9kZSh0cnVlKTsKLQotICAgIFdlYlJ1bnRpbWVGZWF0dXJl
czo6ZW5hYmxlRGF0YVRyYW5zZmVySXRlbXModHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVz
OjplbmFibGVEZXZpY2VNb3Rpb24oZmFsc2UpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5h
YmxlR2VvbG9jYXRpb24odHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVJbmRl
eGVkRGF0YWJhc2UodHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVJbnB1dFR5
cGVEYXRlVGltZSh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUlucHV0VHlw
ZURhdGVUaW1lTG9jYWwodHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVJbnB1
dFR5cGVNb250aCh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUlucHV0VHlw
ZVRpbWUodHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVJbnB1dFR5cGVXZWVr
KHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlRmlsZVN5c3RlbSh0cnVlKTsK
LSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUZvbnRMb2FkRXZlbnRzKHRydWUpOwotICAg
IFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlSmF2YVNjcmlwdEkxOE5BUEkodHJ1ZSk7Ci0gICAg
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVNZWRpYVNvdXJjZSh0cnVlKTsKLSAgICBXZWJSdW50
aW1lRmVhdHVyZXM6OmVuYWJsZUVuY3J5cHRlZE1lZGlhKHRydWUpOwotICAgIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6ZW5hYmxlTWVkaWFTdHJlYW0odHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVz
OjplbmFibGVQZWVyQ29ubmVjdGlvbih0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVu
YWJsZVdlYkF1ZGlvKHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlVmlkZW9U
cmFjayh0cnVlKTsKLSAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdhbWVwYWQodHJ1ZSk7
Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTaGFkb3dET00odHJ1ZSk7Ci0gICAgV2Vi
UnVudGltZUZlYXR1cmVzOjplbmFibGVDdXN0b21ET01FbGVtZW50cyh0cnVlKTsKLSAgICBXZWJS
dW50aW1lRmVhdHVyZXM6OmVuYWJsZVN0eWxlU2NvcGVkKHRydWUpOwotICAgIFdlYlJ1bnRpbWVG
ZWF0dXJlczo6ZW5hYmxlU2NyaXB0ZWRTcGVlY2godHJ1ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1
cmVzOjplbmFibGVSZXF1ZXN0QXV0b2NvbXBsZXRlKHRydWUpOwotICAgIFdlYlJ1bnRpbWVGZWF0
dXJlczo6ZW5hYmxlRXhwZXJpbWVudGFsQ29udGVudFNlY3VyaXR5UG9saWN5RmVhdHVyZXModHJ1
ZSk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVTZWFtbGVzc0lGcmFtZXModHJ1ZSk7
Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDYW52YXNQYXRoKHRydWUpOwotCi0gICAg
cmVzZXRBbGwoKTsKLX0KLQotVGVzdEludGVyZmFjZXM6On5UZXN0SW50ZXJmYWNlcygpCi17Ci0g
ICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+c2V0V2ViVmlldygwKTsKLSAgICBtX2V2ZW50
U2VuZGVyLT5zZXRXZWJWaWV3KDApOwotICAgIC8vIG1fZ2FtZXBhZENvbnRyb2xsZXIgZG9lc24n
dCBkZXBlbmQgb24gV2ViVmlldy4KLSAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPnNldFdlYlZp
ZXcoMCk7Ci0gICAgbV90ZXN0UnVubmVyLT5zZXRXZWJWaWV3KDAsIDApOwotCi0gICAgbV9hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci0+c2V0RGVsZWdhdGUoMCk7Ci0gICAgbV9ldmVudFNlbmRlci0+
c2V0RGVsZWdhdGUoMCk7Ci0gICAgbV9nYW1lcGFkQ29udHJvbGxlci0+c2V0RGVsZWdhdGUoMCk7
Ci0gICAgLy8gbV90ZXh0SW5wdXRDb250cm9sbGVyIGRvZXNuJ3QgZGVwZW5kIG9uIFdlYlRlc3RE
ZWxlZ2F0ZS4KLSAgICBtX3Rlc3RSdW5uZXItPnNldERlbGVnYXRlKDApOwotfQotCi12b2lkIFRl
c3RJbnRlcmZhY2VzOjpzZXRXZWJWaWV3KFdlYlZpZXcqIHdlYlZpZXcsIFdlYlRlc3RQcm94eUJh
c2UqIHByb3h5KQotewotICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7Ci0gICAgbV9wcm94eSA9IHBy
b3h5OwotICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnNldFdlYlZpZXcod2ViVmlldyk7
Ci0gICAgbV9ldmVudFNlbmRlci0+c2V0V2ViVmlldyh3ZWJWaWV3KTsKLSAgICAvLyBtX2dhbWVw
YWRDb250cm9sbGVyIGRvZXNuJ3QgZGVwZW5kIG9uIFdlYlZpZXcuCi0gICAgbV90ZXh0SW5wdXRD
b250cm9sbGVyLT5zZXRXZWJWaWV3KHdlYlZpZXcpOwotICAgIG1fdGVzdFJ1bm5lci0+c2V0V2Vi
Vmlldyh3ZWJWaWV3LCBwcm94eSk7Ci19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6OnNldERlbGVn
YXRlKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgbV9hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOwotICAgIG1fZXZlbnRTZW5kZXItPnNldERl
bGVnYXRlKGRlbGVnYXRlKTsKLSAgICBtX2dhbWVwYWRDb250cm9sbGVyLT5zZXREZWxlZ2F0ZShk
ZWxlZ2F0ZSk7Ci0gICAgLy8gbV90ZXh0SW5wdXRDb250cm9sbGVyIGRvZXNuJ3QgZGVwZW5kIG9u
IFdlYlRlc3REZWxlZ2F0ZS4KLSAgICBtX3Rlc3RSdW5uZXItPnNldERlbGVnYXRlKGRlbGVnYXRl
KTsKLSAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6
OmJpbmRUbyhXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgbV9ldmVudFNlbmRlci0+YmluZFRvSmF2YXNjcmlwdChm
cmFtZSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZXZlbnRTZW5kZXIiKSk7Ci0gICAgbV9nYW1lcGFk
Q29udHJvbGxlci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
Z2FtZXBhZENvbnRyb2xsZXIiKSk7Ci0gICAgbV90ZXh0SW5wdXRDb250cm9sbGVyLT5iaW5kVG9K
YXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0SW5wdXRDb250cm9sbGVy
IikpOwotICAgIG1fdGVzdFJ1bm5lci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgidGVzdFJ1bm5lciIpKTsKLSAgICBtX3Rlc3RSdW5uZXItPmJpbmRUb0phdmFz
Y3JpcHQoZnJhbWUsIFdlYlN0cmluZzo6ZnJvbVVURjgoImxheW91dFRlc3RDb250cm9sbGVyIikp
OwotfQotCi12b2lkIFRlc3RJbnRlcmZhY2VzOjpyZXNldEFsbCgpCi17Ci0gICAgbV9hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci0+cmVzZXQoKTsKLSAgICBtX2V2ZW50U2VuZGVyLT5yZXNldCgpOwot
ICAgIG1fZ2FtZXBhZENvbnRyb2xsZXItPnJlc2V0KCk7Ci0gICAgLy8gbV90ZXh0SW5wdXRDb250
cm9sbGVyIGRvZXNuJ3QgaGF2ZSBhbnkgc3RhdGUgdG8gcmVzZXQuCi0gICAgbV90ZXN0UnVubmVy
LT5yZXNldCgpOwotICAgIFdlYkNhY2hlOjpjbGVhcigpOwotfQotCi12b2lkIFRlc3RJbnRlcmZh
Y2VzOjpzZXRUZXN0SXNSdW5uaW5nKGJvb2wgcnVubmluZykKLXsKLSAgICBtX3Rlc3RSdW5uZXIt
PnNldFRlc3RJc1J1bm5pbmcocnVubmluZyk7Ci19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6OmNv
bmZpZ3VyZUZvclRlc3RXaXRoVVJMKGNvbnN0IFdlYlVSTCYgdGVzdFVSTCwgYm9vbCBnZW5lcmF0
ZVBpeGVscykKLXsKLSAgICBzdHJpbmcgc3BlYyA9IEdVUkwodGVzdFVSTCkuc3BlYygpOwotICAg
IG1fdGVzdFJ1bm5lci0+c2V0U2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoZ2VuZXJhdGVQaXhl
bHMpOwotICAgIGlmIChzcGVjLmZpbmQoImxvYWRpbmcvIikgIT0gc3RyaW5nOjpucG9zKQotICAg
ICAgICBtX3Rlc3RSdW5uZXItPnNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7
Ci0gICAgaWYgKHNwZWMuZmluZCgiL2R1bXBBc1RleHQvIikgIT0gc3RyaW5nOjpucG9zKSB7Ci0g
ICAgICAgIG1fdGVzdFJ1bm5lci0+c2V0U2hvdWxkRHVtcEFzVGV4dCh0cnVlKTsKLSAgICAgICAg
bV90ZXN0UnVubmVyLT5zZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7Ci0gICAg
fQotICAgIGlmIChzcGVjLmZpbmQoIi9pbnNwZWN0b3IvIikgIT0gc3RyaW5nOjpucG9zKQotICAg
ICAgICBtX3Rlc3RSdW5uZXItPnNob3dEZXZUb29scygpOwotfQotCi12b2lkIFRlc3RJbnRlcmZh
Y2VzOjp3aW5kb3dPcGVuZWQoV2ViVGVzdFByb3h5QmFzZSogcHJveHkpCi17Ci0gICAgbV93aW5k
b3dMaXN0LnB1c2hfYmFjayhwcm94eSk7Ci19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6OndpbmRv
d0Nsb3NlZChXZWJUZXN0UHJveHlCYXNlKiBwcm94eSkKLXsKLSAgICB2ZWN0b3I8V2ViVGVzdFBy
b3h5QmFzZSo+OjppdGVyYXRvciBwb3MgPSBmaW5kKG1fd2luZG93TGlzdC5iZWdpbigpLCBtX3dp
bmRvd0xpc3QuZW5kKCksIHByb3h5KTsKLSAgICBpZiAocG9zID09IG1fd2luZG93TGlzdC5lbmQo
KSkgewotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV93aW5kb3dMaXN0LmVyYXNlKHBvcyk7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKiBUZXN0SW50ZXJmYWNlczo6YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQot
ewotICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmdldCgpOwotfQotCi1FdmVu
dFNlbmRlciogVGVzdEludGVyZmFjZXM6OmV2ZW50U2VuZGVyKCkKLXsKLSAgICByZXR1cm4gbV9l
dmVudFNlbmRlci5nZXQoKTsKLX0KLQotVGVzdFJ1bm5lciogVGVzdEludGVyZmFjZXM6OnRlc3RS
dW5uZXIoKQotewotICAgIHJldHVybiBtX3Rlc3RSdW5uZXIuZ2V0KCk7Ci19Ci0KLVdlYlZpZXcq
IFRlc3RJbnRlcmZhY2VzOjp3ZWJWaWV3KCkKLXsKLSAgICByZXR1cm4gbV93ZWJWaWV3OwotfQot
Ci1XZWJUZXN0RGVsZWdhdGUqIFRlc3RJbnRlcmZhY2VzOjpkZWxlZ2F0ZSgpCi17Ci0gICAgcmV0
dXJuIG1fZGVsZWdhdGU7Ci19Ci0KLVdlYlRlc3RQcm94eUJhc2UqIFRlc3RJbnRlcmZhY2VzOjpw
cm94eSgpCi17Ci0gICAgcmV0dXJuIG1fcHJveHk7Ci19Ci0KLWNvbnN0IHZlY3RvcjxXZWJUZXN0
UHJveHlCYXNlKj4mIFRlc3RJbnRlcmZhY2VzOjp3aW5kb3dMaXN0KCkKLXsKLSAgICByZXR1cm4g
bV93aW5kb3dMaXN0OwotfQotCi1XZWJUaGVtZUVuZ2luZSogVGVzdEludGVyZmFjZXM6OnRoZW1l
RW5naW5lKCkKLXsKLSNpZiBkZWZpbmVkKFVTRV9ERUZBVUxUX1JFTkRFUl9USEVNRSkgfHwgIShk
ZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykpCi0gICAgcmV0dXJuIDA7Ci0jZWxp
ZiBkZWZpbmVkKFdJTjMyKQotICAgIGlmICghbV90aGVtZUVuZ2luZS5nZXQoKSkKLSAgICAgICAg
bV90aGVtZUVuZ2luZS5yZXNldChuZXcgV2ViVGVzdFRoZW1lRW5naW5lV2luKCkpOwotICAgIHJl
dHVybiBtX3RoZW1lRW5naW5lLmdldCgpOwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAg
aWYgKCFtX3RoZW1lRW5naW5lLmdldCgpKQotICAgICAgICBtX3RoZW1lRW5naW5lLnJlc2V0KG5l
dyBXZWJUZXN0VGhlbWVFbmdpbmVNYWMoKSk7Ci0gICAgcmV0dXJuIG1fdGhlbWVFbmdpbmUuZ2V0
KCk7Ci0jZW5kaWYKLX0KLQotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5oCShyZXZp
c2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9UZXN0SW50ZXJmYWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBUZXN0SW50ZXJmYWNlc19oCi0jZGVmaW5lIFRlc3RJbnRlcmZhY2VzX2gKLQotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpZiBkZWZpbmVkKFdJTjMyKQotI2lu
Y2x1ZGUgIldlYlRlc3RUaGVtZUVuZ2luZVdpbi5oIgotI2VsaWYgZGVmaW5lZChfX0FQUExFX18p
Ci0jaW5jbHVkZSAiV2ViVGVzdFRoZW1lRW5naW5lTWFjLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci1jbGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYlRoZW1lRW5naW5lOwotY2xhc3Mg
V2ViVVJMOwotY2xhc3MgV2ViVmlldzsKLX0KLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewot
Ci1jbGFzcyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjsKLWNsYXNzIEV2ZW50U2VuZGVyOwotY2xh
c3MgR2FtZXBhZENvbnRyb2xsZXI7Ci1jbGFzcyBUZXN0UnVubmVyOwotY2xhc3MgVGV4dElucHV0
Q29udHJvbGxlcjsKLWNsYXNzIFdlYlRlc3REZWxlZ2F0ZTsKLWNsYXNzIFdlYlRlc3RQcm94eUJh
c2U7Ci0KLWNsYXNzIFRlc3RJbnRlcmZhY2VzIHsKLXB1YmxpYzoKLSAgICBUZXN0SW50ZXJmYWNl
cygpOwotICAgIH5UZXN0SW50ZXJmYWNlcygpOwotCi0gICAgdm9pZCBzZXRXZWJWaWV3KFdlYktp
dDo6V2ViVmlldyosIFdlYlRlc3RQcm94eUJhc2UqKTsKLSAgICB2b2lkIHNldERlbGVnYXRlKFdl
YlRlc3REZWxlZ2F0ZSopOwotICAgIHZvaWQgYmluZFRvKFdlYktpdDo6V2ViRnJhbWUqKTsKLSAg
ICB2b2lkIHJlc2V0QWxsKCk7Ci0gICAgdm9pZCBzZXRUZXN0SXNSdW5uaW5nKGJvb2wpOwotICAg
IHZvaWQgY29uZmlndXJlRm9yVGVzdFdpdGhVUkwoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCBib29s
IGdlbmVyYXRlUGl4ZWxzKTsKLQotICAgIHZvaWQgd2luZG93T3BlbmVkKFdlYlRlc3RQcm94eUJh
c2UqKTsKLSAgICB2b2lkIHdpbmRvd0Nsb3NlZChXZWJUZXN0UHJveHlCYXNlKik7Ci0KLSAgICBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKLSAgICBF
dmVudFNlbmRlciogZXZlbnRTZW5kZXIoKTsKLSAgICBUZXN0UnVubmVyKiB0ZXN0UnVubmVyKCk7
Ci0gICAgV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3KCk7Ci0gICAgV2ViVGVzdERlbGVnYXRlKiBk
ZWxlZ2F0ZSgpOwotICAgIFdlYlRlc3RQcm94eUJhc2UqIHByb3h5KCk7Ci0gICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5kb3dMaXN0KCk7Ci0gICAgV2ViS2l0OjpX
ZWJUaGVtZUVuZ2luZSogdGhlbWVFbmdpbmUoKTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OmF1dG9f
cHRyPEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyOwot
ICAgIHN0ZDo6YXV0b19wdHI8RXZlbnRTZW5kZXI+IG1fZXZlbnRTZW5kZXI7Ci0gICAgc3RkOjph
dXRvX3B0cjxHYW1lcGFkQ29udHJvbGxlcj4gbV9nYW1lcGFkQ29udHJvbGxlcjsKLSAgICBzdGQ6
OmF1dG9fcHRyPFRleHRJbnB1dENvbnRyb2xsZXI+IG1fdGV4dElucHV0Q29udHJvbGxlcjsKLSAg
ICBzdGQ6OmF1dG9fcHRyPFRlc3RSdW5uZXI+IG1fdGVzdFJ1bm5lcjsKLSAgICBXZWJLaXQ6Oldl
YlZpZXcqIG1fd2ViVmlldzsKLSAgICBXZWJUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7Ci0gICAg
V2ViVGVzdFByb3h5QmFzZSogbV9wcm94eTsKLQotICAgIHN0ZDo6dmVjdG9yPFdlYlRlc3RQcm94
eUJhc2UqPiBtX3dpbmRvd0xpc3Q7Ci0jaWYgIWRlZmluZWQoVVNFX0RFRkFVTFRfUkVOREVSX1RI
RU1FKQotI2lmIGRlZmluZWQoV0lOMzIpCi0gICAgc3RkOjphdXRvX3B0cjxXZWJUZXN0VGhlbWVF
bmdpbmVXaW4+IG1fdGhlbWVFbmdpbmU7Ci0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSAgICBz
dGQ6OmF1dG9fcHRyPFdlYlRlc3RUaGVtZUVuZ2luZU1hYz4gbV90aGVtZUVuZ2luZTsKLSNlbmRp
ZgotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZiAvLyBUZXN0SW50ZXJmYWNlc19oCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UGx1Z2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9UZXN0UGx1Z2luLmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFBsdWdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiVGVzdFBsdWdpbi5oIgotCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIldl
YkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgotI2luY2x1ZGUgIldlYktpdC5o
IgotI2luY2x1ZGUgIldlYlBsdWdpblBhcmFtcy5oIgotI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0
ZS5oIgotI2luY2x1ZGUgIldlYlRvdWNoUG9pbnQuaCIKLSNpbmNsdWRlICJXZWJVc2VyR2VzdHVy
ZUluZGljYXRvci5oIgotI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgotI2luY2x1ZGUgPHB1
YmxpYy9XZWJDb21wb3NpdG9yU3VwcG9ydC5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGlj
c0NvbnRleHQzRC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1uYW1lc3BhY2UgewotCi0vLyBH
TGVudW0gdmFsdWVzIGNvcGllZCBmcm9tIGdsMi5oLgotI2RlZmluZSBHTF9GQUxTRSAgICAgICAg
ICAgICAgICAgIDAKLSNkZWZpbmUgR0xfVFJVRSAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5l
IEdMX09ORSAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBHTF9UUklBTkdMRVMgICAgICAg
ICAgICAgIDB4MDAwNAotI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICAgIDB4MDMwMwot
I2RlZmluZSBHTF9ERVBUSF9URVNUICAgICAgICAgICAgIDB4MEI3MQotI2RlZmluZSBHTF9CTEVO
RCAgICAgICAgICAgICAgICAgIDB4MEJFMgotI2RlZmluZSBHTF9TQ0lTU09SX1RFU1QgICAgICAg
ICAgIDB4MEI5MAotI2RlZmluZSBHTF9URVhUVVJFXzJEICAgICAgICAgICAgIDB4MERFMQotI2Rl
ZmluZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgIDB4MTQwNgotI2RlZmluZSBHTF9SR0JBICAg
ICAgICAgICAgICAgICAgIDB4MTkwOAotI2RlZmluZSBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
IDB4MTQwMQotI2RlZmluZSBHTF9URVhUVVJFX01BR19GSUxURVIgICAgIDB4MjgwMAotI2RlZmlu
ZSBHTF9URVhUVVJFX01JTl9GSUxURVIgICAgIDB4MjgwMQotI2RlZmluZSBHTF9URVhUVVJFX1dS
QVBfUyAgICAgICAgIDB4MjgwMgotI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfVCAgICAgICAgIDB4
MjgwMwotI2RlZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgIDB4MjYwMAotI2RlZmluZSBH
TF9DT0xPUl9CVUZGRVJfQklUICAgICAgIDB4NDAwMAotI2RlZmluZSBHTF9DTEFNUF9UT19FREdF
ICAgICAgICAgIDB4ODEyRgotI2RlZmluZSBHTF9BUlJBWV9CVUZGRVIgICAgICAgICAgIDB4ODg5
MgotI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAgIDB4ODhFNAotI2RlZmluZSBHTF9G
UkFHTUVOVF9TSEFERVIgICAgICAgIDB4OEIzMAotI2RlZmluZSBHTF9WRVJURVhfU0hBREVSICAg
ICAgICAgIDB4OEIzMQotI2RlZmluZSBHTF9DT01QSUxFX1NUQVRVUyAgICAgICAgIDB4OEI4MQot
I2RlZmluZSBHTF9MSU5LX1NUQVRVUyAgICAgICAgICAgIDB4OEI4MgotI2RlZmluZSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCAgICAgIDB4OENFMAotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSAgIDB4OENENQotI2RlZmluZSBHTF9GUkFNRUJVRkZFUiAgICAgICAgICAgIDB4OEQ0MAotCi12
b2lkIHByZW11bHRpcGx5QWxwaGEoY29uc3QgdW5zaWduZWQgY29sb3JJblszXSwgZmxvYXQgYWxw
aGEsIGZsb2F0IGNvbG9yT3V0WzRdKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytp
KQotICAgICAgICBjb2xvck91dFtpXSA9IChjb2xvckluW2ldIC8gMjU1LjBmKSAqIGFscGhhOwot
Ci0gICAgY29sb3JPdXRbM10gPSBhbHBoYTsKLX0KLQotY29uc3QgY2hhciogcG9pbnRTdGF0ZShX
ZWJUb3VjaFBvaW50OjpTdGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAg
Y2FzZSBXZWJUb3VjaFBvaW50OjpTdGF0ZVJlbGVhc2VkOgotICAgICAgICByZXR1cm4gIlJlbGVh
c2VkIjsKLSAgICBjYXNlIFdlYlRvdWNoUG9pbnQ6OlN0YXRlUHJlc3NlZDoKLSAgICAgICAgcmV0
dXJuICJQcmVzc2VkIjsKLSAgICBjYXNlIFdlYlRvdWNoUG9pbnQ6OlN0YXRlTW92ZWQ6Ci0gICAg
ICAgIHJldHVybiAiTW92ZWQiOwotICAgIGNhc2UgV2ViVG91Y2hQb2ludDo6U3RhdGVDYW5jZWxs
ZWQ6Ci0gICAgICAgIHJldHVybiAiQ2FuY2VsbGVkIjsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gIlVua25vd24iOwotICAgIH0KLQotICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBwcmludFRvdWNoTGlzdChXZWJUZXN0RGVsZWdh
dGUqIGRlbGVnYXRlLCBjb25zdCBXZWJUb3VjaFBvaW50KiBwb2ludHMsIGludCBsZW5ndGgpCi17
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjaGFyIGJ1
ZmZlclsxMDBdOwotICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiKiAl
ZCwgJWQ6ICVzXG4iLCBwb2ludHNbaV0ucG9zaXRpb24ueCwgcG9pbnRzW2ldLnBvc2l0aW9uLnks
IHBvaW50U3RhdGUocG9pbnRzW2ldLnN0YXRlKSk7Ci0gICAgICAgIGRlbGVnYXRlLT5wcmludE1l
c3NhZ2UoYnVmZmVyKTsKLSAgICB9Ci19Ci0KLXZvaWQgcHJpbnRFdmVudERldGFpbHMoV2ViVGVz
dERlbGVnYXRlKiBkZWxlZ2F0ZSwgY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCi17Ci0gICAg
aWYgKFdlYklucHV0RXZlbnQ6OmlzVG91Y2hFdmVudFR5cGUoZXZlbnQudHlwZSkpIHsKLSAgICAg
ICAgY29uc3QgV2ViVG91Y2hFdmVudCYgdG91Y2ggPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJUb3Vj
aEV2ZW50Jj4oZXZlbnQpOwotICAgICAgICBwcmludFRvdWNoTGlzdChkZWxlZ2F0ZSwgdG91Y2gu
dG91Y2hlcywgdG91Y2gudG91Y2hlc0xlbmd0aCk7Ci0gICAgICAgIHByaW50VG91Y2hMaXN0KGRl
bGVnYXRlLCB0b3VjaC5jaGFuZ2VkVG91Y2hlcywgdG91Y2guY2hhbmdlZFRvdWNoZXNMZW5ndGgp
OwotICAgICAgICBwcmludFRvdWNoTGlzdChkZWxlZ2F0ZSwgdG91Y2gudGFyZ2V0VG91Y2hlcywg
dG91Y2gudGFyZ2V0VG91Y2hlc0xlbmd0aCk7Ci0gICAgfSBlbHNlIGlmIChXZWJJbnB1dEV2ZW50
Ojppc01vdXNlRXZlbnRUeXBlKGV2ZW50LnR5cGUpIHx8IGV2ZW50LnR5cGUgPT0gV2ViSW5wdXRF
dmVudDo6TW91c2VXaGVlbCkgewotICAgICAgICBjb25zdCBXZWJNb3VzZUV2ZW50JiBtb3VzZSA9
IHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCk7Ci0gICAgICAgIGNoYXIg
YnVmZmVyWzEwMF07Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIq
ICVkLCAlZFxuIiwgbW91c2UueCwgbW91c2UueSk7Ci0gICAgICAgIGRlbGVnYXRlLT5wcmludE1l
c3NhZ2UoYnVmZmVyKTsKLSAgICB9IGVsc2UgaWYgKFdlYklucHV0RXZlbnQ6OmlzR2VzdHVyZUV2
ZW50VHlwZShldmVudC50eXBlKSkgewotICAgICAgICBjb25zdCBXZWJHZXN0dXJlRXZlbnQmIGdl
c3R1cmUgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJHZXN0dXJlRXZlbnQmPihldmVudCk7Ci0gICAg
ICAgIGNoYXIgYnVmZmVyWzEwMF07Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1
ZmZlciksICIqICVkLCAlZFxuIiwgZ2VzdHVyZS54LCBnZXN0dXJlLnkpOwotICAgICAgICBkZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKGJ1ZmZlcik7Ci0gICAgfQotfQotCi1XZWJQbHVnaW5Db250YWlu
ZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZSBwYXJzZVRvdWNoRXZlbnRSZXF1ZXN0VHlwZShjb25z
dCBXZWJTdHJpbmcmIHN0cmluZykKLXsKLSAgICBpZiAoc3RyaW5nID09IFdlYlN0cmluZzo6ZnJv
bVVURjgoInJhdyIpKQotICAgICAgICByZXR1cm4gV2ViUGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2
ZW50UmVxdWVzdFR5cGVSYXc7Ci0gICAgaWYgKHN0cmluZyA9PSBXZWJTdHJpbmc6OmZyb21VVEY4
KCJzeW50aGV0aWMiKSkKLSAgICAgICAgcmV0dXJuIFdlYlBsdWdpbkNvbnRhaW5lcjo6VG91Y2hF
dmVudFJlcXVlc3RUeXBlU3ludGhlc2l6ZWRNb3VzZTsKLSAgICByZXR1cm4gV2ViUGx1Z2luQ29u
dGFpbmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lOwotfQotCi12b2lkIGRlZmVycmVkRGVs
ZXRlKHZvaWQqIGNvbnRleHQpCi17Ci0gICAgVGVzdFBsdWdpbiogcGx1Z2luID0gc3RhdGljX2Nh
c3Q8VGVzdFBsdWdpbio+KGNvbnRleHQpOwotICAgIGRlbGV0ZSBwbHVnaW47Ci19Ci0KLX0KLQot
Ci1UZXN0UGx1Z2luOjpUZXN0UGx1Z2luKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViUGx1Z2lu
UGFyYW1zJiBwYXJhbXMsIFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi0gICAgOiBtX2ZyYW1l
KGZyYW1lKQotICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKLSAgICAsIG1fY29udGFpbmVyKDAp
Ci0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fdG91Y2hFdmVudFJlcXVlc3QoV2ViUGx1Z2lu
Q29udGFpbmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGVOb25lKQotICAgICwgbV9yZVJlcXVlc3RU
b3VjaEV2ZW50cyhmYWxzZSkKLSAgICAsIG1fcHJpbnRFdmVudERldGFpbHMoZmFsc2UpCi0gICAg
LCBtX3ByaW50VXNlckdlc3R1cmVTdGF0dXMoZmFsc2UpCi0gICAgLCBtX2NhblByb2Nlc3NEcmFn
KGZhbHNlKQotewotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVByaW1pdGl2
ZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInByaW1pdGl2ZSIpOwotICAgIHN0YXRpYyBjb25zdCBX
ZWJTdHJpbmcga0F0dHJpYnV0ZUJhY2tncm91bmRDb2xvciA9IFdlYlN0cmluZzo6ZnJvbVVURjgo
ImJhY2tncm91bmQtY29sb3IiKTsKLSAgICBzdGF0aWMgY29uc3QgV2ViU3RyaW5nIGtBdHRyaWJ1
dGVQcmltaXRpdmVDb2xvciA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInByaW1pdGl2ZS1jb2xvciIp
OwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZU9wYWNpdHkgPSBXZWJTdHJp
bmc6OmZyb21VVEY4KCJvcGFjaXR5Iik7Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmluZyBrQXR0
cmlidXRlQWNjZXB0c1RvdWNoID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYWNjZXB0cy10b3VjaCIp
OwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVJlUmVxdWVzdFRvdWNoRXZl
bnRzID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgicmUtcmVxdWVzdC10b3VjaCIpOwotICAgIHN0YXRp
YyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVByaW50RXZlbnREZXRhaWxzID0gV2ViU3RyaW5n
Ojpmcm9tVVRGOCgicHJpbnQtZXZlbnQtZGV0YWlscyIpOwotICAgIHN0YXRpYyBjb25zdCBXZWJT
dHJpbmcga0F0dHJpYnV0ZUNhblByb2Nlc3NEcmFnID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiY2Fu
LXByb2Nlc3MtZHJhZyIpOwotICAgIHN0YXRpYyBjb25zdCBXZWJTdHJpbmcga0F0dHJpYnV0ZVBy
aW50VXNlckdlc3R1cmVTdGF0dXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJwcmludC11c2VyLWdl
c3R1cmUtc3RhdHVzIik7Ci0KLSAgICBXRUJLSVRfQVNTRVJUKHBhcmFtcy5hdHRyaWJ1dGVOYW1l
cy5zaXplKCkgPT0gcGFyYW1zLmF0dHJpYnV0ZVZhbHVlcy5zaXplKCkpOwotICAgIHNpemVfdCBz
aXplID0gcGFyYW1zLmF0dHJpYnV0ZU5hbWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGF0dHJpYnV0ZU5h
bWUgPSBwYXJhbXMuYXR0cmlidXRlTmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
YXR0cmlidXRlVmFsdWUgPSBwYXJhbXMuYXR0cmlidXRlVmFsdWVzW2ldOwotCi0gICAgICAgIGlm
IChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmltaXRpdmUpCi0gICAgICAgICAgICBtX3Nj
ZW5lLnByaW1pdGl2ZSA9IHBhcnNlUHJpbWl0aXZlKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAg
ZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlQmFja2dyb3VuZENvbG9yKQotICAg
ICAgICAgICAgcGFyc2VDb2xvcihhdHRyaWJ1dGVWYWx1ZSwgbV9zY2VuZS5iYWNrZ3JvdW5kQ29s
b3IpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRyaWJ1dGVQcmltaXRp
dmVDb2xvcikKLSAgICAgICAgICAgIHBhcnNlQ29sb3IoYXR0cmlidXRlVmFsdWUsIG1fc2NlbmUu
cHJpbWl0aXZlQ29sb3IpOwotICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09IGtBdHRy
aWJ1dGVPcGFjaXR5KQotICAgICAgICAgICAgbV9zY2VuZS5vcGFjaXR5ID0gcGFyc2VPcGFjaXR5
KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0
cmlidXRlQWNjZXB0c1RvdWNoKQotICAgICAgICAgICAgbV90b3VjaEV2ZW50UmVxdWVzdCA9IHBh
cnNlVG91Y2hFdmVudFJlcXVlc3RUeXBlKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBp
ZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUmVSZXF1ZXN0VG91Y2hFdmVudHMpCi0gICAg
ICAgICAgICBtX3JlUmVxdWVzdFRvdWNoRXZlbnRzID0gcGFyc2VCb29sZWFuKGF0dHJpYnV0ZVZh
bHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBrQXR0cmlidXRlUHJpbnRF
dmVudERldGFpbHMpCi0gICAgICAgICAgICBtX3ByaW50RXZlbnREZXRhaWxzID0gcGFyc2VCb29s
ZWFuKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PSBr
QXR0cmlidXRlQ2FuUHJvY2Vzc0RyYWcpCi0gICAgICAgICAgICBtX2NhblByb2Nlc3NEcmFnID0g
cGFyc2VCb29sZWFuKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRl
TmFtZSA9PSBrQXR0cmlidXRlUHJpbnRVc2VyR2VzdHVyZVN0YXR1cykKLSAgICAgICAgICAgIG1f
cHJpbnRVc2VyR2VzdHVyZVN0YXR1cyA9IHBhcnNlQm9vbGVhbihhdHRyaWJ1dGVWYWx1ZSk7Ci0g
ICAgfQotfQotCi1UZXN0UGx1Z2luOjp+VGVzdFBsdWdpbigpCi17Ci19Ci0KLWJvb2wgVGVzdFBs
dWdpbjo6aW5pdGlhbGl6ZShXZWJQbHVnaW5Db250YWluZXIqIGNvbnRhaW5lcikKLXsKLSAgICBX
ZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyczsKLSAgICBtX2NvbnRleHQgPSBQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jcmVhdGVPZmZzY3JlZW5HcmFwaGljc0NvbnRleHQzRChhdHRy
cyk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFpbml0U2NlbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9sYXllciA9IGF1dG9fcHRyPFdlYkV4dGVybmFsVGV4dHVyZUxheWVyPihQbGF0Zm9ybTo6Y3Vy
cmVudCgpLT5jb21wb3NpdG9yU3VwcG9ydCgpLT5jcmVhdGVFeHRlcm5hbFRleHR1cmVMYXllcih0
aGlzKSk7Ci0gICAgbV9jb250YWluZXIgPSBjb250YWluZXI7Ci0gICAgbV9jb250YWluZXItPnNl
dFdlYkxheWVyKG1fbGF5ZXItPmxheWVyKCkpOwotICAgIGlmIChtX3JlUmVxdWVzdFRvdWNoRXZl
bnRzKSB7Ci0gICAgICAgIG1fY29udGFpbmVyLT5yZXF1ZXN0VG91Y2hFdmVudFR5cGUoV2ViUGx1
Z2luQ29udGFpbmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGVTeW50aGVzaXplZE1vdXNlKTsKLSAg
ICAgICAgbV9jb250YWluZXItPnJlcXVlc3RUb3VjaEV2ZW50VHlwZShXZWJQbHVnaW5Db250YWlu
ZXI6OlRvdWNoRXZlbnRSZXF1ZXN0VHlwZVJhdyk7Ci0gICAgfQotICAgIG1fY29udGFpbmVyLT5y
ZXF1ZXN0VG91Y2hFdmVudFR5cGUobV90b3VjaEV2ZW50UmVxdWVzdCk7Ci0gICAgbV9jb250YWlu
ZXItPnNldFdhbnRzV2hlZWxFdmVudHModHJ1ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgVGVzdFBsdWdpbjo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fY29udGFpbmVyKQotICAgICAg
ICBtX2NvbnRhaW5lci0+c2V0V2ViTGF5ZXIoMCk7Ci0gICAgbV9sYXllci5yZXNldCgpOwotICAg
IGRlc3Ryb3lTY2VuZSgpOwotCi0gICAgZGVsZXRlIG1fY29udGV4dDsKLSAgICBtX2NvbnRleHQg
PSAwOwotCi0gICAgbV9jb250YWluZXIgPSAwOwotICAgIG1fZnJhbWUgPSAwOwotCi0gICAgUGxh
dGZvcm06OmN1cnJlbnQoKS0+Y2FsbE9uTWFpblRocmVhZChkZWZlcnJlZERlbGV0ZSwgdGhpcyk7
Ci19Ci0KLXZvaWQgVGVzdFBsdWdpbjo6dXBkYXRlR2VvbWV0cnkoY29uc3QgV2ViUmVjdCYgZnJh
bWVSZWN0LCBjb25zdCBXZWJSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViVmVjdG9yPFdlYlJlY3Q+
JiBjdXRPdXRzUmVjdHMsIGJvb2wgaXNWaXNpYmxlKQotewotICAgIGlmIChjbGlwUmVjdCA9PSBt
X3JlY3QpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3JlY3QgPSBjbGlwUmVjdDsKLSAgICBpZiAo
bV9yZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5yZXNo
YXBlKG1fcmVjdC53aWR0aCwgbV9yZWN0LmhlaWdodCk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9y
dCgwLCAwLCBtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQpOwotCi0gICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbG9yVGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TkVBUkVTVCk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwLCBHTF9SR0JBLCBtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQsIDAs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2ZyYW1lYnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwg
R0xfVEVYVFVSRV8yRCwgbV9jb2xvclRleHR1cmUsIDApOwotCi0gICAgZHJhd1NjZW5lKCk7Ci0K
LSAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci0gICAgbV9sYXllci0+bGF5ZXIoKS0+aW52YWxpZGF0
ZSgpOwotfQotCi1UZXN0UGx1Z2luOjpQcmltaXRpdmUgVGVzdFBsdWdpbjo6cGFyc2VQcmltaXRp
dmUoY29uc3QgV2ViU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgc3RhdGljIGNvbnN0IFdlYlN0cmlu
ZyBrUHJpbWl0aXZlTm9uZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIm5vbmUiKTsKLSAgICBzdGF0
aWMgY29uc3QgV2ViU3RyaW5nIGtQcmltaXRpdmVUcmlhbmdsZSA9IFdlYlN0cmluZzo6ZnJvbVVU
RjgoInRyaWFuZ2xlIik7Ci0KLSAgICBQcmltaXRpdmUgcHJpbWl0aXZlID0gUHJpbWl0aXZlTm9u
ZTsKLSAgICBpZiAoc3RyaW5nID09IGtQcmltaXRpdmVOb25lKQotICAgICAgICBwcmltaXRpdmUg
PSBQcmltaXRpdmVOb25lOwotICAgIGVsc2UgaWYgKHN0cmluZyA9PSBrUHJpbWl0aXZlVHJpYW5n
bGUpCi0gICAgICAgIHByaW1pdGl2ZSA9IFByaW1pdGl2ZVRyaWFuZ2xlOwotICAgIGVsc2UKLSAg
ICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBwcmltaXRpdmU7
Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYWxyZWFkeSBleGlzdC4gVXNlIGl0
LgotLy8gRm9yIG5vdyBqdXN0IHBhcnNlIHByaW1hcnkgY29sb3JzLgotdm9pZCBUZXN0UGx1Z2lu
OjpwYXJzZUNvbG9yKGNvbnN0IFdlYlN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBjb2xvclszXSkK
LXsKLSAgICBjb2xvclswXSA9IGNvbG9yWzFdID0gY29sb3JbMl0gPSAwOwotICAgIGlmIChzdHJp
bmcgPT0gImJsYWNrIikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHN0cmluZyA9PSAicmVk
IikKLSAgICAgICAgY29sb3JbMF0gPSAyNTU7Ci0gICAgZWxzZSBpZiAoc3RyaW5nID09ICJncmVl
biIpCi0gICAgICAgIGNvbG9yWzFdID0gMjU1OwotICAgIGVsc2UgaWYgKHN0cmluZyA9PSAiYmx1
ZSIpCi0gICAgICAgIGNvbG9yWzJdID0gMjU1OwotICAgIGVsc2UKLSAgICAgICAgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1mbG9hdCBUZXN0UGx1Z2luOjpwYXJzZU9wYWNpdHko
Y29uc3QgV2ViU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mKHN0cmluZy51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLWJvb2wgVGVzdFBsdWdpbjo6cGFy
c2VCb29sZWFuKGNvbnN0IFdlYlN0cmluZyYgc3RyaW5nKQotewotICAgIHN0YXRpYyBjb25zdCBX
ZWJTdHJpbmcga1ByaW1pdGl2ZVRydWUgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0cnVlIik7Ci0g
ICAgcmV0dXJuIHN0cmluZyA9PSBrUHJpbWl0aXZlVHJ1ZTsKLX0KLQotYm9vbCBUZXN0UGx1Z2lu
Ojppbml0U2NlbmUoKQotewotICAgIGZsb2F0IGNvbG9yWzRdOwotICAgIHByZW11bHRpcGx5QWxw
aGEobV9zY2VuZS5iYWNrZ3JvdW5kQ29sb3IsIG1fc2NlbmUub3BhY2l0eSwgY29sb3IpOwotCi0g
ICAgbV9jb2xvclRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2Zy
YW1lYnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotCi0gICAgbV9jb250
ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQpOwotICAgIG1f
Y29udGV4dC0+ZGlzYWJsZShHTF9ERVBUSF9URVNUKTsKLSAgICBtX2NvbnRleHQtPmRpc2FibGUo
R0xfU0NJU1NPUl9URVNUKTsKLQotICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihjb2xvclswXSwg
Y29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZShH
TF9CTEVORCk7Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNf
U1JDX0FMUEhBKTsKLQotICAgIHJldHVybiBtX3NjZW5lLnByaW1pdGl2ZSAhPSBQcmltaXRpdmVO
b25lID8gaW5pdFByb2dyYW0oKSAmJiBpbml0UHJpbWl0aXZlKCkgOiB0cnVlOwotfQotCi12b2lk
IFRlc3RQbHVnaW46OmRyYXdTY2VuZSgpCi17Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAw
LCBtX3JlY3Qud2lkdGgsIG1fcmVjdC5oZWlnaHQpOwotICAgIG1fY29udGV4dC0+Y2xlYXIoR0xf
Q09MT1JfQlVGRkVSX0JJVCk7Ci0KLSAgICBpZiAobV9zY2VuZS5wcmltaXRpdmUgIT0gUHJpbWl0
aXZlTm9uZSkKLSAgICAgICAgZHJhd1ByaW1pdGl2ZSgpOwotfQotCi12b2lkIFRlc3RQbHVnaW46
OmRlc3Ryb3lTY2VuZSgpCi17Ci0gICAgaWYgKG1fc2NlbmUucHJvZ3JhbSkgewotICAgICAgICBt
X2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zY2VuZS5wcm9ncmFtKTsKLSAgICAgICAgbV9zY2Vu
ZS5wcm9ncmFtID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fc2NlbmUudmJvKSB7Ci0gICAgICAgIG1f
Y29udGV4dC0+ZGVsZXRlQnVmZmVyKG1fc2NlbmUudmJvKTsKLSAgICAgICAgbV9zY2VuZS52Ym8g
PSAwOwotICAgIH0KLQotICAgIGlmIChtX2ZyYW1lYnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7Ci0gICAgICAgIG1fZnJhbWVidWZm
ZXIgPSAwOwotICAgIH0KLQotICAgIGlmIChtX2NvbG9yVGV4dHVyZSkgewotICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUobV9jb2xvclRleHR1cmUpOwotICAgICAgICBtX2NvbG9yVGV4
dHVyZSA9IDA7Ci0gICAgfQotfQotCi1ib29sIFRlc3RQbHVnaW46OmluaXRQcm9ncmFtKCkKLXsK
LSAgICBjb25zdCBzdHJpbmcgdmVydGV4U291cmNlKAotICAgICAgICAiYXR0cmlidXRlIHZlYzQg
cG9zaXRpb247ICBcbiIKLSAgICAgICAgInZvaWQgbWFpbigpIHsgICAgICAgICAgICAgXG4iCi0g
ICAgICAgICIgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb247IFxuIgotICAgICAgICAifSAgICAgICAg
ICAgICAgICAgICAgICAgICBcbiIKLSAgICApOwotCi0gICAgY29uc3Qgc3RyaW5nIGZyYWdtZW50
U291cmNlKAotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IFxuIgotICAgICAgICAi
dW5pZm9ybSB2ZWM0IGNvbG9yOyAgICAgIFxuIgotICAgICAgICAidm9pZCBtYWluKCkgeyAgICAg
ICAgICAgIFxuIgotICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsgIFxuIgotICAgICAg
ICAifSAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICk7Ci0KLSAgICBtX3NjZW5lLnBy
b2dyYW0gPSBsb2FkUHJvZ3JhbSh2ZXJ0ZXhTb3VyY2UsIGZyYWdtZW50U291cmNlKTsKLSAgICBp
ZiAoIW1fc2NlbmUucHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9zY2Vu
ZS5jb2xvckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zY2VuZS5w
cm9ncmFtLCAiY29sb3IiKTsKLSAgICBtX3NjZW5lLnBvc2l0aW9uTG9jYXRpb24gPSBtX2NvbnRl
eHQtPmdldEF0dHJpYkxvY2F0aW9uKG1fc2NlbmUucHJvZ3JhbSwgInBvc2l0aW9uIik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVGVzdFBsdWdpbjo6aW5pdFByaW1pdGl2ZSgpCi17Ci0g
ICAgV0VCS0lUX0FTU0VSVChtX3NjZW5lLnByaW1pdGl2ZSA9PSBQcmltaXRpdmVUcmlhbmdsZSk7
Ci0KLSAgICBtX3NjZW5lLnZibyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgaWYg
KCFtX3NjZW5lLnZibykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgZmxvYXQg
dmVydGljZXNbXSA9IHsKLSAgICAgICAgMC4wZiwgIDAuOGYsIDAuMGYsCi0gICAgICAgIC0wLjhm
LCAtMC44ZiwgMC4wZiwKLSAgICAgICAgMC44ZiwgLTAuOGYsIDAuMGYgfTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3NjZW5lLnZibyk7Ci0gICAgbV9jb250
ZXh0LT5idWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6ZW9mKHZlcnRpY2VzKSwgMCwgR0xf
U1RBVElDX0RSQVcpOwotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHTF9BUlJBWV9CVUZG
RVIsIDAsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBUZXN0UGx1Z2luOjpkcmF3UHJpbWl0aXZlKCkKLXsKLSAgICBXRUJLSVRfQVNTRVJU
KG1fc2NlbmUucHJpbWl0aXZlID09IFByaW1pdGl2ZVRyaWFuZ2xlKTsKLSAgICBXRUJLSVRfQVNT
RVJUKG1fc2NlbmUudmJvKTsKLSAgICBXRUJLSVRfQVNTRVJUKG1fc2NlbmUucHJvZ3JhbSk7Ci0K
LSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9zY2VuZS5wcm9ncmFtKTsKLQotICAgIC8vIEJp
bmQgcHJpbWl0aXZlIGNvbG9yLgotICAgIGZsb2F0IGNvbG9yWzRdOwotICAgIHByZW11bHRpcGx5
QWxwaGEobV9zY2VuZS5wcmltaXRpdmVDb2xvciwgbV9zY2VuZS5vcGFjaXR5LCBjb2xvcik7Ci0g
ICAgbV9jb250ZXh0LT51bmlmb3JtNGYobV9zY2VuZS5jb2xvckxvY2F0aW9uLCBjb2xvclswXSwg
Y29sb3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7Ci0KLSAgICAvLyBCaW5kIHByaW1pdGl2ZSB2
ZXJ0aWNlcy4KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Nj
ZW5lLnZibyk7Ci0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NjZW5l
LnBvc2l0aW9uTG9jYXRpb24pOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlciht
X3NjZW5lLnBvc2l0aW9uTG9jYXRpb24sIDMsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgMCk7Ci0g
ICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdMX1RSSUFOR0xFUywgMCwgMyk7Ci19Ci0KLXVuc2ln
bmVkIFRlc3RQbHVnaW46OmxvYWRTaGFkZXIodW5zaWduZWQgdHlwZSwgY29uc3Qgc3RyaW5nJiBz
b3VyY2UpCi17Ci0gICAgdW5zaWduZWQgc2hhZGVyID0gbV9jb250ZXh0LT5jcmVhdGVTaGFkZXIo
dHlwZSk7Ci0gICAgaWYgKHNoYWRlcikgewotICAgICAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShzaGFkZXIsIHNvdXJjZS5kYXRhKCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKLQotICAgICAgICBpbnQgY29tcGlsZWQgPSAwOwotICAgICAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxlZCk7Ci0g
ICAgICAgIGlmICghY29tcGlsZWQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKHNoYWRlcik7Ci0gICAgICAgICAgICBzaGFkZXIgPSAwOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLXVuc2lnbmVkIFRlc3RQbHVnaW46OmxvYWRQcm9ncmFt
KGNvbnN0IHN0cmluZyYgdmVydGV4U291cmNlLCBjb25zdCBzdHJpbmcmIGZyYWdtZW50U291cmNl
KQotewotICAgIHVuc2lnbmVkIHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfVkVSVEVYX1NI
QURFUiwgdmVydGV4U291cmNlKTsKLSAgICB1bnNpZ25lZCBmcmFnbWVudFNoYWRlciA9IGxvYWRT
aGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNvdXJjZSk7Ci0gICAgdW5zaWduZWQg
cHJvZ3JhbSA9IG1fY29udGV4dC0+Y3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmICh2ZXJ0ZXhTaGFk
ZXIgJiYgZnJhZ21lbnRTaGFkZXIgJiYgcHJvZ3JhbSkgewotICAgICAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgICAgIG1fY29udGV4dC0+
bGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgaW50IGxpbmtlZCA9IDA7Ci0gICAgICAg
IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0xJTktfU1RBVFVTLCAmbGlua2Vk
KTsKLSAgICAgICAgaWYgKCFsaW5rZWQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKLSAgICAgICAgICAgIHByb2dyYW0gPSAwOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmICh2ZXJ0ZXhTaGFkZXIpCi0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlU2hh
ZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgaWYgKGZyYWdtZW50U2hhZGVyKQotICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0KLSAgICByZXR1cm4gcHJvZ3Jh
bTsKLX0KLQotYm9vbCBUZXN0UGx1Z2luOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdlYklucHV0
RXZlbnQmIGV2ZW50LCBXZWJDdXJzb3JJbmZvJiBpbmZvKQotewotICAgIGNvbnN0IGNoYXIqIGV2
ZW50TmFtZSA9IDA7Ci0gICAgc3dpdGNoIChldmVudC50eXBlKSB7Ci0gICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpVbmRlZmluZWQ6ICAgICAgICAgICBldmVudE5hbWUgPSAidW5rbm93biI7IGJyZWFr
OwotCi0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd246ICAgICAgICAgICBldmVudE5h
bWUgPSAiTW91c2VEb3duIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpNb3VzZVVw
OiAgICAgICAgICAgICBldmVudE5hbWUgPSAiTW91c2VVcCI7IGJyZWFrOwotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6TW91c2VNb3ZlOiAgICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlTW92ZSI7
IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VFbnRlcjogICAgICAgICAgZXZl
bnROYW1lID0gIk1vdXNlRW50ZXIiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Ok1v
dXNlTGVhdmU6ICAgICAgICAgIGV2ZW50TmFtZSA9ICJNb3VzZUxlYXZlIjsgYnJlYWs7Ci0gICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpDb250ZXh0TWVudTogICAgICAgICBldmVudE5hbWUgPSAiQ29u
dGV4dE1lbnUiOyBicmVhazsKLQotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6TW91c2VXaGVlbDog
ICAgICAgICAgZXZlbnROYW1lID0gIk1vdXNlV2hlZWwiOyBicmVhazsKLQotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6UmF3S2V5RG93bjogICAgICAgICAgZXZlbnROYW1lID0gIlJhd0tleURvd24i
OyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6OktleURvd246ICAgICAgICAgICAgIGV2
ZW50TmFtZSA9ICJLZXlEb3duIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpLZXlV
cDogICAgICAgICAgICAgICBldmVudE5hbWUgPSAiS2V5VXAiOyBicmVhazsKLSAgICBjYXNlIFdl
YklucHV0RXZlbnQ6OkNoYXI6ICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9ICJDaGFyIjsgYnJl
YWs7Ci0KLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbjogIGV2ZW50
TmFtZSA9ICJHZXN0dXJlU2Nyb2xsQmVnaW4iOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVTY3JvbGxFbmQ6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlU2Nyb2xsRW5kIjsg
YnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlV2l0aG91
dFByb3BhZ2F0aW9uOiAKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRh
dGU6IGV2ZW50TmFtZSA9ICJHZXN0dXJlU2Nyb2xsVXBkYXRlIjsgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDogICBldmVudE5hbWUgPSAiR2VzdHVyZUZs
aW5nU3RhcnQiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0Nh
bmNlbDogIGV2ZW50TmFtZSA9ICJHZXN0dXJlRmxpbmdDYW5jZWwiOyBicmVhazsKLSAgICBjYXNl
IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVUYXA6ICAgICAgICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJl
VGFwIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93bjogICAg
ICBldmVudE5hbWUgPSAiR2VzdHVyZVRhcERvd24iOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVUYXBDYW5jZWw6ICAgIGV2ZW50TmFtZSA9ICJHZXN0dXJlVGFwQ2FuY2Vs
IjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRG91YmxlVGFwOiAgICBl
dmVudE5hbWUgPSAiR2VzdHVyZURvdWJsZVRhcCI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZVR3b0ZpbmdlclRhcDogZXZlbnROYW1lID0gIkdlc3R1cmVUd29GaW5nZXJU
YXAiOyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nUHJlc3M6ICAg
IGV2ZW50TmFtZSA9ICJHZXN0dXJlTG9uZ1ByZXNzIjsgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpHZXN0dXJlTG9uZ1RhcDogICAgICBldmVudE5hbWUgPSAiR2VzdHVyZUxvbmdUYXAi
OyBicmVhazsKLSAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVQaW5jaEJlZ2luOiAgIGV2
ZW50TmFtZSA9ICJHZXN0dXJlUGluY2hCZWdpbiI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRF
dmVudDo6R2VzdHVyZVBpbmNoRW5kOiAgICAgZXZlbnROYW1lID0gIkdlc3R1cmVQaW5jaEVuZCI7
IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVBpbmNoVXBkYXRlOiAgZXZl
bnROYW1lID0gIkdlc3R1cmVQaW5jaFVwZGF0ZSI7IGJyZWFrOwotCi0gICAgY2FzZSBXZWJJbnB1
dEV2ZW50OjpUb3VjaFN0YXJ0OiAgICAgICAgICBldmVudE5hbWUgPSAiVG91Y2hTdGFydCI7IGJy
ZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hNb3ZlOiAgICAgICAgICAgZXZlbnRO
YW1lID0gIlRvdWNoTW92ZSI7IGJyZWFrOwotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6VG91Y2hF
bmQ6ICAgICAgICAgICAgZXZlbnROYW1lID0gIlRvdWNoRW5kIjsgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpUb3VjaENhbmNlbDogICAgICAgICBldmVudE5hbWUgPSAiVG91Y2hDYW5j
ZWwiOyBicmVhazsKLSAgICB9Ci0KLSAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RkOjpz
dHJpbmcoIlBsdWdpbiByZWNlaXZlZCBldmVudDogIikgKyAoZXZlbnROYW1lID8gZXZlbnROYW1l
IDogInVua25vd24iKSArICJcbiIpOwotICAgIGlmIChtX3ByaW50RXZlbnREZXRhaWxzKQotICAg
ICAgICBwcmludEV2ZW50RGV0YWlscyhtX2RlbGVnYXRlLCBldmVudCk7Ci0gICAgaWYgKG1fcHJp
bnRVc2VyR2VzdHVyZVN0YXR1cykKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0
ZDo6c3RyaW5nKCIqICIpICsgKFdlYlVzZXJHZXN0dXJlSW5kaWNhdG9yOjppc1Byb2Nlc3NpbmdV
c2VyR2VzdHVyZSgpID8gIiIgOiAibm90ICIpICsgImhhbmRsaW5nIHVzZXIgZ2VzdHVyZVxuIik7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRlc3RQbHVnaW46OmhhbmRsZURyYWdTdGF0
dXNVcGRhdGUoV2ViRHJhZ1N0YXR1cyBkcmFnU3RhdHVzLCBjb25zdCBXZWJEcmFnRGF0YSYsIFdl
YkRyYWdPcGVyYXRpb25zTWFzaywgY29uc3QgV2ViUG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJQ
b2ludCYgc2NyZWVuUG9zaXRpb24pCi17Ci0gICAgY29uc3QgY2hhciogZHJhZ1N0YXR1c05hbWUg
PSAwOwotICAgIHN3aXRjaCAoZHJhZ1N0YXR1cykgewotICAgIGNhc2UgV2ViRHJhZ1N0YXR1c0Vu
dGVyOgotICAgICAgICBkcmFnU3RhdHVzTmFtZSA9ICJEcmFnRW50ZXIiOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYkRyYWdTdGF0dXNPdmVyOgotICAgICAgICBkcmFnU3RhdHVzTmFtZSA9
ICJEcmFnT3ZlciI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRHJhZ1N0YXR1c0xlYXZl
OgotICAgICAgICBkcmFnU3RhdHVzTmFtZSA9ICJEcmFnTGVhdmUiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdlYkRyYWdTdGF0dXNEcm9wOgotICAgICAgICBkcmFnU3RhdHVzTmFtZSA9ICJE
cmFnRHJvcCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViRHJhZ1N0YXR1c1Vua25vd246
Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgbV9kZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKHN0ZDo6c3RyaW5nKCJQbHVnaW4gcmVjZWl2ZWQgZXZlbnQ6ICIp
ICsgZHJhZ1N0YXR1c05hbWUgKyAiXG4iKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVRlc3RQ
bHVnaW4qIFRlc3RQbHVnaW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlBsdWdp
blBhcmFtcyYgcGFyYW1zLCBXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQotewotICAgIHJldHVy
biBuZXcgVGVzdFBsdWdpbihmcmFtZSwgcGFyYW1zLCBkZWxlZ2F0ZSk7Ci19Ci0KLWNvbnN0IFdl
YlN0cmluZyYgVGVzdFBsdWdpbjo6bWltZVR5cGUoKQotewotICAgIHN0YXRpYyBjb25zdCBXZWJT
dHJpbmcga01pbWVUeXBlID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24veC13ZWJr
aXQtdGVzdC13ZWJwbHVnaW4iKTsKLSAgICByZXR1cm4ga01pbWVUeXBlOwotfQotCi19CkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UGx1Z2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvVGVzdFBsdWdpbi5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UGx1Z2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRlc3RQbHVnaW5faAotI2RlZmluZSBU
ZXN0UGx1Z2luX2gKLQotI2luY2x1ZGUgIldlYlBsdWdpbi5oIgotI2luY2x1ZGUgIldlYlBsdWdp
bkNvbnRhaW5lci5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRXh0
ZXJuYWxUZXh0dXJlTGF5ZXIuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViRXh0ZXJuYWxUZXh0dXJl
TGF5ZXJDbGllbnQuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVu
bmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotCi0vLyBBIGZha2UgaW1wbGVtZW50aW9u
IG9mIFdlYktpdDo6V2ViUGx1Z2luIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgotLy8KLS8vIEl0IHVz
ZXMgV2ViR3JhcGhpY3NDb250ZXh0M0QgdG8gcGFpbnQgYSBzY2VuZSBjb25zaXNpdGluZyBvZiBh
IHByaW1pdGl2ZQotLy8gb3ZlciBhIGJhY2tncm91bmQuIFRoZSBwcmltaXRpdmUgYW5kIGJhY2tn
cm91bmQgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcKLS8vIHRoZSBmb2xsb3dpbmcgcGx1Z2luIHBh
cmFtZXRlcnM6Ci0vLyBwcmltaXRpdmU6IG5vbmUgKGRlZmF1bHQpLCB0cmlhbmdsZS4KLS8vIGJh
Y2tncm91bmQtY29sb3I6IGJsYWNrIChkZWZhdWx0KSwgcmVkLCBncmVlbiwgYmx1ZS4KLS8vIHBy
aW1pdGl2ZS1jb2xvcjogYmxhY2sgKGRlZmF1bHQpLCByZWQsIGdyZWVuLCBibHVlLgotLy8gb3Bh
Y2l0eTogWzAuMCAtIDEuMF0uIERlZmF1bHQgaXMgMS4wLgotLy8KLS8vIFdoZXRoZXIgdGhlIHBs
dWdpbiBhY2NlcHRzIHRvdWNoIGV2ZW50cyBvciBub3QgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcg
dGhlCi0vLyAnYWNjZXB0cy10b3VjaCcgcGx1Z2luIHBhcmFtZXRlciAoZGVmYXVsdHMgdG8gZmFs
c2UpLgotY2xhc3MgVGVzdFBsdWdpbiA6IHB1YmxpYyBXZWJLaXQ6OldlYlBsdWdpbiwgcHVibGlj
IFdlYktpdDo6V2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIHN0
YXRpYyBUZXN0UGx1Z2luKiBjcmVhdGUoV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6
V2ViUGx1Z2luUGFyYW1zJiwgV2ViVGVzdERlbGVnYXRlKik7Ci0gICAgdmlydHVhbCB+VGVzdFBs
dWdpbigpOwotCi0gICAgc3RhdGljIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtaW1lVHlwZSgp
OwotCi0gICAgLy8gV2ViUGx1Z2luIG1ldGhvZHM6Ci0gICAgdmlydHVhbCBib29sIGluaXRpYWxp
emUoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOwotICAgIHZpcnR1YWwgTlBPYmplY3QqIHNjcmlwdGFibGVPYmplY3QoKSB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBib29sIGNhblByb2Nlc3NEcmFnKCkgY29uc3QgeyByZXR1cm4gbV9j
YW5Qcm9jZXNzRHJhZzsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJLaXQ6OldlYkNhbnZh
cyosIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVH
ZW9tZXRyeShjb25zdCBXZWJLaXQ6OldlYlJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2ViS2l0OjpX
ZWJSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJSZWN0
PiYgY3V0T3V0c1JlY3RzLCBib29sIGlzVmlzaWJsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUZvY3VzKGJvb2wpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmlsaXR5KGJvb2wp
IHsgfQotICAgIHZpcnR1YWwgYm9vbCBhY2NlcHRzSW5wdXRFdmVudHMoKSB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViS2l0OjpXZWJJ
bnB1dEV2ZW50JiwgV2ViS2l0OjpXZWJDdXJzb3JJbmZvJik7Ci0gICAgdmlydHVhbCBib29sIGhh
bmRsZURyYWdTdGF0dXNVcGRhdGUoV2ViS2l0OjpXZWJEcmFnU3RhdHVzLCBjb25zdCBXZWJLaXQ6
OldlYkRyYWdEYXRhJiwgV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uc01hc2ssIGNvbnN0IFdlYktp
dDo6V2ViUG9pbnQmIHBvc2l0aW9uLCBjb25zdCBXZWJLaXQ6OldlYlBvaW50JiBzY3JlZW5Qb3Np
dGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJLaXQ6
OldlYlVSTFJlc3BvbnNlJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoTG9hZGluZygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZyhjb25z
dCBXZWJLaXQ6OldlYlVSTEVycm9yJikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmdGcmFtZVJlcXVlc3QoY29uc3QgV2ViS2l0OjpXZWJVUkwmLCB2b2lkKiBub3RpZnlEYXRh
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbExvYWRpbmdGcmFtZVJlcXVlc3QoY29uc3Qg
V2ViS2l0OjpXZWJVUkwmLCB2b2lkKiBub3RpZnlEYXRhLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVy
cm9yJikgeyB9Ci0gICAgdmlydHVhbCBib29sIGlzUGxhY2Vob2xkZXIoKSB7IHJldHVybiBmYWxz
ZTsgfQotCi0gICAgLy8gV2ViRXh0ZXJuYWxUZXh0dXJlTGF5ZXJDbGllbnQgbWV0aG9kczoKLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHByZXBhcmVUZXh0dXJlKFdlYktpdDo6V2ViVGV4dHVyZVVwZGF0
ZXImKSB7IHJldHVybiBtX2NvbG9yVGV4dHVyZTsgfQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi1wcml2
YXRlOgotICAgIFRlc3RQbHVnaW4oV2ViS2l0OjpXZWJGcmFtZSosIGNvbnN0IFdlYktpdDo6V2Vi
UGx1Z2luUGFyYW1zJiwgV2ViVGVzdERlbGVnYXRlKik7Ci0KLSAgICBlbnVtIFByaW1pdGl2ZSB7
Ci0gICAgICAgIFByaW1pdGl2ZU5vbmUsCi0gICAgICAgIFByaW1pdGl2ZVRyaWFuZ2xlCi0gICAg
fTsKLQotICAgIHN0cnVjdCBTY2VuZSB7Ci0gICAgICAgIFByaW1pdGl2ZSBwcmltaXRpdmU7Ci0g
ICAgICAgIHVuc2lnbmVkIGJhY2tncm91bmRDb2xvclszXTsKLSAgICAgICAgdW5zaWduZWQgcHJp
bWl0aXZlQ29sb3JbM107Ci0gICAgICAgIGZsb2F0IG9wYWNpdHk7Ci0KLSAgICAgICAgdW5zaWdu
ZWQgdmJvOwotICAgICAgICB1bnNpZ25lZCBwcm9ncmFtOwotICAgICAgICBpbnQgY29sb3JMb2Nh
dGlvbjsKLSAgICAgICAgaW50IHBvc2l0aW9uTG9jYXRpb247Ci0KLSAgICAgICAgU2NlbmUoKQot
ICAgICAgICAgICAgOiBwcmltaXRpdmUoUHJpbWl0aXZlTm9uZSkKLSAgICAgICAgICAgICwgb3Bh
Y2l0eSgxLjBmKSAvLyBGdWxseSBvcGFxdWUuCi0gICAgICAgICAgICAsIHZibygwKQotICAgICAg
ICAgICAgLCBwcm9ncmFtKDApCi0gICAgICAgICAgICAsIGNvbG9yTG9jYXRpb24oLTEpCi0gICAg
ICAgICAgICAsIHBvc2l0aW9uTG9jYXRpb24oLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJh
Y2tncm91bmRDb2xvclswXSA9IGJhY2tncm91bmRDb2xvclsxXSA9IGJhY2tncm91bmRDb2xvclsy
XSA9IDA7Ci0gICAgICAgICAgICBwcmltaXRpdmVDb2xvclswXSA9IHByaW1pdGl2ZUNvbG9yWzFd
ID0gcHJpbWl0aXZlQ29sb3JbMl0gPSAwOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIEZ1
bmN0aW9ucyBmb3IgcGFyc2luZyBwbHVnaW4gcGFyYW1ldGVycy4KLSAgICBQcmltaXRpdmUgcGFy
c2VQcmltaXRpdmUoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLSAgICB2b2lkIHBhcnNlQ29s
b3IoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmLCB1bnNpZ25lZCBjb2xvclszXSk7Ci0gICAgZmxv
YXQgcGFyc2VPcGFjaXR5KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJik7Ci0gICAgYm9vbCBwYXJz
ZUJvb2xlYW4oY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmKTsKLQotICAgIC8vIEZ1bmN0aW9ucyBm
b3IgbG9hZGluZyBhbmQgZHJhd2luZyBzY2VuZS4KLSAgICBib29sIGluaXRTY2VuZSgpOwotICAg
IHZvaWQgZHJhd1NjZW5lKCk7Ci0gICAgdm9pZCBkZXN0cm95U2NlbmUoKTsKLSAgICBib29sIGlu
aXRQcm9ncmFtKCk7Ci0gICAgYm9vbCBpbml0UHJpbWl0aXZlKCk7Ci0gICAgdm9pZCBkcmF3UHJp
bWl0aXZlKCk7Ci0gICAgdW5zaWduZWQgbG9hZFNoYWRlcih1bnNpZ25lZCB0eXBlLCBjb25zdCBz
dGQ6OnN0cmluZyYgc291cmNlKTsKLSAgICB1bnNpZ25lZCBsb2FkUHJvZ3JhbShjb25zdCBzdGQ6
OnN0cmluZyYgdmVydGV4U291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYgZnJhZ21lbnRTb3VyY2Up
OwotCi0gICAgV2ViS2l0OjpXZWJGcmFtZSogbV9mcmFtZTsKLSAgICBXZWJUZXN0RGVsZWdhdGUq
IG1fZGVsZWdhdGU7Ci0gICAgV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXIqIG1fY29udGFpbmVy
OwotCi0gICAgV2ViS2l0OjpXZWJSZWN0IG1fcmVjdDsKLSAgICBXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV9jb2xvclRleHR1cmU7Ci0gICAg
dW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsKLSAgICBTY2VuZSBtX3NjZW5lOwotICAgIHN0ZDo6YXV0
b19wdHI8V2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXllcj4gbV9sYXllcjsKLQotICAgIFdl
YktpdDo6V2ViUGx1Z2luQ29udGFpbmVyOjpUb3VjaEV2ZW50UmVxdWVzdFR5cGUgbV90b3VjaEV2
ZW50UmVxdWVzdDsKLSAgICAvLyBSZXF1ZXN0cyB0b3VjaCBldmVudHMgZnJvbSB0aGUgV2ViUGx1
Z2luQ29udGFpbmVySW1wbCBtdWx0aXBsZSB0aW1lcyB0byB0aWNrbGUgd2Via2l0Lm9yZy9iLzEw
ODM4MQotICAgIGJvb2wgbV9yZVJlcXVlc3RUb3VjaEV2ZW50czsKLSAgICBib29sIG1fcHJpbnRF
dmVudERldGFpbHM7Ci0gICAgYm9vbCBtX3ByaW50VXNlckdlc3R1cmVTdGF0dXM7Ci0gICAgYm9v
bCBtX2NhblByb2Nlc3NEcmFnOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVGVzdFBsdWdpbl9oCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVu
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9UZXN0UnVubmVyLmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMjA1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF3
ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIlRlc3RSdW5uZXIuaCIKLQotI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xs
ZXIuaCIKLSNpbmNsdWRlICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgotI2luY2x1ZGUgIk5v
dGlmaWNhdGlvblByZXNlbnRlci5oIgotI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2VzLmgiCi0jaW5j
bHVkZSAiV2ViQmluZGluZ3MuaCIKLSNpbmNsdWRlICJXZWJEYXRhU291cmNlLmgiCi0jaW5jbHVk
ZSAiV2ViRGV2aWNlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlv
bkNsaWVudE1vY2suaCIKLSNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgotI2luY2x1ZGUgIldlYkVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJGaW5kT3B0aW9ucy5oIgotI2luY2x1ZGUgIldlYkZyYW1l
LmgiCi0jaW5jbHVkZSAiV2ViR2VvbG9jYXRpb25DbGllbnRNb2NrLmgiCi0jaW5jbHVkZSAiV2Vi
SW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiV2ViUGVybWlzc2lvbnMuaCIKLSNpbmNsdWRlICJX
ZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgotI2luY2x1ZGUg
IldlYlNlY3VyaXR5UG9saWN5LmgiCi0jaW5jbHVkZSAiV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCi0jaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJTdXJyb3VuZGluZ1Rl
eHQuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSAiV2ViVGVzdERlbGVnYXRlLmgi
Ci0jaW5jbHVkZSAiV2ViVGVzdFByb3h5LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1
ZGUgInY4L2luY2x1ZGUvdjguaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8bWVtb3J5
PgotI2luY2x1ZGUgPHB1YmxpYy9XZWJEYXRhLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlBvaW50
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlc3BvbnNlLmg+Ci0KLSNpZiBkZWZpbmVkKF9f
bGludXhfXykgfHwgZGVmaW5lZChBTkRST0lEKQotI2luY2x1ZGUgImxpbnV4L1dlYkZvbnRSZW5k
ZXJpbmcuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1uYW1lc3BhY2UgewotCi1j
bGFzcyBJbnZva2VDYWxsYmFja1Rhc2sgOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxUZXN0UnVubmVy
PiB7Ci1wdWJsaWM6Ci0gICAgSW52b2tlQ2FsbGJhY2tUYXNrKFRlc3RSdW5uZXIqIG9iamVjdCwg
YXV0b19wdHI8Q3BwVmFyaWFudD4gY2FsbGJhY2tBcmd1bWVudHMpCi0gICAgICAgIDogV2ViTWV0
aG9kVGFzazxUZXN0UnVubmVyPihvYmplY3QpCi0gICAgICAgICwgbV9jYWxsYmFja0FyZ3VtZW50
cyhjYWxsYmFja0FyZ3VtZW50cykKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJ1
bklmVmFsaWQoKQotICAgIHsKLSAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7Ci0gICAg
ICAgIG1fY2FsbGJhY2tBcmd1bWVudHMtPmludm9rZURlZmF1bHQobV9jYWxsYmFja0FyZ3VtZW50
cy5nZXQoKSwgMSwgaW52b2tlUmVzdWx0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYXV0b19w
dHI8Q3BwVmFyaWFudD4gbV9jYWxsYmFja0FyZ3VtZW50czsKLX07Ci0KLX0KLQotVGVzdFJ1bm5l
cjo6V29ya1F1ZXVlOjp+V29ya1F1ZXVlKCkKLXsKLSAgICByZXNldCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OldvcmtRdWV1ZTo6cHJvY2Vzc1dvcmtTb29uKCkKLXsKLSAgICBpZiAobV9jb250
cm9sbGVyLT50b3BMb2FkaW5nRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFt
X3F1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gV2UgZGVsYXkgcHJvY2Vzc2luZyBxdWV1ZWQg
d29yayB0byBhdm9pZCByZWN1cnNpb24gcHJvYmxlbXMuCi0gICAgICAgIG1fY29udHJvbGxlci0+
bV9kZWxlZ2F0ZS0+cG9zdFRhc2sobmV3IFdvcmtRdWV1ZVRhc2sodGhpcykpOwotICAgIH0gZWxz
ZSBpZiAoIW1fY29udHJvbGxlci0+bV93YWl0VW50aWxEb25lKQotICAgICAgICBtX2NvbnRyb2xs
ZXItPm1fZGVsZWdhdGUtPnRlc3RGaW5pc2hlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6Oldv
cmtRdWV1ZTo6cHJvY2Vzc1dvcmsoKQotewotICAgIC8vIFF1aXQgZG9pbmcgd29yayBvbmNlIGEg
bG9hZCBpcyBpbiBwcm9ncmVzcy4KLSAgICB3aGlsZSAoIW1fcXVldWUuZW1wdHkoKSkgewotICAg
ICAgICBib29sIHN0YXJ0ZWRMb2FkID0gbV9xdWV1ZS5mcm9udCgpLT5ydW4obV9jb250cm9sbGVy
LT5tX2RlbGVnYXRlLCBtX2NvbnRyb2xsZXItPm1fd2ViVmlldyk7Ci0gICAgICAgIGRlbGV0ZSBt
X3F1ZXVlLmZyb250KCk7Ci0gICAgICAgIG1fcXVldWUucG9wX2Zyb250KCk7Ci0gICAgICAgIGlm
IChzdGFydGVkTG9hZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
Y29udHJvbGxlci0+bV93YWl0VW50aWxEb25lICYmICFtX2NvbnRyb2xsZXItPnRvcExvYWRpbmdG
cmFtZSgpKQotICAgICAgICBtX2NvbnRyb2xsZXItPm1fZGVsZWdhdGUtPnRlc3RGaW5pc2hlZCgp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OldvcmtRdWV1ZTo6cmVzZXQoKQotewotICAgIG1fZnJv
emVuID0gZmFsc2U7Ci0gICAgd2hpbGUgKCFtX3F1ZXVlLmVtcHR5KCkpIHsKLSAgICAgICAgZGVs
ZXRlIG1fcXVldWUuZnJvbnQoKTsKLSAgICAgICAgbV9xdWV1ZS5wb3BfZnJvbnQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6V29ya1F1ZXVlOjphZGRXb3JrKFdvcmtJdGVtKiB3b3Jr
KQotewotICAgIGlmIChtX2Zyb3plbikgewotICAgICAgICBkZWxldGUgd29yazsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX3F1ZXVlLnB1c2hfYmFjayh3b3JrKTsKLX0KLQotCi1UZXN0
UnVubmVyOjpUZXN0UnVubmVyKFRlc3RJbnRlcmZhY2VzKiBpbnRlcmZhY2VzKQotICAgIDogbV90
ZXN0SXNSdW5uaW5nKGZhbHNlKQotICAgICwgbV9jbG9zZVJlbWFpbmluZ1dpbmRvd3MoZmFsc2Up
Ci0gICAgLCBtX3dvcmtRdWV1ZSh0aGlzKQotICAgICwgbV90ZXN0SW50ZXJmYWNlcyhpbnRlcmZh
Y2VzKQotICAgICwgbV9kZWxlZ2F0ZSgwKQotICAgICwgbV93ZWJWaWV3KDApCi0gICAgLCBtX3dl
YlBlcm1pc3Npb25zKG5ldyBXZWJQZXJtaXNzaW9ucykKLSNpZiBFTkFCTEVfTk9USUZJQ0FUSU9O
UwotICAgICwgbV9ub3RpZmljYXRpb25QcmVzZW50ZXIobmV3IE5vdGlmaWNhdGlvblByZXNlbnRl
cikKLSNlbmRpZgotewotICAgIC8vIEluaXRpYWxpemUgdGhlIG1hcCB0aGF0IGFzc29jaWF0ZXMg
bWV0aG9kcyBvZiB0aGlzIGNsYXNzIHdpdGggdGhlIG5hbWVzCi0gICAgLy8gdGhleSB3aWxsIHVz
ZSB3aGVuIGNhbGxlZCBieSBKYXZhU2NyaXB0LiBUaGUgYWN0dWFsIGJpbmRpbmcgb2YgdGhvc2UK
LSAgICAvLyBuYW1lcyB0byB0aGVpciBtZXRob2RzIHdpbGwgYmUgZG9uZSBieSBjYWxsaW5nIGJp
bmRUb0phdmFTY3JpcHQoKSAoZGVmaW5lZAotICAgIC8vIGJ5IENwcEJvdW5kQ2xhc3MsIHRoZSBw
YXJlbnQgdG8gVGVzdFJ1bm5lcikuCi0KLSAgICAvLyBNZXRob2RzIGNvbnRyb2xsaW5nIHRlc3Qg
ZXhlY3V0aW9uLgotICAgIGJpbmRNZXRob2QoIm5vdGlmeURvbmUiLCAmVGVzdFJ1bm5lcjo6bm90
aWZ5RG9uZSk7Ci0gICAgYmluZE1ldGhvZCgicXVldWVCYWNrTmF2aWdhdGlvbiIsICZUZXN0UnVu
bmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJxdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uIiwgJlRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24pOwotICAgIGJp
bmRNZXRob2QoInF1ZXVlTG9hZGluZ1NjcmlwdCIsICZUZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdT
Y3JpcHQpOwotICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZCIsICZUZXN0UnVubmVyOjpxdWV1ZUxv
YWQpOwotICAgIGJpbmRNZXRob2QoInF1ZXVlTG9hZEhUTUxTdHJpbmciLCAmVGVzdFJ1bm5lcjo6
cXVldWVMb2FkSFRNTFN0cmluZyk7Ci0gICAgYmluZE1ldGhvZCgicXVldWVOb25Mb2FkaW5nU2Ny
aXB0IiwgJlRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCk7Ci0gICAgYmluZE1ldGhv
ZCgicXVldWVSZWxvYWQiLCAmVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQpOwotICAgIGJpbmRNZXRo
b2QoInNldENsb3NlUmVtYWluaW5nV2luZG93c1doZW5Db21wbGV0ZSIsICZUZXN0UnVubmVyOjpz
ZXRDbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUpOwotICAgIGJpbmRNZXRob2QoInNl
dEN1c3RvbVBvbGljeURlbGVnYXRlIiwgJlRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVn
YXRlKTsKLSAgICBiaW5kTWV0aG9kKCJ3YWl0Rm9yUG9saWN5RGVsZWdhdGUiLCAmVGVzdFJ1bm5l
cjo6d2FpdEZvclBvbGljeURlbGVnYXRlKTsKLSAgICBiaW5kTWV0aG9kKCJ3YWl0VW50aWxEb25l
IiwgJlRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUpOwotICAgIGJpbmRNZXRob2QoIndpbmRvd0Nv
dW50IiwgJlRlc3RSdW5uZXI6OndpbmRvd0NvdW50KTsKLSAgICAvLyBNZXRob2RzIGltcGxlbWVu
dGVkIGluIHRlcm1zIG9mIGNocm9taXVtJ3MgcHVibGljIFdlYktpdCBBUEkuCi0gICAgYmluZE1l
dGhvZCgic2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzIiwgJlRlc3RSdW5uZXI6OnNldFRh
YktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7Ci0gICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQi
LCAmVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQpOwotICAgIGJpbmRNZXRob2QoImlzQ29tbWFuZEVu
YWJsZWQiLCAmVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZCk7Ci0gICAgYmluZE1ldGhvZCgi
Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3IiwgJlRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9u
V2ViVmlldyk7Ci0gICAgYmluZE1ldGhvZCgic2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZv
clVSTFNjaGVtZSIsICZUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9y
VVJMU2NoZW1lKTsKLSAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlIiwgJlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUpOwotICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkIiwgJlRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsK
LSAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4iLCAmVGVzdFJ1
bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5IiwgJlRlc3RSdW5uZXI6OnNldElz
b2xhdGVkV29ybGRDb250ZW50U2VjdXJpdHlQb2xpY3kpOwotICAgIGJpbmRNZXRob2QoImFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJlRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1do
aXRlbGlzdEVudHJ5KTsKLSAgICBiaW5kTWV0aG9kKCJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeSIsICZUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7
Ci0gICAgYmluZE1ldGhvZCgiaGFzQ3VzdG9tUGFnZVNpemVTdHlsZSIsICZUZXN0UnVubmVyOjpo
YXNDdXN0b21QYWdlU2l6ZVN0eWxlKTsKLSAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlv
bkNvbG9ycyIsICZUZXN0UnVubmVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyk7Ci0gICAgYmlu
ZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KTsKLSAg
ICBiaW5kTWV0aG9kKCJhZGRVc2VyU3R5bGVTaGVldCIsICZUZXN0UnVubmVyOjphZGRVc2VyU3R5
bGVTaGVldCk7Ci0gICAgYmluZE1ldGhvZCgic3RhcnRTcGVlY2hJbnB1dCIsICZUZXN0UnVubmVy
OjpzdGFydFNwZWVjaElucHV0KTsKLSAgICBiaW5kTWV0aG9kKCJmaW5kU3RyaW5nIiwgJlRlc3RS
dW5uZXI6OmZpbmRTdHJpbmcpOwotICAgIGJpbmRNZXRob2QoInNldFZhbHVlRm9yVXNlciIsICZU
ZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIpOwotICAgIGJpbmRNZXRob2QoImVuYWJsZUZpeGVk
TGF5b3V0TW9kZSIsICZUZXN0UnVubmVyOjplbmFibGVGaXhlZExheW91dE1vZGUpOwotICAgIGJp
bmRNZXRob2QoInNldEZpeGVkTGF5b3V0U2l6ZSIsICZUZXN0UnVubmVyOjpzZXRGaXhlZExheW91
dFNpemUpOwotICAgIGJpbmRNZXRob2QoInNlbGVjdGlvbkFzTWFya3VwIiwgJlRlc3RSdW5uZXI6
OnNlbGVjdGlvbkFzTWFya3VwKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRUZXh0U3VicGl4ZWxQb3Np
dGlvbmluZyIsICZUZXN0UnVubmVyOjpzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyk7Ci0gICAg
YmluZE1ldGhvZCgicmVzZXRQYWdlVmlzaWJpbGl0eSIsICZUZXN0UnVubmVyOjpyZXNldFBhZ2VW
aXNpYmlsaXR5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQYWdlVmlzaWJpbGl0eSIsICZUZXN0UnVu
bmVyOjpzZXRQYWdlVmlzaWJpbGl0eSk7Ci0gICAgYmluZE1ldGhvZCgic2V0VGV4dERpcmVjdGlv
biIsICZUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJ0ZXh0
U3Vycm91bmRpbmdOb2RlIiwgJlRlc3RSdW5uZXI6OnRleHRTdXJyb3VuZGluZ05vZGUpOwotICAg
IGJpbmRNZXRob2QoImRpc2FibGVBdXRvUmVzaXplTW9kZSIsICZUZXN0UnVubmVyOjpkaXNhYmxl
QXV0b1Jlc2l6ZU1vZGUpOwotICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwg
JlRlc3RSdW5uZXI6OmVuYWJsZUF1dG9SZXNpemVNb2RlKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRN
b2NrRGV2aWNlT3JpZW50YXRpb24iLCAmVGVzdFJ1bm5lcjo6c2V0TW9ja0RldmljZU9yaWVudGF0
aW9uKTsKLSAgICBiaW5kTWV0aG9kKCJkaWRBY3F1aXJlUG9pbnRlckxvY2siLCAmVGVzdFJ1bm5l
cjo6ZGlkQWNxdWlyZVBvaW50ZXJMb2NrKTsKLSAgICBiaW5kTWV0aG9kKCJkaWRMb3NlUG9pbnRl
ckxvY2siLCAmVGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJMb2NrKTsKLSAgICBiaW5kTWV0aG9k
KCJkaWROb3RBY3F1aXJlUG9pbnRlckxvY2siLCAmVGVzdFJ1bm5lcjo6ZGlkTm90QWNxdWlyZVBv
aW50ZXJMb2NrKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5
bmNocm9ub3VzbHkiLCAmVGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5j
aHJvbm91c2x5KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hy
b25vdXNseSIsICZUZXN0UnVubmVyOjpzZXRQb2ludGVyTG9ja1dpbGxGYWlsU3luY2hyb25vdXNs
eSk7Ci0KLSAgICAvLyBUaGUgZm9sbG93aW5nIG1vZGlmeSBXZWJQcmVmZXJlbmNlcy4KLSAgICBi
aW5kTWV0aG9kKCJzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQiLCAmVGVzdFJ1bm5lcjo6c2V0VXNl
clN0eWxlU2hlZXRFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uIiwgJlRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOwotICAgIGJp
bmRNZXRob2QoInNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkIiwgJlRlc3RSdW5uZXI6OnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRQb3B1cEJs
b2NraW5nRW5hYmxlZCIsICZUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCIsICZUZXN0UnVu
bmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRYU1NBdWRpdG9yRW5hYmxlZCIsICZUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk7
Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMiLCAm
VGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMpOwotICAgIGJp
bmRNZXRob2QoInNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyIsICZUZXN0UnVubmVyOjpz
ZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOwotICAgIGJpbmRNZXRob2QoIm92ZXJyaWRl
UHJlZmVyZW5jZSIsICZUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UpOwotICAgIGJpbmRN
ZXRob2QoInNldFBsdWdpbnNFbmFibGVkIiwgJlRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVk
KTsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgbW9kaWZ5IHRoZSBzdGF0ZSBvZiB0aGUgVGVzdFJ1
bm5lci4KLSAgICBiaW5kTWV0aG9kKCJkdW1wRWRpdGluZ0NhbGxiYWNrcyIsICZUZXN0UnVubmVy
OjpkdW1wRWRpdGluZ0NhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEFzVGV4dCIsICZU
ZXN0UnVubmVyOjpkdW1wQXNUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wQ2hpbGRGcmFtZXNB
c1RleHQiLCAmVGVzdFJ1bm5lcjo6ZHVtcENoaWxkRnJhbWVzQXNUZXh0KTsKLSAgICBiaW5kTWV0
aG9kKCJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyIsICZUZXN0UnVubmVyOjpkdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9ucyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcEljb25DaGFuZ2Vz
IiwgJlRlc3RSdW5uZXI6OmR1bXBJY29uQ2hhbmdlcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXVk
aW9EYXRhIiwgJlRlc3RSdW5uZXI6OnNldEF1ZGlvRGF0YSk7Ci0gICAgYmluZE1ldGhvZCgiZHVt
cEZyYW1lTG9hZENhbGxiYWNrcyIsICZUZXN0UnVubmVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyIs
ICZUZXN0UnVubmVyOjpkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrcyk7Ci0gICAg
YmluZE1ldGhvZCgic2V0U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcyIsICZUZXN0UnVubmVyOjpz
ZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wVGl0bGVD
aGFuZ2VzIiwgJlRlc3RSdW5uZXI6OmR1bXBUaXRsZUNoYW5nZXMpOwotICAgIGJpbmRNZXRob2Qo
ImR1bXBDcmVhdGVWaWV3IiwgJlRlc3RSdW5uZXI6OmR1bXBDcmVhdGVWaWV3KTsKLSAgICBiaW5k
TWV0aG9kKCJzZXRDYW5PcGVuV2luZG93cyIsICZUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93
cyk7Ci0gICAgYmluZE1ldGhvZCgiZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyIsICZUZXN0UnVu
bmVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKLSAgICBiaW5kTWV0aG9kKCJkdW1wUmVz
b3VyY2VSZXF1ZXN0Q2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZVJlcXVlc3RD
YWxsYmFja3MpOwotICAgIGJpbmRNZXRob2QoImR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
IiwgJlRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKTsKLSAgICBiaW5k
TWV0aG9kKCJkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyIsICZUZXN0UnVubmVyOjpkdW1w
UGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0SW1hZ2VzQWxs
b3dlZCIsICZUZXN0UnVubmVyOjpzZXRJbWFnZXNBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRTY3JpcHRzQWxsb3dlZCIsICZUZXN0UnVubmVyOjpzZXRTY3JpcHRzQWxsb3dlZCk7Ci0gICAg
YmluZE1ldGhvZCgic2V0U3RvcmFnZUFsbG93ZWQiLCAmVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZUFs
bG93ZWQpOwotICAgIGJpbmRNZXRob2QoInNldFBsdWdpbnNBbGxvd2VkIiwgJlRlc3RSdW5uZXI6
OnNldFBsdWdpbnNBbGxvd2VkKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBbGxvd0Rpc3BsYXlPZklu
c2VjdXJlQ29udGVudCIsICZUZXN0UnVubmVyOjpzZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29u
dGVudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQi
LCAmVGVzdFJ1bm5lcjo6c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQpOwotICAgIGJp
bmRNZXRob2QoImR1bXBTdGF0dXNDYWxsYmFja3MiLCAmVGVzdFJ1bm5lcjo6ZHVtcFdpbmRvd1N0
YXR1c0NoYW5nZXMpOwotICAgIGJpbmRNZXRob2QoImR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJh
Y2siLCAmVGVzdFJ1bm5lcjo6ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjayk7Ci0gICAgYmlu
ZE1ldGhvZCgiZHVtcEJhY2tGb3J3YXJkTGlzdCIsICZUZXN0UnVubmVyOjpkdW1wQmFja0Zvcndh
cmRMaXN0KTsKLSAgICBiaW5kTWV0aG9kKCJzZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkIiwg
JlRlc3RSdW5uZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQpOwotICAgIGJpbmRNZXRo
b2QoImR1bXBTZWxlY3Rpb25SZWN0IiwgJlRlc3RSdW5uZXI6OmR1bXBTZWxlY3Rpb25SZWN0KTsK
LSAgICBiaW5kTWV0aG9kKCJ0ZXN0UmVwYWludCIsICZUZXN0UnVubmVyOjp0ZXN0UmVwYWludCk7
Ci0gICAgYmluZE1ldGhvZCgicmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5IiwgJlRlc3RSdW5uZXI6
OnJlcGFpbnRTd2VlcEhvcml6b250YWxseSk7Ci0gICAgYmluZE1ldGhvZCgic2V0UHJpbnRpbmci
LCAmVGVzdFJ1bm5lcjo6c2V0UHJpbnRpbmcpOwotICAgIGJpbmRNZXRob2QoInNldFNob3VsZFN0
YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkIiwgJlRlc3RSdW5uZXI6OnNldFNob3Vs
ZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKTsKLSAgICBiaW5kTWV0aG9kKCJz
ZXRXaWxsU2VuZFJlcXVlc3RDbGVhckhlYWRlciIsICZUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJl
cXVlc3RDbGVhckhlYWRlcik7Ci0gICAgYmluZE1ldGhvZCgic2V0V2lsbFNlbmRSZXF1ZXN0UmV0
dXJuc051bGwiLCAmVGVzdFJ1bm5lcjo6c2V0V2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwpOwot
ICAgIGJpbmRNZXRob2QoInNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCIs
ICZUZXN0UnVubmVyOjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QpOwot
ICAgIGJpbmRNZXRob2QoImR1bXBSZXNvdXJjZVJlcXVlc3RQcmlvcml0aWVzIiwgJlRlc3RSdW5u
ZXI6OmR1bXBSZXNvdXJjZVJlcXVlc3RQcmlvcml0aWVzKTsKLQotICAgIC8vIFRoZSBmb2xsb3dp
bmcgbWV0aG9kcyBpbnRlcmFjdCB3aXRoIHRoZSBXZWJUZXN0UHJveHkuCi0gICAgLy8gVGhlIGZv
bGxvd2luZyBtZXRob2RzIGludGVyYWN0IHdpdGggdGhlIFdlYlRlc3REZWxlZ2F0ZS4KLSAgICBi
aW5kTWV0aG9kKCJzaG93V2ViSW5zcGVjdG9yIiwgJlRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0
b3IpOwotICAgIGJpbmRNZXRob2QoImNsb3NlV2ViSW5zcGVjdG9yIiwgJlRlc3RSdW5uZXI6OmNs
b3NlV2ViSW5zcGVjdG9yKTsKLSAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZUluV2ViSW5zcGVjdG9y
IiwgJlRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwotICAgIGJpbmRNZXRob2Qo
ImNsZWFyQWxsRGF0YWJhc2VzIiwgJlRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKTsKLSAg
ICBiaW5kTWV0aG9kKCJzZXREYXRhYmFzZVF1b3RhIiwgJlRlc3RSdW5uZXI6OnNldERhdGFiYXNl
UXVvdGEpOwotICAgIGJpbmRNZXRob2QoInNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCAmVGVzdFJ1
bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7Ci0gICAgYmluZE1ldGhvZCgic2V0V2luZG93
SXNLZXkiLCAmVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkpOwotICAgIGJpbmRNZXRob2QoInBh
dGhUb0xvY2FsUmVzb3VyY2UiLCAmVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZSk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0QmFja2luZ1NjYWxlRmFjdG9yIiwgJlRlc3RSdW5uZXI6OnNldEJh
Y2tpbmdTY2FsZUZhY3Rvcik7Ci0gICAgYmluZE1ldGhvZCgic2V0UE9TSVhMb2NhbGUiLCAmVGVz
dFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUpOwotICAgIGJpbmRNZXRob2QoIm51bWJlck9mUGVuZGlu
Z0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzIiwgJlRlc3RSdW5uZXI6OiBudW1iZXJPZlBl
bmRpbmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cyk7Ci0gICAgYmluZE1ldGhvZCgic2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uIiwgJlRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbik7Ci0gICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yIiwgJlRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFp
bGFibGVFcnJvcik7Ci0gICAgYmluZE1ldGhvZCgic2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24i
LCAmVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOwotI2lmIEVOQUJMRV9O
T1RJRklDQVRJT05TCi0gICAgYmluZE1ldGhvZCgiZ3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNz
aW9uIiwgJlRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbik7Ci0gICAg
YmluZE1ldGhvZCgic2ltdWxhdGVMZWdhY3lXZWJOb3RpZmljYXRpb25DbGljayIsICZUZXN0UnVu
bmVyOjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKTsKLSNlbmRpZgotICAgIGJp
bmRNZXRob2QoImFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCIsICZUZXN0UnVubmVyOjphZGRNb2Nr
U3BlZWNoSW5wdXRSZXN1bHQpOwotICAgIGJpbmRNZXRob2QoInNldE1vY2tTcGVlY2hJbnB1dER1
bXBSZWN0IiwgJlRlc3RSdW5uZXI6OnNldE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0KTsKLSAgICBi
aW5kTWV0aG9kKCJhZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQiLCAmVGVzdFJ1bm5lcjo6
YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRNb2Nr
U3BlZWNoUmVjb2duaXRpb25FcnJvciIsICZUZXN0UnVubmVyOjpzZXRNb2NrU3BlZWNoUmVjb2du
aXRpb25FcnJvcik7Ci0gICAgYmluZE1ldGhvZCgid2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJv
cnRlZCIsICZUZXN0UnVubmVyOjp3YXNNb2NrU3BlZWNoUmVjb2duaXRpb25BYm9ydGVkKTsKLSAg
ICBiaW5kTWV0aG9kKCJkaXNwbGF5IiwgJlRlc3RSdW5uZXI6OmRpc3BsYXkpOwotICAgIGJpbmRN
ZXRob2QoImRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbiIsICZUZXN0UnVubmVyOjpkaXNwbGF5SW52
YWxpZGF0ZWRSZWdpb24pOwotCi0gICAgLy8gUHJvcGVydGllcy4KLSAgICBiaW5kUHJvcGVydHko
Imdsb2JhbEZsYWciLCAmbV9nbG9iYWxGbGFnKTsKLSAgICBiaW5kUHJvcGVydHkoInRpdGxlVGV4
dERpcmVjdGlvbiIsICZtX3RpdGxlVGV4dERpcmVjdGlvbik7Ci0gICAgYmluZFByb3BlcnR5KCJw
bGF0Zm9ybU5hbWUiLCAmbV9wbGF0Zm9ybU5hbWUpOwotICAgIC8vIHdlYkhpc3RvcnlJdGVtQ291
bnQgaXMgdXNlZCBieSB0ZXN0cyBpbiBMYXlvdXRUZXN0c1xodHRwXHRlc3RzXGhpc3RvcnkKLSAg
ICBiaW5kUHJvcGVydHkoIndlYkhpc3RvcnlJdGVtQ291bnQiLCAmbV93ZWJIaXN0b3J5SXRlbUNv
dW50KTsKLSAgICBiaW5kUHJvcGVydHkoImludGVyY2VwdFBvc3RNZXNzYWdlIiwgJm1faW50ZXJj
ZXB0UG9zdE1lc3NhZ2UpOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgc3R1YnMuCi0gICAg
YmluZE1ldGhvZCgiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxl
bWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJkZW55V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbiIs
ICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgicmVtb3ZlQWxs
V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQp
OwotICAgIGJpbmRNZXRob2QoInNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2siLCAmVGVzdFJ1
bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2QoInNldEljb25EYXRhYmFzZUVu
YWJsZWQiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2QoInNl
dFNjcm9sbGJhclBvbGljeSIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmlu
ZE1ldGhvZCgiY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyIsICZUZXN0UnVubmVyOjpub3RJbXBs
ZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2lu
IiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJjbGVhckJh
Y2tGb3J3YXJkTGlzdCIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1l
dGhvZCgia2VlcFdlYkhpc3RvcnkiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAg
IGJpbmRNZXRob2QoInNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSIsICZUZXN0UnVubmVy
Ojpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0Q2FsbENsb3NlT25XZWJWaWV3
cyIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0TWFp
bkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0g
ICAgYmluZE1ldGhvZCgic2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCIsICZUZXN0UnVubmVyOjpu
b3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgic2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJp
bGl0eU1vZGUiLCAmVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQpOwotICAgIGJpbmRNZXRob2Qo
ImRlbGV0ZUFsbExvY2FsU3RvcmFnZSIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0g
ICAgYmluZE1ldGhvZCgibG9jYWxTdG9yYWdlRGlza1VzYWdlRm9yT3JpZ2luIiwgJlRlc3RSdW5u
ZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJvcmlnaW5zV2l0aExvY2FsU3Rv
cmFnZSIsICZUZXN0UnVubmVyOjpub3RJbXBsZW1lbnRlZCk7Ci0gICAgYmluZE1ldGhvZCgiZGVs
ZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsK
LSAgICBiaW5kTWV0aG9kKCJvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zIiwgJlRl
c3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJzeW5jTG9jYWxTdG9y
YWdlIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJhZGRE
aXNhbGxvd2VkVVJMIiwgJlRlc3RSdW5uZXI6Om5vdEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0
aG9kKCJhcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2luIiwgJlRlc3RSdW5uZXI6Om5v
dEltcGxlbWVudGVkKTsKLSAgICBiaW5kTWV0aG9kKCJhYm9ydE1vZGFsIiwgJlRlc3RSdW5uZXI6
Om5vdEltcGxlbWVudGVkKTsKLQotICAgIC8vIFRoZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVk
IHdoZW4gYW4gdW5rbm93biBtZXRob2QgaXMgaW52b2tlZC4KLSAgICBiaW5kRmFsbGJhY2tNZXRo
b2QoJlRlc3RSdW5uZXI6OmZhbGxiYWNrTWV0aG9kKTsKLX0KLQotVGVzdFJ1bm5lcjo6flRlc3RS
dW5uZXIoKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldERlbGVnYXRlKFdlYlRlc3REZWxl
Z2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotICAgIG1fd2Vi
UGVybWlzc2lvbnMtPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLSNpZiBFTkFCTEVfTk9USUZJQ0FU
SU9OUwotICAgIG1fbm90aWZpY2F0aW9uUHJlc2VudGVyLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRXZWJWaWV3KFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYlRlc3RQcm94eUJhc2UqIHByb3h5KQotewotICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7
Ci0gICAgbV9wcm94eSA9IHByb3h5OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlc2V0KCkKLXsK
LSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIG1fd2ViVmlldy0+c2V0Wm9vbUxldmVsKGZh
bHNlLCAwKTsKLSAgICAgICAgbV93ZWJWaWV3LT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHModHJ1ZSk7Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChXSU4zMikgLy8g
QWN0dWFsbHksIFRPT0xLSVRfR1RLCi0gICAgICAgIC8vIChDb25zdGFudHMgY29waWVkIGJlY2F1
c2Ugd2UgY2FuJ3QgZGVwZW5kIG9uIHRoZSBoZWFkZXIgdGhhdCBkZWZpbmVkCi0gICAgICAgIC8v
IHRoZW0gZnJvbSB0aGlzIGZpbGUuKQotICAgICAgICBtX3dlYlZpZXctPnNldFNlbGVjdGlvbkNv
bG9ycygweGZmMWU5MGZmLCAweGZmMDAwMDAwLCAweGZmYzhjOGM4LCAweGZmMzIzMjMyKTsKLSNl
bmRpZgotICAgICAgICBtX3dlYlZpZXctPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7Ci0gICAgICAg
IG1fd2ViVmlldy0+ZGlzYWJsZUF1dG9SZXNpemVNb2RlKCk7Ci0gICAgfQotICAgIG1fdG9wTG9h
ZGluZ0ZyYW1lID0gMDsKLSAgICBtX3dhaXRVbnRpbERvbmUgPSBmYWxzZTsKLSAgICBtX3BvbGlj
eURlbGVnYXRlRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fcG9saWN5RGVsZWdhdGVJc1Blcm1pc3Np
dmUgPSBmYWxzZTsKLSAgICBtX3BvbGljeURlbGVnYXRlU2hvdWxkTm90aWZ5RG9uZSA9IGZhbHNl
OwotCi0gICAgV2ViU2VjdXJpdHlQb2xpY3k6OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygp
OwotI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKEFORFJPSUQpCi0gICAgV2ViRm9u
dFJlbmRlcmluZzo6c2V0U3VicGl4ZWxQb3NpdGlvbmluZyhmYWxzZSk7Ci0jZW5kaWYKLQotICAg
IGlmIChtX2RlbGVnYXRlKSB7Ci0gICAgICAgIC8vIFJlc2V0IHRoZSBkZWZhdWx0IHF1b3RhIGZv
ciBlYWNoIG9yaWdpbiB0byA1TUIKLSAgICAgICAgbV9kZWxlZ2F0ZS0+c2V0RGF0YWJhc2VRdW90
YSg1ICogMTAyNCAqIDEwMjQpOwotICAgICAgICBtX2RlbGVnYXRlLT5zZXREZXZpY2VTY2FsZUZh
Y3RvcigxKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+c2V0QWNjZXB0QWxsQ29va2llcyhmYWxzZSk7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnNldExvY2FsZSgiIik7Ci0gICAgfQotCi0gICAgbV9kdW1w
RWRpdGluZ0NhbGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcEFzVGV4dCA9IGZhbHNlOwotICAg
IG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSB0cnVlOwotICAgIG1fZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnMgPSBmYWxzZTsKLSAgICBtX2R1bXBDaGlsZEZyYW1lc0FzVGV4dCA9IGZhbHNl
OwotICAgIG1fZHVtcEljb25DaGFuZ2VzID0gZmFsc2U7Ci0gICAgbV9kdW1wQXNBdWRpbyA9IGZh
bHNlOwotICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcFVz
ZXJHZXN0dXJlSW5GcmFtZUxvYWRDYWxsYmFja3MgPSBmYWxzZTsKLSAgICBtX3N0b3BQcm92aXNp
b25hbEZyYW1lTG9hZHMgPSBmYWxzZTsKLSAgICBtX2R1bXBUaXRsZUNoYW5nZXMgPSBmYWxzZTsK
LSAgICBtX2R1bXBDcmVhdGVWaWV3ID0gZmFsc2U7Ci0gICAgbV9jYW5PcGVuV2luZG93cyA9IGZh
bHNlOwotICAgIG1fZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVt
cFJlc291cmNlUmVxdWVzdENhbGxiYWNrcyA9IGZhbHNlOwotICAgIG1fZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMgPSBmYWxzZTsKLSAgICBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzID0g
ZmFsc2U7Ci0gICAgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gZmFsc2U7Ci0gICAg
bV9kdW1wQmFja0ZvcndhcmRMaXN0ID0gZmFsc2U7Ci0gICAgbV9kZWZlck1haW5SZXNvdXJjZURh
dGFMb2FkID0gdHJ1ZTsKLSAgICBtX2R1bXBTZWxlY3Rpb25SZWN0ID0gZmFsc2U7Ci0gICAgbV90
ZXN0UmVwYWludCA9IGZhbHNlOwotICAgIG1fc3dlZXBIb3Jpem9udGFsbHkgPSBmYWxzZTsKLSAg
ICBtX2lzUHJpbnRpbmcgPSBmYWxzZTsKLSAgICBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRs
aW5nQmVmb3JlVW5sb2FkID0gZmFsc2U7Ci0gICAgbV9zaG91bGRCbG9ja1JlZGlyZWN0cyA9IGZh
bHNlOwotICAgIG1fd2lsbFNlbmRSZXF1ZXN0U2hvdWxkUmV0dXJuTnVsbCA9IGZhbHNlOwotICAg
IG1fc2hvdWxkRHVtcFJlc291cmNlUHJpb3JpdGllcyA9IGZhbHNlOwotCi0gICAgbV9odHRwSGVh
ZGVyc1RvQ2xlYXIuY2xlYXIoKTsKLQotICAgIG1fZ2xvYmFsRmxhZy5zZXQoZmFsc2UpOwotICAg
IG1fdGl0bGVUZXh0RGlyZWN0aW9uLnNldCgibHRyIik7Ci0gICAgbV93ZWJIaXN0b3J5SXRlbUNv
dW50LnNldCgwKTsKLSAgICBtX2ludGVyY2VwdFBvc3RNZXNzYWdlLnNldChmYWxzZSk7Ci0gICAg
bV9wbGF0Zm9ybU5hbWUuc2V0KCJjaHJvbWl1bSIpOwotCi0gICAgbV91c2VyU3R5bGVTaGVldExv
Y2F0aW9uID0gV2ViVVJMKCk7Ci0KLSAgICBtX3dlYlBlcm1pc3Npb25zLT5yZXNldCgpOwotCi0j
aWYgRU5BQkxFX05PVElGSUNBVElPTlMKLSAgICBtX25vdGlmaWNhdGlvblByZXNlbnRlci0+cmVz
ZXQoKTsKLSNlbmRpZgotICAgIG1fcG9pbnRlckxvY2tlZCA9IGZhbHNlOwotICAgIG1fcG9pbnRl
ckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxvY2tXaWxsU3VjY2VlZDsKLQotICAgIG1fdGFz
a0xpc3QucmV2b2tlQWxsKCk7Ci0gICAgbV93b3JrUXVldWUucmVzZXQoKTsKLQotICAgIGlmICht
X2Nsb3NlUmVtYWluaW5nV2luZG93cyAmJiBtX2RlbGVnYXRlKQotICAgICAgICBtX2RlbGVnYXRl
LT5jbG9zZVJlbWFpbmluZ1dpbmRvd3MoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2xvc2VSZW1h
aW5pbmdXaW5kb3dzID0gdHJ1ZTsKLX0KLQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFRlc3RJc1J1
bm5pbmcoYm9vbCBydW5uaW5nKQotewotICAgIG1fdGVzdElzUnVubmluZyA9IHJ1bm5pbmc7Ci19
Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OmNoZWNrUmVzcG9uc2VNaW1lVHlwZSgpCi17Ci0gICAgLy8gVGV4dCBvdXRwdXQ6IHRoZSB0
ZXN0IHBhZ2UgY2FuIHJlcXVlc3QgZGlmZmVyZW50IHR5cGVzIG9mIG91dHB1dAotICAgIC8vIHdo
aWNoIHdlIGhhbmRsZSBoZXJlLgotICAgIGlmICghbV9kdW1wQXNUZXh0KSB7Ci0gICAgICAgIHN0
cmluZyBtaW1lVHlwZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmRhdGFTb3VyY2UoKS0+cmVz
cG9uc2UoKS5taW1lVHlwZSgpLnV0ZjgoKTsKLSAgICAgICAgaWYgKG1pbWVUeXBlID09ICJ0ZXh0
L3BsYWluIikgewotICAgICAgICAgICAgbV9kdW1wQXNUZXh0ID0gdHJ1ZTsKLSAgICAgICAgICAg
IG1fZ2VuZXJhdGVQaXhlbFJlc3VsdHMgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
Ym9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wQXNUZXh0KCkKLXsKLSAgICBjaGVja1Jlc3BvbnNl
TWltZVR5cGUoKTsKLSAgICByZXR1cm4gbV9kdW1wQXNUZXh0OwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OnNldFNob3VsZER1bXBBc1RleHQoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX2R1bXBBc1RleHQg
PSB2YWx1ZTsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0
cygpCi17Ci0gICAgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7Ci0gICAgcmV0dXJuIG1fZ2VuZXJh
dGVQaXhlbFJlc3VsdHM7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkR2VuZXJhdGVQ
aXhlbFJlc3VsdHMoYm9vbCB2YWx1ZSkKLXsKLSAgICBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0g
dmFsdWU7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcENoaWxkRnJhbWVTY3JvbGxQ
b3NpdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9z
aXRpb25zOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBDaGlsZEZyYW1lc0FzVGV4
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHVtcENoaWxkRnJhbWVzQXNUZXh0OwotfQotCi1i
b29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBBc0F1ZGlvKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9kdW1wQXNBdWRpbzsKLX0KLQotY29uc3QgV2ViQXJyYXlCdWZmZXJWaWV3KiBUZXN0UnVubmVy
OjphdWRpb0RhdGEoKSBjb25zdAotewotICAgIHJldHVybiAmbV9hdWRpb0RhdGE7Ci19Ci0KLWJv
b2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fdGVzdElzUnVubmluZyAmJiBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3M7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyhib29s
IHZhbHVlKQotewotICAgIG1fZHVtcEZyYW1lTG9hZENhbGxiYWNrcyA9IHZhbHVlOwotfQotCi1i
b29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXN0SXNSdW5uaW5nICYmIG1fZHVtcFVzZXJHZXN0
dXJlSW5GcmFtZUxvYWRDYWxsYmFja3M7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c3RvcFByb3Zp
c2lvbmFsRnJhbWVMb2FkcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc3RvcFByb3Zpc2lvbmFs
RnJhbWVMb2FkczsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wVGl0bGVDaGFuZ2Vz
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kdW1wVGl0bGVDaGFuZ2VzOwotfQotCi1ib29sIFRl
c3RSdW5uZXI6OnNob3VsZER1bXBJY29uQ2hhbmdlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZHVtcEljb25DaGFuZ2VzOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBDcmVhdGVW
aWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kdW1wQ3JlYXRlVmlldzsKLX0KLQotYm9vbCBU
ZXN0UnVubmVyOjpjYW5PcGVuV2luZG93cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2FuT3Bl
bldpbmRvd3M7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFJlc291cmNlTG9hZENh
bGxiYWNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGVzdElzUnVubmluZyAmJiBtX2R1bXBS
ZXNvdXJjZUxvYWRDYWxsYmFja3M7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hvdWxkRHVtcFJl
c291cmNlUmVxdWVzdENhbGxiYWNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGVzdElzUnVu
bmluZyAmJiBtX2R1bXBSZXNvdXJjZVJlcXVlc3RDYWxsYmFja3M7Ci19Ci0KLWJvb2wgVGVzdFJ1
bm5lcjo6c2hvdWxkRHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Rlc3RJc1J1bm5pbmcgJiYgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBl
czsKLX0KLQotV2ViUGVybWlzc2lvbkNsaWVudCogVGVzdFJ1bm5lcjo6d2ViUGVybWlzc2lvbnMo
KSBjb25zdAotewotICAgIHJldHVybiBtX3dlYlBlcm1pc3Npb25zLmdldCgpOwotfQotCi1ib29s
IFRlc3RSdW5uZXI6OnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2R1bXBXaW5kb3dTdGF0dXNDaGFuZ2VzOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnNo
b3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSBjb25zdAotewotICAgIHJldHVybiBt
X2R1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6c2hv
dWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZHVtcEJhY2tG
b3J3YXJkTGlzdDsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpkZWZlck1haW5SZXNvdXJjZURhdGFM
b2FkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kZWZlck1haW5SZXNvdXJjZURhdGFMb2FkOwot
fQotCi1ib29sIFRlc3RSdW5uZXI6OnNob3VsZER1bXBTZWxlY3Rpb25SZWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9kdW1wU2VsZWN0aW9uUmVjdDsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjp0
ZXN0UmVwYWludCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGVzdFJlcGFpbnQ7Ci19Ci0KLWJv
b2wgVGVzdFJ1bm5lcjo6c3dlZXBIb3Jpem9udGFsbHkoKSBjb25zdAotewotICAgIHJldHVybiBt
X3N3ZWVwSG9yaXpvbnRhbGx5OwotfQotCi1ib29sIFRlc3RSdW5uZXI6OmlzUHJpbnRpbmcoKSBj
b25zdAotewotICAgIHJldHVybiBtX2lzUHJpbnRpbmc7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6
c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFRpdGxlVGV4dERpcmVjdGlvbihXZWJLaXQ6OldlYlRleHRE
aXJlY3Rpb24gZGlyKQotewotICAgIG1fdGl0bGVUZXh0RGlyZWN0aW9uLnNldChkaXIgPT0gV2Vi
S2l0OjpXZWJUZXh0RGlyZWN0aW9uTGVmdFRvUmlnaHQgPyAibHRyIiA6ICJydGwiKTsKLX0KLQot
Y29uc3Qgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+KiBUZXN0UnVubmVyOjpodHRwSGVhZGVyc1RvQ2xl
YXIoKSBjb25zdAotewotICAgIHJldHVybiAmbV9odHRwSGVhZGVyc1RvQ2xlYXI7Ci19Ci0KLWJv
b2wgVGVzdFJ1bm5lcjo6c2hvdWxkQmxvY2tSZWRpcmVjdHMoKSBjb25zdAotewotICAgIHJldHVy
biBtX3Nob3VsZEJsb2NrUmVkaXJlY3RzOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OndpbGxTZW5k
UmVxdWVzdFNob3VsZFJldHVybk51bGwoKSBjb25zdAotewotICAgIHJldHVybiBtX3dpbGxTZW5k
UmVxdWVzdFNob3VsZFJldHVybk51bGw7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VG9wTG9h
ZGluZ0ZyYW1lKFdlYkZyYW1lKiBmcmFtZSwgYm9vbCBjbGVhcikKLXsKLSAgICBpZiAoZnJhbWUt
PnRvcCgpLT52aWV3KCkgIT0gbV93ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFt
X3Rlc3RJc1J1bm5pbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY2xlYXIpIHsKLSAgICAg
ICAgbV90b3BMb2FkaW5nRnJhbWUgPSAwOwotICAgICAgICBsb2NhdGlvbkNoYW5nZURvbmUoKTsK
LSAgICB9IGVsc2UgaWYgKCFtX3RvcExvYWRpbmdGcmFtZSkKLSAgICAgICAgbV90b3BMb2FkaW5n
RnJhbWUgPSBmcmFtZTsKLX0KLQotV2ViRnJhbWUqIFRlc3RSdW5uZXI6OnRvcExvYWRpbmdGcmFt
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdG9wTG9hZGluZ0ZyYW1lOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnBvbGljeURlbGVnYXRlRG9uZSgpCi17Ci0gICAgV0VCS0lUX0FTU0VSVChtX3dh
aXRVbnRpbERvbmUpOwotICAgIG1fZGVsZWdhdGUtPnRlc3RGaW5pc2hlZCgpOwotICAgIG1fd2Fp
dFVudGlsRG9uZSA9IGZhbHNlOwotfQotCi1ib29sIFRlc3RSdW5uZXI6OnBvbGljeURlbGVnYXRl
RW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcG9saWN5RGVsZWdhdGVFbmFibGVkOwot
fQotCi1ib29sIFRlc3RSdW5uZXI6OnBvbGljeURlbGVnYXRlSXNQZXJtaXNzaXZlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZTsKLX0KLQotYm9vbCBU
ZXN0UnVubmVyOjpwb2xpY3lEZWxlZ2F0ZVNob3VsZE5vdGlmeURvbmUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BvbGljeURlbGVnYXRlU2hvdWxkTm90aWZ5RG9uZTsKLX0KLQotYm9vbCBUZXN0
UnVubmVyOjpzaG91bGRJbnRlcmNlcHRQb3N0TWVzc2FnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faW50ZXJjZXB0UG9zdE1lc3NhZ2UuaXNCb29sKCkgJiYgbV9pbnRlcmNlcHRQb3N0TWVzc2Fn
ZS50b0Jvb2xlYW4oKTsKLX0KLQotYm9vbCBUZXN0UnVubmVyOjpzaG91bGREdW1wUmVzb3VyY2VQ
cmlvcml0aWVzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaG91bGREdW1wUmVzb3VyY2VQcmlv
cml0aWVzOwotfQotCi0jaWYgRU5BQkxFX05PVElGSUNBVElPTlMKLVdlYk5vdGlmaWNhdGlvblBy
ZXNlbnRlciogVGVzdFJ1bm5lcjo6bm90aWZpY2F0aW9uUHJlc2VudGVyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9ub3RpZmljYXRpb25QcmVzZW50ZXIuZ2V0KCk7Ci19Ci0jZW5kaWYKLQotYm9v
bCBUZXN0UnVubmVyOjpyZXF1ZXN0UG9pbnRlckxvY2soKQotewotICAgIHN3aXRjaCAobV9wb2lu
dGVyTG9ja1BsYW5uZWRSZXN1bHQpIHsKLSAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbFN1Y2NlZWQ6
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnBvc3REZWxheWVkVGFzayhuZXcgSG9zdE1ldGhvZFRhc2so
dGhpcywgJlRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKSwgMCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgUG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5j
OgotICAgICAgICBXRUJLSVRfQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBjYXNlIFBvaW50ZXJMb2NrV2lsbEZhaWxTeW5jOgotICAgICAgICBXRUJL
SVRfQVNTRVJUKCFtX3BvaW50ZXJMb2NrZWQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlcXVlc3RQb2ludGVy
VW5sb2NrKCkKLXsKLSAgICBtX2RlbGVnYXRlLT5wb3N0RGVsYXllZFRhc2sobmV3IEhvc3RNZXRo
b2RUYXNrKHRoaXMsICZUZXN0UnVubmVyOjpkaWRMb3NlUG9pbnRlckxvY2tJbnRlcm5hbCksIDAp
OwotfQotCi1ib29sIFRlc3RSdW5uZXI6OmlzUG9pbnRlckxvY2tlZCgpCi17Ci0gICAgcmV0dXJu
IG1fcG9pbnRlckxvY2tlZDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkaWRBY3F1aXJlUG9pbnRl
ckxvY2tJbnRlcm5hbCgpCi17Ci0gICAgbV9wb2ludGVyTG9ja2VkID0gdHJ1ZTsKLSAgICBtX3dl
YlZpZXctPmRpZEFjcXVpcmVQb2ludGVyTG9jaygpOwotCi0gICAgLy8gUmVzZXQgcGxhbm5lZCBy
ZXN1bHQgdG8gZGVmYXVsdC4KLSAgICBtX3BvaW50ZXJMb2NrUGxhbm5lZFJlc3VsdCA9IFBvaW50
ZXJMb2NrV2lsbFN1Y2NlZWQ7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGlkTm90QWNxdWlyZVBv
aW50ZXJMb2NrSW50ZXJuYWwoKQotewotICAgIFdFQktJVF9BU1NFUlQoIW1fcG9pbnRlckxvY2tl
ZCk7Ci0gICAgbV9wb2ludGVyTG9ja2VkID0gZmFsc2U7Ci0gICAgbV93ZWJWaWV3LT5kaWROb3RB
Y3F1aXJlUG9pbnRlckxvY2soKTsKLQotICAgIC8vIFJlc2V0IHBsYW5uZWQgcmVzdWx0IHRvIGRl
ZmF1bHQuCi0gICAgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxT
dWNjZWVkOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmRpZExvc2VQb2ludGVyTG9ja0ludGVybmFs
KCkKLXsKLSAgICBib29sIHdhc0xvY2tlZCA9IG1fcG9pbnRlckxvY2tlZDsKLSAgICBtX3BvaW50
ZXJMb2NrZWQgPSBmYWxzZTsKLSAgICBpZiAod2FzTG9ja2VkKQotICAgICAgICBtX3dlYlZpZXct
PmRpZExvc2VQb2ludGVyTG9jaygpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNob3dEZXZUb29s
cygpCi17Ci0gICAgbV9kZWxlZ2F0ZS0+c2hvd0RldlRvb2xzKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6d2FpdFVudGlsRG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKCFtX2RlbGVnYXRlLT5pc0JlaW5nRGVidWdnZWQoKSkKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+cG9zdERlbGF5ZWRUYXNrKG5ldyBOb3RpZnlEb25lVGltZWRPdXRUYXNr
KHRoaXMpLCBtX2RlbGVnYXRlLT5sYXlvdXRUZXN0VGltZW91dCgpKTsKLSAgICBtX3dhaXRVbnRp
bERvbmUgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6Om5vdGlmeURvbmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIC8vIFRlc3QgZGlkbid0IHRpbWVvdXQuIEtpbGwgdGhlIHRpbWVvdXQgdGltZXIu
Ci0gICAgdGFza0xpc3QoKS0+cmV2b2tlQWxsKCk7Ci0KLSAgICBjb21wbGV0ZU5vdGlmeURvbmUo
ZmFsc2UpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNv
bXBsZXRlTm90aWZ5RG9uZShib29sIGlzVGltZW91dCkKLXsKLSAgICBpZiAobV93YWl0VW50aWxE
b25lICYmICF0b3BMb2FkaW5nRnJhbWUoKSAmJiBtX3dvcmtRdWV1ZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgaWYgKGlzVGltZW91dCkKLSAgICAgICAgICAgIG1fZGVsZWdhdGUtPnRlc3RUaW1lZE91
dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT50ZXN0RmluaXNoZWQo
KTsKLSAgICB9Ci0gICAgbV93YWl0VW50aWxEb25lID0gZmFsc2U7Ci19Ci0KLWNsYXNzIFdvcmtJ
dGVtQmFja0ZvcndhcmQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6V29ya0l0ZW0gewotcHVibGljOgot
ICAgIFdvcmtJdGVtQmFja0ZvcndhcmQoaW50IGRpc3RhbmNlKSA6IG1fZGlzdGFuY2UoZGlzdGFu
Y2UpIHsgfQotICAgIGJvb2wgcnVuKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIFdlYlZpZXcq
KQotICAgIHsKLSAgICAgICAgZGVsZWdhdGUtPmdvVG9PZmZzZXQobV9kaXN0YW5jZSk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogRGlkIGl0IHJlYWxseSBzdGFydCBhIG5hdmlnYXRp
b24/Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludCBtX2Rpc3RhbmNlOwotfTsKLQotdm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PiAwICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICBtX3dvcmtRdWV1ZS5hZGRX
b3JrKG5ldyBXb3JrSXRlbUJhY2tGb3J3YXJkKC1hcmd1bWVudHNbMF0udG9JbnQzMigpKSk7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJk
TmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSkKLSAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1CYWNr
Rm9yd2FyZChhcmd1bWVudHNbMF0udG9JbnQzMigpKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLWNsYXNzIFdvcmtJdGVtUmVsb2FkIDogcHVibGljIFRlc3RSdW5uZXI6OldvcmtJdGVt
IHsKLXB1YmxpYzoKLSAgICBib29sIHJ1bihXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlLCBXZWJW
aWV3KikKLSAgICB7Ci0gICAgICAgIGRlbGVnYXRlLT5yZWxvYWQoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotfTsKLQotdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV93b3JrUXVldWUu
YWRkV29yayhuZXcgV29ya0l0ZW1SZWxvYWQpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci1jbGFzcyBXb3JrSXRlbUxvYWRpbmdTY3JpcHQgOiBwdWJsaWMgVGVzdFJ1bm5lcjo6V29ya0l0
ZW0gewotcHVibGljOgotICAgIFdvcmtJdGVtTG9hZGluZ1NjcmlwdChjb25zdCBzdHJpbmcmIHNj
cmlwdCkgOiBtX3NjcmlwdChzY3JpcHQpIHsgfQotICAgIGJvb2wgcnVuKFdlYlRlc3REZWxlZ2F0
ZSosIFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgewotICAgICAgICB3ZWJWaWV3LT5tYWluRnJhbWUo
KS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOChtX3Nj
cmlwdCkpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIEZJWE1FOiBEaWQgaXQgcmVhbGx5IHN0
YXJ0IGEgbmF2aWdhdGlvbj8KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RyaW5nIG1fc2NyaXB0
OwotfTsKLQotY2xhc3MgV29ya0l0ZW1Ob25Mb2FkaW5nU2NyaXB0IDogcHVibGljIFRlc3RSdW5u
ZXI6OldvcmtJdGVtIHsKLXB1YmxpYzoKLSAgICBXb3JrSXRlbU5vbkxvYWRpbmdTY3JpcHQoY29u
c3Qgc3RyaW5nJiBzY3JpcHQpIDogbV9zY3JpcHQoc2NyaXB0KSB7IH0KLSAgICBib29sIHJ1bihX
ZWJUZXN0RGVsZWdhdGUqLCBXZWJWaWV3KiB3ZWJWaWV3KQotICAgIHsKLSAgICAgICAgd2ViVmll
dy0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6
ZnJvbVVURjgobV9zY3JpcHQpKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RyaW5nIG1fc2NyaXB0OwotfTsKLQotdm9pZCBUZXN0UnVubmVyOjpxdWV1
ZUxvYWRpbmdTY3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRz
WzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVt
TG9hZGluZ1NjcmlwdChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAg
ICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Ob25Mb2FkaW5nU2NyaXB0KGFy
Z3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLWNs
YXNzIFdvcmtJdGVtTG9hZCA6IHB1YmxpYyBUZXN0UnVubmVyOjpXb3JrSXRlbSB7Ci1wdWJsaWM6
Ci0gICAgV29ya0l0ZW1Mb2FkKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBzdHJpbmcmIHRhcmdl
dCkKLSAgICAgICAgOiBtX3VybCh1cmwpCi0gICAgICAgICwgbV90YXJnZXQodGFyZ2V0KSB7IH0K
LSAgICBib29sIHJ1bihXZWJUZXN0RGVsZWdhdGUqIGRlbGVnYXRlLCBXZWJWaWV3KikKLSAgICB7
Ci0gICAgICAgIGRlbGVnYXRlLT5sb2FkVVJMRm9yRnJhbWUobV91cmwsIG1fdGFyZ2V0KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7IC8vIEZJWE1FOiBEaWQgaXQgcmVhbGx5IHN0YXJ0IGEgbmF2aWdh
dGlvbj8KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgV2ViVVJMIG1fdXJsOwotICAgIHN0cmluZyBt
X3RhcmdldDsKLX07Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgV2ViVVJMOjpyZXNvbHZlKCkgYW5kIGF2b2lkIEdVUkwuCi0gICAg
ICAgIEdVUkwgY3VycmVudFVSTCA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCku
dXJsKCk7Ci0gICAgICAgIEdVUkwgZnVsbFVSTCA9IGN1cnJlbnRVUkwuUmVzb2x2ZShhcmd1bWVu
dHNbMF0udG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgc3RyaW5nIHRhcmdldCA9ICIiOwotICAgICAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0g
ICAgICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0udG9TdHJpbmcoKTsKLQotICAgICAgICBt
X3dvcmtRdWV1ZS5hZGRXb3JrKG5ldyBXb3JrSXRlbUxvYWQoZnVsbFVSTCwgdGFyZ2V0KSk7Ci0g
ICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi1jbGFzcyBXb3JrSXRlbUxvYWRIVE1M
U3RyaW5nIDogcHVibGljIFRlc3RSdW5uZXI6OldvcmtJdGVtICB7Ci1wdWJsaWM6Ci0gICAgV29y
a0l0ZW1Mb2FkSFRNTFN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyYgaHRtbCwgY29uc3QgV2ViVVJM
JiBiYXNlVVJMKQotICAgICAgICA6IG1faHRtbChodG1sKQotICAgICAgICAsIG1fYmFzZVVSTChi
YXNlVVJMKSB7IH0KLSAgICBXb3JrSXRlbUxvYWRIVE1MU3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5n
JiBodG1sLCBjb25zdCBXZWJVUkwmIGJhc2VVUkwsIGNvbnN0IFdlYlVSTCYgdW5yZWFjaGFibGVV
UkwpCi0gICAgICAgIDogbV9odG1sKGh0bWwpCi0gICAgICAgICwgbV9iYXNlVVJMKGJhc2VVUkwp
Ci0gICAgICAgICwgbV91bnJlYWNoYWJsZVVSTCh1bnJlYWNoYWJsZVVSTCkgeyB9Ci0gICAgYm9v
bCBydW4oV2ViVGVzdERlbGVnYXRlKiwgV2ViVmlldyogd2ViVmlldykKLSAgICB7Ci0gICAgICAg
IHdlYlZpZXctPm1haW5GcmFtZSgpLT5sb2FkSFRNTFN0cmluZygKLSAgICAgICAgICAgIFdlYktp
dDo6V2ViRGF0YShtX2h0bWwuZGF0YSgpLCBtX2h0bWwubGVuZ3RoKCkpLCBtX2Jhc2VVUkwsIG1f
dW5yZWFjaGFibGVVUkwpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgc3RkOjpzdHJpbmcgbV9odG1sOwotICAgIFdlYlVSTCBtX2Jhc2VVUkw7Ci0gICAgV2Vi
VVJMIG1fdW5yZWFjaGFibGVVUkw7Ci19OwotCi12b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhU
TUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
U3RyaW5nKCkpIHsKLSAgICAgICAgc3RyaW5nIGh0bWwgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKLSAgICAgICAgV2ViVVJMIGJhc2VVUkwoR1VSTCgiIikpOwotICAgICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDEgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgICAgICBi
YXNlVVJMID0gV2ViVVJMKEdVUkwoYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpKTsKLSAgICAgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPiAyICYmIGFyZ3VtZW50c1syXS5pc1N0cmluZygpKQotICAg
ICAgICAgICAgbV93b3JrUXVldWUuYWRkV29yayhuZXcgV29ya0l0ZW1Mb2FkSFRNTFN0cmluZyho
dG1sLCBiYXNlVVJMLCBXZWJVUkwoR1VSTChhcmd1bWVudHNbMl0udG9TdHJpbmcoKSkpKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fd29ya1F1ZXVlLmFkZFdvcmsobmV3IFdvcmtJdGVt
TG9hZEhUTUxTdHJpbmcoaHRtbCwgYmFzZVVSTCkpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpsb2NhdGlvbkNoYW5nZURvbmUoKQotewotICAg
IG1fd2ViSGlzdG9yeUl0ZW1Db3VudC5zZXQobV9kZWxlZ2F0ZS0+bmF2aWdhdGlvbkVudHJ5Q291
bnQoKSk7Ci0KLSAgICAvLyBObyBtb3JlIG5ldyB3b3JrIGFmdGVyIHRoZSBmaXJzdCBjb21wbGV0
ZSBsb2FkLgotICAgIG1fd29ya1F1ZXVlLnNldEZyb3plbih0cnVlKTsKLQotICAgIGlmICghbV93
YWl0VW50aWxEb25lKQotICAgICAgICBtX3dvcmtRdWV1ZS5wcm9jZXNzV29ya1Nvb24oKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjp3aW5kb3dDb3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoc3RhdGljX2Nhc3Q8aW50Piht
X3Rlc3RJbnRlcmZhY2VzLT53aW5kb3dMaXN0KCkuc2l6ZSgpKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV9jbG9z
ZVJlbWFpbmluZ1dpbmRvd3MgPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURl
bGVnYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkgewotICAgICAgICBtX3BvbGljeURlbGVnYXRlRW5hYmxlZCA9IGFyZ3VtZW50c1swXS52
YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIG1fcG9saWN5RGVsZWdhdGVJc1Blcm1pc3NpdmUgPSBm
YWxzZTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAxICYmIGFyZ3VtZW50c1sxXS5p
c0Jvb2woKSkKLSAgICAgICAgICAgIG1fcG9saWN5RGVsZWdhdGVJc1Blcm1pc3NpdmUgPSBhcmd1
bWVudHNbMV0udmFsdWUuYm9vbFZhbHVlOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fcG9saWN5RGVsZWdhdGVF
bmFibGVkID0gdHJ1ZTsKLSAgICBtX3BvbGljeURlbGVnYXRlU2hvdWxkTm90aWZ5RG9uZSA9IHRy
dWU7Ci0gICAgbV93YWl0VW50aWxEb25lID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV93ZWJQZXJt
aXNzaW9ucy0+c2V0RHVtcENhbGxiYWNrcyh0cnVlKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRJbWFnZXNBbGxvd2VkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV93ZWJQZXJt
aXNzaW9ucy0+c2V0SW1hZ2VzQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFuKCkpOwotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFNjcmlwdHNBbGxv
d2VkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKLSAgICAgICAgbV93ZWJQZXJtaXNzaW9ucy0+c2V0U2NyaXB0c0FsbG93ZWQoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpzZXRTdG9yYWdlQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fd2ViUGVybWlzc2lvbnMtPnNldFN0
b3JhZ2VBbGxvd2VkKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7Ci0gICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0FsbG93ZWQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAo
YXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBt
X3dlYlBlcm1pc3Npb25zLT5zZXRQbHVnaW5zQWxsb3dlZChhcmd1bWVudHNbMF0udG9Cb29sZWFu
KCkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFs
bG93RGlzcGxheU9mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV93ZWJQZXJtaXNzaW9ucy0+c2V0
RGlzcGxheWluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigp
KTsKLQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFs
bG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAw
ICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgbV93ZWJQZXJtaXNzaW9ucy0+c2V0
UnVubmluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQoYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1
ZSk7Ci0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1w
V2luZG93U3RhdHVzQ2hhbmdlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlcyA9IHRydWU7Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVtcFByb2dyZXNzRmluaXNo
ZWRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgbV9kdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrID0gdHJ1ZTsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1wQmFja0ZvcndhcmRMaXN0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBC
YWNrRm9yd2FyZExpc3QgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA9PSAxKQotICAgICAgICBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQgPSBj
cHBWYXJpYW50VG9Cb29sKGFyZ3VtZW50c1swXSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVt
cFNlbGVjdGlvblJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBTZWxlY3Rpb25SZWN0ID0gdHJ1ZTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjp0ZXN0UmVwYWludChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV90ZXN0UmVwYWlu
dCA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
cmVwYWludFN3ZWVwSG9yaXpvbnRhbGx5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBtX3N3ZWVwSG9yaXpvbnRhbGx5ID0gdHJ1ZTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQcmludGluZyhjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1f
aXNQcmludGluZyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA9PSAxICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAg
ICAgICAgbV9zaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCA9IGFyZ3Vt
ZW50c1swXS50b0Jvb2xlYW4oKTsKLQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdENsZWFySGVhZGVyKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Vt
ZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0
cmluZyBoZWFkZXIgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKCFoZWFk
ZXIuZW1wdHkoKSkKLSAgICAgICAgICAgIG1faHR0cEhlYWRlcnNUb0NsZWFyLmluc2VydChoZWFk
ZXIpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVy
OjpzZXRXaWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX3Nob3Vs
ZEJsb2NrUmVkaXJlY3RzID0gYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpOwotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFdpbGxTZW5kUmVxdWVzdFJldHVy
bnNOdWxsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkKLSAgICAgICAgbV93aWxsU2VuZFJlcXVlc3RTaG91bGRSZXR1cm5OdWxsID0gYXJndW1l
bnRzWzBdLnRvQm9vbGVhbigpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0gICAgICAgIG1fd2ViVmll
dy0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4o
KSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0Nv
bW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RkOjpzdHJpbmcgY29tbWFuZCA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgIHN0ZDo6
c3RyaW5nIHZhbHVlKCIiKTsKLSAgICAvLyBJZ25vcmUgdGhlIHNlY29uZCBwYXJhbWV0ZXIgKHdo
aWNoIGlzIHVzZXJJbnRlcmZhY2UpCi0gICAgLy8gc2luY2UgdGhpcyBjb21tYW5kIGVtdWxhdGVz
IGEgbWFudWFsIGFjdGlvbi4KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzICYmIGFyZ3Vt
ZW50c1syXS5pc1N0cmluZygpKQotICAgICAgICB2YWx1ZSA9IGFyZ3VtZW50c1syXS50b1N0cmlu
ZygpOwotCi0gICAgLy8gTm90ZTogd2Via2l0J3MgdmVyc2lvbiBkb2VzIG5vdCByZXR1cm4gdGhl
IGJvb2xlYW4sIHNvIG5laXRoZXIgZG8gd2UuCi0gICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUo
KS0+ZXhlY3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJs
ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJp
bmcoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsK
LSAgICBib29sIHJ2ID0gbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+aXNDb21tYW5kRW5hYmxl
ZChXZWJTdHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpKTsKLSAgICByZXN1bHQtPnNldChydik7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChtX3dl
YlZpZXctPmRpc3BhdGNoQmVmb3JlVW5sb2FkRXZlbnQoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSB8fCAhYXJndW1lbnRz
WzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3dlYlZpZXctPnNldERvbWFp
blJlbGF4YXRpb25Gb3JiaWRkZW4oY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pLCBjcHBW
YXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKLSAgICBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4gPiB2YWx1
ZXM7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1i
ZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewotICAgICAgICBXZWJTY3JpcHRTb3Vy
Y2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLSAgICAgICAg
Ly8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fk
cy4gVGhpcyBpcyBhIGJpdAotICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUg
d2hhdCBvdGhlciB0ZXN0cyBkby4KLSAgICAgICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+
ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291
cmNlLCAxLCAxLCAmdmFsdWVzKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAg
Ly8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25seSBvbmUgcmVzdWx0IGlzIGV4
cGVjdGVkCi0gICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAhdmFsdWVzWzBdLklzRW1wdHko
KSkgewotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzY3JpcHRWYWx1ZSA9IHZhbHVlc1sw
XTsKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBtYW55IG1vcmUgdHlwZXMgdGhhdCBjYW4g
YmUgaGFuZGxlZC4KLSAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc1N0cmluZygpKSB7Ci0gICAg
ICAgICAgICB2ODo6U3RyaW5nOjpBc2NpaVZhbHVlIGFzY2lpVjgoc2NyaXB0VmFsdWUpOwotICAg
ICAgICAgICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lpVjgpKTsKLSAgICAgICAgfSBl
bHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNCb29sZWFuKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChz
Y3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5J
c0ludDMyKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvSW50
MzIoKS0+VmFsdWUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0
LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVtYmVyKCktPlZhbHVlKCkpOwotICAgICAgICB9IGVsc2Ug
aWYgKHNjcmlwdFZhbHVlLT5Jc051bGwoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotICAgIH0KLX0KLQotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVt
YmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV2ViU2NyaXB0U291
cmNlIHNvdXJjZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7Ci0gICAgICAg
IC8vIFRoaXMgcmVsaWVzIG9uIHRoZSBpZnJhbWUgZm9jdXNpbmcgaXRzZWxmIHdoZW4gaXQgbG9h
ZHMuIFRoaXMgaXMgYSBiaXQKLSAgICAgICAgLy8gc2tldGNoeSwgYnV0IGl0IHNlZW1zIHRvIGJl
IHdoYXQgb3RoZXIgdGVzdHMgZG8uCi0gICAgICAgIG1fd2ViVmlldy0+Zm9jdXNlZEZyYW1lKCkt
PmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNv
dXJjZSwgMSwgMSk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBd
LmlzTnVtYmVyKCkgfHwgIShhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSB8fCBhcmd1bWVudHNbMV0u
aXNOdWxsKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmln
aW47Ci0gICAgaWYgKGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQotICAgICAgICBvcmlnaW4gPSBX
ZWJTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhjcHBWYXJpYW50VG9XZWJTdHJpbmco
YXJndW1lbnRzWzFdKSk7Ci0gICAgbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKS0+c2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGFyZ3VtZW50c1swXS50b0ludDMyKCksIG9yaWdpbik7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SXNvbGF0ZWRXb3JsZENvbnRlbnRTZWN1cml0eVBvbGlj
eShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0g
MiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpLT5zZXRJ
c29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KGFyZ3VtZW50c1swXS50b0ludDMyKCks
IGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpCi0gICAgICAgIHx8ICFhcmd1bWVudHNb
Ml0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzNdLmlzQm9vbCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBXZWJLaXQ6OldlYlVSTCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkp
OwotICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViU2Vj
dXJpdHlQb2xpY3k6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAotICAgICAgICB1cmws
Ci0gICAgICAgIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAotICAgICAgICBj
cHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzJdKSwKLSAgICAgICAgYXJndW1lbnRzWzNd
LnRvQm9vbGVhbigpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NX
aGl0ZWxpc3RFbnRyeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgIT0gNCB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc1N0cmluZygpCi0gICAgICAgIHx8ICFhcmd1bWVudHNbMl0uaXNTdHJpbmcoKSB8fCAhYXJn
dW1lbnRzWzNdLmlzQm9vbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJLaXQ6OldlYlVS
TCB1cmwoR1VSTChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotICAgIGlmICghdXJsLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViU2VjdXJpdHlQb2xpY3k6OnJlbW92ZU9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KAotICAgICAgICB1cmwsCi0gICAgICAgIGNwcFZhcmlh
bnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLAotICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJp
bmcoYXJndW1lbnRzWzJdKSwKLSAgICAgICAgYXJndW1lbnRzWzNdLnRvQm9vbGVhbigpKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpoYXNDdXN0b21QYWdlU2l6ZVN0eWxlKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5z
ZXQoZmFsc2UpOwotICAgIGludCBwYWdlSW5kZXggPSAwOwotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEp
Ci0gICAgICAgIHBhZ2VJbmRleCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1swXSk7Ci0g
ICAgV2ViRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47Ci0gICAgcmVzdWx0LT5zZXQoZnJhbWUtPmhhc0N1c3RvbVBh
Z2VTaXplU3R5bGUocGFnZUluZGV4KSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Zm9yY2VSZWRT
ZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX3dlYlZpZXctPnNl
dFNlbGVjdGlvbkNvbG9ycygweGZmZWUwMDAwLCAweGZmMDBlZTAwLCAweGZmMDAwMDAwLCAweGZm
YzBjMGMwKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNb
MF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMl0u
aXNCb29sKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJWaWV3OjphZGRVc2VyU2NyaXB0KAot
ICAgICAgICBjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzBdKSwgV2ViVmVjdG9yPFdl
YlN0cmluZz4oKSwKLSAgICAgICAgYXJndW1lbnRzWzFdLnRvQm9vbGVhbigpID8gV2ViVmlldzo6
VXNlclNjcmlwdEluamVjdEF0RG9jdW1lbnRTdGFydCA6IFdlYlZpZXc6OlVzZXJTY3JpcHRJbmpl
Y3RBdERvY3VtZW50RW5kLAotICAgICAgICBhcmd1bWVudHNbMl0udG9Cb29sZWFuKCkgPyBXZWJW
aWV3OjpVc2VyQ29udGVudEluamVjdEluQWxsRnJhbWVzIDogV2ViVmlldzo6VXNlckNvbnRlbnRJ
bmplY3RJblRvcEZyYW1lT25seSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxl
U2hlZXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8
IDIgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpIHx8ICFhcmd1bWVudHNbMV0uaXNCb29sKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBXZWJWaWV3OjphZGRVc2VyU3R5bGVTaGVldCgKLSAgICAg
ICAgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1swXSksIFdlYlZlY3RvcjxXZWJTdHJp
bmc+KCksCi0gICAgICAgIGFyZ3VtZW50c1sxXS50b0Jvb2xlYW4oKSA/IFdlYlZpZXc6OlVzZXJD
b250ZW50SW5qZWN0SW5BbGxGcmFtZXMgOiBXZWJWaWV3OjpVc2VyQ29udGVudEluamVjdEluVG9w
RnJhbWVPbmx5LAotICAgICAgICAvLyBDaHJvbWl1bSBkZWZhdWx0cyB0byBJbmplY3RJblN1YnNl
cXVlbnREb2N1bWVudHMsIGJ1dCBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAvLyB3aXRoIHRo
ZSBvdGhlciBwb3J0cycgRFJUcywgd2UgdXNlIFVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1
bWVudHMuCi0gICAgICAgIFdlYlZpZXc6OlVzZXJTdHlsZUluamVjdEluRXhpc3RpbmdEb2N1bWVu
dHMpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXZWJFbGVtZW50IGVsZW1lbnQ7Ci0gICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0
RWxlbWVudChhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZlbGVtZW50KSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgV2ViSW5wdXRFbGVtZW50KiBpbnB1dCA9IHRvV2ViSW5wdXRFbGVt
ZW50KCZlbGVtZW50KTsKLSAgICBpZiAoIWlucHV0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIWlucHV0LT5pc1NwZWVjaElucHV0RW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpbnB1dC0+c3RhcnRTcGVlY2hJbnB1dCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmZpbmRT
dHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0
cmluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJGaW5kT3B0aW9ucyBmaW5kT3B0aW9u
czsKLSAgICBib29sIHdyYXBBcm91bmQgPSBmYWxzZTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+PSAyKSB7Ci0gICAgICAgIHZlY3RvcjxzdHJpbmc+IG9wdGlvbnNBcnJheSA9IGFyZ3VtZW50
c1sxXS50b1N0cmluZ1ZlY3RvcigpOwotICAgICAgICBmaW5kT3B0aW9ucy5tYXRjaENhc2UgPSB0
cnVlOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3B0aW9uc0FycmF5LnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgb3B0aW9uID0gb3B0aW9u
c0FycmF5W2ldOwotICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgYWxsIHRoZSBvcHRpb25z
LCBzbyB3ZSBjYW4gcnVuIGZpbmRTdHJpbmcuaHRtbCB0b28uCi0gICAgICAgICAgICBpZiAob3B0
aW9uID09ICJDYXNlSW5zZW5zaXRpdmUiKQotICAgICAgICAgICAgICAgIGZpbmRPcHRpb25zLm1h
dGNoQ2FzZSA9IGZhbHNlOwotICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJCYWNrd2Fy
ZHMiKQotICAgICAgICAgICAgICAgIGZpbmRPcHRpb25zLmZvcndhcmQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAiV3JhcEFyb3VuZCIpCi0gICAgICAgICAgICAgICAg
d3JhcEFyb3VuZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBXZWJGcmFtZSogZnJh
bWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAgIGNvbnN0IGJvb2wgZmluZFJlc3VsdCA9
IGZyYW1lLT5maW5kKDAsIGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMF0pLCBmaW5k
T3B0aW9ucywgd3JhcEFyb3VuZCwgMCk7Ci0gICAgcmVzdWx0LT5zZXQoZmluZFJlc3VsdCk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViRWxlbWVudCBlbGVtZW50OwotICAgIGlmICghV2ViQmluZGluZ3M6OmdldEVsZW1lbnQo
YXJndW1lbnRzWzBdLnZhbHVlLm9iamVjdFZhbHVlLCAmZWxlbWVudCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFdlYklucHV0RWxlbWVudCogaW5wdXQgPSB0b1dlYklucHV0RWxlbWVudCgmZWxl
bWVudCk7Ci0gICAgaWYgKCFpbnB1dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW5wdXQtPnNl
dFZhbHVlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pLCB0cnVlKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjplbmFibGVGaXhlZExheW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8ICAxIHx8ICFhcmd1bWVudHNbMF0uaXNC
b29sKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGVuYWJsZUZpeGVkTGF5b3V0ID0gYXJn
dW1lbnRzWzBdLnRvQm9vbGVhbigpOwotICAgIG1fd2ViVmlldy0+ZW5hYmxlRml4ZWRMYXlvdXRN
b2RlKGVuYWJsZUZpeGVkTGF5b3V0KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRGaXhlZExh
eW91dFNpemUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8ICAyIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVt
YmVyKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpbnQgd2lkdGggPSBhcmd1bWVudHNbMF0udG9J
bnQzMigpOwotICAgIGludCBoZWlnaHQgPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIG1f
d2ViVmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYlNpemUod2lkdGgsIGhlaWdodCkpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNlbGVjdGlvbkFzTWFya3VwKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQobV93
ZWJWaWV3LT5tYWluRnJhbWUoKS0+c2VsZWN0aW9uQXNNYXJrdXAoKS51dGY4KCkpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnNldFRleHRTdWJwaXhlbFBvc2l0aW9uaW5nKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0jaWYgZGVmaW5lZChf
X2xpbnV4X18pIHx8IGRlZmluZWQoQU5EUk9JRCkKLSAgICAvLyBTaW5jZSBGb250Q29uZmlnIGRv
ZXNuJ3QgcHJvdmlkZSBhIHZhcmlhYmxlIHRvIGNvbnRyb2wgc3VicGl4ZWwgcG9zaXRpb25pbmcs
IHdlJ2xsIGZhbGwgYmFjawotICAgIC8vIHRvIHNldHRpbmcgaXQgZ2xvYmFsbHkgZm9yIGFsbCBm
b250cy4KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQotICAgICAgICBXZWJGb250UmVuZGVyaW5nOjpzZXRTdWJwaXhlbFBvc2l0aW9uaW5nKGFy
Z3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWUpOwotI2VuZGlmCi0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fd2Vi
Vmlldy0+c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlLCB0
cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAg
ICBzdHJpbmcgbmV3VmlzaWJpbGl0eSA9IGFyZ3VtZW50c1swXS50b1N0cmluZygpOwotICAgICAg
ICBpZiAobmV3VmlzaWJpbGl0eSA9PSAidmlzaWJsZSIpCi0gICAgICAgICAgICBtX3dlYlZpZXct
PnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZSwgZmFsc2Up
OwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJoaWRkZW4iKQotICAgICAgICAg
ICAgbV93ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhp
ZGRlbiwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5k
ZXIiKQotICAgICAgICAgICAgbV93ZWJWaWV3LT5zZXRWaXNpYmlsaXR5U3RhdGUoV2ViUGFnZVZp
c2liaWxpdHlTdGF0ZVByZXJlbmRlciwgZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChuZXdWaXNp
YmlsaXR5ID09ICJwcmV2aWV3IikKLSAgICAgICAgICAgIG1fd2ViVmlldy0+c2V0VmlzaWJpbGl0
eVN0YXRlKFdlYlBhZ2VWaXNpYmlsaXR5U3RhdGVQcmV2aWV3LCBmYWxzZSk7Ci0gICAgfQotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwo
KTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFwIGEgZGlyZWN0aW9uIG5hbWUgdG8g
YSBXZWJUZXh0RGlyZWN0aW9uIHZhbHVlLgotICAgIHN0ZDo6c3RyaW5nIGRpcmVjdGlvbk5hbWUg
PSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKLSAgICBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uOwotICAgIGlmIChkaXJlY3Rpb25OYW1lID09ICJhdXRvIikKLSAgICAgICAgZGly
ZWN0aW9uID0gV2ViS2l0OjpXZWJUZXh0RGlyZWN0aW9uRGVmYXVsdDsKLSAgICBlbHNlIGlmIChk
aXJlY3Rpb25OYW1lID09ICJydGwiKQotICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRl
eHREaXJlY3Rpb25SaWdodFRvTGVmdDsKLSAgICBlbHNlIGlmIChkaXJlY3Rpb25OYW1lID09ICJs
dHIiKQotICAgICAgICBkaXJlY3Rpb24gPSBXZWJLaXQ6OldlYlRleHREaXJlY3Rpb25MZWZ0VG9S
aWdodDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2ViVmlldy0+c2V0VGV4
dERpcmVjdGlvbihkaXJlY3Rpb24pOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnRleHRTdXJyb3Vu
ZGluZ05vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA8IDQgfHwgIWFyZ3VtZW50c1swXS5pc09iamVjdCgpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1i
ZXIoKSB8fCAhYXJndW1lbnRzWzJdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1szXS5pc051bWJl
cigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJOb2RlIG5vZGU7Ci0gICAgaWYgKCFXZWJC
aW5kaW5nczo6Z2V0Tm9kZShhcmd1bWVudHNbMF0udmFsdWUub2JqZWN0VmFsdWUsICZub2RlKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG5vZGUuaXNOdWxsKCkgfHwgIW5vZGUuaXNUZXh0
Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQb2ludCBwb2ludChhcmd1bWVudHNb
MV0udG9JbnQzMigpLCBhcmd1bWVudHNbMl0udG9JbnQzMigpKTsKLSAgICB1bnNpZ25lZCBtYXhM
ZW5ndGggPSBhcmd1bWVudHNbM10udG9JbnQzMigpOwotCi0gICAgV2ViU3Vycm91bmRpbmdUZXh0
IHN1cnJvdW5kaW5nVGV4dDsKLSAgICBzdXJyb3VuZGluZ1RleHQuaW5pdGlhbGl6ZShub2RlLCBw
b2ludCwgbWF4TGVuZ3RoKTsKLSAgICBpZiAoc3Vycm91bmRpbmdUZXh0LmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICByZXN1bHQtPnNldChzdXJyb3VuZGluZ1RleHQudGV4dENvbnRl
bnQoKS51dGY4KCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBSZXNvdXJjZVJlcXVlc3RQ
cmlvcml0aWVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgbV9zaG91bGREdW1wUmVzb3VyY2VQcmlvcml0aWVzID0gdHJ1ZTsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjplbmFibGVBdXRvUmVz
aXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDQpIHsKLSAgICAgICAgcmVzdWx0
LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBtaW5XaWR0aCA9
IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1swXSk7Ci0gICAgaW50IG1pbkhlaWdodCA9IGNw
cFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1sxXSk7Ci0gICAgV2ViS2l0OjpXZWJTaXplIG1pblNp
emUobWluV2lkdGgsIG1pbkhlaWdodCk7Ci0KLSAgICBpbnQgbWF4V2lkdGggPSBjcHBWYXJpYW50
VG9JbnQzMihhcmd1bWVudHNbMl0pOwotICAgIGludCBtYXhIZWlnaHQgPSBjcHBWYXJpYW50VG9J
bnQzMihhcmd1bWVudHNbM10pOwotICAgIFdlYktpdDo6V2ViU2l6ZSBtYXhTaXplKG1heFdpZHRo
LCBtYXhIZWlnaHQpOwotCi0gICAgbV93ZWJWaWV3LT5lbmFibGVBdXRvUmVzaXplTW9kZShtaW5T
aXplLCBtYXhTaXplKTsKLSAgICByZXN1bHQtPnNldCh0cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpkaXNhYmxlQXV0b1Jlc2l6ZU1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPTIp
IHsKLSAgICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGludCBuZXdXaWR0aCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1swXSk7Ci0gICAg
aW50IG5ld0hlaWdodCA9IGNwcFZhcmlhbnRUb0ludDMyKGFyZ3VtZW50c1sxXSk7Ci0gICAgV2Vi
S2l0OjpXZWJTaXplIG5ld1NpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7Ci0KLSAgICBtX2RlbGVn
YXRlLT5zZXRDbGllbnRXaW5kb3dSZWN0KFdlYlJlY3QoMCwgMCwgbmV3U2l6ZS53aWR0aCwgbmV3
U2l6ZS5oZWlnaHQpKTsKLSAgICBtX3dlYlZpZXctPmRpc2FibGVBdXRvUmVzaXplTW9kZSgpOwot
ICAgIG1fd2ViVmlldy0+cmVzaXplKG5ld1NpemUpOwotICAgIHJlc3VsdC0+c2V0KHRydWUpOwot
fQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgNiB8fCAhYXJndW1lbnRz
WzBdLmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzJd
LmlzQm9vbCgpIHx8ICFhcmd1bWVudHNbM10uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzRdLmlz
Qm9vbCgpIHx8ICFhcmd1bWVudHNbNV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViRGV2aWNlT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgb3JpZW50YXRpb24uc2V0
TnVsbChmYWxzZSk7Ci0gICAgaWYgKGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSkKLSAgICAgICAg
b3JpZW50YXRpb24uc2V0QWxwaGEoYXJndW1lbnRzWzFdLnRvRG91YmxlKCkpOwotICAgIGlmIChh
cmd1bWVudHNbMl0udG9Cb29sZWFuKCkpCi0gICAgICAgIG9yaWVudGF0aW9uLnNldEJldGEoYXJn
dW1lbnRzWzNdLnRvRG91YmxlKCkpOwotICAgIGlmIChhcmd1bWVudHNbNF0udG9Cb29sZWFuKCkp
Ci0gICAgICAgIG9yaWVudGF0aW9uLnNldEdhbW1hKGFyZ3VtZW50c1s1XS50b0RvdWJsZSgpKTsK
LQotICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IGNhbGwgc2V0T3JpZW50YXRpb24gb24gdGhlIG1h
aW4gcGFnZSdzIG1vY2sgc2luY2UgdGhpcwotICAgIC8vIHRlc3RzIHJlcXVpcmUuIElmIG5lY2Vz
c2FyeSwgd2UgY291bGQgZ2V0IGEgbGlzdCBvZiBXZWJWaWV3SG9zdHMgZnJvbSB0aAotICAgIC8v
IGNhbGwgc2V0T3JpZW50YXRpb24gb24gZWFjaCBEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2su
Ci0gICAgbV9wcm94eS0+ZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCktPnNldE9yaWVudGF0
aW9uKG9yaWVudGF0aW9uKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlz
Qm9vbCgpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByZWZlcmVuY2VzKCktPnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24gPSBhcmd1bWVudHNbMF0udmFsdWUuYm9vbFZhbHVlID8gbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uIDogV2ViVVJMKCk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJlZmVy
ZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID4gMCAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkgewotICAgICAgICBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb24gPSBtX2RlbGVnYXRlLT5sb2NhbEZpbGVUb0RhdGFVUkwobV9kZWxlZ2F0ZS0+
cmV3cml0ZUxheW91dFRlc3RzVVJMKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci0gICAgICAg
IG1fZGVsZWdhdGUtPnByZWZlcmVuY2VzKCktPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBtX3Vz
ZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0gICAgICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJlZmVyZW5j
ZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUo
KSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnBy
ZWZlcmVuY2VzKCktPmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkID0gYXJndW1lbnRzWzBdLnZh
bHVlLmJvb2xWYWx1ZTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwot
ICAgIH0KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQ
b3B1cEJsb2NraW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1
bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAgICAgYm9vbCBibG9ja1BvcHVwcyA9IGFyZ3VtZW50
c1swXS50b0Jvb2xlYW4oKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJlZmVyZW5jZXMoKS0+amF2
YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSA9ICFibG9ja1BvcHVwczsKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jv
b2woKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmVmZXJlbmNlcygpLT5qYXZhU2NyaXB0Q2Fu
QWNjZXNzQ2xpcGJvYXJkID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKLSAgICAgICAg
bV9kZWxlZ2F0ZS0+YXBwbHlQcmVmZXJlbmNlcygpOwotICAgIH0KLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+cHJlZmVyZW5jZXMoKS0+WFNTQXVkaXRvckVuYWJsZWQgPSBhcmd1bWVu
dHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBtX2RlbGVnYXRlLT5hcHBseVByZWZlcmVu
Y2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBtX2RlbGVn
YXRlLT5wcmVmZXJlbmNlcygpLT5hbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyA9IGFy
Z3VtZW50c1swXS52YWx1ZS5ib29sVmFsdWU7Ci0gICAgICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJl
ZmVyZW5jZXMoKTsKLSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkgewotICAgICAgICBtX2RlbGVn
YXRlLT5wcmVmZXJlbmNlcygpLT5hbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMgPSBhcmd1bWVu
dHNbMF0udmFsdWUuYm9vbFZhbHVlOwotICAgICAgICBtX2RlbGVnYXRlLT5hcHBseVByZWZlcmVu
Y2VzKCk7Ci0gICAgfQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpICE9IDIgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzdHJpbmcga2V5ID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0g
ICAgQ3BwVmFyaWFudCB2YWx1ZSA9IGFyZ3VtZW50c1sxXTsKLSAgICBXZWJQcmVmZXJlbmNlcyog
cHJlZnMgPSBtX2RlbGVnYXRlLT5wcmVmZXJlbmNlcygpOwotICAgIGlmIChrZXkgPT0gIldlYktp
dERlZmF1bHRGb250U2l6ZSIpCi0gICAgICAgIHByZWZzLT5kZWZhdWx0Rm9udFNpemUgPSBjcHBW
YXJpYW50VG9JbnQzMih2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRNaW5pbXVt
Rm9udFNpemUiKQotICAgICAgICBwcmVmcy0+bWluaW11bUZvbnRTaXplID0gY3BwVmFyaWFudFRv
SW50MzIodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RGVmYXVsdFRleHRFbmNv
ZGluZ05hbWUiKQotICAgICAgICBwcmVmcy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUgPSBjcHBW
YXJpYW50VG9XZWJTdHJpbmcodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SmF2
YVNjcmlwdEVuYWJsZWQiKQotICAgICAgICBwcmVmcy0+amF2YVNjcmlwdEVuYWJsZWQgPSBjcHBW
YXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFN1cHBvcnRz
TXVsdGlwbGVXaW5kb3dzIikKLSAgICAgICAgcHJlZnMtPnN1cHBvcnRzTXVsdGlwbGVXaW5kb3dz
ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRE
aXNwbGF5SW1hZ2VzS2V5IikKLSAgICAgICAgcHJlZnMtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0
UGx1Z2luc0VuYWJsZWQiKQotICAgICAgICBwcmVmcy0+cGx1Z2luc0VuYWJsZWQgPSBjcHBWYXJp
YW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdEphdmFFbmFibGVk
IikKLSAgICAgICAgcHJlZnMtPmphdmFFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7
Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRVc2VzUGFnZUNhY2hlUHJlZmVyZW5jZUtleSIp
Ci0gICAgICAgIHByZWZzLT51c2VzUGFnZUNhY2hlID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7
Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVm
ZXJlbmNlS2V5IikKLSAgICAgICAgcHJlZnMtPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyA9IGNw
cFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPm9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwotICAgIGVs
c2UgaWYgKGtleSA9PSAiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiKQotICAgICAgICBw
cmVmcy0+dGFic1RvTGlua3MgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlm
IChrZXkgPT0gIldlYktpdFdlYkdMRW5hYmxlZCIpCi0gICAgICAgIHByZWZzLT5leHBlcmltZW50
YWxXZWJHTEVuYWJsZWQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChr
ZXkgPT0gIldlYktpdENTU1JlZ2lvbnNFbmFibGVkIikKLSAgICAgICAgcHJlZnMtPmV4cGVyaW1l
bnRhbENTU1JlZ2lvbnNFbmFibGVkID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxz
ZSBpZiAoa2V5ID09ICJXZWJLaXRDU1NHcmlkTGF5b3V0RW5hYmxlZCIpCi0gICAgICAgIHByZWZz
LT5leHBlcmltZW50YWxDU1NHcmlkTGF5b3V0RW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFs
dWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
IikKLSAgICAgICAgcHJlZnMtPmh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCA9IGNwcFZhcmlhbnRU
b0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0RW5hYmxlQ2FyZXRCcm93
c2luZyIpCi0gICAgICAgIHByZWZzLT5jYXJldEJyb3dzaW5nRW5hYmxlZCA9IGNwcFZhcmlhbnRU
b0Jvb2wodmFsdWUpOwotICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0QWxsb3dEaXNwbGF5aW5n
SW5zZWN1cmVDb250ZW50IikKLSAgICAgICAgcHJlZnMtPmFsbG93RGlzcGxheU9mSW5zZWN1cmVD
b250ZW50ID0gY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJX
ZWJLaXRBbGxvd1J1bm5pbmdJbnNlY3VyZUNvbnRlbnQiKQotICAgICAgICBwcmVmcy0+YWxsb3dS
dW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQgPSBjcHBWYXJpYW50VG9Cb29sKHZhbHVlKTsKLSAgICBl
bHNlIGlmIChrZXkgPT0gIldlYktpdENTU0N1c3RvbUZpbHRlckVuYWJsZWQiKQotICAgICAgICBw
cmVmcy0+Y3NzQ3VzdG9tRmlsdGVyRW5hYmxlZCA9IGNwcFZhcmlhbnRUb0Jvb2wodmFsdWUpOwot
ICAgIGVsc2UgaWYgKGtleSA9PSAiV2ViS2l0U2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24i
KQotICAgICAgICBwcmVmcy0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPSBjcHBWYXJp
YW50VG9Cb29sKHZhbHVlKTsKLSAgICBlbHNlIGlmIChrZXkgPT0gIldlYktpdFdlYkF1ZGlvRW5h
YmxlZCIpCi0gICAgICAgIFdFQktJVF9BU1NFUlQoY3BwVmFyaWFudFRvQm9vbCh2YWx1ZSkpOwot
ICAgIGVsc2UgewotICAgICAgICBzdHJpbmcgbWVzc2FnZSgiSW52YWxpZCBuYW1lIGZvciBwcmVm
ZXJlbmNlOiAiKTsKLSAgICAgICAgbWVzc2FnZS5hcHBlbmQoa2V5KTsKLSAgICAgICAgcHJpbnRF
cnJvck1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgfQotICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJlZmVy
ZW5jZXMoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVnaW5zRW5hYmxlZChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlm
IChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpIHsKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+cHJlZmVyZW5jZXMoKS0+cGx1Z2luc0VuYWJsZWQgPSBhcmd1bWVudHNb
MF0udG9Cb29sZWFuKCk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPmFwcGx5UHJlZmVyZW5jZXMoKTsK
LSAgICB9Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2hv
d1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgc2hvd0RldlRvb2xzKCk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6Y2xvc2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kZWxlZ2F0ZS0+Y2xvc2VEZXZUb29s
cygpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNb
MV0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVsZWdhdGUtPmV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvU3Ry
aW5nKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0gICAgbV9kZWxlZ2F0ZS0+Y2xlYXJBbGxEYXRhYmFzZXMoKTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0gICAgaWYgKChhcmd1bWVudHMuc2l6ZSgpID49IDEpICYmIGFyZ3VtZW50c1swXS5pc051
bWJlcigpKQotICAgICAgICBtX2RlbGVnYXRlLT5zZXREYXRhYmFzZVF1b3RhKGFyZ3VtZW50c1sw
XS50b0ludDMyKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tp
ZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+IDApCi0gICAgICAgIG1fZGVsZWdhdGUtPnNl
dEFjY2VwdEFsbENvb2tpZXMoY3BwVmFyaWFudFRvQm9vbChhcmd1bWVudHNbMF0pKTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRXaW5kb3dJc0tleShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCi0g
ICAgICAgIG1fZGVsZWdhdGUtPnNldEZvY3VzKG1fcHJveHksIGFyZ3VtZW50c1swXS52YWx1ZS5i
b29sVmFsdWUpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
OnBhdGhUb0xvY2FsUmVzb3VyY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSA8PSAwIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcmVzdWx0LT5zZXQobV9kZWxlZ2F0ZS0+cGF0aFRvTG9jYWxSZXNvdXJj
ZShhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEJh
Y2tpbmdTY2FsZUZhY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc09iamVjdCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmbG9hdCB2YWx1ZSA9IGFyZ3VtZW50c1swXS52YWx1ZS5kb3VibGVWYWx1
ZTsKLSAgICBtX2RlbGVnYXRlLT5zZXREZXZpY2VTY2FsZUZhY3Rvcih2YWx1ZSk7Ci0gICAgbV9w
cm94eS0+ZGlzY2FyZEJhY2tpbmdTdG9yZSgpOwotCi0gICAgYXV0b19wdHI8Q3BwVmFyaWFudD4g
Y2FsbGJhY2tBcmd1bWVudHMobmV3IENwcFZhcmlhbnQoKSk7Ci0gICAgY2FsbGJhY2tBcmd1bWVu
dHMtPnNldChhcmd1bWVudHNbMV0pOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIG1fZGVs
ZWdhdGUtPnBvc3RUYXNrKG5ldyBJbnZva2VDYWxsYmFja1Rhc2sodGhpcywgY2FsbGJhY2tBcmd1
bWVudHMpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEgJiYgYXJndW1lbnRz
WzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnNldExvY2FsZShhcmd1bWVudHNb
MF0udG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChtX3Byb3h5LT5nZW9s
b2NhdGlvbkNsaWVudE1vY2soKS0+bnVtYmVyT2ZQZW5kaW5nUGVybWlzc2lvblJlcXVlc3RzKCkp
OwotfQotCi0vLyBGSVhNRTogRm9yIGdyZWF0ZXIgdGVzdCBmbGV4aWJpbGl0eSwgd2Ugc2hvdWxk
IGJlIGFibGUgdG8gc2V0IGVhY2ggcGFnZSdzIGdlb2xvY2F0aW9uIG1vY2sgaW5kaXZpZHVhbGx5
LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMzY4Ci12b2lk
IFRlc3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9v
bCgpKQotICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgdmVjdG9yPFdlYlRlc3RQcm94eUJhc2Uq
PiYgd2luZG93TGlzdCA9IG1fdGVzdEludGVyZmFjZXMtPndpbmRvd0xpc3QoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgd2luZG93TGlzdC5zaXplKCk7ICsraSkKLSAgICAgICAgd2lu
ZG93TGlzdC5hdChpKS0+Z2VvbG9jYXRpb25DbGllbnRNb2NrKCktPnNldFBlcm1pc3Npb24oYXJn
dW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGNvbnN0IHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj4mIHdpbmRvd0xpc3QgPSBtX3Rl
c3RJbnRlcmZhY2VzLT53aW5kb3dMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHdpbmRvd0xpc3Quc2l6ZSgpOyArK2kpCi0gICAgICAgIHdpbmRvd0xpc3QuYXQoaSktPmdlb2xv
Y2F0aW9uQ2xpZW50TW9jaygpLT5zZXRQb3NpdGlvbihhcmd1bWVudHNbMF0udG9Eb3VibGUoKSwg
YXJndW1lbnRzWzFdLnRvRG91YmxlKCksIGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJy
b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAx
IHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0
IHZlY3RvcjxXZWJUZXN0UHJveHlCYXNlKj4mIHdpbmRvd0xpc3QgPSBtX3Rlc3RJbnRlcmZhY2Vz
LT53aW5kb3dMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdpbmRvd0xpc3Qu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHdpbmRvd0xpc3QuYXQoaSktPmdlb2xvY2F0aW9uQ2xpZW50
TW9jaygpLT5zZXRQb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoV2ViU3RyaW5nOjpmcm9tVVRGOChh
cmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotfQotCi0jaWYgRU5BQkxFX05PVElGSUNBVElPTlMK
LXZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgIT0gMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKLSAg
ICAgICAgcmVzdWx0LT5zZXQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
bm90aWZpY2F0aW9uUHJlc2VudGVyLT5ncmFudFBlcm1pc3Npb24oV2ViU3RyaW5nOjpmcm9tVVRG
OChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOwotICAgIHJlc3VsdC0+c2V0KHRydWUpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2ViTm90aWZpY2F0aW9uQ2xpY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSAhPSAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkg
ewotICAgICAgICByZXN1bHQtPnNldChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgcmVzdWx0LT5zZXQobV9ub3RpZmljYXRpb25QcmVzZW50ZXItPnNpbXVsYXRlQ2xpY2soV2Vi
U3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpKTsKLX0KLSNlbmRpZgot
Ci12b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMyB8fCAhYXJndW1lbnRzWzBd
LmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMl0u
aXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAot
ICAgIG1fcHJveHktPnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKS0+YWRkTW9ja1JlY29nbml0
aW9uUmVzdWx0KFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpLCBh
cmd1bWVudHNbMV0udG9Eb3VibGUoKSwgV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMl0u
dG9TdHJpbmcoKSkpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVj
aElucHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc0Jvb2woKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAotICAgIG1fcHJveHktPnNwZWVjaElucHV0Q29udHJv
bGxlck1vY2soKS0+c2V0RHVtcFJlY3QoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKLSNlbmRp
ZgotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAh
YXJndW1lbnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Byb3h5LT5zcGVlY2hSZWNvZ25pemVyTW9jaygpLT5hZGRN
b2NrUmVzdWx0KFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpLCBh
cmd1bWVudHNbMV0udG9Eb3VibGUoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1Nw
ZWVjaFJlY29nbml0aW9uRXJyb3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBpZiAoYXJn
dW1lbnRzLnNpemUoKSAhPSAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1l
bnRzWzFdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcHJveHktPnNwZWVj
aFJlY29nbml6ZXJNb2NrKCktPnNldEVycm9yKFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRz
WzBdLnRvU3RyaW5nKCkpLCBXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1sxXS50b1N0cmlu
ZygpKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6d2FzTW9ja1NwZWVjaFJlY29nbml0aW9uQWJv
cnRlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXQobV9wcm94eS0+c3BlZWNoUmVjb2duaXplck1vY2soKS0+d2FzQWJvcnRlZCgp
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9wcm94eS0+ZGlzcGxheSgp
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXlJ
bnZhbGlkYXRlZFJlZ2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIG1fcHJveHktPmRpc3BsYXlJbnZhbGlkYXRlZFJlZ2lvbigp
OwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBFZGl0
aW5nQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1wQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9kdW1wQXNUZXh0
ID0gdHJ1ZTsKLSAgICBtX2dlbmVyYXRlUGl4ZWxSZXN1bHRzID0gZmFsc2U7Ci0KLSAgICAvLyBP
cHRpb25hbCBwYXJhbWF0ZXIsIGRlc2NyaWJpbmcgd2hldGhlciBpdCdzIGFsbG93ZWQgdG8gZHVt
cCBwaXhlbCByZXN1bHRzIGluIGR1bXBBc1RleHQgbW9kZS4KLSAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA+IDAgJiYgYXJndW1lbnRzWzBdLmlzQm9vbCgpKQotICAgICAgICBtX2dlbmVyYXRlUGl4
ZWxSZXN1bHRzID0gYXJndW1lbnRzWzBdLnZhbHVlLmJvb2xWYWx1ZTsKLQotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9z
aXRpb25zKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkdW1wQ2hpbGRGcmFtZXNBc1RleHQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcENo
aWxkRnJhbWVzQXNUZXh0ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjpkdW1wSWNvbkNoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcEljb25DaGFuZ2VzID0gdHJ1ZTsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBdWRpb0RhdGEoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAh
YXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNr
IHRoYXQgcGFzc2VkLWluIG9iamVjdCBpcywgaW4gZmFjdCwgYW4gQXJyYXlCdWZmZXJWaWV3Lgot
ICAgIE5QT2JqZWN0KiBucG9iamVjdCA9IE5QVkFSSUFOVF9UT19PQkpFQ1QoYXJndW1lbnRzWzBd
KTsKLSAgICBpZiAoIW5wb2JqZWN0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFXZWJCaW5k
aW5nczo6Z2V0QXJyYXlCdWZmZXJWaWV3KG5wb2JqZWN0LCAmbV9hdWRpb0RhdGEpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX2R1bXBBc0F1ZGlvID0gdHJ1ZTsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpkdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3MgPSB0cnVlOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBVc2VyR2Vz
dHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tz
ID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpz
ZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBtX3N0b3BQcm92
aXNpb25hbEZyYW1lTG9hZHMgPSB0cnVlOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmR1bXBUaXRs
ZUNoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIG1fZHVtcFRpdGxlQ2hhbmdlcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZHVtcENyZWF0ZVZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcENyZWF0ZVZpZXcgPSB0cnVlOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5X
aW5kb3dzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICBtX2Nhbk9wZW5XaW5kb3dzID0gdHJ1ZTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpkdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBtX2R1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OmR1bXBSZXNvdXJjZVJlcXVlc3RDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFJlc291cmNlUmVxdWVzdENhbGxi
YWNrcyA9IHRydWU7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlwZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIG1fZHVtcFJlc291cmNlUmVzcG9uc2VNSU1FVHlw
ZXMgPSB0cnVlOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi0vLyBOZWVkIHRoZXNlIGNv
bnZlcnNpb25zIGJlY2F1c2UgdGhlIGZvcm1hdCBvZiB0aGUgdmFsdWUgZm9yIGJvb2xlYW5zCi0v
LyBtYXkgdmFyeSAtIGZvciBleGFtcGxlLCBvbiBtYWMgIjEiIGFuZCAiMCIgYXJlIHVzZWQgZm9y
IGJvb2xlYW4uCi1ib29sIFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb0Jvb2woY29uc3QgQ3BwVmFy
aWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzQm9vbCgpKQotICAgICAgICByZXR1cm4g
dmFsdWUudG9Cb29sZWFuKCk7Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS50b0ludDMyKCk7Ci0gICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgc3RyaW5nIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTsKLSAgICAgICAgaWYgKHZh
bHVlU3RyaW5nID09ICJ0cnVlIiB8fCB2YWx1ZVN0cmluZyA9PSAiMSIpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJmYWxzZSIgfHwgdmFsdWVT
dHJpbmcgPT0gIjAiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcmlu
dEVycm9yTWVzc2FnZSgiSW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbiB2YWx1ZS4iKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWludDMyX3QgVGVzdFJ1bm5lcjo6Y3BwVmFyaWFudFRv
SW50MzIoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCk7Ci0gICAgaWYgKHZhbHVlLmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgc3RyaW5nIHN0cmluZ1NvdXJjZSA9IHZhbHVlLnRvU3RyaW5nKCk7
Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZSA9IHN0cmluZ1NvdXJjZS5kYXRhKCk7Ci0gICAg
ICAgIGNoYXIqIGVuZDsKLSAgICAgICAgbG9uZyBudW1iZXIgPSBzdHJ0b2woc291cmNlLCAmZW5k
LCAxMCk7Ci0gICAgICAgIGlmIChlbmQgPT0gc291cmNlICsgc3RyaW5nU291cmNlLmxlbmd0aCgp
ICYmIG51bWJlciA+PSBudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgJiYgbnVtYmVyIDw9
IG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihudW1iZXIpOwotICAgIH0KLSAgICBwcmludEVycm9yTWVzc2FnZSgi
SW52YWxpZCB2YWx1ZSBmb3IgcHJlZmVyZW5jZS4gRXhwZWN0ZWQgaW50ZWdlciB2YWx1ZS4iKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotV2ViU3RyaW5nIFRlc3RSdW5uZXI6OmNwcFZhcmlhbnRUb1dl
YlN0cmluZyhjb25zdCBDcHBWYXJpYW50JiB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2UoIkludmFsaWQgdmFsdWUgZm9yIHBy
ZWZlcmVuY2UuIEV4cGVjdGVkIHN0cmluZyB2YWx1ZS4iKTsKLSAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOwotICAgIH0KLSAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZS50b1N0
cmluZygpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpwcmludEVycm9yTWVzc2FnZShjb25zdCBz
dHJpbmcmIHRleHQpCi17Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiQ09O
U09MRSBNRVNTQUdFOiAiKSArIHRleHQgKyAiXG4iKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpm
YWxsYmFja01ldGhvZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcHJpbnRFcnJvck1lc3NhZ2UoIkphdmFTY3JpcHQgRVJST1I6IHVua25vd24gbWV0
aG9kIGNhbGxlZCBvbiBUZXN0UnVubmVyIik7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6bm90SW1wbGVtZW50ZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OmRpZEFjcXVpcmVQb2ludGVyTG9jayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgZGlkQWNxdWlyZVBvaW50ZXJMb2NrSW50ZXJu
YWwoKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkaWRO
b3RBY3F1aXJlUG9pbnRlckxvY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGRpZE5vdEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCk7Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGlkTG9zZVBvaW50ZXJM
b2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBk
aWRMb3NlUG9pbnRlckxvY2tJbnRlcm5hbCgpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luY2hyb25vdXNs
eShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgbV9w
b2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVyTG9ja1dpbGxSZXNwb25kQXN5bmM7Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UG9pbnRlckxv
Y2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0ID0gUG9pbnRlckxv
Y2tXaWxsRmFpbFN5bmM7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLX0KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9UZXN0UnVubmVyLmgJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw3MDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBhd2VsIEhhamRhbiAocGhh
amRhbi5qckBjaHJvbWl1bS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgVGVzdFJ1bm5lcl9oCi0jZGVmaW5lIFRlc3RSdW5uZXJf
aAotCi0jaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgotI2luY2x1ZGUgIlRlc3RDb21tb24uaCIK
LSNpbmNsdWRlICJXZWJBcnJheUJ1ZmZlclZpZXcuaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0j
aW5jbHVkZSAiV2ViVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIK
LSNpbmNsdWRlIDxkZXF1ZT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cHVibGljL1dl
YlVSTC5oPgotI2luY2x1ZGUgPHNldD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotY2xhc3MgV2ViQXJyYXlCdWZmZXJWaWV3OwotY2xhc3MgV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyOwotY2xhc3MgV2ViUGVybWlzc2lvbkNsaWVudDsKLWNsYXNzIFdlYlZpZXc7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOwotY2xhc3MgVGVzdEludGVyZmFjZXM7Ci1jbGFzcyBXZWJQZXJtaXNzaW9uczsKLWNsYXNz
IFdlYlRlc3REZWxlZ2F0ZTsKLWNsYXNzIFdlYlRlc3RQcm94eUJhc2U7Ci0KLWNsYXNzIFRlc3RS
dW5uZXIgOiBwdWJsaWMgV2ViVGVzdFJ1bm5lciwgcHVibGljIENwcEJvdW5kQ2xhc3MgewotcHVi
bGljOgotICAgIGV4cGxpY2l0IFRlc3RSdW5uZXIoVGVzdEludGVyZmFjZXMqKTsKLSAgICB2aXJ0
dWFsIH5UZXN0UnVubmVyKCk7Ci0KLSAgICB2b2lkIHNldERlbGVnYXRlKFdlYlRlc3REZWxlZ2F0
ZSopOwotICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqLCBXZWJUZXN0UHJveHlC
YXNlKik7Ci0KLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBXZWJUYXNrTGlzdCogdGFza0xpc3Qo
KSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQotCi0gICAgdm9pZCBzZXRUZXN0SXNSdW5uaW5nKGJv
b2wpOwotCi0gICAgLy8gV2ViVGVzdFJ1bm5lciBpbXBsZW1lbnRhdGlvbi4KLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkR2VuZXJhdGVQaXhlbFJlc3VsdHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkRHVtcEFzQXVkaW8oKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGNv
bnN0IFdlYktpdDo6V2ViQXJyYXlCdWZmZXJWaWV3KiBhdWRpb0RhdGEoKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdCgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJQZXJtaXNzaW9uQ2xpZW50KiB3ZWJQZXJt
aXNzaW9ucygpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gTWV0aG9kcyB1c2VkIGJ5IFdlYlRl
c3RQcm94eUJhc2UuCi0gICAgYm9vbCBzaG91bGREdW1wU2VsZWN0aW9uUmVjdCgpIGNvbnN0Owot
ICAgIGJvb2wgdGVzdFJlcGFpbnQoKSBjb25zdDsKLSAgICBib29sIHN3ZWVwSG9yaXpvbnRhbGx5
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW50aW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRE
dW1wQXNUZXh0KCk7Ci0gICAgYm9vbCBzaG91bGREdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cygpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRHVtcENoaWxkRnJhbWVzQXNUZXh0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzaG93RGV2VG9vbHMoKTsKLSAgICB2b2lkIHNldFNob3VsZER1bXBBc1RleHQo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhib29sKTsKLSAg
ICB2b2lkIHNldFNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoYm9vbCk7Ci0gICAgYm9vbCBz
aG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRHVtcEZy
YW1lTG9hZENhbGxiYWNrcygpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRHVtcFVzZXJHZXN0dXJl
SW5GcmFtZUxvYWRDYWxsYmFja3MoKSBjb25zdDsKLSAgICBib29sIHN0b3BQcm92aXNpb25hbEZy
YW1lTG9hZHMoKSBjb25zdDsKLSAgICBib29sIHNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSBjb25z
dDsKLSAgICBib29sIHNob3VsZER1bXBJY29uQ2hhbmdlcygpIGNvbnN0OwotICAgIGJvb2wgc2hv
dWxkRHVtcENyZWF0ZVZpZXcoKSBjb25zdDsKLSAgICBib29sIGNhbk9wZW5XaW5kb3dzKCkgY29u
c3Q7Ci0gICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGREdW1wUmVzb3VyY2VSZXF1ZXN0Q2FsbGJhY2tzKCkgY29uc3Q7Ci0gICAg
Ym9vbCBzaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpIGNvbnN0OwotICAgIGJv
b2wgc2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRHVt
cFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpIGNvbnN0OwotICAgIGJvb2wgZGVmZXJNYWluUmVz
b3VyY2VEYXRhTG9hZCgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFmdGVySGFu
ZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRpdGxlVGV4dERpcmVjdGlv
bihXZWJLaXQ6OldlYlRleHREaXJlY3Rpb24pOwotICAgIGNvbnN0IHN0ZDo6c2V0PHN0ZDo6c3Ry
aW5nPiogaHR0cEhlYWRlcnNUb0NsZWFyKCkgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRCbG9ja1Jl
ZGlyZWN0cygpIGNvbnN0OwotICAgIGJvb2wgd2lsbFNlbmRSZXF1ZXN0U2hvdWxkUmV0dXJuTnVs
bCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VG9wTG9hZGluZ0ZyYW1lKFdlYktpdDo6V2ViRnJhbWUq
LCBib29sKTsKLSAgICBXZWJLaXQ6OldlYkZyYW1lKiB0b3BMb2FkaW5nRnJhbWUoKSBjb25zdDsK
LSAgICB2b2lkIHBvbGljeURlbGVnYXRlRG9uZSgpOwotICAgIGJvb2wgcG9saWN5RGVsZWdhdGVF
bmFibGVkKCkgY29uc3Q7Ci0gICAgYm9vbCBwb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZSgpIGNv
bnN0OwotICAgIGJvb2wgcG9saWN5RGVsZWdhdGVTaG91bGROb3RpZnlEb25lKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzaG91bGRJbnRlcmNlcHRQb3N0TWVzc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgc2hv
dWxkRHVtcFJlc291cmNlUHJpb3JpdGllcygpIGNvbnN0OwotI2lmIEVOQUJMRV9OT1RJRklDQVRJ
T05TCi0gICAgV2ViS2l0OjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIG5vdGlmaWNhdGlvblBy
ZXNlbnRlcigpIGNvbnN0OwotI2VuZGlmCi0gICAgYm9vbCByZXF1ZXN0UG9pbnRlckxvY2soKTsK
LSAgICB2b2lkIHJlcXVlc3RQb2ludGVyVW5sb2NrKCk7Ci0gICAgYm9vbCBpc1BvaW50ZXJMb2Nr
ZWQoKTsKLQotICAgIC8vIEEgc2luZ2xlIGl0ZW0gaW4gdGhlIHdvcmsgcXVldWUuCi0gICAgY2xh
c3MgV29ya0l0ZW0gewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+V29ya0l0ZW0oKSB7
IH0KLQotICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBzdGFydGVkIGEgbG9hZC4KLSAg
ICAgICAgdmlydHVhbCBib29sIHJ1bihXZWJUZXN0RGVsZWdhdGUqLCBXZWJLaXQ6OldlYlZpZXcq
KSA9IDA7Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgV29ya1F1ZXVlOwot
Ci0gICAgLy8gSGVscGVyIGNsYXNzIGZvciBtYW5hZ2luZyBldmVudHMgcXVldWVkIGJ5IG1ldGhv
ZHMgbGlrZSBxdWV1ZUxvYWQgb3IKLSAgICAvLyBxdWV1ZVNjcmlwdC4KLSAgICBjbGFzcyBXb3Jr
UXVldWUgewotICAgIHB1YmxpYzoKLSAgICAgICAgV29ya1F1ZXVlKFRlc3RSdW5uZXIqIGNvbnRy
b2xsZXIpIDogbV9mcm96ZW4oZmFsc2UpLCBtX2NvbnRyb2xsZXIoY29udHJvbGxlcikgeyB9Ci0g
ICAgICAgIHZpcnR1YWwgfldvcmtRdWV1ZSgpOwotICAgICAgICB2b2lkIHByb2Nlc3NXb3JrU29v
bigpOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgY2xhc3MgYmV0d2VlbiB0
ZXN0cy4KLSAgICAgICAgdm9pZCByZXNldCgpOwotCi0gICAgICAgIHZvaWQgYWRkV29yayhXb3Jr
SXRlbSopOwotCi0gICAgICAgIHZvaWQgc2V0RnJvemVuKGJvb2wgZnJvemVuKSB7IG1fZnJvemVu
ID0gZnJvemVuOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fcXVldWUuZW1w
dHkoKTsgfQotICAgICAgICBXZWJUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNr
TGlzdDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBwcm9jZXNzV29yaygpOwotICAg
ICAgICBjbGFzcyBXb3JrUXVldWVUYXNrOiBwdWJsaWMgV2ViTWV0aG9kVGFzazxXb3JrUXVldWU+
IHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgV29ya1F1ZXVlVGFzayhXb3JrUXVldWUq
IG9iamVjdCk6IFdlYk1ldGhvZFRhc2s8V29ya1F1ZXVlPihvYmplY3QpIHsgfQotICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5wcm9jZXNzV29yaygpOyB9
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgV2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICAgICAg
c3RkOjpkZXF1ZTxXb3JrSXRlbSo+IG1fcXVldWU7Ci0gICAgICAgIGJvb2wgbV9mcm96ZW47Ci0g
ICAgICAgIFRlc3RSdW5uZXIqIG1fY29udHJvbGxlcjsKLSAgICB9OwotICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotICAgIC8vIE1ldGhvZHMgZGVhbGluZyB3aXRoIHRoZSB0ZXN0IGxvZ2ljCi0KLSAg
ICAvLyBCeSBkZWZhdWx0LCB0ZXN0cyBlbmQgd2hlbiBwYWdlIGxvYWQgaXMgY29tcGxldGUuIFRo
ZXNlIG1ldGhvZHMgYXJlIHVzZWQKLSAgICAvLyB0byBkZWxheSB0aGUgY29tcGxldGlvbiBvZiB0
aGUgdGVzdCB1bnRpbCBub3RpZnlEb25lIGlzIGNhbGxlZC4KLSAgICB2b2lkIHdhaXRVbnRpbERv
bmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgbm90aWZ5
RG9uZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBNZXRo
b2RzIGZvciBhZGRpbmcgYWN0aW9ucyB0byB0aGUgd29yayBxdWV1ZS4gVXNlZCBpbiBjb25qdW5j
dGlvbiB3aXRoCi0gICAgLy8gd2FpdFVudGlsRG9uZS9ub3RpZnlEb25lIGFib3ZlLgotICAgIHZv
aWQgcXVldWVCYWNrTmF2aWdhdGlvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlUmVsb2FkKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1ZXVlTG9hZGluZ1NjcmlwdChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBxdWV1ZU5vbkxvYWRpbmdT
Y3JpcHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcXVl
dWVMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHF1
ZXVlTG9hZEhUTUxTdHJpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
Ci0KLSAgICAvLyBDYXVzZXMgbmF2aWdhdGlvbiBhY3Rpb25zIGp1c3QgcHJpbnRvdXQgdGhlIGlu
dGVuZGVkIG5hdmlnYXRpb24gaW5zdGVhZAotICAgIC8vIG9mIHRha2luZyB5b3UgdG8gdGhlIHBh
Z2UuIFRoaXMgaXMgdXNlZCBmb3IgY2FzZXMgbGlrZSBtYWlsdG8sIHdoZXJlIHlvdQotICAgIC8v
IGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gb3BlbiB0aGUgbWFpbCBwcm9ncmFtLgotICAgIHZvaWQg
c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgLy8gRGVsYXlzIGNvbXBsZXRpb24gb2YgdGhlIHRlc3QgdW50aWwgdGhlIHBv
bGljeSBkZWxlZ2F0ZSBydW5zLgotICAgIHZvaWQgd2FpdEZvclBvbGljeURlbGVnYXRlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEZ1bmN0aW9ucyBmb3Ig
ZGVhbGluZyB3aXRoIHdpbmRvd3MuIEJ5IGRlZmF1bHQgd2UgYmxvY2sgYWxsIG5ldyB3aW5kb3dz
LgotICAgIHZvaWQgd2luZG93Q291bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgc2V0Q2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotICAgIC8vIE1ldGhvZHMgaW1wbGVtZW50ZWQgZW50aXJlbHkgaW4gdGVybXMgb2YgY2hyb21p
dW0ncyBwdWJsaWMgV2ViS2l0IEFQSQotCi0gICAgLy8gTWV0aG9kIHRoYXQgY29udHJvbHMgd2hl
dGhlciBwcmVzc2luZyBUYWIga2V5IGN5Y2xlcyB0aHJvdWdoIHBhZ2UgZWxlbWVudHMKLSAgICAv
LyBvciBpbnNlcnRzIGEgJ1x0JyBjaGFyIGluIHRleHQgYXJlYQotICAgIHZvaWQgc2V0VGFiS2V5
Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLQotICAgIC8vIEV4ZWN1dGVzIGFuIGludGVybmFsIGNvbW1hbmQgKHN1cGVyc2V0IG9mIGRv
Y3VtZW50LmV4ZWNDb21tYW5kKCkgY29tbWFuZHMpLgotICAgIHZvaWQgZXhlY0NvbW1hbmQoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2hlY2tzIGlmIGFu
IGludGVybmFsIGNvbW1hbmQgaXMgY3VycmVudGx5IGF2YWlsYWJsZS4KLSAgICB2b2lkIGlzQ29t
bWFuZEVuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAg
dm9pZCBjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNj
aGVtZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkQ29udGVudFNlY3VyaXR5UG9saWN5KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEFsbG93cyBsYXlv
dXQgdGVzdHMgdG8gbWFuYWdlIG9yaWdpbnMnIHdoaXRlbGlzdGluZy4KLSAgICB2b2lkIGFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIHJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY3VycmVudCBwYWdlIGJveCBoYXMgY3VzdG9tIHBhZ2Ugc2l6ZSBzdHlsZSBmb3IKLSAgICAv
LyBwcmludGluZy4KLSAgICB2b2lkIGhhc0N1c3RvbVBhZ2VTaXplU3R5bGUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRm9yY2VzIHRoZSBzZWxlY3Rpb24g
Y29sb3JzIGZvciB0ZXN0aW5nIHVuZGVyIExpbnV4LgotICAgIHZvaWQgZm9yY2VSZWRTZWxlY3Rp
b25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
QWRkcyBhIHVzZXIgc2NyaXB0IG9yIHVzZXIgc3R5bGUgc2hlZXQgdG8gYmUgaW5qZWN0ZWQgaW50
byBuZXcgZG9jdW1lbnRzLgotICAgIHZvaWQgYWRkVXNlclNjcmlwdChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhZGRVc2VyU3R5bGVTaGVldChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIHN0YXJ0U3BlZWNoSW5w
dXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBmaW5k
U3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEV4
cGVjdHMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGFuIGlucHV0IGVsZW1lbnQgYW5kIHRoZSBz
ZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBzdHJpbmcgdmFsdWUuCi0gICAgLy8gRm9yd2FyZHMgdGhl
IHNldFZhbHVlRm9yVXNlcigpIGNhbGwgdG8gdGhlIGVsZW1lbnQuCi0gICAgdm9pZCBzZXRWYWx1
ZUZvclVzZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9p
ZCBlbmFibGVGaXhlZExheW91dE1vZGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgc2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgc2VsZWN0aW9uQXNNYXJrdXAoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW5hYmxlcyBvciBkaXNhYmxlcyBz
dWJwaXhlbCBwb3NpdGlvbmluZyAoaS5lLiBmcmFjdGlvbmFsIFggcG9zaXRpb25zIGZvcgotICAg
IC8vIGdseXBocykgaW4gdGV4dCByZW5kZXJpbmcgb24gTGludXguIFNpbmNlIHRoaXMgbWV0aG9k
IGNoYW5nZXMgZ2xvYmFsCi0gICAgLy8gc2V0dGluZ3MsIHRlc3RzIHRoYXQgY2FsbCBpdCBtdXN0
IHVzZSB0aGVpciBvd24gY3VzdG9tIGZvbnQgZmFtaWx5IGZvcgotICAgIC8vIGFsbCB0ZXh0IHRo
YXQgdGhleSByZW5kZXIuIElmIG5vdCwgYW4gYWxyZWFkeS1jYWNoZWQgc3R5bGUgd2lsbCBiZSB1
c2VkLAotICAgIC8vIHJlc3VsdGluZyBpbiB0aGUgY2hhbmdlZCBzZXR0aW5nIGJlaW5nIGlnbm9y
ZWQuCi0gICAgdm9pZCBzZXRUZXh0U3VicGl4ZWxQb3NpdGlvbmluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBTd2l0Y2ggdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIHBhZ2UuCi0gICAgdm9pZCBzZXRQYWdlVmlzaWJpbGl0eShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCByZXNldFBhZ2VWaXNpYmlsaXR5KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIENoYW5nZXMgdGhlIGRpcmVj
dGlvbiBvZiB0aGUgZm9jdXNlZCBlbGVtZW50LgotICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBSZXRyaWV2ZXMg
dGhlIHRleHQgc3Vycm91bmRpbmcgYSBwb3NpdGlvbiBpbiBhIHRleHQgbm9kZS4KLSAgICAvLyBF
eHBlY3RzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhIHRleHQgbm9kZSwgdGhlIHNlY29uZCBh
bmQgdGhpcmQgdG8gYmUKLSAgICAvLyBwb2ludCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUg
bm9kZSBhbmQgdGhlIGZvdXJ0aCB0aGUgbWF4aW11bSB0ZXh0Ci0gICAgLy8gbGVuZ3RoIHRvIHJl
dHJpZXZlLgotICAgIHZvaWQgdGV4dFN1cnJvdW5kaW5nTm9kZShjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lkIGVuYWJsZUF1dG9SZXNpemVNb2RlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRpc2FibGVBdXRvUmVz
aXplTW9kZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBE
ZXZpY2VPcmllbnRhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucwotICAgIHZvaWQgc2V0TW9ja0Rldmlj
ZU9yaWVudGF0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IHZvaWQgZGlkQWNxdWlyZVBvaW50ZXJMb2NrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGRpZE5vdEFjcXVpcmVQb2ludGVyTG9jayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBkaWRMb3NlUG9pbnRlckxvY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0UG9pbnRlckxv
Y2tXaWxsRmFpbFN5bmNocm9ub3VzbHkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgc2V0UG9pbnRlckxvY2tXaWxsUmVzcG9uZEFzeW5jaHJvbm91c2x5KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotICAgIC8vIE1ldGhvZHMgbW9kaWZ5aW5nIFdlYlByZWZlcmVuY2VzLgotCi0gICAgLy8g
UGFzc2VzIHRocm91Z2ggdG8gV2ViUHJlZmVyZW5jZXMgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRv
IGhhdmUgYSBjdXN0b20KLSAgICAvLyBzdHlsZSBzaGVldC4KLSAgICB2b2lkIHNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLQotICAgIC8vIFBhc3NlcyB0aGlzIHByZWZlcmVuY2UgdGhyb3VnaCB0byBX
ZWJTZXR0aW5ncy4KLSAgICB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFNldCB0aGUgV2ViUHJl
ZmVyZW5jZSB0aGF0IGNvbnRyb2xzIHdlYmtpdCdzIHBvcHVwIGJsb2NraW5nLgotICAgIHZvaWQg
c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotCi0gICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldFhTU0F1ZGl0b3JFbmFi
bGVkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEFs
bG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBvdmVycmlkZVByZWZl
cmVuY2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRW5h
YmxlIG9yIGRpc2FibGUgcGx1Z2lucy4KLSAgICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LwotICAgIC8vIE1ldGhvZHMgdGhhdCBtb2RpZnkgdGhlIHN0YXRlIG9mIFRlc3RSdW5uZXIKLQot
ICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVs
bCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyBkZXNjcmlwdGl2ZSB0ZXh0IGZvciBlYWNoIGVk
aXRpbmcgY29tbWFuZC4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQKLSAgICAvLyBpZ25vcmVz
IGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcEVkaXRpbmdDYWxsYmFja3Mo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5j
dGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgcGFnZXMg
YXMKLSAgICAvLyBwbGFpbiB0ZXh0LCByYXRoZXIgdGhhbiBhcyBhIHRleHQgcmVwcmVzZW50YXRp
b24gb2YgdGhlIHJlbmRlcmVyJ3Mgc3RhdGUuCi0gICAgLy8gSXQgdGFrZXMgYW4gb3B0aW9uYWwg
YXJndW1lbnQsIHdoZXRoZXIgdG8gZHVtcCBwaXhlbHMgcmVzdWx0cyBvciBub3QuCi0gICAgdm9p
ZCBkdW1wQXNUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0
byBwcmludCBvdXQgdGhlCi0gICAgLy8gc2Nyb2xsIG9mZnNldHMgb2YgdGhlIGNoaWxkIGZyYW1l
cy4gSXQgaWdub3JlcyBhbGwuCi0gICAgdm9pZCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gcmVjdXJzaXZl
bHkKLSAgICAvLyBkdW1wIGFsbCBmcmFtZXMgYXMgcGxhaW4gdGV4dCBpZiB0aGUgZHVtcEFzVGV4
dCBmbGFnIGlzIHNldC4KLSAgICAvLyBJdCB0YWtlcyBubyBhcmd1bWVudHMsIGFuZCBpZ25vcmVz
IGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcENoaWxkRnJhbWVzQXNUZXh0
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRoaXMgZnVu
Y3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmludCBvdXQg
dGhlCi0gICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgaWNvbiBjaGFuZ2VzIG5vdGlmaWNhdGlvbnMg
ZnJvbSBXZWJLaXQuCi0gICAgdm9pZCBkdW1wSWNvbkNoYW5nZXMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gRGVhbHMgd2l0aCBXZWIgQXVkaW8gV0FWIGZp
bGUgZGF0YS4KLSAgICB2b2lkIHNldEF1ZGlvRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVs
bHMgdGhlIHRlc3Rfc2hlbGwgdG8gcHJpbnQgYSBsaW5lIG9mCi0gICAgLy8gZGVzY3JpcHRpdmUg
dGV4dCBmb3IgZWFjaCBmcmFtZSBsb2FkIGNhbGxiYWNrLiBJdCB0YWtlcyBubyBhcmd1bWVudHMs
IGFuZAotICAgIC8vIGlnbm9yZXMgYW55IHRoYXQgbWF5IGJlIHByZXNlbnQuCi0gICAgdm9pZCBk
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLQotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVz
dF9zaGVsbCB0byBwcmludCBhIGxpbmUgb2YKLSAgICAvLyB1c2VyIGdlc3R1cmUgc3RhdHVzIHRl
eHQgZm9yIHNvbWUgZnJhbWUgbG9hZCBjYWxsYmFja3MuIEl0IHRha2VzIG5vCi0gICAgLy8gYXJn
dW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1
bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLQotICAgIC8vIElmIHRydWUsIGNhdXNlcyBwcm92aXNpb25hbCBmcmFt
ZSBsb2FkcyB0byBiZSBzdG9wcGVkIGZvciB0aGUgcmVtYWluZGVyIG9mCi0gICAgLy8gdGhlIHRl
c3QuCi0gICAgdm9pZCBzZXRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIHZvaWQgZHVtcFRpdGxlQ2hhbmdlcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gZHVtcCBhbGwgY2FsbHMg
dG8KLSAgICAvLyBXZWJWaWV3Q2xpZW50OjpjcmVhdGVWaWV3KCkuCi0gICAgLy8gSXQgdGFrZXMg
bm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2
b2lkIGR1bXBDcmVhdGVWaWV3KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LQotICAgIHZvaWQgc2V0Q2FuT3BlbldpbmRvd3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxz
IHRoZSB0ZXN0X3NoZWxsIHRvIGR1bXAgYSBkZXNjcmlwdGl2ZQotICAgIC8vIGxpbmUgZm9yIGVh
Y2ggcmVzb3VyY2UgbG9hZCBjYWxsYmFjay4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdu
b3JlcwotICAgIC8vIGFueSB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBmbGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hl
bGwgdG8gcHJpbnQgYSBsaW5lIG9mCi0gICAgLy8gZGVzY3JpcHRpdmUgdGV4dCBmb3IgZWFjaCBl
bGVtZW50IHRoYXQgcmVxdWVzdGVkIGEgcmVzb3VyY2UuIEl0IHRha2VzIG5vCi0gICAgLy8gYXJn
dW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1
bXBSZXNvdXJjZVJlcXVlc3RDYWxsYmFja3MoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRo
ZSB0ZXN0X3NoZWxsIHRvIGR1bXAgdGhlIE1JTUUgdHlwZQotICAgIC8vIGZvciBlYWNoIHJlc291
cmNlIHRoYXQgd2FzIGxvYWRlZC4gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBh
bnkKLSAgICAvLyB0aGF0IG1heSBiZSBwcmVzZW50LgotICAgIHZvaWQgZHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0g
ICAgLy8gV2ViUGVybWlzc2lvbkNsaWVudCByZWxhdGVkLgotICAgIHZvaWQgc2V0SW1hZ2VzQWxs
b3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRT
Y3JpcHRzQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBzZXRTdG9yYWdlQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBzZXRQbHVnaW5zQWxsb3dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRBbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRBbGxvd1J1
bm5pbmdPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBkdW1wUGVybWlzc2lvbkNsaWVudENhbGxiYWNrcyhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNldHMgYSBm
bGFnIHRoYXQgdGVsbHMgdGhlIHRlc3Rfc2hlbGwgdG8gZHVtcCBhbGwgY2FsbHMKLSAgICAvLyB0
byB3aW5kb3cuc3RhdHVzKCkuCi0gICAgLy8gSXQgdGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdu
b3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBXaW5kb3dTdGF0dXND
aGFuZ2VzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFRo
aXMgZnVuY3Rpb24gc2V0cyBhIGZsYWcgdGhhdCB0ZWxscyB0aGUgdGVzdF9zaGVsbCB0byBwcmlu
dCBhIGxpbmUgb2YKLSAgICAvLyBkZXNjcmlwdGl2ZSB0ZXh0IGZvciB0aGUgcHJvZ3Jlc3MgZmlu
aXNoZWQgY2FsbGJhY2suIEl0IHRha2VzIG5vCi0gICAgLy8gYXJndW1lbnRzLCBhbmQgaWdub3Jl
cyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4KLSAgICB2b2lkIGR1bXBQcm9ncmVzc0ZpbmlzaGVk
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8g
VGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRvIHBy
aW50IG91dCBhIHRleHQKLSAgICAvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFjay9mb3J3YXJk
IGxpc3QuIEl0IGlnbm9yZXMgYWxsIGFyZ3VtZW50cy4KLSAgICB2b2lkIGR1bXBCYWNrRm9yd2Fy
ZExpc3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBz
ZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGR1bXBTZWxlY3Rpb25SZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHRlc3RSZXBhaW50KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJlcGFpbnRTd2VlcEhvcml6b250YWxseShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVzZXMgbGF5
b3V0IHRvIGhhcHBlbiBhcyBpZiB0YXJnZXR0ZWQgdG8gcHJpbnRlZCBwYWdlcy4KLSAgICB2b2lk
IHNldFByaW50aW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IHZvaWQgc2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2F1c2VzIFdpbGxTZW5k
UmVxdWVzdCB0byBjbGVhciBjZXJ0YWluIGhlYWRlcnMuCi0gICAgdm9pZCBzZXRXaWxsU2VuZFJl
cXVlc3RDbGVhckhlYWRlcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0K
LSAgICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0IHRvIGJsb2NrIHJlZGlyZWN0cy4KLSAgICB2
b2lkIHNldFdpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBDYXVzZXMgV2lsbFNlbmRSZXF1ZXN0
IHRvIHJldHVybiBhbiBlbXB0eSByZXF1ZXN0LgotICAgIHZvaWQgc2V0V2lsbFNlbmRSZXF1ZXN0
UmV0dXJuc051bGwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAg
Ly8gVGhpcyBmdW5jdGlvbiBzZXRzIGEgZmxhZyB0aGF0IHRlbGxzIHRoZSB0ZXN0X3NoZWxsIHRv
IGR1bXAgYSBkZXNjcmlwdGl2ZQotICAgIC8vIGxpbmUgZm9yIGVhY2ggcmVzb3VyY2UgbG9hZCdz
IHByaW9yaXR5IGFuZCBhbnkgdGltZSB0aGF0IHByaW9yaXR5Ci0gICAgLy8gY2hhbmdlcy4gSXQg
dGFrZXMgbm8gYXJndW1lbnRzLCBhbmQgaWdub3JlcyBhbnkgdGhhdCBtYXkgYmUgcHJlc2VudC4K
LSAgICB2b2lkIGR1bXBSZXNvdXJjZVJlcXVlc3RQcmlvcml0aWVzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIE1l
dGhvZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgV2ViVGVzdFByb3h5Ci0KLSAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KLSAgICAvLyBNZXRob2RzIGZvcndhcmRpbmcgdG8gdGhlIFdlYlRlc3REZWxlZ2F0
ZQotCi0gICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93LgotICAgIHZvaWQgc2hvd1dlYkluc3Bl
Y3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjbG9z
ZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAg
ICAvLyBBbGxvd3MgbGF5b3V0IHRlc3RzIHRvIGV4ZWMgc2NyaXB0cyBhdCBXZWJJbnNwZWN0b3Ig
c2lkZS4KLSAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ2xlYXJzIGFsbCBkYXRhYmFzZXMuCi0gICAg
dm9pZCBjbGVhckFsbERhdGFiYXNlcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgLy8gU2V0cyB0aGUgZGVmYXVsdCBxdW90YSBmb3IgYWxsIG9yaWdpbnMKLSAgICB2
b2lkIHNldERhdGFiYXNlUXVvdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
OwotCi0gICAgLy8gQ2hhbmdlcyB0aGUgY29va2llIHBvbGljeSBmcm9tIHRoZSBkZWZhdWx0IHRv
IGFsbG93IGFsbCBjb29raWVzLgotICAgIHZvaWQgc2V0QWx3YXlzQWNjZXB0Q29va2llcyhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLyBHaXZlcyBmb2N1cyB0
byB0aGUgd2luZG93LgotICAgIHZvaWQgc2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQ29udmVydHMgYSBVUkwgc3RhcnRpbmcgd2l0
aCBmaWxlOi8vL3RtcC8gdG8gdGhlIGxvY2FsIG1hcHBpbmcuCi0gICAgdm9pZCBwYXRoVG9Mb2Nh
bFJlc291cmNlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8v
IFVzZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIHZvaWQgc2V0QmFja2lu
Z1NjYWxlRmFjdG9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IC8vIENhbGxzIHNldGxvY2FsZShMQ19BTEwsIC4uLikgZm9yIGEgc3BlY2lmaWVkIGxvY2FsZS4K
LSAgICAvLyBSZXNldHMgYmV0d2VlbiB0ZXN0cy4KLSAgICB2b2lkIHNldFBPU0lYTG9jYWxlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEdldHMgdGhlIG51
bWJlciBvZiBnZW9sb2NhdGlvbiBwZXJtaXNzaW9ucyByZXF1ZXN0cyBwZW5kaW5nLgotICAgIHZv
aWQgbnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8gR2VvbG9jYXRpb24gcmVsYXRl
ZCBmdW5jdGlvbnMuCi0gICAgdm9pZCBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotI2lmIEVOQUJMRV9OT1RJRklDQVRJT05TCi0gICAg
Ly8gR3JhbnRzIHBlcm1pc3Npb24gZm9yIGRlc2t0b3Agbm90aWZpY2F0aW9ucyB0byBhbiBvcmln
aW4KLSAgICB2b2lkIGdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgLy8gU2ltdWxhdGVzIGEgY2xpY2sgb24gYSBk
ZXNrdG9wIG5vdGlmaWNhdGlvbi4KLSAgICB2b2lkIHNpbXVsYXRlTGVnYWN5V2ViTm90aWZpY2F0
aW9uQ2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotI2VuZGlmCi0K
LSAgICAvLyBTcGVlY2ggaW5wdXQgcmVsYXRlZCBmdW5jdGlvbnMuCi0gICAgdm9pZCBhZGRNb2Nr
U3BlZWNoSW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwot
ICAgIHZvaWQgc2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldE1vY2tT
cGVlY2hSZWNvZ25pdGlvbkVycm9yKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKLSAgICB2b2lkIHdhc01vY2tTcGVlY2hSZWNvZ25pdGlvbkFib3J0ZWQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBkaXNwbGF5KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRpc3BsYXlJbnZhbGlkYXRlZFJl
Z2lvbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotICAgIC8vIEZhbGxiYWNrIGFuZCBzdHViIG1ldGhvZHMKLQotICAgIC8vIFRo
ZSBmYWxsYmFjayBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBub25leGlzdGVudCBtZXRob2QgaXMg
Y2FsbGVkIG9uCi0gICAgLy8gdGhlIGxheW91dCB0ZXN0IGNvbnRyb2xsZXIgb2JqZWN0LgotICAg
IC8vIEl0IGlzIHVzZWZ1bGwgdG8gY2F0Y2ggdHlwb3MgaW4gdGhlIEphdmFTY3JpcHQgY29kZSAo
YSBmZXcgbGF5b3V0IHRlc3RzCi0gICAgLy8gZG8gaGF2ZSB0eXBvcyBpbiB0aGVtKSBhbmQgaXQg
YWxsb3dzIHRoZSBzY3JpcHQgdG8gY29udGludWUgcnVubmluZyBpbgotICAgIC8vIHRoYXQgY2Fz
ZSAoYXMgdGhlIE1hYyBkb2VzKS4KLSAgICB2b2lkIGZhbGxiYWNrTWV0aG9kKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFN0dWIgZm9yIG5vdCBpbXBsZW1l
bnRlZCBtZXRob2RzLgotICAgIHZvaWQgbm90SW1wbGVtZW50ZWQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gSW50
ZXJuYWwgaGVscGVycwotICAgIHZvaWQgY2hlY2tSZXNwb25zZU1pbWVUeXBlKCk7Ci0gICAgdm9p
ZCBjb21wbGV0ZU5vdGlmeURvbmUoYm9vbCBpc1RpbWVvdXQpOwotICAgIGNsYXNzIE5vdGlmeURv
bmVUaW1lZE91dFRhc2s6IHB1YmxpYyBXZWJNZXRob2RUYXNrPFRlc3RSdW5uZXI+IHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIE5vdGlmeURvbmVUaW1lZE91dFRhc2soVGVzdFJ1bm5lciogb2JqZWN0
KTogV2ViTWV0aG9kVGFzazxUZXN0UnVubmVyPihvYmplY3QpIHsgfQotICAgICAgICB2aXJ0dWFs
IHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPmNvbXBsZXRlTm90aWZ5RG9uZSh0cnVlKTsg
fQotICAgIH07Ci0KLSAgICBjbGFzcyBIb3N0TWV0aG9kVGFzayA6IHB1YmxpYyBXZWJNZXRob2RU
YXNrPFRlc3RSdW5uZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgdm9pZCAoVGVz
dFJ1bm5lcjo6KkNhbGxiYWNrTWV0aG9kVHlwZSkoKTsKLSAgICAgICAgSG9zdE1ldGhvZFRhc2so
VGVzdFJ1bm5lciogb2JqZWN0LCBDYWxsYmFja01ldGhvZFR5cGUgY2FsbGJhY2spCi0gICAgICAg
ICAgICA6IFdlYk1ldGhvZFRhc2s8VGVzdFJ1bm5lcj4ob2JqZWN0KQotICAgICAgICAgICAgLCBt
X2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICAgICB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
cnVuSWZWYWxpZCgpIHsgKG1fb2JqZWN0LT4qbV9jYWxsYmFjaykoKTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgQ2FsbGJhY2tNZXRob2RUeXBlIG1fY2FsbGJhY2s7Ci0gICAgfTsKLSAgICB2
b2lkIGRpZEFjcXVpcmVQb2ludGVyTG9ja0ludGVybmFsKCk7Ci0gICAgdm9pZCBkaWROb3RBY3F1
aXJlUG9pbnRlckxvY2tJbnRlcm5hbCgpOwotICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2NrSW50
ZXJuYWwoKTsKLQotICAgIGJvb2wgY3BwVmFyaWFudFRvQm9vbChjb25zdCBDcHBWYXJpYW50Jik7
Ci0gICAgaW50MzJfdCBjcHBWYXJpYW50VG9JbnQzMihjb25zdCBDcHBWYXJpYW50Jik7Ci0gICAg
V2ViS2l0OjpXZWJTdHJpbmcgY3BwVmFyaWFudFRvV2ViU3RyaW5nKGNvbnN0IENwcFZhcmlhbnQm
KTsKLQotICAgIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2UoY29uc3Qgc3RkOjpzdHJpbmcmKTsKLQot
ICAgIC8vIEluIHRoZSBNYWMgY29kZSwgdGhpcyBpcyBjYWxsZWQgdG8gdHJpZ2dlciB0aGUgZW5k
IG9mIGEgdGVzdCBhZnRlciB0aGUKLSAgICAvLyBwYWdlIGhhcyBmaW5pc2hlZCBsb2FkaW5nLiBG
cm9tIGhlcmUsIHdlIGNhbiBnZW5lcmF0ZSB0aGUgZHVtcCBmb3IgdGhlCi0gICAgLy8gdGVzdC4K
LSAgICB2b2lkIGxvY2F0aW9uQ2hhbmdlRG9uZSgpOwotCi0gICAgYm9vbCBtX3Rlc3RJc1J1bm5p
bmc7Ci0KLSAgICAvLyBXaGVuIHJlc2V0IGlzIGNhbGxlZCwgZ28gdGhyb3VnaCBhbmQgY2xvc2Ug
YWxsIGJ1dCB0aGUgbWFpbiB0ZXN0IHNoZWxsCi0gICAgLy8gd2luZG93LiBCeSBkZWZhdWx0LCBz
ZXQgdG8gdHJ1ZSBidXQgdG9nZ2xlZCB0byBmYWxzZSB1c2luZwotICAgIC8vIHNldENsb3NlUmVt
YWluaW5nV2luZG93c1doZW5Db21wbGV0ZSgpLgotICAgIGJvb2wgbV9jbG9zZVJlbWFpbmluZ1dp
bmRvd3M7Ci0KLSAgICAvLyBJZiB0cnVlLCBkb24ndCBkdW1wIG91dHB1dCB1bnRpbCBub3RpZnlE
b25lIGlzIGNhbGxlZC4KLSAgICBib29sIG1fd2FpdFVudGlsRG9uZTsKLQotICAgIC8vIENhdXNl
cyBuYXZpZ2F0aW9uIGFjdGlvbnMganVzdCBwcmludG91dCB0aGUgaW50ZW5kZWQgbmF2aWdhdGlv
biBpbnN0ZWFkCi0gICAgLy8gb2YgdGFraW5nIHlvdSB0byB0aGUgcGFnZS4gVGhpcyBpcyB1c2Vk
IGZvciBjYXNlcyBsaWtlIG1haWx0bywgd2hlcmUgeW91Ci0gICAgLy8gZG9uJ3QgYWN0dWFsbHkg
d2FudCB0byBvcGVuIHRoZSBtYWlsIHByb2dyYW0uCi0gICAgYm9vbCBtX3BvbGljeURlbGVnYXRl
RW5hYmxlZDsKLQotICAgIC8vIFRvZ2dsZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBwb2xpY3kgZGVs
ZWdhdGUuIElmIHRydWUsIHRoZW4gbmF2aWdhdGlvbnMKLSAgICAvLyB3aWxsIGJlIGFsbG93ZWQu
IE90aGVyd2lzZSwgdGhleSB3aWxsIGJlIGlnbm9yZWQgKGRyb3BwZWQpLgotICAgIGJvb2wgbV9w
b2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZTsKLQotICAgIC8vIElmIHRydWUsIHRoZSBwb2xpY3kg
ZGVsZWdhdGUgd2lsbCBzaWduYWwgbGF5b3V0IHRlc3QgY29tcGxldGlvbi4KLSAgICBib29sIG1f
cG9saWN5RGVsZWdhdGVTaG91bGROb3RpZnlEb25lOwotCi0gICAgV29ya1F1ZXVlIG1fd29ya1F1
ZXVlOwotCi0gICAgV2ViS2l0OjpXZWJVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOwotCi0g
ICAgLy8gZ2xvYmFsRmxhZyBpcyB1c2VkIGJ5IGEgbnVtYmVyIG9mIGxheW91dCB0ZXN0cyBpbiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L2RhdGFVUkwuCi0gICAgQ3BwVmFyaWFudCBtX2dsb2JhbEZsYWc7
Ci0KLSAgICAvLyBCb3VuZCB2YXJpYWJsZSB0byByZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBwbGF0
Zm9ybSAoY2hyb21pdW0pLgotICAgIENwcFZhcmlhbnQgbV9wbGF0Zm9ybU5hbWU7Ci0KLSAgICAv
LyBCb3VuZCB2YXJpYWJsZSB0cmFja2luZyB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIDx0aXRs
ZT4gdGFnLgotICAgIENwcFZhcmlhbnQgbV90aXRsZVRleHREaXJlY3Rpb247Ci0KLSAgICAvLyBC
b3VuZCB2YXJpYWJsZSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIHRvcCBVUkxzIHZpc2l0ZWQuCi0g
ICAgQ3BwVmFyaWFudCBtX3dlYkhpc3RvcnlJdGVtQ291bnQ7Ci0KLSAgICAvLyBCb3VuZCB2YXJp
YWJsZSB0byBzZXQgd2hldGhlciBwb3N0TWVzc2FnZXMgc2hvdWxkIGJlIGludGVyY2VwdGVkIG9y
IG5vdAotICAgIENwcFZhcmlhbnQgbV9pbnRlcmNlcHRQb3N0TWVzc2FnZTsKLQotICAgIC8vIElm
IHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgd3JpdGUgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBl
YWNoIGVkaXRpbmcKLSAgICAvLyBjb21tYW5kLgotICAgIGJvb2wgbV9kdW1wRWRpdGluZ0NhbGxi
YWNrczsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgZ2VuZXJhdGUgcGl4
ZWwgcmVzdWx0cyBpbiBkdW1wQXNUZXh0IG1vZGUKLSAgICBib29sIG1fZ2VuZXJhdGVQaXhlbFJl
c3VsdHM7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHByb2R1Y2UgYSBw
bGFpbiB0ZXh0IGR1bXAgcmF0aGVyIHRoYW4gYQotICAgIC8vIHRleHQgcmVwcmVzZW50YXRpb24g
b2YgdGhlIHJlbmRlcmVyLgotICAgIGJvb2wgbV9kdW1wQXNUZXh0OwotCi0gICAgLy8gSWYgdHJ1
ZSBhbmQgaWYgZHVtcF9hc190ZXh0XyBpcyB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIHJlY3Vy
c2l2ZWx5Ci0gICAgLy8gZHVtcCBhbGwgZnJhbWVzIGFzIHBsYWluIHRleHQuCi0gICAgYm9vbCBt
X2R1bXBDaGlsZEZyYW1lc0FzVGV4dDsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxs
IHdpbGwgcHJpbnQgb3V0IHRoZSBjaGlsZCBmcmFtZSBzY3JvbGwgb2Zmc2V0cyBhcwotICAgIC8v
IHdlbGwuCi0gICAgYm9vbCBtX2R1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zOwotCi0gICAg
Ly8gSWYgdHJ1ZSwgdGhlIHRlc3Rfc2hlbGwgd2lsbCBwcmludCBvdXQgdGhlIGljb24gY2hhbmdl
IG5vdGlmaWNhdGlvbnMuCi0gICAgYm9vbCBtX2R1bXBJY29uQ2hhbmdlczsKLQotICAgIC8vIElm
IHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgYmFzZTY0IGVuY29kZWQgV0FWRSBm
aWxlLgotICAgIGJvb2wgbV9kdW1wQXNBdWRpbzsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0
X3NoZWxsIHdpbGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBmb3IgZWFjaCBmcmFtZQotICAg
IC8vIGxvYWQgY2FsbGJhY2suCi0gICAgYm9vbCBtX2R1bXBGcmFtZUxvYWRDYWxsYmFja3M7Ci0K
LSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGxpbmUgb2YgdGhl
IHVzZXIgZ2VzdHVyZSBzdGF0dXMKLSAgICAvLyB0ZXh0IGZvciBzb21lIGZyYW1lIGxvYWQgY2Fs
bGJhY2tzLgotICAgIGJvb2wgbV9kdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZENhbGxiYWNrczsK
LQotICAgIC8vIElmIHRydWUsIHN0b3BzIHByb3Zpc2lvbmFsIGZyYW1lIGxvYWRzIGR1cmluZyB0
aGUKLSAgICAvLyBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxiYWNrLgotICAg
IGJvb2wgbV9zdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzOwotCi0gICAgLy8gSWYgdHJ1ZSwgb3V0
cHV0IGEgbWVzc2FnZSB3aGVuIHRoZSBwYWdlIHRpdGxlIGlzIGNoYW5nZWQuCi0gICAgYm9vbCBt
X2R1bXBUaXRsZUNoYW5nZXM7Ci0KLSAgICAvLyBJZiB0cnVlLCBvdXRwdXQgYSBkZXNjcmlwdGl2
ZSBsaW5lIGVhY2ggdGltZSBXZWJWaWV3Q2xpZW50OjpjcmVhdGVWaWV3Ci0gICAgLy8gaXMgaW52
b2tlZC4KLSAgICBib29sIG1fZHVtcENyZWF0ZVZpZXc7Ci0KLSAgICAvLyBJZiB0cnVlLCBuZXcg
d2luZG93cyBjYW4gYmUgb3BlbmVkIHZpYSBqYXZhc2NyaXB0IG9yIGJ5IHBsdWdpbnMuIEJ5Ci0g
ICAgLy8gZGVmYXVsdCwgc2V0IHRvIGZhbHNlIGFuZCBjYW4gYmUgdG9nZ2xlZCB0byB0cnVlIHVz
aW5nCi0gICAgLy8gc2V0Q2FuT3BlbldpbmRvd3MoKS4KLSAgICBib29sIG1fY2FuT3BlbldpbmRv
d3M7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIG91dHB1dCBhIGRlc2Ny
aXB0aXZlIGxpbmUgZm9yIGVhY2ggcmVzb3VyY2UKLSAgICAvLyBsb2FkIGNhbGxiYWNrLgotICAg
IGJvb2wgbV9kdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzOwotCi0gICAgLy8gSWYgdHJ1ZSwgdGhl
IHRlc3Rfc2hlbGwgd2lsbCBvdXRwdXQgYSBkZXNjcmlwdGl2ZSBsaW5lIGZvciBlYWNoIHJlc291
cmNlCi0gICAgLy8gcmVxdWVzdCBjYWxsYmFjay4KLSAgICBib29sIG1fZHVtcFJlc291cmNlUmVx
dWVzdENhbGxiYWNrczsKLQotICAgIC8vIElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0
cHV0IHRoZSBNSU1FIHR5cGUgZm9yIGVhY2ggcmVzb3VyY2UgdGhhdCAKLSAgICAvLyB3YXMgbG9h
ZGVkLgotICAgIGJvb2wgbV9kdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlczsKLQotICAgIC8v
IElmIHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgZHVtcCBhbGwgY2hhbmdlcyB0byB3aW5kb3cu
c3RhdHVzLgotICAgIGJvb2wgbV9kdW1wV2luZG93U3RhdHVzQ2hhbmdlczsKLQotICAgIC8vIElm
IHRydWUsIHRoZSB0ZXN0X3NoZWxsIHdpbGwgb3V0cHV0IGEgZGVzY3JpcHRpdmUgbGluZSBmb3Ig
dGhlIHByb2dyZXNzCi0gICAgLy8gZmluaXNoZWQgY2FsbGJhY2suCi0gICAgYm9vbCBtX2R1bXBQ
cm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgdGVzdF9zaGVs
bCB3aWxsIHByb2R1Y2UgYSBkdW1wIG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdCBhcwotICAgIC8v
IHdlbGwuCi0gICAgYm9vbCBtX2R1bXBCYWNrRm9yd2FyZExpc3Q7Ci0KLSAgICAvLyBJZiBmYWxz
ZSwgYWxsIG5ldyByZXF1ZXN0cyB3aWxsIG5vdCBkZWZlciB0aGUgbWFpbiByZXNvdXJjZSBkYXRh
IGxvYWQuCi0gICAgYm9vbCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7Ci0KLSAgICAvLyBJ
ZiB0cnVlLCB0aGUgdGVzdF9zaGVsbCB3aWxsIGRyYXcgdGhlIGJvdW5kcyBvZiB0aGUgY3VycmVu
dCBzZWxlY3Rpb24gcmVjdAotICAgIC8vIHRha2luZyBwb3NzaWJsZSB0cmFuc2Zvcm1zIG9mIHRo
ZSBzZWxlY3Rpb24gcmVjdCBpbnRvIGFjY291bnQuCi0gICAgYm9vbCBtX2R1bXBTZWxlY3Rpb25S
ZWN0OwotCi0gICAgLy8gSWYgdHJ1ZSwgcGl4ZWwgZHVtcCB3aWxsIGJlIHByb2R1Y2VkIGFzIGEg
c2VyaWVzIG9mIDFweC10YWxsLCB2aWV3LXdpZGUKLSAgICAvLyBpbmRpdmlkdWFsIHBhaW50cyBv
dmVyIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXcuCi0gICAgYm9vbCBtX3Rlc3RSZXBhaW50OwotCi0g
ICAgLy8gSWYgdHJ1ZSBhbmQgdGVzdF9yZXBhaW50XyBpcyB0cnVlIGFzIHdlbGwsIHBpeGVsIGR1
bXAgd2lsbCBiZSBwcm9kdWNlZCBhcwotICAgIC8vIGEgc2VyaWVzIG9mIDFweC13aWRlLCB2aWV3
LXRhbGwgcGFpbnRzIGFjcm9zcyB0aGUgd2lkdGggb2YgdGhlIHZpZXcuCi0gICAgYm9vbCBtX3N3
ZWVwSG9yaXpvbnRhbGx5OwotCi0gICAgLy8gSWYgdHJ1ZSwgbGF5b3V0IGlzIHRvIHRhcmdldCBw
cmludGVkIHBhZ2VzLgotICAgIGJvb2wgbV9pc1ByaW50aW5nOwotCi0gICAgYm9vbCBtX3Nob3Vs
ZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOwotCi0gICAgYm9vbCBtX3Nob3Vs
ZEJsb2NrUmVkaXJlY3RzOwotCi0gICAgYm9vbCBtX3dpbGxTZW5kUmVxdWVzdFNob3VsZFJldHVy
bk51bGw7Ci0KLSAgICBib29sIG1fc2hvdWxkRHVtcFJlc291cmNlUHJpb3JpdGllczsKLQotICAg
IHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBtX2h0dHBIZWFkZXJzVG9DbGVhcjsKLQotICAgIC8vIFdB
ViBhdWRpbyBkYXRhIGlzIHN0b3JlZCBoZXJlLgotICAgIFdlYktpdDo6V2ViQXJyYXlCdWZmZXJW
aWV3IG1fYXVkaW9EYXRhOwotCi0gICAgLy8gVXNlZCBmb3IgdGVzdCB0aW1lb3V0cy4KLSAgICBX
ZWJUYXNrTGlzdCBtX3Rhc2tMaXN0OwotCi0gICAgVGVzdEludGVyZmFjZXMqIG1fdGVzdEludGVy
ZmFjZXM7Ci0gICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotICAgIFdlYktpdDo6V2Vi
VmlldyogbV93ZWJWaWV3OwotICAgIFdlYlRlc3RQcm94eUJhc2UqIG1fcHJveHk7Ci0KLSAgICAv
LyBUaGlzIGlzIG5vbi0wIElGRiBhIGxvYWQgaXMgaW4gcHJvZ3Jlc3MuCi0gICAgV2ViS2l0OjpX
ZWJGcmFtZSogbV90b3BMb2FkaW5nRnJhbWU7Ci0KLSAgICAvLyBXZWJQZXJtaXNzaW9uQ2xpZW50
IG1vY2sgb2JqZWN0LgotICAgIHN0ZDo6YXV0b19wdHI8V2ViUGVybWlzc2lvbnM+IG1fd2ViUGVy
bWlzc2lvbnM7Ci0KLSNpZiBFTkFCTEVfTk9USUZJQ0FUSU9OUwotICAgIHN0ZDo6YXV0b19wdHI8
Tm90aWZpY2F0aW9uUHJlc2VudGVyPiBtX25vdGlmaWNhdGlvblByZXNlbnRlcjsKLSNlbmRpZgot
Ci0gICAgYm9vbCBtX3BvaW50ZXJMb2NrZWQ7Ci0gICAgZW51bSB7Ci0gICAgICAgIFBvaW50ZXJM
b2NrV2lsbFN1Y2NlZWQsCi0gICAgICAgIFBvaW50ZXJMb2NrV2lsbFJlc3BvbmRBc3luYywKLSAg
ICAgICAgUG9pbnRlckxvY2tXaWxsRmFpbFN5bmMsCi0gICAgfSBtX3BvaW50ZXJMb2NrUGxhbm5l
ZFJlc3VsdDsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFRlc3RSdW5uZXJfaApJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvVGV4dElucHV0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE0NzcwMSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIlRlc3RD
b21tb24uaCIKLSNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgotI2luY2x1ZGUgIldlYkNvbXBvc2l0
aW9uVW5kZXJsaW5lLmgiCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKLSNpbmNsdWRlICJXZWJJbnB1
dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViUmFuZ2UuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0j
aW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3Iu
aD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBu
YW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLVRleHRJbnB1dENv
bnRyb2xsZXI6OlRleHRJbnB1dENvbnRyb2xsZXIoKQotewotICAgIGJpbmRNZXRob2QoImF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6YXR0cmlidXRl
ZFN1YnN0cmluZ0Zyb21SYW5nZSk7Ci0gICAgYmluZE1ldGhvZCgiY2hhcmFjdGVySW5kZXhGb3JQ
b2ludCIsICZUZXh0SW5wdXRDb250cm9sbGVyOjpjaGFyYWN0ZXJJbmRleEZvclBvaW50KTsKLSAg
ICBiaW5kTWV0aG9kKCJjb252ZXJzYXRpb25JZGVudGlmaWVyIiwgJlRleHRJbnB1dENvbnRyb2xs
ZXI6OmNvbnZlcnNhdGlvbklkZW50aWZpZXIpOwotICAgIGJpbmRNZXRob2QoImRvQ29tbWFuZCIs
ICZUZXh0SW5wdXRDb250cm9sbGVyOjpkb0NvbW1hbmQpOwotICAgIGJpbmRNZXRob2QoImZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlIiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OmZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlKTsKLSAgICBiaW5kTWV0aG9kKCJoYXNNYXJrZWRUZXh0IiwgJlRleHRJ
bnB1dENvbnRyb2xsZXI6Omhhc01hcmtlZFRleHQpOwotICAgIGJpbmRNZXRob2QoImluc2VydFRl
eHQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dCk7Ci0gICAgYmluZE1ldGhvZCgi
bWFrZUF0dHJpYnV0ZWRTdHJpbmciLCAmVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZUF0dHJpYnV0
ZWRTdHJpbmcpOwotICAgIGJpbmRNZXRob2QoIm1hcmtlZFJhbmdlIiwgJlRleHRJbnB1dENvbnRy
b2xsZXI6Om1hcmtlZFJhbmdlKTsKLSAgICBiaW5kTWV0aG9kKCJzZWxlY3RlZFJhbmdlIiwgJlRl
eHRJbnB1dENvbnRyb2xsZXI6OnNlbGVjdGVkUmFuZ2UpOwotICAgIGJpbmRNZXRob2QoInNldE1h
cmtlZFRleHQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6c2V0TWFya2VkVGV4dCk7Ci0gICAgYmlu
ZE1ldGhvZCgic3Vic3RyaW5nRnJvbVJhbmdlIiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnN1YnN0
cmluZ0Zyb21SYW5nZSk7Ci0gICAgYmluZE1ldGhvZCgidW5tYXJrVGV4dCIsICZUZXh0SW5wdXRD
b250cm9sbGVyOjp1bm1hcmtUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJ2YWxpZEF0dHJpYnV0ZXNG
b3JNYXJrZWRUZXh0IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnZhbGlkQXR0cmlidXRlc0Zvck1h
cmtlZFRleHQpOwotICAgIGJpbmRNZXRob2QoInNldENvbXBvc2l0aW9uIiwgJlRleHRJbnB1dENv
bnRyb2xsZXI6OnNldENvbXBvc2l0aW9uKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9sbGVy
OjppbnNlcnRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3dlYlZpZXctPmNvbmZpcm1Db21wb3NpdGlvbihXZWJTdHJpbmc6OmZyb21VVEY4
KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxl
cjo6ZG9Db21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJGcmFtZSogbWFp
bkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMSAmJiBhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgbWFpbkZyYW1lLT5leGVjdXRlQ29tbWFuZChXZWJT
dHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci19Ci0KLXZvaWQgVGV4
dElucHV0Q29udHJvbGxlcjo6c2V0TWFya2VkVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMyAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmco
KQotICAgICAgICAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMl0uaXNO
dW1iZXIoKSkgewotICAgICAgICBXZWJWZWN0b3I8V2ViQ29tcG9zaXRpb25VbmRlcmxpbmU+IHVu
ZGVybGluZXM7Ci0gICAgICAgIG1fd2ViVmlldy0+c2V0Q29tcG9zaXRpb24oV2ViU3RyaW5nOjpm
cm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5kZXJsaW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHNbMV0udG9JbnQzMigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c1sxXS50b0ludDMyKCkgKyBhcmd1bWVudHNbMl0udG9JbnQzMigpKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJrVGV4dChjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0KLSAgICBtX3dlYlZpZXctPmNvbmZpcm1Db21wb3NpdGlvbigpOwotfQotCi12b2lkIFRl
eHRJbnB1dENvbnRyb2xsZXI6Omhhc01hcmtlZFRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgV2Vi
RnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFtYWlu
RnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdC0+c2V0KG1haW5GcmFtZS0+aGFz
TWFya2VkVGV4dCgpKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpjb252ZXJzYXRp
b25JZGVudGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7
Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c3Vic3RyaW5nRnJvbVJhbmdlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGV4dElu
cHV0Q29udHJvbGxlcjo6YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIFRleHRJbnB1dENvbnRy
b2xsZXI6Om1hcmtlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIFdlYkZyYW1lKiBtYWluRnJh
bWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAgIGlmICghbWFpbkZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXZWJSYW5nZSByYW5nZSA9IG1haW5GcmFtZS0+bWFya2VkUmFuZ2Uo
KTsKLSAgICB2ZWN0b3I8aW50PiBpbnRBcnJheSgyKTsKLSAgICBpbnRBcnJheVswXSA9IHJhbmdl
LnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaW50QXJyYXlbMV0gPSByYW5nZS5lbmRPZmZzZXQoKTsKLSAg
ICByZXN1bHQtPnNldChXZWJCaW5kaW5nczo6bWFrZUludEFycmF5KGludEFycmF5KSk7Ci19Ci0K
LXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c2VsZWN0ZWRSYW5nZShjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0K
LSAgICBXZWJGcmFtZSogbWFpbkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKLSAgICBp
ZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViUmFuZ2UgcmFuZ2UgPSBt
YWluRnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7Ci0gICAgdmVjdG9yPGludD4gaW50QXJyYXkoMik7
Ci0gICAgaW50QXJyYXlbMF0gPSByYW5nZS5zdGFydE9mZnNldCgpOwotICAgIGludEFycmF5WzFd
ID0gcmFuZ2UuZW5kT2Zmc2V0KCk7Ci0gICAgcmVzdWx0LT5zZXQoV2ViQmluZGluZ3M6Om1ha2VJ
bnRBcnJheShpbnRBcnJheSkpOwotfQotCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OmZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJG
cmFtZSogZnJhbWUgPSBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJn
dW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBXZWJSZWN0IHJlY3Q7Ci0gICAgaWYgKCFmcmFtZS0+Zmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2UoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRv
SW50MzIoKSwgcmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZlY3RvcjxpbnQ+IGludEFy
cmF5KDQpOwotICAgIGludEFycmF5WzBdID0gcmVjdC54OwotICAgIGludEFycmF5WzFdID0gcmVj
dC55OwotICAgIGludEFycmF5WzJdID0gcmVjdC53aWR0aDsKLSAgICBpbnRBcnJheVszXSA9IHJl
Y3QuaGVpZ2h0OwotICAgIHJlc3VsdC0+c2V0KFdlYkJpbmRpbmdzOjptYWtlSW50QXJyYXkoaW50
QXJyYXkpKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpjaGFyYWN0ZXJJbmRleEZv
clBvaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJGcmFtZSogbWFpbkZyYW1lID0gbV93ZWJWaWV3LT5tYWlu
RnJhbWUoKTsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVz
dWx0LT5zZXQoIk5TVW5kZXJsaW5lLE5TVW5kZXJsaW5lQ29sb3IsTlNNYXJrZWRDbGF1c2VTZWdt
ZW50LCIKLSAgICAgICAgICAgICAgICAiTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmli
dXRlTmFtZSIpOwotfQotCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Om1ha2VBdHRyaWJ1dGVk
U3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU2VuZHMgYSBrZXlkb3duIGV2ZW50IHdpdGgga2V5IGNvZGUgPSAweEU1IHRv
IGVtdWxhdGUgaW5wdXQgbWV0aG9kIGJlaGF2aW9yLgotICAgIFdlYktleWJvYXJkRXZlbnQga2V5
RG93bjsKLSAgICBrZXlEb3duLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duOwotICAg
IGtleURvd24ubW9kaWZpZXJzID0gMDsKLSAgICBrZXlEb3duLndpbmRvd3NLZXlDb2RlID0gMHhF
NTsgLy8gVktFWV9QUk9DRVNTS0VZCi0gICAga2V5RG93bi5zZXRLZXlJZGVudGlmaWVyRnJvbVdp
bmRvd3NLZXlDb2RlKCk7Ci0gICAgbV93ZWJWaWV3LT5oYW5kbGVJbnB1dEV2ZW50KGtleURvd24p
OwotCi0gICAgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOwot
ICAgIFdlYlN0cmluZyB0ZXh0KFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3Ry
aW5nKCkpKTsKLSAgICBtX3dlYlZpZXctPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMs
IDAsIHRleHQubGVuZ3RoKCkpOwotfQotCi19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXh0SW5wdXRDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0
Q29udHJvbGxlci5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXh0SW5wdXRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLS8vIFRleHRJbnB1dENvbnRyb2xsZXIgaXMgYm91bmQgdG8gd2lu
ZG93LnRleHRJbnB1dENvbnRyb2xsZXIgaW4gSmF2YXNjcmlwdAotLy8gd2hlbiBEUlQgaXMgcnVu
bmluZy4gTGF5b3V0IHRlc3RzIHVzZSBpdCB0byBleGVyY2lzZSB2YXJpb3VzIGNvcm5lcnMgb2YK
LS8vIHRleHQgaW5wdXQuCi0KLSNpZm5kZWYgVGV4dElucHV0Q29udHJvbGxlcl9oCi0jZGVmaW5l
IFRleHRJbnB1dENvbnRyb2xsZXJfaAotCi0jaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlZpZXc7Ci19Ci0KLW5hbWVzcGFjZSBXZWJUZXN0
UnVubmVyIHsKLQotY2xhc3MgVGV4dElucHV0Q29udHJvbGxlciA6IHB1YmxpYyBDcHBCb3VuZENs
YXNzIHsKLXB1YmxpYzoKLSAgICBUZXh0SW5wdXRDb250cm9sbGVyKCk7Ci0KLSAgICB2b2lkIHNl
dFdlYlZpZXcoV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3KSB7IG1fd2ViVmlldyA9IHdlYlZpZXc7
IH0KLQotICAgIHZvaWQgaW5zZXJ0VGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBkb0NvbW1hbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgc2V0TWFya2VkVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCB1bm1hcmtUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGhhc01hcmtlZFRleHQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY29udmVyc2F0aW9uSWRlbnRpZmllcihjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdWJzdHJpbmdGcm9t
UmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBtYXJrZWRSYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBzZWxlY3RlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNoYXJhY3RlckluZGV4
Rm9yUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
dmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBtYWtlQXR0cmlidXRlZFN0cmluZyhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGlvbihjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLXByaXZhdGU6Ci0gICAgV2ViS2l0OjpXZWJW
aWV3KiBtX3dlYlZpZXc7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVy
X2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dl
YlBlcm1pc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQZXJtaXNzaW9ucy5jcHAJKHJldmlzaW9uIDE0NzcwMSkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlBlcm1p
c3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXZWJQZXJtaXNzaW9ucy5oIgotCi0jaW5jbHVkZSAiVGVzdENvbW1v
bi5oIgotI2luY2x1ZGUgIldlYlRlc3REZWxlZ2F0ZS5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJD
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLVdlYlBlcm1pc3Npb25zOjpXZWJQ
ZXJtaXNzaW9ucygpCi0gICAgOiBtX2RlbGVnYXRlKDApCi17Ci0gICAgcmVzZXQoKTsKLX0KLQot
V2ViUGVybWlzc2lvbnM6On5XZWJQZXJtaXNzaW9ucygpCi17Ci19Ci0KLWJvb2wgV2ViUGVybWlz
c2lvbnM6OmFsbG93SW1hZ2UoV2ViS2l0OjpXZWJGcmFtZSosIGJvb2wgZW5hYmxlZFBlclNldHRp
bmdzLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYgaW1hZ2VVUkwpCi17Ci0gICAgYm9vbCBhbGxvd2Vk
ID0gZW5hYmxlZFBlclNldHRpbmdzICYmIG1faW1hZ2VzQWxsb3dlZDsKLSAgICBpZiAobV9kdW1w
Q2FsbGJhY2tzICYmIG1fZGVsZWdhdGUpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2Fn
ZShzdGQ6OnN0cmluZygiUEVSTUlTU0lPTiBDTElFTlQ6IGFsbG93SW1hZ2UoIikgKyBub3JtYWxp
emVMYXlvdXRUZXN0VVJMKGltYWdlVVJMLnNwZWMoKSkgKyAiKTogIiArIChhbGxvd2VkID8gInRy
dWUiIDogImZhbHNlIikgKyAiXG4iKTsKLSAgICByZXR1cm4gYWxsb3dlZDsKLX0KLQotYm9vbCBX
ZWJQZXJtaXNzaW9uczo6YWxsb3dTY3JpcHRGcm9tU291cmNlKFdlYktpdDo6V2ViRnJhbWUqLCBi
b29sIGVuYWJsZWRQZXJTZXR0aW5ncywgY29uc3QgV2ViS2l0OjpXZWJVUkwmIHNjcmlwdFVSTCkK
LXsKLSAgICBib29sIGFsbG93ZWQgPSBlbmFibGVkUGVyU2V0dGluZ3MgJiYgbV9zY3JpcHRzQWxs
b3dlZDsKLSAgICBpZiAobV9kdW1wQ2FsbGJhY2tzICYmIG1fZGVsZWdhdGUpCi0gICAgICAgIG1f
ZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdGQ6OnN0cmluZygiUEVSTUlTU0lPTiBDTElFTlQ6IGFs
bG93U2NyaXB0RnJvbVNvdXJjZSgiKSArIG5vcm1hbGl6ZUxheW91dFRlc3RVUkwoc2NyaXB0VVJM
LnNwZWMoKSkgKyAiKTogIiArIChhbGxvd2VkID8gInRydWUiIDogImZhbHNlIikgKyAiXG4iKTsK
LSAgICByZXR1cm4gYWxsb3dlZDsKLX0KLQotYm9vbCBXZWJQZXJtaXNzaW9uczo6YWxsb3dTdG9y
YWdlKFdlYktpdDo6V2ViRnJhbWUqLCBib29sKQotewotICAgIHJldHVybiBtX3N0b3JhZ2VBbGxv
d2VkOwotfQotCi1ib29sIFdlYlBlcm1pc3Npb25zOjphbGxvd1BsdWdpbnMoV2ViS2l0OjpXZWJG
cmFtZSosIGJvb2wgZW5hYmxlZFBlclNldHRpbmdzKQotewotICAgIHJldHVybiBlbmFibGVkUGVy
U2V0dGluZ3MgJiYgbV9wbHVnaW5zQWxsb3dlZDsKLX0KLQotYm9vbCBXZWJQZXJtaXNzaW9uczo6
YWxsb3dEaXNwbGF5aW5nSW5zZWN1cmVDb250ZW50KFdlYktpdDo6V2ViRnJhbWUqLCBib29sIGVu
YWJsZWRQZXJTZXR0aW5ncywgY29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYsIGNvbnN0
IFdlYktpdDo6V2ViVVJMJikKLXsKLSAgICByZXR1cm4gZW5hYmxlZFBlclNldHRpbmdzIHx8IG1f
ZGlzcGxheWluZ0luc2VjdXJlQ29udGVudEFsbG93ZWQ7Ci19Ci0KLWJvb2wgV2ViUGVybWlzc2lv
bnM6OmFsbG93UnVubmluZ0luc2VjdXJlQ29udGVudChXZWJLaXQ6OldlYkZyYW1lKiwgYm9vbCBl
bmFibGVkUGVyU2V0dGluZ3MsIGNvbnN0IFdlYktpdDo6V2ViU2VjdXJpdHlPcmlnaW4mLCBjb25z
dCBXZWJLaXQ6OldlYlVSTCYpCi17Ci0gICAgcmV0dXJuIGVuYWJsZWRQZXJTZXR0aW5ncyB8fCBt
X3J1bm5pbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkOwotfQotCi12b2lkIFdlYlBlcm1pc3Npb25z
OjpzZXRJbWFnZXNBbGxvd2VkKGJvb2wgaW1hZ2VzQWxsb3dlZCkKLXsKLSAgICBtX2ltYWdlc0Fs
bG93ZWQgPSBpbWFnZXNBbGxvd2VkOwotfQotCi12b2lkIFdlYlBlcm1pc3Npb25zOjpzZXRTY3Jp
cHRzQWxsb3dlZChib29sIHNjcmlwdHNBbGxvd2VkKQotewotICAgIG1fc2NyaXB0c0FsbG93ZWQg
PSBzY3JpcHRzQWxsb3dlZDsKLX0KLQotdm9pZCBXZWJQZXJtaXNzaW9uczo6c2V0U3RvcmFnZUFs
bG93ZWQoYm9vbCBzdG9yYWdlQWxsb3dlZCkKLXsKLSAgICBtX3N0b3JhZ2VBbGxvd2VkID0gc3Rv
cmFnZUFsbG93ZWQ7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnNldFBsdWdpbnNBbGxvd2Vk
KGJvb2wgcGx1Z2luc0FsbG93ZWQpCi17Ci0gICAgbV9wbHVnaW5zQWxsb3dlZCA9IHBsdWdpbnNB
bGxvd2VkOwotfQotCi12b2lkIFdlYlBlcm1pc3Npb25zOjpzZXREaXNwbGF5aW5nSW5zZWN1cmVD
b250ZW50QWxsb3dlZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9kaXNwbGF5aW5nSW5zZWN1cmVD
b250ZW50QWxsb3dlZCA9IGFsbG93ZWQ7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnNldFJ1
bm5pbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX3J1bm5p
bmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkID0gYWxsb3dlZDsKLX0KLQotdm9pZCBXZWJQZXJtaXNz
aW9uczo6c2V0RGVsZWdhdGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICBtX2Rl
bGVnYXRlID0gZGVsZWdhdGU7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnNldER1bXBDYWxs
YmFja3MoYm9vbCBkdW1wQ2FsbGJhY2tzKQotewotICAgIG1fZHVtcENhbGxiYWNrcyA9IGR1bXBD
YWxsYmFja3M7Ci19Ci0KLXZvaWQgV2ViUGVybWlzc2lvbnM6OnJlc2V0KCkKLXsKLSAgICBtX2R1
bXBDYWxsYmFja3MgPSBmYWxzZTsKLSAgICBtX2ltYWdlc0FsbG93ZWQgPSB0cnVlOwotICAgIG1f
c2NyaXB0c0FsbG93ZWQgPSB0cnVlOwotICAgIG1fc3RvcmFnZUFsbG93ZWQgPSB0cnVlOwotICAg
IG1fcGx1Z2luc0FsbG93ZWQgPSB0cnVlOwotICAgIG1fZGlzcGxheWluZ0luc2VjdXJlQ29udGVu
dEFsbG93ZWQgPSBmYWxzZTsKLSAgICBtX3J1bm5pbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkID0g
ZmFsc2U7Ci19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlBlcm1pc3Npb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViUGVybWlzc2lvbnMuaAkocmV2aXNpb24g
MTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMv
V2ViUGVybWlzc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBX
ZWJQZXJtaXNzaW9uc19oCi0jZGVmaW5lIFdlYlBlcm1pc3Npb25zX2gKLQotI2luY2x1ZGUgIldl
YlBlcm1pc3Npb25DbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFz
cyBXZWJUZXN0RGVsZWdhdGU7Ci0KLWNsYXNzIFdlYlBlcm1pc3Npb25zIDogcHVibGljIFdlYktp
dDo6V2ViUGVybWlzc2lvbkNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgV2ViUGVybWlzc2lvbnMoKTsK
LSAgICB2aXJ0dWFsIH5XZWJQZXJtaXNzaW9ucygpOwotCi0gICAgLy8gT3ZlcnJpZGUgV2ViUGVy
bWlzc2lvbkNsaWVudCBtZXRob2RzLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd0ltYWdlKFdlYktp
dDo6V2ViRnJhbWUqLCBib29sIGVuYWJsZWRQZXJTZXR0aW5ncywgY29uc3QgV2ViS2l0OjpXZWJV
UkwmIGltYWdlVVJMKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3JpcHRGcm9tU291cmNlKFdl
YktpdDo6V2ViRnJhbWUqLCBib29sIGVuYWJsZWRQZXJTZXR0aW5ncywgY29uc3QgV2ViS2l0OjpX
ZWJVUkwmIHNjcmlwdFVSTCk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93U3RvcmFnZShXZWJLaXQ6
OldlYkZyYW1lKiwgYm9vbCBsb2NhbCk7Ci0gICAgdmlydHVhbCBib29sIGFsbG93UGx1Z2lucyhX
ZWJLaXQ6OldlYkZyYW1lKiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3MpOwotICAgIHZpcnR1YWwg
Ym9vbCBhbGxvd0Rpc3BsYXlpbmdJbnNlY3VyZUNvbnRlbnQoV2ViS2l0OjpXZWJGcmFtZSosIGJv
b2wgZW5hYmxlZFBlclNldHRpbmdzLCBjb25zdCBXZWJLaXQ6OldlYlNlY3VyaXR5T3JpZ2luJiwg
Y29uc3QgV2ViS2l0OjpXZWJVUkwmKTsKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dSdW5uaW5nSW5z
ZWN1cmVDb250ZW50KFdlYktpdDo6V2ViRnJhbWUqLCBib29sIGVuYWJsZWRQZXJTZXR0aW5ncywg
Y29uc3QgV2ViS2l0OjpXZWJTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFdlYktpdDo6V2ViVVJMJik7
Ci0KLSAgICAvLyBIb29rcyB0byBzZXQgdGhlIGRpZmZlcmVudCBwb2xpY2llcy4KLSAgICB2b2lk
IHNldEltYWdlc0FsbG93ZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRTY3JpcHRzQWxsb3dlZChib29s
KTsKLSAgICB2b2lkIHNldFN0b3JhZ2VBbGxvd2VkKGJvb2wpOwotICAgIHZvaWQgc2V0UGx1Z2lu
c0FsbG93ZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXREaXNwbGF5aW5nSW5zZWN1cmVDb250ZW50QWxs
b3dlZChib29sKTsKLSAgICB2b2lkIHNldFJ1bm5pbmdJbnNlY3VyZUNvbnRlbnRBbGxvd2VkKGJv
b2wpOwotCi0gICAgLy8gUmVzZXRzIHRoZSBwb2xpY3kgdG8gYWxsb3cgZXZlcnl0aGluZywgZXhj
ZXB0IGZvciBydW5uaW5nIGluc2VjdXJlIGNvbnRlbnQuCi0gICAgdm9pZCByZXNldCgpOwotCi0g
ICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJUZXN0RGVsZWdhdGUqKTsKLSAgICB2b2lkIHNldER1bXBD
YWxsYmFja3MoYm9vbCk7Ci0KLXByaXZhdGU6Ci0gICAgV2ViVGVzdERlbGVnYXRlKiBtX2RlbGVn
YXRlOwotICAgIGJvb2wgbV9kdW1wQ2FsbGJhY2tzOwotCi0gICAgYm9vbCBtX2ltYWdlc0FsbG93
ZWQ7Ci0gICAgYm9vbCBtX3NjcmlwdHNBbGxvd2VkOwotICAgIGJvb2wgbV9zdG9yYWdlQWxsb3dl
ZDsKLSAgICBib29sIG1fcGx1Z2luc0FsbG93ZWQ7Ci0gICAgYm9vbCBtX2Rpc3BsYXlpbmdJbnNl
Y3VyZUNvbnRlbnRBbGxvd2VkOwotICAgIGJvb2wgbV9ydW5uaW5nSW5zZWN1cmVDb250ZW50QWxs
b3dlZDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9XZWJQcmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViUHJlZmVyZW5jZXMu
Y3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9XZWJQcmVmZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjI2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIK
LQotI2luY2x1ZGUgIldlYlJ1bnRpbWVGZWF0dXJlcy5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIK
LQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYlRlc3RSdW5uZXIgewot
Ci12b2lkIFdlYlByZWZlcmVuY2VzOjpyZXNldCgpCi17Ci0jaWZkZWYgX19BUFBMRV9fCi0gICAg
Y3Vyc2l2ZUZvbnRGYW1pbHkgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJBcHBsZSBDaGFuY2VyeSIp
OwotICAgIGZhbnRhc3lGb250RmFtaWx5ID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiUGFweXJ1cyIp
OwotICAgIFdlYlN0cmluZyBzZXJpZiA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIlRpbWVzIik7Ci0j
ZWxzZQotICAgIC8vIFRoZXNlIHR3byBmb250cyBhcmUgcGlja2VkIGZyb20gdGhlIGludGVyc2Vj
dGlvbiBvZgotICAgIC8vIFdpbiBYUCBmb250IGxpc3QgYW5kIFZpc3RhIGZvbnQgbGlzdCA6Ci0g
ICAgLy8gICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9mb250cy93aW54cC5o
dG0KLSAgICAvLyAgIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9taWNoa2FwL2FyY2hpdmUvMjAwNi8w
NC8wNC81Njc4ODEuYXNweAotICAgIC8vIFNvbWUgb2YgdGhlbSBhcmUgaW5zdGFsbGVkIG9ubHkg
d2l0aCBDSksgYW5kIGNvbXBsZXggc2NyaXB0Ci0gICAgLy8gc3VwcG9ydCBlbmFibGVkIG9uIFdp
bmRvd3MgWFAgYW5kIGFyZSBvdXQgb2YgY29uc2lkZXJhdGlvbiBoZXJlLgotICAgIC8vIChhbHRo
b3VnaCB3ZSBlbmFibGVkIGJvdGggb24gb3VyIGJ1aWxkYm90cy4pCi0gICAgLy8gVGhleSAoZXNw
ZWNpYWxseSBJbXBhY3QgZm9yIGZhbnRhc3kpIGFyZSBub3QgdHlwaWNhbCBjdXJzaXZlCi0gICAg
Ly8gYW5kIGZhbnRhc3kgZm9udHMsIGJ1dCBpdCBzaG91bGQgbm90IG1hdHRlciBmb3IgbGF5b3V0
IHRlc3RzCi0gICAgLy8gYXMgbG9uZyBhcyB0aGV5J3JlIGF2YWlsYWJsZS4KLSAgICBjdXJzaXZl
Rm9udEZhbWlseSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIkNvbWljIFNhbnMgTVMiKTsKLSAgICBm
YW50YXN5Rm9udEZhbWlseSA9IFdlYlN0cmluZzo6ZnJvbVVURjgoIkltcGFjdCIpOwotICAgIC8v
IE5PVEU6IGNhc2UgbWF0dGVycyBoZXJlLCB0aGlzIG11c3QgYmUgJ3RpbWVzIG5ldyByb21hbics
IGVsc2UKLSAgICAvLyBzb21lIGxheW91dCB0ZXN0cyBmYWlsLgotICAgIFdlYlN0cmluZyBzZXJp
ZiA9IFdlYlN0cmluZzo6ZnJvbVVURjgoInRpbWVzIG5ldyByb21hbiIpOwotI2VuZGlmCi0gICAg
c2VyaWZGb250RmFtaWx5ID0gc2VyaWY7Ci0gICAgc3RhbmRhcmRGb250RmFtaWx5ID0gc2VyaWY7
Ci0gICAgZml4ZWRGb250RmFtaWx5ID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiQ291cmllciIpOwot
ICAgIHNhbnNTZXJpZkZvbnRGYW1pbHkgPSBXZWJTdHJpbmc6OmZyb21VVEY4KCJIZWx2ZXRpY2Ei
KTsKLQotICAgIGRlZmF1bHRGb250U2l6ZSA9IDE2OwotICAgIGRlZmF1bHRGaXhlZEZvbnRTaXpl
ID0gMTM7Ci0gICAgbWluaW11bUZvbnRTaXplID0gMDsKLSAgICBtaW5pbXVtTG9naWNhbEZvbnRT
aXplID0gOTsKLSAgICAvLyBEbyBub3QgZGlzYWJsZSBhY2NlbGVyYXRpb24gZm9yIDJkIGNhbnZh
cyBiYXNlZCBvbiBzaXplLgotICAgIC8vIFRoaXMgbWFrZXMgaGF2aW5nIHRlc3QgZXhwZWN0YXRp
b25zIGNvbnNpc3RlbnQuCi0gICAgbWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplID0gMDsK
LQotICAgIERPTVBhc3RlQWxsb3dlZCA9IHRydWU7Ci0gICAgWFNTQXVkaXRvckVuYWJsZWQgPSBm
YWxzZTsKLSAgICBhbGxvd0Rpc3BsYXlPZkluc2VjdXJlQ29udGVudCA9IHRydWU7Ci0gICAgYWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzID0gdHJ1ZTsKLSAgICBhbGxvd1J1bm5pbmdPZkluc2Vj
dXJlQ29udGVudCA9IHRydWU7Ci0gICAgYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQgPSB0cnVl
OwotICAgIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiSVNP
LTg4NTktMSIpOwotICAgIGRldmVsb3BlckV4dHJhc0VuYWJsZWQgPSB0cnVlOwotICAgIGV4cGVy
aW1lbnRhbFdlYkdMRW5hYmxlZCA9IGZhbHNlOwotICAgIGV4cGVyaW1lbnRhbENTU1JlZ2lvbnNF
bmFibGVkID0gdHJ1ZTsKLSAgICBleHBlcmltZW50YWxDU1NHcmlkTGF5b3V0RW5hYmxlZCA9IGZh
bHNlOwotICAgIGphdmFFbmFibGVkID0gZmFsc2U7Ci0gICAgamF2YVNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZCA9IHRydWU7Ci0gICAgamF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxs
eSA9IHRydWU7Ci0gICAgc3VwcG9ydHNNdWx0aXBsZVdpbmRvd3MgPSB0cnVlOwotICAgIGphdmFT
Y3JpcHRFbmFibGVkID0gdHJ1ZTsKLSAgICBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSB0cnVl
OwotICAgIGxvY2FsU3RvcmFnZUVuYWJsZWQgPSB0cnVlOwotICAgIG9mZmxpbmVXZWJBcHBsaWNh
dGlvbkNhY2hlRW5hYmxlZCA9IHRydWU7Ci0gICAgcGx1Z2luc0VuYWJsZWQgPSB0cnVlOwotICAg
IHNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQgPSBmYWxzZTsKLSAgICB0ZXh0QXJlYXNBcmVS
ZXNpemFibGUgPSB0cnVlOwotICAgIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSBXZWJVUkwoKTsK
LSAgICB1c2VzUGFnZUNhY2hlID0gZmFsc2U7Ci0gICAgcGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5z
ID0gZmFsc2U7Ci0gICAgd2ViU2VjdXJpdHlFbmFibGVkID0gdHJ1ZTsKLSAgICBjYXJldEJyb3dz
aW5nRW5hYmxlZCA9IGZhbHNlOwotCi0gICAgLy8gQWxsb3cgdGhvc2UgbGF5b3V0IHRlc3RzIHJ1
bm5pbmcgYXMgbG9jYWwgZmlsZXMsIGkuZS4gdW5kZXIKLSAgICAvLyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsLCB0byBhY2Nlc3MgaHR0cCBzZXJ2ZXIuCi0gICAgYWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMgPSB0cnVlOwotCi0jaWZkZWYgX19BUFBMRV9fCi0gICAgZWRpdGlu
Z0JlaGF2aW9yID0gV2ViU2V0dGluZ3M6OkVkaXRpbmdCZWhhdmlvck1hYzsKLSNlbHNlCi0gICAg
ZWRpdGluZ0JlaGF2aW9yID0gV2ViU2V0dGluZ3M6OkVkaXRpbmdCZWhhdmlvcldpbjsKLSNlbmRp
ZgotCi0gICAgdGFic1RvTGlua3MgPSBmYWxzZTsKLSAgICBoeXBlcmxpbmtBdWRpdGluZ0VuYWJs
ZWQgPSBmYWxzZTsKLSAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yVmlkZW9FbmFibGVkID0g
ZmFsc2U7Ci0gICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVk
ID0gZmFsc2U7Ci0gICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsRW5h
YmxlZCA9IGZhbHNlOwotICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gZmFsc2U7
Ci0gICAgYWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQgPSBmYWxzZTsKLSAgICBmb3JjZUNvbXBv
c2l0aW5nTW9kZSA9IGZhbHNlOwotICAgIHRocmVhZGVkSFRNTFBhcnNlciA9IHRydWU7Ci0gICAg
cGVyVGlsZVBhaW50aW5nRW5hYmxlZCA9IGZhbHNlOwotICAgIGRlZmVycmVkSW1hZ2VEZWNvZGlu
Z0VuYWJsZWQgPSBmYWxzZTsKLSAgICBtZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSA9
IGZhbHNlOwotICAgIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwotICAgIGNzc0N1c3Rv
bUZpbHRlckVuYWJsZWQgPSBmYWxzZTsKLSAgICBzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlv
biA9IGZhbHNlOwotICAgIGFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZmFsc2U7
Ci19Ci0KLXZvaWQgV2ViUHJlZmVyZW5jZXM6OmFwcGx5VG8oV2ViVmlldyogd2ViVmlldykKLXsK
LSAgICBXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJWaWV3LT5zZXR0aW5ncygpOwotICAgIHNl
dHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoc3RhbmRhcmRGb250RmFtaWx5KTsKLSAgICBz
ZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KGZpeGVkRm9udEZhbWlseSk7Ci0gICAgc2V0dGlu
Z3MtPnNldFNlcmlmRm9udEZhbWlseShzZXJpZkZvbnRGYW1pbHkpOwotICAgIHNldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZkZvbnRGYW1pbHkpOwotICAgIHNldHRpbmdz
LT5zZXRDdXJzaXZlRm9udEZhbWlseShjdXJzaXZlRm9udEZhbWlseSk7Ci0gICAgc2V0dGluZ3Mt
PnNldEZhbnRhc3lGb250RmFtaWx5KGZhbnRhc3lGb250RmFtaWx5KTsKLQotICAgIHNldHRpbmdz
LT5zZXREZWZhdWx0Rm9udFNpemUoZGVmYXVsdEZvbnRTaXplKTsKLSAgICBzZXR0aW5ncy0+c2V0
RGVmYXVsdEZpeGVkRm9udFNpemUoZGVmYXVsdEZpeGVkRm9udFNpemUpOwotICAgIHNldHRpbmdz
LT5zZXRNaW5pbXVtRm9udFNpemUobWluaW11bUZvbnRTaXplKTsKLSAgICBzZXR0aW5ncy0+c2V0
TWluaW11bUxvZ2ljYWxGb250U2l6ZShtaW5pbXVtTG9naWNhbEZvbnRTaXplKTsKLSAgICBzZXR0
aW5ncy0+c2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKG1pbmltdW1BY2NlbGVyYXRl
ZDJkQ2FudmFzU2l6ZSk7Ci0KLSAgICBzZXR0aW5ncy0+c2V0RE9NUGFzdGVBbGxvd2VkKERPTVBh
c3RlQWxsb3dlZCk7Ci0gICAgc2V0dGluZ3MtPnNldFhTU0F1ZGl0b3JFbmFibGVkKFhTU0F1ZGl0
b3JFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0QWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRl
bnQoYWxsb3dEaXNwbGF5T2ZJbnNlY3VyZUNvbnRlbnQpOwotICAgIHNldHRpbmdzLT5zZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKTsKLSAg
ICBzZXR0aW5ncy0+c2V0QWxsb3dSdW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoYWxsb3dSdW5uaW5n
T2ZJbnNlY3VyZUNvbnRlbnQpOwotICAgIHNldHRpbmdzLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZChhdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldERl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lKGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsKLSAgICBzZXR0
aW5ncy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChkZXZlbG9wZXJFeHRyYXNFbmFibGVkKTsK
LSAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVudGFsV2ViR0xFbmFibGVkKGV4cGVyaW1lbnRhbFdl
YkdMRW5hYmxlZCk7Ci0gICAgV2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVDU1NSZWdpb25zKGV4
cGVyaW1lbnRhbENTU1JlZ2lvbnNFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0RXhwZXJpbWVu
dGFsQ1NTR3JpZExheW91dEVuYWJsZWQoZXhwZXJpbWVudGFsQ1NTR3JpZExheW91dEVuYWJsZWQp
OwotICAgIHNldHRpbmdzLT5zZXRFeHBlcmltZW50YWxDU1NDdXN0b21GaWx0ZXJFbmFibGVkKGNz
c0N1c3RvbUZpbHRlckVuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRKYXZhRW5hYmxlZChqYXZh
RW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQo
amF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3Jp
cHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoamF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseSk7Ci0gICAgc2V0dGluZ3MtPnNldFN1cHBvcnRzTXVsdGlwbGVXaW5kb3dzKHN1
cHBvcnRzTXVsdGlwbGVXaW5kb3dzKTsKLSAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJs
ZWQoamF2YVNjcmlwdEVuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHkobG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KTsKLSAgICBzZXR0aW5ncy0+c2V0TG9j
YWxTdG9yYWdlRW5hYmxlZChsb2NhbFN0b3JhZ2VFbmFibGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHBsdWdpbnNFbmFi
bGVkKTsKLSAgICBzZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdChzaHJp
bmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KTsKLSAgICBzZXR0aW5ncy0+c2V0VGV4dEFyZWFzQXJl
UmVzaXphYmxlKHRleHRBcmVhc0FyZVJlc2l6YWJsZSk7Ci0gICAgc2V0dGluZ3MtPnNldFVzZXJT
dHlsZVNoZWV0TG9jYXRpb24odXNlclN0eWxlU2hlZXRMb2NhdGlvbik7Ci0gICAgc2V0dGluZ3Mt
PnNldFVzZXNQYWdlQ2FjaGUodXNlc1BhZ2VDYWNoZSk7Ci0gICAgc2V0dGluZ3MtPnNldFBhZ2VD
YWNoZVN1cHBvcnRzUGx1Z2lucyhwYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMpOwotICAgIHNldHRp
bmdzLT5zZXRXZWJTZWN1cml0eUVuYWJsZWQod2ViU2VjdXJpdHlFbmFibGVkKTsKLSAgICBzZXR0
aW5ncy0+c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMpOwotICAgIHNldHRpbmdzLT5zZXRFZGl0aW5nQmVoYXZpb3IoZWRp
dGluZ0JlaGF2aW9yKTsKLSAgICBzZXR0aW5ncy0+c2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVk
KGh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCk7Ci0gICAgLy8gTGF5b3V0VGVzdHMgd2VyZSB3cml0
dGVuIHdpdGggU2FmYXJpIE1hYyBpbiBtaW5kIHdoaWNoIGRvZXMgbm90IGFsbG93Ci0gICAgLy8g
dGFiYmluZyB0byBsaW5rcyBieSBkZWZhdWx0LgotICAgIHdlYlZpZXctPnNldFRhYnNUb0xpbmtz
KHRhYnNUb0xpbmtzKTsKLSAgICBzZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoY2Fy
ZXRCcm93c2luZ0VuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZChhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3Mt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JWaWRlb0VuYWJsZWQoYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvclZpZGVvRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZChhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
Rml4ZWRQb3NpdGlvbkVuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxFbmFibGVkKGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JP
dmVyZmxvd1Njcm9sbEVuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRGaXhlZFBvc2l0aW9uQ3Jl
YXRlc1N0YWNraW5nQ29udGV4dChhY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlv
bkVuYWJsZWQpOwotICAgIHNldHRpbmdzLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZShmb3JjZUNv
bXBvc2l0aW5nTW9kZSk7Ci0gICAgc2V0dGluZ3MtPnNldFRocmVhZGVkSFRNTFBhcnNlcih0aHJl
YWRlZEhUTUxQYXJzZXIpOwotICAgIHNldHRpbmdzLT5zZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5h
YmxlZChhY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldFBlclRp
bGVQYWludGluZ0VuYWJsZWQocGVyVGlsZVBhaW50aW5nRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3Mt
PnNldERlZmVycmVkSW1hZ2VEZWNvZGluZ0VuYWJsZWQoZGVmZXJyZWRJbWFnZURlY29kaW5nRW5h
YmxlZCk7Ci0gICAgc2V0dGluZ3MtPnNldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJl
KG1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKTsKLSAgICBzZXR0aW5ncy0+c2V0TW9j
a1Njcm9sbGJhcnNFbmFibGVkKG1vY2tTY3JvbGxiYXJzRW5hYmxlZCk7Ci0gICAgc2V0dGluZ3Mt
PnNldFNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKHNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKTsKLSAgICBzZXR0aW5ncy0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwotCi0gICAgLy8gRml4ZWQgdmFs
dWVzLgotICAgIHNldHRpbmdzLT5zZXRUb3VjaERyYWdEcm9wRW5hYmxlZChmYWxzZSk7Ci0gICAg
c2V0dGluZ3MtPnNldFRleHREaXJlY3Rpb25TdWJtZW51SW5jbHVzaW9uQmVoYXZpb3JOZXZlcklu
Y2x1ZGVkKCk7Ci0gICAgc2V0dGluZ3MtPnNldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxl
ZCh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0QWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoZmFs
c2UpOwotICAgIHNldHRpbmdzLT5zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyh0cnVlKTsKLSAg
ICBzZXR0aW5ncy0+c2V0RWRpdGFibGVMaW5rQmVoYXZpb3JOZXZlckxpdmUoKTsKLSAgICBzZXR0
aW5ncy0+c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoZmFsc2UpOwotICAgIHNldHRpbmdzLT5zZXRG
b250UmVuZGVyaW5nTW9kZU5vcm1hbCgpOwotICAgIHNldHRpbmdzLT5zZXRUZXh0RGlyZWN0aW9u
U3VibWVudUluY2x1c2lvbkJlaGF2aW9yTmV2ZXJJbmNsdWRlZCgpOwotICAgIHNldHRpbmdzLT5z
ZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSk7Ci0gICAgc2V0dGluZ3MtPnNldEltYWdlc0Vu
YWJsZWQodHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25F
bmFibGVkKHRydWUpOwotICAgIC8vIEVuYWJsZSBmdWxsc2NyZWVuIHNvIHRoZSBmdWxsc2NyZWVu
IGxheW91dCB0ZXN0cyBjYW4gcnVuLgotICAgIHNldHRpbmdzLT5zZXRGdWxsU2NyZWVuRW5hYmxl
ZCh0cnVlKTsKLSAgICBzZXR0aW5ncy0+c2V0VmFsaWRhdGlvbk1lc3NhZ2VUaW1lck1hZ25pZmlj
YXRpb24oLTEpOwotICAgIHNldHRpbmdzLT5zZXRWaXN1YWxXb3JkTW92ZW1lbnRFbmFibGVkKGZh
bHNlKTsKLSAgICBzZXR0aW5ncy0+c2V0UGFzc3dvcmRFY2hvRW5hYmxlZChmYWxzZSk7Ci0gICAg
c2V0dGluZ3MtPnNldEFwcGx5RGV2aWNlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IodHJ1ZSk7Ci0g
ICAgc2V0dGluZ3MtPnNldEFwcGx5UGFnZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKHRydWUpOwot
ICAgIHNldHRpbmdzLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQodHJ1ZSk7Ci0jaWZkZWYg
V0lOMzIKLSAgICBzZXR0aW5ncy0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCh0
cnVlKTsKLSNlbHNlCi0gICAgc2V0dGluZ3MtPnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVu
YWJsZWQoZmFsc2UpOwotI2VuZGlmCi19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRhc2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRhc2suY3BwCShyZXZp
c2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9XZWJUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYlRhc2suaCIKLQotI2luY2x1ZGUgIldlYktpdC5oIgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNl
IFdlYlRlc3RSdW5uZXIgewotCi1XZWJUYXNrOjpXZWJUYXNrKFdlYlRhc2tMaXN0KiBsaXN0KQot
ICAgIDogbV90YXNrTGlzdChsaXN0KQotewotICAgIG1fdGFza0xpc3QtPnJlZ2lzdGVyVGFzayh0
aGlzKTsKLX0KLQotV2ViVGFzazo6fldlYlRhc2soKQotewotICAgIGlmIChtX3Rhc2tMaXN0KQot
ICAgICAgICBtX3Rhc2tMaXN0LT51bnJlZ2lzdGVyVGFzayh0aGlzKTsKLX0KLQotV2ViVGFza0xp
c3Q6OldlYlRhc2tMaXN0KCkKLXsKLX0KLQotV2ViVGFza0xpc3Q6On5XZWJUYXNrTGlzdCgpCi17
Ci0gICAgcmV2b2tlQWxsKCk7Ci19Ci0KLXZvaWQgV2ViVGFza0xpc3Q6OnJlZ2lzdGVyVGFzayhX
ZWJUYXNrKiB0YXNrKQotewotICAgIG1fdGFza3MucHVzaF9iYWNrKHRhc2spOwotfQotCi12b2lk
IFdlYlRhc2tMaXN0Ojp1bnJlZ2lzdGVyVGFzayhXZWJUYXNrKiB0YXNrKQotewotICAgIHZlY3Rv
cjxXZWJUYXNrKj46Oml0ZXJhdG9yIGl0ZXIgPSBmaW5kKG1fdGFza3MuYmVnaW4oKSwgbV90YXNr
cy5lbmQoKSwgdGFzayk7Ci0gICAgaWYgKGl0ZXIgIT0gbV90YXNrcy5lbmQoKSkKLSAgICAgICAg
bV90YXNrcy5lcmFzZShpdGVyKTsKLX0KLQotdm9pZCBXZWJUYXNrTGlzdDo6cmV2b2tlQWxsKCkK
LXsKLSAgICB3aGlsZSAoIW1fdGFza3MuZW1wdHkoKSkKLSAgICAgICAgbV90YXNrc1swXS0+Y2Fu
Y2VsKCk7Ci19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlRlc3RJbnRlcmZhY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0SW50ZXJmYWNlcy5jcHAJ
KHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlRlc3RJbnRlcmZhY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJUZXN0SW50ZXJmYWNlcy5o
IgotCi0jaW5jbHVkZSAiTW9ja1dlYk1lZGlhU3RyZWFtQ2VudGVyLmgiCi0jaW5jbHVkZSAiTW9j
a1dlYlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlci5oIgotI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2Vz
LmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0Owot
Ci1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLVdlYlRlc3RJbnRlcmZhY2VzOjpXZWJUZXN0
SW50ZXJmYWNlcygpCi0gICAgOiBtX2ludGVyZmFjZXMobmV3IFRlc3RJbnRlcmZhY2VzKCkpCi17
Ci19Ci0KLVdlYlRlc3RJbnRlcmZhY2VzOjp+V2ViVGVzdEludGVyZmFjZXMoKQotewotfQotCi12
b2lkIFdlYlRlc3RJbnRlcmZhY2VzOjpzZXRXZWJWaWV3KFdlYlZpZXcqIHdlYlZpZXcsIFdlYlRl
c3RQcm94eUJhc2UqIHByb3h5KQotewotICAgIG1faW50ZXJmYWNlcy0+c2V0V2ViVmlldyh3ZWJW
aWV3LCBwcm94eSk7Ci19Ci0KLXZvaWQgV2ViVGVzdEludGVyZmFjZXM6OnNldERlbGVnYXRlKFdl
YlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgbV9pbnRlcmZhY2VzLT5zZXREZWxlZ2F0
ZShkZWxlZ2F0ZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdEludGVyZmFjZXM6OmJpbmRUbyhXZWJGcmFt
ZSogZnJhbWUpCi17Ci0gICAgbV9pbnRlcmZhY2VzLT5iaW5kVG8oZnJhbWUpOwotfQotCi12b2lk
IFdlYlRlc3RJbnRlcmZhY2VzOjpyZXNldEFsbCgpCi17Ci0gICAgbV9pbnRlcmZhY2VzLT5yZXNl
dEFsbCgpOwotfQotCi12b2lkIFdlYlRlc3RJbnRlcmZhY2VzOjpzZXRUZXN0SXNSdW5uaW5nKGJv
b2wgcnVubmluZykKLXsKLSAgICBtX2ludGVyZmFjZXMtPnNldFRlc3RJc1J1bm5pbmcocnVubmlu
Zyk7Ci19Ci0KLXZvaWQgV2ViVGVzdEludGVyZmFjZXM6OmNvbmZpZ3VyZUZvclRlc3RXaXRoVVJM
KGNvbnN0IFdlYlVSTCYgdGVzdFVSTCwgYm9vbCBnZW5lcmF0ZVBpeGVscykKLXsKLSAgICBtX2lu
dGVyZmFjZXMtPmNvbmZpZ3VyZUZvclRlc3RXaXRoVVJMKHRlc3RVUkwsIGdlbmVyYXRlUGl4ZWxz
KTsKLX0KLQotV2ViVGVzdFJ1bm5lciogV2ViVGVzdEludGVyZmFjZXM6OnRlc3RSdW5uZXIoKQot
ewotICAgIHJldHVybiBtX2ludGVyZmFjZXMtPnRlc3RSdW5uZXIoKTsKLX0KLQotV2ViVGhlbWVF
bmdpbmUqIFdlYlRlc3RJbnRlcmZhY2VzOjp0aGVtZUVuZ2luZSgpCi17Ci0gICAgcmV0dXJuIG1f
aW50ZXJmYWNlcy0+dGhlbWVFbmdpbmUoKTsKLX0KLQotVGVzdEludGVyZmFjZXMqIFdlYlRlc3RJ
bnRlcmZhY2VzOjp0ZXN0SW50ZXJmYWNlcygpCi17Ci0gICAgcmV0dXJuIG1faW50ZXJmYWNlcy5n
ZXQoKTsKLX0KLQotI2lmIEVOQUJMRV9XRUJSVEMKLVdlYk1lZGlhU3RyZWFtQ2VudGVyKiBXZWJU
ZXN0SW50ZXJmYWNlczo6Y3JlYXRlTWVkaWFTdHJlYW1DZW50ZXIoV2ViTWVkaWFTdHJlYW1DZW50
ZXJDbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gbmV3IE1vY2tXZWJNZWRpYVN0cmVhbUNl
bnRlcihjbGllbnQpOwotfQotCi1XZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqIFdlYlRlc3RJ
bnRlcmZhY2VzOjpjcmVhdGVXZWJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgcmV0dXJuIG5ldyBNb2NrV2Vi
UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKGNsaWVudCwgbV9pbnRlcmZhY2VzLmdldCgpKTsKLX0K
LSNlbmRpZiAvLyBFTkFCTEVfV0VCUlRDCi0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5
LmNwcAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvV2ViVGVzdFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDk0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVGVzdFByb3h5LmgiCi0K
LSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgiCi0jaW5jbHVkZSAi
RXZlbnRTZW5kZXIuaCIKLSNpbmNsdWRlICJNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKLSNpbmNsdWRlICJTcGVsbENo
ZWNrQ2xpZW50LmgiCi0jaW5jbHVkZSAiVGVzdENvbW1vbi5oIgotI2luY2x1ZGUgIlRlc3RJbnRl
cmZhY2VzLmgiCi0jaW5jbHVkZSAiVGVzdFBsdWdpbi5oIgotI2luY2x1ZGUgIlRlc3RSdW5uZXIu
aCIKLSNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uLmgiCi0jaW5jbHVkZSAi
V2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIldlYkNhY2hlZFVSTFJlcXVlc3Qu
aCIKLSNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgotI2luY2x1ZGUgIldlYkRhdGFTb3Vy
Y2UuaCIKLSNpbmNsdWRlICJXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCIKLSNpbmNs
dWRlICJXZWJEb2N1bWVudC5oIgotI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKLSNpbmNsdWRlICJX
ZWJGcmFtZS5oIgotI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgotI2luY2x1
ZGUgIldlYkhpc3RvcnlJdGVtLmgiCi0jaW5jbHVkZSAiV2ViTm9kZS5oIgotI2luY2x1ZGUgIldl
YlBsdWdpblBhcmFtcy5oIgotI2luY2x1ZGUgIldlYlByaW50UGFyYW1zLmgiCi0jaW5jbHVkZSAi
V2ViUmFuZ2UuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
V2ViVGVzdERlbGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViVGVzdEludGVyZmFjZXMuaCIKLSNpbmNs
dWRlICJXZWJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiV2ViVXNlckdlc3R1cmVJbmRpY2F0b3Iu
aCIKLSNpbmNsdWRlICJXZWJVc2VyTWVkaWFDbGllbnRNb2NrLmgiCi0jaW5jbHVkZSAiV2ViVmll
dy5oIgotLy8gRklYTUU6IEluY2x1ZGluZyBwbGF0Zm9ybV9jYW52YXMuaCBoZXJlIGlzIGEgbGF5
ZXJpbmcgdmlvbGF0aW9uLgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgot
I2luY2x1ZGUgPGNjdHlwZT4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ1N0cmluZy5oPgotI2luY2x1
ZGUgPHB1YmxpYy9XZWJVUkxFcnJvci5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkxSZXF1ZXN0
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlVSTFJlc3BvbnNlLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5l
ciB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQgcHJpbnROb2RlRGVzY3JpcHRpb24oV2ViVGVzdERl
bGVnYXRlKiBkZWxlZ2F0ZSwgY29uc3QgV2ViTm9kZSYgbm9kZSwgaW50IGV4Y2VwdGlvbikKLXsK
LSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIGRlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkVS
Uk9SIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG5vZGUuaXNOdWxsKCkpIHsK
LSAgICAgICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiKG51bGwpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZShub2RlLm5vZGVOYW1lKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgY29uc3QgV2ViTm9kZSYgcGFyZW50ID0gbm9kZS5wYXJlbnROb2Rl
KCk7Ci0gICAgaWYgKCFwYXJlbnQuaXNOdWxsKCkpIHsKLSAgICAgICAgZGVsZWdhdGUtPnByaW50
TWVzc2FnZSgiID4gIik7Ci0gICAgICAgIHByaW50Tm9kZURlc2NyaXB0aW9uKGRlbGVnYXRlLCBw
YXJlbnQsIDApOwotICAgIH0KLX0KLQotdm9pZCBwcmludFJhbmdlRGVzY3JpcHRpb24oV2ViVGVz
dERlbGVnYXRlKiBkZWxlZ2F0ZSwgY29uc3QgV2ViUmFuZ2UmIHJhbmdlKQotewotICAgIGlmIChy
YW5nZS5pc051bGwoKSkgewotICAgICAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIobnVsbCki
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjaGFyIGJ1ZmZlclsxMDBdOwotICAgIHNu
cHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJyYW5nZSBmcm9tICVkIG9mICIsIHJhbmdl
LnN0YXJ0T2Zmc2V0KCkpOwotICAgIGRlbGVnYXRlLT5wcmludE1lc3NhZ2UoYnVmZmVyKTsKLSAg
ICBpbnQgZXhjZXB0aW9uID0gMDsKLSAgICBXZWJOb2RlIHN0YXJ0Tm9kZSA9IHJhbmdlLnN0YXJ0
Q29udGFpbmVyKGV4Y2VwdGlvbik7Ci0gICAgcHJpbnROb2RlRGVzY3JpcHRpb24oZGVsZWdhdGUs
IHN0YXJ0Tm9kZSwgZXhjZXB0aW9uKTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZm
ZXIpLCAiIHRvICVkIG9mICIsIHJhbmdlLmVuZE9mZnNldCgpKTsKLSAgICBkZWxlZ2F0ZS0+cHJp
bnRNZXNzYWdlKGJ1ZmZlcik7Ci0gICAgV2ViTm9kZSBlbmROb2RlID0gcmFuZ2UuZW5kQ29udGFp
bmVyKGV4Y2VwdGlvbik7Ci0gICAgcHJpbnROb2RlRGVzY3JpcHRpb24oZGVsZWdhdGUsIGVuZE5v
ZGUsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0cmluZyBlZGl0aW5nQWN0aW9uRGVzY3JpcHRpb24oV2Vi
RWRpdGluZ0FjdGlvbiBhY3Rpb24pCi17Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNl
IFdlYktpdDo6V2ViRWRpdGluZ0FjdGlvblR5cGVkOgotICAgICAgICByZXR1cm4gIldlYlZpZXdJ
bnNlcnRBY3Rpb25UeXBlZCI7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkVkaXRpbmdBY3Rpb25QYXN0
ZWQ6Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCI7Ci0gICAgY2Fz
ZSBXZWJLaXQ6OldlYkVkaXRpbmdBY3Rpb25Ecm9wcGVkOgotICAgICAgICByZXR1cm4gIldlYlZp
ZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIjsKLSAgICB9Ci0gICAgcmV0dXJuICIoVU5LTk9XTiBBQ1RJ
T04pIjsKLX0KLQotc3RyaW5nIHRleHRBZmZpbml0eURlc2NyaXB0aW9uKFdlYlRleHRBZmZpbml0
eSBhZmZpbml0eSkKLXsKLSAgICBzd2l0Y2ggKGFmZmluaXR5KSB7Ci0gICAgY2FzZSBXZWJLaXQ6
OldlYlRleHRBZmZpbml0eVVwc3RyZWFtOgotICAgICAgICByZXR1cm4gIk5TU2VsZWN0aW9uQWZm
aW5pdHlVcHN0cmVhbSI7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYlRleHRBZmZpbml0eURvd25zdHJl
YW06Ci0gICAgICAgIHJldHVybiAiTlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0iOwotICAg
IH0KLSAgICByZXR1cm4gIihVTktOT1dOIEFGRklOSVRZKSI7Ci19Ci0KLXZvaWQgcHJpbnRGcmFt
ZURlc2NyaXB0aW9uKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIFdlYkZyYW1lKiBmcmFtZSkK
LXsKLSAgICBzdHJpbmcgbmFtZTggPSBmcmFtZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKTsKLSAgICBp
ZiAoZnJhbWUgPT0gZnJhbWUtPnZpZXcoKS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgaWYgKCFu
YW1lOC5sZW5ndGgoKSkgewotICAgICAgICAgICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZSgibWFp
biBmcmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRlbGVn
YXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJtYWluIGZyYW1lIFwiIikgKyBuYW1lOCArICJcIiIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbmFtZTgubGVuZ3RoKCkpIHsKLSAg
ICAgICAgZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiZnJhbWUgKGFub255bW91cykiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiZnJh
bWUgXCIiKSArIG5hbWU4ICsgIlwiIik7Ci19Ci0KLXZvaWQgcHJpbnRGcmFtZVVzZXJHZXN0dXJl
U3RhdHVzKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIFdlYkZyYW1lKiBmcmFtZSwgY29uc3Qg
Y2hhciogbXNnKQotewotICAgIGJvb2wgaXNVc2VyR2VzdHVyZSA9IFdlYlVzZXJHZXN0dXJlSW5k
aWNhdG9yOjppc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwotICAgIGRlbGVnYXRlLT5wcmludE1l
c3NhZ2Uoc3RyaW5nKCJGcmFtZSB3aXRoIHVzZXIgZ2VzdHVyZSBcIiIpICsgKGlzVXNlckdlc3R1
cmUgPyAidHJ1ZSIgOiAiZmFsc2UiKSArICJcIiIgKyBtc2cpOwotfQotCi0vLyBVc2VkIHRvIHdy
aXRlIGEgcGxhdGZvcm0gbmV1dHJhbCBmaWxlOi8vLyBVUkwgYnkgdGFraW5nIHRoZQotLy8gZmls
ZW5hbWUgYW5kIGl0cyBkaXJlY3RvcnkuIChlLmcuLCBjb252ZXJ0cwotLy8gImZpbGU6Ly8vdG1w
L2Zvby9iYXIudHh0IiB0byBqdXN0ICJiYXIudHh0IikuCi1zdHJpbmcgZGVzY3JpcHRpb25TdWl0
YWJsZUZvclRlc3RSZXN1bHQoY29uc3Qgc3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKHVybC5lbXB0
eSgpIHx8IHN0cmluZzo6bnBvcyA9PSB1cmwuZmluZCgiZmlsZTovLyIpKQotICAgICAgICByZXR1
cm4gdXJsOwotCi0gICAgc2l6ZV90IHBvcyA9IHVybC5yZmluZCgnLycpOwotICAgIGlmIChwb3Mg
PT0gc3RyaW5nOjpucG9zIHx8ICFwb3MpCi0gICAgICAgIHJldHVybiAiRVJST1I6IiArIHVybDsK
LSAgICBwb3MgPSB1cmwucmZpbmQoJy8nLCBwb3MgLSAxKTsKLSAgICBpZiAocG9zID09IHN0cmlu
Zzo6bnBvcykKLSAgICAgICAgcmV0dXJuICJFUlJPUjoiICsgdXJsOwotCi0gICAgcmV0dXJuIHVy
bC5zdWJzdHIocG9zICsgMSk7Ci19Ci0KLXZvaWQgcHJpbnRSZXNwb25zZURlc2NyaXB0aW9uKFdl
YlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUsIGNvbnN0IFdlYlVSTFJlc3BvbnNlJiByZXNwb25zZSkK
LXsKLSAgICBpZiAocmVzcG9uc2UuaXNOdWxsKCkpIHsKLSAgICAgICAgZGVsZWdhdGUtPnByaW50
TWVzc2FnZSgiKG51bGwpIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3RyaW5nIHVy
bCA9IHJlc3BvbnNlLnVybCgpLnNwZWMoKTsKLSAgICBjaGFyIGRhdGFbMTAwXTsKLSAgICBzbnBy
aW50ZihkYXRhLCBzaXplb2YoZGF0YSksICIlZCIsIHJlc3BvbnNlLiBodHRwU3RhdHVzQ29kZSgp
KTsKLSAgICBkZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiPE5TVVJMUmVzcG9uc2UgIikg
KyBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpICsgIiwgaHR0cCBzdGF0dXMg
Y29kZSAiICsgZGF0YSArICI+Iik7Ci19Ci0KLXN0cmluZyBVUkxEZXNjcmlwdGlvbihjb25zdCBH
VVJMJiB1cmwpCi17Ci0gICAgaWYgKHVybC5TY2hlbWVJcygiZmlsZSIpKQotICAgICAgICByZXR1
cm4gdXJsLkV4dHJhY3RGaWxlTmFtZSgpOwotICAgIHJldHVybiB1cmwucG9zc2libHlfaW52YWxp
ZF9zcGVjKCk7Ci19Ci0KLXN0cmluZyBQcmlvcml0eURlc2NyaXB0aW9uKGNvbnN0IFdlYlVSTFJl
cXVlc3Q6OlByaW9yaXR5JiBwcmlvcml0eSkKLXsKLSAgICBzd2l0Y2ggKHByaW9yaXR5KSB7Ci0g
ICAgY2FzZSBXZWJVUkxSZXF1ZXN0OjpQcmlvcml0eVZlcnlMb3c6Ci0gICAgICAgIHJldHVybiAi
VmVyeUxvdyI7Ci0gICAgY2FzZSBXZWJVUkxSZXF1ZXN0OjpQcmlvcml0eUxvdzoKLSAgICAgICAg
cmV0dXJuICJMb3ciOwotICAgIGNhc2UgV2ViVVJMUmVxdWVzdDo6UHJpb3JpdHlNZWRpdW06Ci0g
ICAgICAgIHJldHVybiAiTWVkaXVtIjsKLSAgICBjYXNlIFdlYlVSTFJlcXVlc3Q6OlByaW9yaXR5
SGlnaDoKLSAgICAgICAgcmV0dXJuICJIaWdoIjsKLSAgICBjYXNlIFdlYlVSTFJlcXVlc3Q6OlBy
aW9yaXR5VmVyeUhpZ2g6Ci0gICAgICAgIHJldHVybiAiVmVyeUhpZ2giOwotICAgIGNhc2UgV2Vi
VVJMUmVxdWVzdDo6UHJpb3JpdHlVbnJlc29sdmVkOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiAiVW5yZXNvbHZlZCI7Ci0gICAgfQotfQotCi12b2lkIGJsb2NrUmVxdWVzdChXZWJVUkxS
ZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJlcXVlc3Quc2V0VVJMKFdlYlVSTCgpKTsKLX0KLQot
Ym9vbCBpc0xvY2FsaG9zdChjb25zdCBzdHJpbmcmIGhvc3QpCi17Ci0gICAgcmV0dXJuIGhvc3Qg
PT0gIjEyNy4wLjAuMSIgfHwgaG9zdCA9PSAibG9jYWxob3N0IjsKLX0KLQotYm9vbCBob3N0SXNV
c2VkQnlTb21lVGVzdHNUb0dlbmVyYXRlRXJyb3IoY29uc3Qgc3RyaW5nJiBob3N0KQotewotICAg
IHJldHVybiBob3N0ID09ICIyNTUuMjU1LjI1NS4yNTUiOwotfQotCi0vLyBVc2VkIHRvIHdyaXRl
IGEgcGxhdGZvcm0gbmV1dHJhbCBmaWxlOi8vLyBVUkwgYnkgb25seSB0YWtpbmcgdGhlIGZpbGVu
YW1lCi0vLyAoZS5nLiwgY29udmVydHMgImZpbGU6Ly8vdG1wL2Zvby50eHQiIHRvIGp1c3QgImZv
by50eHQiKS4KLXN0cmluZyB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQoY29uc3Qgc3RyaW5nJiB1
cmwpCi17Ci0gICAgaWYgKHVybC5lbXB0eSgpIHx8IHN0cmluZzo6bnBvcyA9PSB1cmwuZmluZCgi
ZmlsZTovLyIpKQotICAgICAgICByZXR1cm4gdXJsOwotCi0gICAgc2l6ZV90IHBvcyA9IHVybC5y
ZmluZCgnLycpOwotICAgIGlmIChwb3MgPT0gc3RyaW5nOjpucG9zKSB7Ci0jaWZkZWYgV0lOMzIK
LSAgICAgICAgcG9zID0gdXJsLnJmaW5kKCdcXCcpOwotICAgICAgICBpZiAocG9zID09IHN0cmlu
Zzo6bnBvcykKLSAgICAgICAgICAgIHBvcyA9IDA7Ci0jZWxzZQotICAgICAgICBwb3MgPSAwOwot
I2VuZGlmCi0gICAgfQotICAgIHN0cmluZyBmaWxlbmFtZSA9IHVybC5zdWJzdHIocG9zICsgMSk7
Ci0gICAgaWYgKGZpbGVuYW1lLmVtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZmlsZToiOyAvLyBB
IFdlYktpdCB0ZXN0IGhhcyB0aGlzIGluIGl0cyBleHBlY3RlZCBvdXRwdXQuCi0gICAgcmV0dXJu
IGZpbGVuYW1lOwotfQotCi0vLyBXZWJOYXZpZ2F0aW9uVHlwZSBkZWJ1Z2dpbmcgc3RyaW5ncyB0
YWtlbiBmcm9tIFBvbGljeURlbGVnYXRlLm1tLgotY29uc3QgY2hhciogbGlua0NsaWNrZWRTdHJp
bmcgPSAibGluayBjbGlja2VkIjsKLWNvbnN0IGNoYXIqIGZvcm1TdWJtaXR0ZWRTdHJpbmcgPSAi
Zm9ybSBzdWJtaXR0ZWQiOwotY29uc3QgY2hhciogYmFja0ZvcndhcmRTdHJpbmcgPSAiYmFjay9m
b3J3YXJkIjsKLWNvbnN0IGNoYXIqIHJlbG9hZFN0cmluZyA9ICJyZWxvYWQiOwotY29uc3QgY2hh
ciogZm9ybVJlc3VibWl0dGVkU3RyaW5nID0gImZvcm0gcmVzdWJtaXR0ZWQiOwotY29uc3QgY2hh
ciogb3RoZXJTdHJpbmcgPSAib3RoZXIiOwotY29uc3QgY2hhciogaWxsZWdhbFN0cmluZyA9ICJp
bGxlZ2FsIHZhbHVlIjsKLQotLy8gR2V0IGEgZGVidWdnaW5nIHN0cmluZyBmcm9tIGEgV2ViTmF2
aWdhdGlvblR5cGUuCi1jb25zdCBjaGFyKiB3ZWJOYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKFdlYk5h
dmlnYXRpb25UeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXZWJL
aXQ6OldlYk5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQ6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xp
Y2tlZFN0cmluZzsKLSAgICBjYXNlIFdlYktpdDo6V2ViTmF2aWdhdGlvblR5cGVGb3JtU3VibWl0
dGVkOgotICAgICAgICByZXR1cm4gZm9ybVN1Ym1pdHRlZFN0cmluZzsKLSAgICBjYXNlIFdlYktp
dDo6V2ViTmF2aWdhdGlvblR5cGVCYWNrRm9yd2FyZDoKLSAgICAgICAgcmV0dXJuIGJhY2tGb3J3
YXJkU3RyaW5nOwotICAgIGNhc2UgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uVHlwZVJlbG9hZDoKLSAg
ICAgICAgcmV0dXJuIHJlbG9hZFN0cmluZzsKLSAgICBjYXNlIFdlYktpdDo6V2ViTmF2aWdhdGlv
blR5cGVGb3JtUmVzdWJtaXR0ZWQ6Ci0gICAgICAgIHJldHVybiBmb3JtUmVzdWJtaXR0ZWRTdHJp
bmc7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYk5hdmlnYXRpb25UeXBlT3RoZXI6Ci0gICAgICAgIHJl
dHVybiBvdGhlclN0cmluZzsKLSAgICB9Ci0gICAgcmV0dXJuIGlsbGVnYWxTdHJpbmc7Ci19Ci0K
LXN0cmluZyBkdW1wRG9jdW1lbnRUZXh0KFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICAvLyBXZSB1
c2UgdGhlIGRvY3VtZW50IGVsZW1lbnQncyB0ZXh0IGluc3RlYWQgb2YgdGhlIGJvZHkgdGV4dCBo
ZXJlIGJlY2F1c2UKLSAgICAvLyBub3QgYWxsIGRvY3VtZW50cyBoYXZlIGEgYm9keSwgc3VjaCBh
cyBYTUwgZG9jdW1lbnRzLgotICAgIFdlYkVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gZnJhbWUt
PmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50RWxlbWVudC5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZygpOwotICAgIHJldHVybiBkb2N1bWVudEVs
ZW1lbnQuaW5uZXJUZXh0KCkudXRmOCgpOwotfQotCi1zdHJpbmcgZHVtcEZyYW1lc0FzVGV4dChX
ZWJGcmFtZSogZnJhbWUsIGJvb2wgcmVjdXJzaXZlKQotewotICAgIHN0cmluZyByZXN1bHQ7Ci0K
LSAgICAvLyBBZGQgaGVhZGVyIGZvciBhbGwgYnV0IHRoZSBtYWluIGZyYW1lLiBTa2lwIGVtcHR5
IGZyYW1lcy4KLSAgICBpZiAoZnJhbWUtPnBhcmVudCgpICYmICFmcmFtZS0+ZG9jdW1lbnQoKS5k
b2N1bWVudEVsZW1lbnQoKS5pc051bGwoKSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCJcbi0t
LS0tLS0tXG5GcmFtZTogJyIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGZyYW1lLT51bmlxdWVO
YW1lKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoIidcbi0tLS0tLS0t
XG4iKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKGR1bXBEb2N1bWVudFRleHQoZnJhbWUp
KTsKLSAgICByZXN1bHQuYXBwZW5kKCJcbiIpOwotCi0gICAgaWYgKHJlY3Vyc2l2ZSkgewotICAg
ICAgICBmb3IgKFdlYkZyYW1lKiBjaGlsZCA9IGZyYW1lLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
dW1wRnJhbWVzQXNUZXh0KGNoaWxkLCByZWN1cnNpdmUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdHJpbmcgZHVtcEZyYW1lc0FzUHJpbnRlZFRleHQoV2ViRnJhbWUqIGZy
YW1lLCBib29sIHJlY3Vyc2l2ZSkKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotCi0gICAgLy8gQ2Fu
bm90IGRvIHByaW50ZWQgZm9ybWF0IGZvciBhbnl0aGluZyBvdGhlciB0aGFuIEhUTUwKLSAgICBp
ZiAoIWZyYW1lLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBz
dHJpbmcoKTsKLQotICAgIC8vIEFkZCBoZWFkZXIgZm9yIGFsbCBidXQgdGhlIG1haW4gZnJhbWUu
IFNraXAgZW1wdHkgZnJhbWVzLgotICAgIGlmIChmcmFtZS0+cGFyZW50KCkgJiYgIWZyYW1lLT5k
b2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoZnJh
bWUtPnVuaXF1ZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
J1xuLS0tLS0tLS1cbiIpOwotICAgIH0KLQotICAgIHJlc3VsdC5hcHBlbmQoZnJhbWUtPnJlbmRl
clRyZWVBc1RleHQoV2ViRnJhbWU6OlJlbmRlckFzVGV4dFByaW50aW5nKS51dGY4KCkpOwotICAg
IHJlc3VsdC5hcHBlbmQoIlxuIik7Ci0KLSAgICBpZiAocmVjdXJzaXZlKSB7Ci0gICAgICAgIGZv
ciAoV2ViRnJhbWUqIGNoaWxkID0gZnJhbWUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGR1bXBGcmFt
ZXNBc1ByaW50ZWRUZXh0KGNoaWxkLCByZWN1cnNpdmUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1zdHJpbmcgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV2ViRnJhbWUqIGZy
YW1lLCBib29sIHJlY3Vyc2l2ZSkKLXsKLSAgICBzdHJpbmcgcmVzdWx0OwotICAgIFdlYlNpemUg
b2Zmc2V0ID0gZnJhbWUtPnNjcm9sbE9mZnNldCgpOwotICAgIGlmIChvZmZzZXQud2lkdGggPiAw
IHx8IG9mZnNldC5oZWlnaHQgPiAwKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+cGFyZW50KCkpCi0g
ICAgICAgICAgICByZXN1bHQgPSBzdHJpbmcoImZyYW1lICciKSArIGZyYW1lLT51bmlxdWVOYW1l
KCkudXRmOCgpLmRhdGEoKSArICInICI7Ci0gICAgICAgIGNoYXIgZGF0YVsxMDBdOwotICAgICAg
ICBzbnByaW50ZihkYXRhLCBzaXplb2YoZGF0YSksICJzY3JvbGxlZCB0byAlZCwlZFxuIiwgb2Zm
c2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0KTsKLSAgICAgICAgcmVzdWx0ICs9IGRhdGE7Ci0gICAg
fQotCi0gICAgaWYgKCFyZWN1cnNpdmUpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgZm9y
IChXZWJGcmFtZSogY2hpbGQgPSBmcmFtZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmVzdWx0ICs9IGR1bXBGcmFtZVNjcm9sbFBv
c2l0aW9uKGNoaWxkLCByZWN1cnNpdmUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0cnVj
dCBUb0xvd2VyIHsKLSAgICBjaGFyMTYgb3BlcmF0b3IoKShjaGFyMTYgYykgeyByZXR1cm4gdG9s
b3dlcihjKTsgfQotfTsKLQotLy8gUmV0dXJucyBUcnVlIGlmIGl0ZW0xIDwgaXRlbTIuCi1ib29s
IEhpc3RvcnlJdGVtQ29tcGFyZUxlc3MoY29uc3QgV2ViSGlzdG9yeUl0ZW0mIGl0ZW0xLCBjb25z
dCBXZWJIaXN0b3J5SXRlbSYgaXRlbTIpCi17Ci0gICAgc3RyaW5nMTYgdGFyZ2V0MSA9IGl0ZW0x
LnRhcmdldCgpOwotICAgIHN0cmluZzE2IHRhcmdldDIgPSBpdGVtMi50YXJnZXQoKTsKLSAgICBz
dGQ6OnRyYW5zZm9ybSh0YXJnZXQxLmJlZ2luKCksIHRhcmdldDEuZW5kKCksIHRhcmdldDEuYmVn
aW4oKSwgVG9Mb3dlcigpKTsKLSAgICBzdGQ6OnRyYW5zZm9ybSh0YXJnZXQyLmJlZ2luKCksIHRh
cmdldDIuZW5kKCksIHRhcmdldDIuYmVnaW4oKSwgVG9Mb3dlcigpKTsKLSAgICByZXR1cm4gdGFy
Z2V0MSA8IHRhcmdldDI7Ci19Ci0KLXN0cmluZyBkdW1wSGlzdG9yeUl0ZW0oY29uc3QgV2ViSGlz
dG9yeUl0ZW0mIGl0ZW0sIGludCBpbmRlbnQsIGJvb2wgaXNDdXJyZW50KQotewotICAgIHN0cmlu
ZyByZXN1bHQ7Ci0KLSAgICBpZiAoaXNDdXJyZW50KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
ImN1cnItPiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGluZGVudCAtIDYsICcgJyk7IC8vIDYg
PT0gImN1cnItPiIubGVuZ3RoKCkKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0LmFwcGVuZChp
bmRlbnQsICcgJyk7Ci0KLSAgICBzdHJpbmcgdXJsID0gbm9ybWFsaXplTGF5b3V0VGVzdFVSTChp
dGVtLnVybFN0cmluZygpLnV0ZjgoKSk7Ci0gICAgcmVzdWx0LmFwcGVuZCh1cmwpOwotICAgIGlm
ICghaXRlbS50YXJnZXQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiIChp
biBmcmFtZSBcIiIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udGFyZ2V0KCkudXRmOCgp
KTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXCIpIik7Ci0gICAgfQotICAgIGlmIChpdGVtLmlz
VGFyZ2V0SXRlbSgpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCIgICoqbmF2IHRhcmdldCoqIik7
Ci0gICAgcmVzdWx0LmFwcGVuZCgiXG4iKTsKLQotICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJIaXN0
b3J5SXRlbT4mIGNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbigpOwotICAgIGlmICghY2hpbGRyZW4u
aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIE11c3Qgc29ydCB0byBlbGltaW5hdGUgYXJiaXRyYXJ5
IHJlc3VsdCBvcmRlcmluZyB3aGljaCBkZWZlYXRzCi0gICAgICAgIC8vIHJlcHJvZHVjaWJsZSB0
ZXN0aW5nLgotICAgICAgICAvLyBGSVhNRTogV2ViVmVjdG9yIHNob3VsZCBwcm9iYWJseSBqdXN0
IGJlIGEgc3RkOjp2ZWN0b3IhIQotICAgICAgICBzdGQ6OnZlY3RvcjxXZWJIaXN0b3J5SXRlbT4g
c29ydGVkQ2hpbGRyZW47Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4u
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBzb3J0ZWRDaGlsZHJlbi5wdXNoX2JhY2soY2hpbGRy
ZW5baV0pOwotICAgICAgICBzdGQ6OnNvcnQoc29ydGVkQ2hpbGRyZW4uYmVnaW4oKSwgc29ydGVk
Q2hpbGRyZW4uZW5kKCksIEhpc3RvcnlJdGVtQ29tcGFyZUxlc3MpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNvcnRlZENoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
cmVzdWx0ICs9IGR1bXBIaXN0b3J5SXRlbShzb3J0ZWRDaGlsZHJlbltpXSwgaW5kZW50ICsgNCwg
ZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgZHVtcEJhY2tG
b3J3YXJkTGlzdChjb25zdCBXZWJWZWN0b3I8V2ViSGlzdG9yeUl0ZW0+JiBoaXN0b3J5LCBzaXpl
X3QgY3VycmVudEVudHJ5SW5kZXgsIHN0cmluZyYgcmVzdWx0KQotewotICAgIHJlc3VsdC5hcHBl
bmQoIlxuPT09PT09PT09PT09PT0gQmFjayBGb3J3YXJkIExpc3QgPT09PT09PT09PT09PT1cbiIp
OwotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBoaXN0b3J5LnNpemUoKTsgKytp
bmRleCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChkdW1wSGlzdG9yeUl0ZW0oaGlzdG9yeVtpbmRl
eF0sIDgsIGluZGV4ID09IGN1cnJlbnRFbnRyeUluZGV4KSk7Ci0gICAgcmVzdWx0LmFwcGVuZCgi
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwotfQot
Ci1zdHJpbmcgZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMoVGVzdEludGVyZmFjZXMqIGludGVyZmFj
ZXMsIFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi17Ci0gICAgc3RyaW5nIHJlc3VsdDsKLSAg
ICBjb25zdCB2ZWN0b3I8V2ViVGVzdFByb3h5QmFzZSo+JiB3aW5kb3dMaXN0ID0gaW50ZXJmYWNl
cy0+d2luZG93TGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3aW5kb3dMaXN0
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBjdXJyZW50RW50cnlJbmRleCA9IDA7Ci0g
ICAgICAgIFdlYlZlY3RvcjxXZWJIaXN0b3J5SXRlbT4gaGlzdG9yeTsKLSAgICAgICAgZGVsZWdh
dGUtPmNhcHR1cmVIaXN0b3J5Rm9yV2luZG93KHdpbmRvd0xpc3QuYXQoaSksICZoaXN0b3J5LCAm
Y3VycmVudEVudHJ5SW5kZXgpOwotICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0KGhpc3Rvcnks
IGN1cnJlbnRFbnRyeUluZGV4LCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi19Ci0KLVdlYlRlc3RQcm94eUJhc2U6OldlYlRlc3RQcm94eUJhc2UoKQotICAgIDogbV90
ZXN0SW50ZXJmYWNlcygwKQotICAgICwgbV9kZWxlZ2F0ZSgwKQotICAgICwgbV9zcGVsbGNoZWNr
KG5ldyBTcGVsbENoZWNrQ2xpZW50KQotewotICAgIHJlc2V0KCk7Ci19Ci0KLVdlYlRlc3RQcm94
eUJhc2U6On5XZWJUZXN0UHJveHlCYXNlKCkKLXsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT53aW5k
b3dDbG9zZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6c2V0SW50ZXJmYWNl
cyhXZWJUZXN0SW50ZXJmYWNlcyogaW50ZXJmYWNlcykKLXsKLSAgICBtX3Rlc3RJbnRlcmZhY2Vz
ID0gaW50ZXJmYWNlcy0+dGVzdEludGVyZmFjZXMoKTsKLSAgICBtX3Rlc3RJbnRlcmZhY2VzLT53
aW5kb3dPcGVuZWQodGhpcyk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6c2V0RGVsZWdh
dGUoV2ViVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkKLXsKLSAgICBtX2RlbGVnYXRlID0gZGVsZWdh
dGU7Ci0gICAgbV9zcGVsbGNoZWNrLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci0jaWYgRU5BQkxF
X0lOUFVUX1NQRUVDSAotICAgIGlmIChtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKSkKLSAg
ICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xsZXItPnNldERlbGVnYXRlKGRlbGVnYXRlKTsKLSNl
bmRpZgotICAgIGlmIChtX3NwZWVjaFJlY29nbml6ZXIuZ2V0KCkpCi0gICAgICAgIG1fc3BlZWNo
UmVjb2duaXplci0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOwotfQotCi12b2lkIFdlYlRlc3RQcm94
eUJhc2U6OnJlc2V0KCkKLXsKLSAgICBtX3BhaW50UmVjdCA9IFdlYlJlY3QoKTsKLSAgICBtX2Nh
bnZhcy5yZXNldCgpOwotICAgIG1faXNQYWludGluZyA9IGZhbHNlOwotICAgIG1fcmVzb3VyY2VJ
ZGVudGlmaWVyTWFwLmNsZWFyKCk7Ci0gICAgbV9sb2dDb25zb2xlT3V0cHV0ID0gdHJ1ZTsKLSAg
ICBpZiAobV9nZW9sb2NhdGlvbkNsaWVudC5nZXQoKSkKLSAgICAgICAgbV9nZW9sb2NhdGlvbkNs
aWVudC0+cmVzZXRNb2NrKCk7Ci0jaWYgRU5BQkxFX0lOUFVUX1NQRUVDSAotICAgIGlmIChtX3Nw
ZWVjaElucHV0Q29udHJvbGxlci5nZXQoKSkKLSAgICAgICAgbV9zcGVlY2hJbnB1dENvbnRyb2xs
ZXItPmNsZWFyUmVzdWx0cygpOwotI2VuZGlmCi19Ci0KLVdlYlNwZWxsQ2hlY2tDbGllbnQqIFdl
YlRlc3RQcm94eUJhc2U6OnNwZWxsQ2hlY2tDbGllbnQoKSBjb25zdAotewotICAgIHJldHVybiBt
X3NwZWxsY2hlY2suZ2V0KCk7Ci19Ci0KLXN0cmluZyBXZWJUZXN0UHJveHlCYXNlOjpjYXB0dXJl
VHJlZShib29sIGRlYnVnUmVuZGVyVHJlZSkKLXsKLSAgICBXZWJTY3JpcHRDb250cm9sbGVyOjpm
bHVzaENvbnNvbGVNZXNzYWdlcygpOwotCi0gICAgYm9vbCBzaG91bGREdW1wQXNUZXh0ID0gbV90
ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQXNUZXh0KCk7Ci0gICAgYm9v
bCBzaG91bGREdW1wQXNQcmludGVkID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5p
c1ByaW50aW5nKCk7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gbV90ZXN0SW50ZXJmYWNlcy0+d2Vi
VmlldygpLT5tYWluRnJhbWUoKTsKLSAgICBzdHJpbmcgZGF0YVV0Zjg7Ci0gICAgaWYgKHNob3Vs
ZER1bXBBc1RleHQpIHsKLSAgICAgICAgYm9vbCByZWN1cnNpdmUgPSBtX3Rlc3RJbnRlcmZhY2Vz
LT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBDaGlsZEZyYW1lc0FzVGV4dCgpOwotICAgICAgICBk
YXRhVXRmOCA9IHNob3VsZER1bXBBc1ByaW50ZWQgPyBkdW1wRnJhbWVzQXNQcmludGVkVGV4dChm
cmFtZSwgcmVjdXJzaXZlKSA6IGR1bXBGcmFtZXNBc1RleHQoZnJhbWUsIHJlY3Vyc2l2ZSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYm9vbCByZWN1cnNpdmUgPSBtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCk7Ci0gICAg
ICAgIFdlYkZyYW1lOjpSZW5kZXJBc1RleHRDb250cm9scyByZW5kZXJUZXh0QmVoYXZpb3IgPSBX
ZWJGcmFtZTo6UmVuZGVyQXNUZXh0Tm9ybWFsOwotICAgICAgICBpZiAoc2hvdWxkRHVtcEFzUHJp
bnRlZCkKLSAgICAgICAgICAgIHJlbmRlclRleHRCZWhhdmlvciB8PSBXZWJGcmFtZTo6UmVuZGVy
QXNUZXh0UHJpbnRpbmc7Ci0gICAgICAgIGlmIChkZWJ1Z1JlbmRlclRyZWUpCi0gICAgICAgICAg
ICByZW5kZXJUZXh0QmVoYXZpb3IgfD0gV2ViRnJhbWU6OlJlbmRlckFzVGV4dERlYnVnOwotICAg
ICAgICBkYXRhVXRmOCA9IGZyYW1lLT5yZW5kZXJUcmVlQXNUZXh0KHJlbmRlclRleHRCZWhhdmlv
cikudXRmOCgpOwotICAgICAgICBkYXRhVXRmOCArPSBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihm
cmFtZSwgcmVjdXJzaXZlKTsKLSAgICB9Ci0KLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0KCkpCi0gICAgICAgIGRhdGFVdGY4
ICs9IGR1bXBBbGxCYWNrRm9yd2FyZExpc3RzKG1fdGVzdEludGVyZmFjZXMsIG1fZGVsZWdhdGUp
OwotCi0gICAgcmV0dXJuIGRhdGFVdGY4OwotfQotCi1Ta0NhbnZhcyogV2ViVGVzdFByb3h5QmFz
ZTo6Y2FwdHVyZVBpeGVscygpCi17Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygpLT5s
YXlvdXQoKTsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT50ZXN0UmVw
YWludCgpKSB7Ci0gICAgICAgIFdlYlNpemUgdmlld1NpemUgPSBtX3Rlc3RJbnRlcmZhY2VzLT53
ZWJWaWV3KCktPnNpemUoKTsKLSAgICAgICAgaW50IHdpZHRoID0gdmlld1NpemUud2lkdGg7Ci0g
ICAgICAgIGludCBoZWlnaHQgPSB2aWV3U2l6ZS5oZWlnaHQ7Ci0gICAgICAgIGlmIChtX3Rlc3RJ
bnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnN3ZWVwSG9yaXpvbnRhbGx5KCkpIHsKLSAgICAgICAg
ICAgIGZvciAoV2ViUmVjdCBjb2x1bW4oMCwgMCwgMSwgaGVpZ2h0KTsgY29sdW1uLnggPCB3aWR0
aDsgY29sdW1uLngrKykKLSAgICAgICAgICAgICAgICBwYWludFJlY3QoY29sdW1uKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoV2ViUmVjdCBsaW5lKDAsIDAsIHdpZHRoLCAx
KTsgbGluZS55IDwgaGVpZ2h0OyBsaW5lLnkrKykKLSAgICAgICAgICAgICAgICBwYWludFJlY3Qo
bGluZSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+aXNQcmludGluZygpKQotICAgICAgICBwYWludFBhZ2VzV2l0aEJvdW5kYXJpZXMo
KTsKLSAgICBlbHNlCi0gICAgICAgIHBhaW50SW52YWxpZGF0ZWRSZWdpb24oKTsKLQotICAgIC8v
IFNlZSBpZiB3ZSBuZWVkIHRvIGRyYXcgdGhlIHNlbGVjdGlvbiBib3VuZHMgcmVjdC4gU2VsZWN0
aW9uIGJvdW5kcwotICAgIC8vIHJlY3QgaXMgdGhlIHJlY3QgZW5jbG9zaW5nIHRoZSAocG9zc2li
bHkgdHJhbnNmb3JtZWQpIHNlbGVjdGlvbi4KLSAgICAvLyBUaGUgcmVjdCBzaG91bGQgYmUgZHJh
d24gYWZ0ZXIgZXZlcnl0aGluZyBpcyBsYWlkIG91dCBhbmQgcGFpbnRlZC4KLSAgICBpZiAobV90
ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU2VsZWN0aW9uUmVjdCgpKSB7
Ci0gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc2VsZWN0aW9uIHJlY3QgLSBkcmF3IGEgcmVkIDFw
eCBib3JkZXIgZW5jbG9zaW5nIHJlY3QKLSAgICAgICAgV2ViUmVjdCB3ciA9IG1fdGVzdEludGVy
ZmFjZXMtPndlYlZpZXcoKS0+bWFpbkZyYW1lKCktPnNlbGVjdGlvbkJvdW5kc1JlY3QoKTsKLSAg
ICAgICAgaWYgKCF3ci5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFJlbmRlciBhIHJlZCBy
ZWN0YW5nbGUgYm91bmRpbmcgc2VsZWN0aW9uIHJlY3QKLSAgICAgICAgICAgIFNrUGFpbnQgcGFp
bnQ7Ci0gICAgICAgICAgICBwYWludC5zZXRDb2xvcigweEZGRkYwMDAwKTsgLy8gRnVsbHkgb3Bh
cXVlIHJlZAotICAgICAgICAgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHls
ZSk7Ci0gICAgICAgICAgICBwYWludC5zZXRGbGFncyhTa1BhaW50OjprQW50aUFsaWFzX0ZsYWcp
OwotICAgICAgICAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMS4wZik7Ci0gICAgICAgICAgICBT
a0lSZWN0IHJlY3Q7IC8vIEJvdW5kaW5nIHJlY3QKLSAgICAgICAgICAgIHJlY3Quc2V0KHdyLngs
IHdyLnksIHdyLnggKyB3ci53aWR0aCwgd3IueSArIHdyLmhlaWdodCk7Ci0gICAgICAgICAgICBj
YW52YXMoKS0+ZHJhd0lSZWN0KHJlY3QsIHBhaW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBjYW52YXMoKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRMb2dDb25z
b2xlT3V0cHV0KGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX2xvZ0NvbnNvbGVPdXRwdXQgPSBlbmFi
bGVkOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnBhaW50UmVjdChjb25zdCBXZWJSZWN0
JiByZWN0KQotewotICAgIFdFQktJVF9BU1NFUlQoIW1faXNQYWludGluZyk7Ci0gICAgV0VCS0lU
X0FTU0VSVChjYW52YXMoKSk7Ci0gICAgbV9pc1BhaW50aW5nID0gdHJ1ZTsKLSAgICBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciA9IG1fdGVzdEludGVyZmFjZXMtPndlYlZpZXcoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLSAgICBpbnQgc2NhbGVkWCA9IHN0YXRpY19jYXN0PGludD4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHJlY3QueCkgKiBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgaW50IHNjYWxlZFkg
PSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRpY19jYXN0PGZsb2F0PihyZWN0LnkpICogZGV2aWNlU2Nh
bGVGYWN0b3IpOwotICAgIGludCBzY2FsZWRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oY2VpbChz
dGF0aWNfY2FzdDxmbG9hdD4ocmVjdC53aWR0aCkgKiBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAg
IGludCBzY2FsZWRIZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHJlY3QuaGVpZ2h0KSAqIGRldmljZVNjYWxlRmFjdG9yKSk7Ci0gICAgV2ViUmVjdCBkZXZp
Y2VSZWN0KHNjYWxlZFgsIHNjYWxlZFksIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAg
IG1fdGVzdEludGVyZmFjZXMtPndlYlZpZXcoKS0+cGFpbnQoY2FudmFzKCksIGRldmljZVJlY3Qp
OwotICAgIG1faXNQYWludGluZyA9IGZhbHNlOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6
OnBhaW50SW52YWxpZGF0ZWRSZWdpb24oKQotewotICAgIG1fdGVzdEludGVyZmFjZXMtPndlYlZp
ZXcoKS0+YW5pbWF0ZSgwLjApOwotICAgIG1fdGVzdEludGVyZmFjZXMtPndlYlZpZXcoKS0+bGF5
b3V0KCk7Ci0gICAgV2ViU2l6ZSB3aWRnZXRTaXplID0gbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmll
dygpLT5zaXplKCk7Ci0gICAgV2ViUmVjdCBjbGllbnRSZWN0KDAsIDAsIHdpZGdldFNpemUud2lk
dGgsIHdpZGdldFNpemUuaGVpZ2h0KTsKLQotICAgIC8vIFBhaW50IHRoZSBjYW52YXMgaWYgbmVj
ZXNzYXJ5LiBBbGxvdyBwYWludGluZyB0byBnZW5lcmF0ZSBleHRyYSByZWN0cwotICAgIC8vIGZv
ciB0aGUgZmlyc3QgdHdvIGNhbGxzLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNvbWUgV2Vi
Q29yZSByZW5kZXJpbmcKLSAgICAvLyBvYmplY3RzIHVwZGF0ZSB0aGVpciBsYXlvdXQgb25seSB3
aGVuIHBhaW50ZWQuCi0gICAgLy8gU3RvcmUgdGhlIHRvdGFsIGFyZWEgcGFpbnRlZCBpbiB0b3Rh
bF9wYWludC4gVGhlbiB0ZWxsIHRoZSBnZGsgd2luZG93Ci0gICAgLy8gdG8gdXBkYXRlIHRoYXQg
YXJlYSBhZnRlciB3ZSdyZSBkb25lIHBhaW50aW5nIGl0LgotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMzsgKytpKSB7Ci0gICAgICAgIC8vIHJlY3QgPSBpbnRlcnNlY3QobV9wYWludFJlY3QgLCBj
bGllbnRSZWN0KQotICAgICAgICBXZWJSZWN0IGRhbWFnZVJlY3QgPSBtX3BhaW50UmVjdDsKLSAg
ICAgICAgaW50IGxlZnQgPSBtYXgoZGFtYWdlUmVjdC54LCBjbGllbnRSZWN0LngpOwotICAgICAg
ICBpbnQgdG9wID0gbWF4KGRhbWFnZVJlY3QueSwgY2xpZW50UmVjdC55KTsKLSAgICAgICAgaW50
IHJpZ2h0ID0gbWluKGRhbWFnZVJlY3QueCArIGRhbWFnZVJlY3Qud2lkdGgsIGNsaWVudFJlY3Qu
eCArIGNsaWVudFJlY3Qud2lkdGgpOwotICAgICAgICBpbnQgYm90dG9tID0gbWluKGRhbWFnZVJl
Y3QueSArIGRhbWFnZVJlY3QuaGVpZ2h0LCBjbGllbnRSZWN0LnkgKyBjbGllbnRSZWN0LmhlaWdo
dCk7Ci0gICAgICAgIFdlYlJlY3QgcmVjdDsKLSAgICAgICAgaWYgKGxlZnQgPCByaWdodCAmJiB0
b3AgPCBib3R0b20pCi0gICAgICAgICAgICByZWN0ID0gV2ViUmVjdChsZWZ0LCB0b3AsIHJpZ2h0
IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKLQotICAgICAgICBtX3BhaW50UmVjdCA9IFdlYlJlY3Qo
KTsKLSAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHBhaW50UmVjdChyZWN0KTsKLSAgICB9Ci0gICAgV0VCS0lUX0FTU0VSVChtX3BhaW50
UmVjdC5pc0VtcHR5KCkpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnBhaW50UGFnZXNX
aXRoQm91bmRhcmllcygpCi17Ci0gICAgV0VCS0lUX0FTU0VSVCghbV9pc1BhaW50aW5nKTsKLSAg
ICBXRUJLSVRfQVNTRVJUKGNhbnZhcygpKTsKLSAgICBtX2lzUGFpbnRpbmcgPSB0cnVlOwotCi0g
ICAgV2ViU2l6ZSBwYWdlU2l6ZUluUGl4ZWxzID0gbV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygp
LT5zaXplKCk7Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gbV90ZXN0SW50ZXJmYWNlcy0+d2Vi
VmlldygpLT5tYWluRnJhbWUoKTsKLQotICAgIGludCBwYWdlQ291bnQgPSB3ZWJGcmFtZS0+cHJp
bnRCZWdpbihwYWdlU2l6ZUluUGl4ZWxzKTsKLSAgICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlQ291
bnQgKiAocGFnZVNpemVJblBpeGVscy5oZWlnaHQgKyAxKSAtIDE7Ci0KLSAgICBTa0NhbnZhcyog
dGVzdENhbnZhcyA9IHNraWE6OlRyeUNyZWF0ZUJpdG1hcENhbnZhcyhwYWdlU2l6ZUluUGl4ZWxz
LndpZHRoLCB0b3RhbEhlaWdodCwgdHJ1ZSk7Ci0gICAgaWYgKHRlc3RDYW52YXMpIHsKLSAgICAg
ICAgZGlzY2FyZEJhY2tpbmdTdG9yZSgpOwotICAgICAgICBtX2NhbnZhcy5yZXNldCh0ZXN0Q2Fu
dmFzKTsKLSAgICB9IGVsc2UgewotICAgICAgICB3ZWJGcmFtZS0+cHJpbnRFbmQoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHdlYkZyYW1lLT5wcmludFBhZ2VzV2l0aEJvdW5kYXJp
ZXMoY2FudmFzKCksIHBhZ2VTaXplSW5QaXhlbHMpOwotICAgIHdlYkZyYW1lLT5wcmludEVuZCgp
OwotCi0gICAgbV9pc1BhaW50aW5nID0gZmFsc2U7Ci19Ci0KLVNrQ2FudmFzKiBXZWJUZXN0UHJv
eHlCYXNlOjpjYW52YXMoKQotewotICAgIGlmIChtX2NhbnZhcy5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIG1fY2FudmFzLmdldCgpOwotICAgIFdlYlNpemUgd2lkZ2V0U2l6ZSA9IG1fdGVzdEludGVy
ZmFjZXMtPndlYlZpZXcoKS0+c2l6ZSgpOwotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0g
bV90ZXN0SW50ZXJmYWNlcy0+d2ViVmlldygpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotICAgIGlu
dCBzY2FsZWRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4o
d2lkZ2V0U2l6ZS53aWR0aCkgKiBkZXZpY2VTY2FsZUZhY3RvcikpOwotICAgIGludCBzY2FsZWRI
ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZGdldFNp
emUuaGVpZ2h0KSAqIGRldmljZVNjYWxlRmFjdG9yKSk7Ci0gICAgbV9jYW52YXMucmVzZXQoc2tp
YTo6Q3JlYXRlQml0bWFwQ2FudmFzKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIHRydWUpKTsK
LSAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7Ci19Ci0KLS8vIFBhaW50cyB0aGUgZW50aXJlIGNh
bnZhcyBhIHNlbWktdHJhbnNwYXJlbnQgYmxhY2sgKGdyYXlpc2gpLiBUaGlzIGlzIHVzZWQKLS8v
IGJ5IHRoZSBsYXlvdXQgdGVzdHMgaW4gZmFzdC9yZXBhaW50LiBUaGUgYWxwaGEgdmFsdWUgbWF0
Y2hlcyB1cHN0cmVhbS4KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlzcGxheVJlcGFpbnRNYXNr
KCkKLXsKLSAgICBjYW52YXMoKS0+ZHJhd0FSR0IoMTY3LCAwLCAwLCAwKTsKLX0KLQotdm9pZCBX
ZWJUZXN0UHJveHlCYXNlOjpkaXNwbGF5KCkKLXsKLSAgICBjb25zdCBXZWJLaXQ6OldlYlNpemUm
IHNpemUgPSBtX3Rlc3RJbnRlcmZhY2VzLT53ZWJWaWV3KCktPnNpemUoKTsKLSAgICBXZWJSZWN0
IHJlY3QoMCwgMCwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpOwotICAgIG1fcGFpbnRSZWN0ID0g
cmVjdDsKLSAgICBwYWludEludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgZGlzcGxheVJlcGFpbnRN
YXNrKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlzcGxheUludmFsaWRhdGVkUmVn
aW9uKCkKLXsKLSAgICBwYWludEludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgZGlzcGxheVJlcGFp
bnRNYXNrKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlzY2FyZEJhY2tpbmdTdG9y
ZSgpCi17Ci0gICAgbV9jYW52YXMucmVzZXQoKTsKLX0KLQotV2ViR2VvbG9jYXRpb25DbGllbnRN
b2NrKiBXZWJUZXN0UHJveHlCYXNlOjpnZW9sb2NhdGlvbkNsaWVudE1vY2soKQotewotICAgIGlm
ICghbV9nZW9sb2NhdGlvbkNsaWVudC5nZXQoKSkKLSAgICAgICAgbV9nZW9sb2NhdGlvbkNsaWVu
dC5yZXNldChXZWJHZW9sb2NhdGlvbkNsaWVudE1vY2s6OmNyZWF0ZSgpKTsKLSAgICByZXR1cm4g
bV9nZW9sb2NhdGlvbkNsaWVudC5nZXQoKTsKLX0KLQotV2ViRGV2aWNlT3JpZW50YXRpb25DbGll
bnRNb2NrKiBXZWJUZXN0UHJveHlCYXNlOjpkZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2soKQot
ewotICAgIGlmICghbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQoKSkKLSAgICAgICAgbV9k
ZXZpY2VPcmllbnRhdGlvbkNsaWVudC5yZXNldChXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1v
Y2s6OmNyZWF0ZSgpKTsKLSAgICByZXR1cm4gbV9kZXZpY2VPcmllbnRhdGlvbkNsaWVudC5nZXQo
KTsKLX0KLQotI2lmIEVOQUJMRV9JTlBVVF9TUEVFQ0gKLU1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIqIFdlYlRlc3RQcm94eUJhc2U6OnNwZWVjaElucHV0Q29udHJvbGxlck1vY2soKQotewot
ICAgIFdFQktJVF9BU1NFUlQobV9zcGVlY2hJbnB1dENvbnRyb2xsZXIuZ2V0KCkpOwotICAgIHJl
dHVybiBtX3NwZWVjaElucHV0Q29udHJvbGxlci5nZXQoKTsKLX0KLSNlbmRpZgotCi1Nb2NrV2Vi
U3BlZWNoUmVjb2duaXplciogV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoUmVjb2duaXplck1vY2so
KQotewotICAgIGlmICghbV9zcGVlY2hSZWNvZ25pemVyLmdldCgpKSB7Ci0gICAgICAgIG1fc3Bl
ZWNoUmVjb2duaXplci5yZXNldChuZXcgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKSk7Ci0gICAg
ICAgIG1fc3BlZWNoUmVjb2duaXplci0+c2V0RGVsZWdhdGUobV9kZWxlZ2F0ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBtX3NwZWVjaFJlY29nbml6ZXIuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFBy
b3h5QmFzZTo6ZGlkSW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViUmVjdCYgcmVjdCkKLXsKLSAgICAv
LyBtX3BhaW50UmVjdCA9IG1fcGFpbnRSZWN0IFUgcmVjdAotICAgIGlmIChyZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3BhaW50UmVjdC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9wYWludFJlY3QgPSByZWN0OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlu
dCBsZWZ0ID0gbWluKG1fcGFpbnRSZWN0LngsIHJlY3QueCk7Ci0gICAgaW50IHRvcCA9IG1pbiht
X3BhaW50UmVjdC55LCByZWN0LnkpOwotICAgIGludCByaWdodCA9IG1heChtX3BhaW50UmVjdC54
ICsgbV9wYWludFJlY3Qud2lkdGgsIHJlY3QueCArIHJlY3Qud2lkdGgpOwotICAgIGludCBib3R0
b20gPSBtYXgobV9wYWludFJlY3QueSArIG1fcGFpbnRSZWN0LmhlaWdodCwgcmVjdC55ICsgcmVj
dC5oZWlnaHQpOwotICAgIG1fcGFpbnRSZWN0ID0gV2ViUmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0g
bGVmdCwgYm90dG9tIC0gdG9wKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRTY3Jv
bGxSZWN0KGludCwgaW50LCBjb25zdCBXZWJSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBkaWRJbnZh
bGlkYXRlUmVjdChjbGlwUmVjdCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6c2NoZWR1
bGVDb21wb3NpdGUoKQotewotICAgIG1fcGFpbnRSZWN0ID0gV2ViUmVjdCgwLCAwLCBJTlRfTUFY
LCBJTlRfTUFYKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzY2hlZHVsZUFuaW1hdGlv
bigpCi17Ci0gICAgc2NoZWR1bGVDb21wb3NpdGUoKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlC
YXNlOjpzaG93KFdlYk5hdmlnYXRpb25Qb2xpY3kpCi17Ci0gICAgc2NoZWR1bGVDb21wb3NpdGUo
KTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpzZXRXaW5kb3dSZWN0KGNvbnN0IFdlYlJl
Y3QmIHJlY3QpCi17Ci0gICAgc2NoZWR1bGVDb21wb3NpdGUoKTsKLSAgICBkaXNjYXJkQmFja2lu
Z1N0b3JlKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkQXV0b1Jlc2l6ZShjb25z
dCBXZWJTaXplJikKLXsKLSAgICBzY2hlZHVsZUNvbXBvc2l0ZSgpOwotfQotCi12b2lkIFdlYlRl
c3RQcm94eUJhc2U6OnBvc3RBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uKGNvbnN0IFdlYktpdDo6
V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqLCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb24gbm90aWZpY2F0aW9uKQotewotICAgIGlmIChub3RpZmljYXRpb24gPT0gV2ViS2l0
OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uRm9jdXNlZFVJRWxlbWVudENoYW5nZWQpCi0g
ICAgICAgIG1fdGVzdEludGVyZmFjZXMtPmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPnNldEZv
Y3VzZWRFbGVtZW50KG9iaik7Ci0KLSAgICBjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1lOwot
ICAgIHN3aXRjaCAobm90aWZpY2F0aW9uKSB7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25BY3RpdmVEZXNjZW5kYW50Q2hhbmdlZDoKLSAgICAgICAgbm90aWZp
Y2F0aW9uTmFtZSA9ICJBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uQXV0b2NvcnJlY3Rp
b25PY2N1cmVkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkF1dG9jb3JyZWN0aW9uT2Nj
dXJlZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5
Tm90aWZpY2F0aW9uQ2hlY2tlZFN0YXRlQ2hhbmdlZDoKLSAgICAgICAgbm90aWZpY2F0aW9uTmFt
ZSA9ICJDaGVja2VkU3RhdGVDaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25DaGlsZHJlbkNoYW5nZWQ6Ci0gICAgICAg
IG5vdGlmaWNhdGlvbk5hbWUgPSAiQ2hpbGRyZW5DaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25Gb2N1c2VkVUlFbGVt
ZW50Q2hhbmdlZDoKLSAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJGb2N1c2VkVUlFbGVtZW50
Q2hhbmdlZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmls
aXR5Tm90aWZpY2F0aW9uTGF5b3V0Q29tcGxldGU6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUg
PSAiTGF5b3V0Q29tcGxldGUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkxvYWRDb21wbGV0ZToKLSAgICAgICAgbm90aWZpY2F0
aW9uTmFtZSA9ICJMb2FkQ29tcGxldGUiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktp
dDo6V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvblNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkOgot
ICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIlNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25TZWxlY3RlZFRleHRDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIlNlbGVj
dGVkVGV4dENoYW5nZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvblZhbHVlQ2hhbmdlZDoKLSAgICAgICAgbm90aWZpY2F0aW9u
TmFtZSA9ICJWYWx1ZUNoYW5nZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6
V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvblNjcm9sbGVkVG9BbmNob3I6Ci0gICAgICAgIG5v
dGlmaWNhdGlvbk5hbWUgPSAiU2Nyb2xsZWRUb0FuY2hvciI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uTGl2ZVJlZ2lvbkNoYW5n
ZWQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiTGl2ZVJlZ2lvbkNoYW5nZWQiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bk1lbnVMaXN0SXRlbVNlbGVjdGVkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIk1lbnVM
aXN0SXRlbVNlbGVjdGVkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJLaXQ6OldlYkFj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb25NZW51TGlzdFZhbHVlQ2hhbmdlZDoKLSAgICAgICAgbm90
aWZpY2F0aW9uTmFtZSA9ICJNZW51TGlzdFZhbHVlQ2hhbmdlZCI7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uUm93Q291bnRDaGFu
Z2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIlJvd0NvdW50Q2hhbmdlZCI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
Um93Q29sbGFwc2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIlJvd0NvbGxhcHNlZCI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uUm93RXhwYW5kZWQ6Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiUm93RXhwYW5k
ZWQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkludmFsaWRTdGF0dXNDaGFuZ2VkOgotICAgICAgICBub3RpZmljYXRpb25OYW1l
ID0gIkludmFsaWRTdGF0dXNDaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25UZXh0Q2hhbmdlZDoKLSAgICAgICAgbm90
aWZpY2F0aW9uTmFtZSA9ICJUZXh0Q2hhbmdlZCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
V2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uQXJpYUF0dHJpYnV0ZUNoYW5nZWQ6
Ci0gICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQXJpYUF0dHJpYnV0ZUNoYW5nZWQiOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIlVu
a25vd25Ob3RpZmljYXRpb24iOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBtX3Rlc3RJ
bnRlcmZhY2VzLT5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5ub3RpZmljYXRpb25SZWNlaXZl
ZChvYmosIG5vdGlmaWNhdGlvbk5hbWUpOwotCi0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKCktPnNob3VsZExvZ0FjY2Vzc2liaWxpdHlFdmVudHMoKSkg
ewotICAgICAgICBzdHJpbmcgbWVzc2FnZSgiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbiAtICIp
OwotICAgICAgICBtZXNzYWdlICs9IG5vdGlmaWNhdGlvbk5hbWU7Ci0KLSAgICAgICAgV2ViS2l0
OjpXZWJOb2RlIG5vZGUgPSBvYmoubm9kZSgpOwotICAgICAgICBpZiAoIW5vZGUuaXNOdWxsKCkg
JiYgbm9kZS5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIFdlYktpdDo6V2ViRWxlbWVu
dCBlbGVtZW50ID0gbm9kZS50bzxXZWJLaXQ6OldlYkVsZW1lbnQ+KCk7Ci0gICAgICAgICAgICBp
ZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoImlkIikpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdl
ICs9ICIgLSBpZDoiOwotICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gZWxlbWVudC5nZXRBdHRy
aWJ1dGUoImlkIikudXRmOCgpLmRhdGEoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShtZXNzYWdlICsgIlxuIik7Ci0gICAgfQot
fQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnN0YXJ0RHJhZ2dpbmcoV2ViRnJhbWUqLCBjb25z
dCBXZWJEcmFnRGF0YSYgZGF0YSwgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG1hc2ssIGNvbnN0IFdl
YkltYWdlJiwgY29uc3QgV2ViUG9pbnQmKQotewotICAgIC8vIFdoZW4gcnVubmluZyBhIHRlc3Qs
IHdlIG5lZWQgdG8gZmFrZSBhIGRyYWcgZHJvcCBvcGVyYXRpb24gb3RoZXJ3aXNlCi0gICAgLy8g
V2luZG93cyB3YWl0cyBmb3IgcmVhbCBtb3VzZSBldmVudHMgdG8ga25vdyB3aGVuIHRoZSBkcmFn
IGlzIG92ZXIuCi0gICAgbV90ZXN0SW50ZXJmYWNlcy0+ZXZlbnRTZW5kZXIoKS0+ZG9EcmFnRHJv
cChkYXRhLCBtYXNrKTsKLX0KLQotLy8gVGhlIG91dHB1dCBmcm9tIHRoZXNlIG1ldGhvZHMgaW4g
bGF5b3V0IHRlc3QgbW9kZSBzaG91bGQgbWF0Y2ggdGhhdAotLy8gZXhwZWN0ZWQgYnkgdGhlIGxh
eW91dCB0ZXN0cy4gU2VlIEVkaXRpbmdEZWxlZ2F0ZS5tIGluIER1bXBSZW5kZXJUcmVlLgotCi1i
b29sIFdlYlRlc3RQcm94eUJhc2U6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBXZWJSYW5nZSYg
cmFuZ2UpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3Nh
Z2UoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7Ci0g
ICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCByYW5nZSk7Ci0gICAgICAg
IG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBXZWJS
YW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmlu
dE1lc3NhZ2UoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIp
OwotICAgICAgICBwcmludFJhbmdlRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgcmFuZ2UpOwotICAg
ICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIlxuIik7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6OnNob3VsZEluc2VydE5vZGUoY29uc3Qg
V2ViTm9kZSYgbm9kZSwgY29uc3QgV2ViUmFuZ2UmIHJhbmdlLCBXZWJFZGl0aW5nQWN0aW9uIGFj
dGlvbikKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2Fn
ZSgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsKLSAgICAgICAgcHJpbnRO
b2RlRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgbm9kZSwgMCk7Ci0gICAgICAgIG1fZGVsZWdhdGUt
PnByaW50TWVzc2FnZSgiIHJlcGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBwcmludFJhbmdl
RGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgcmFuZ2UpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmlu
dE1lc3NhZ2Uoc3RyaW5nKCIgZ2l2ZW5BY3Rpb246IikgKyBlZGl0aW5nQWN0aW9uRGVzY3JpcHRp
b24oYWN0aW9uKSArICJcbiIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBX
ZWJUZXN0UHJveHlCYXNlOjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFdlYlN0cmluZyYgdGV4dCwg
Y29uc3QgV2ViUmFuZ2UmIHJhbmdlLCBXZWJFZGl0aW5nQWN0aW9uIGFjdGlvbikKLXsKLSAgICBp
ZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEluc2VydFRleHQ6IikgKyB0ZXh0LnV0ZjgoKS5kYXRhKCkgKyAi
IHJlcGxhY2luZ0RPTVJhbmdlOiIpOwotICAgICAgICBwcmludFJhbmdlRGVzY3JpcHRpb24obV9k
ZWxlZ2F0ZSwgcmFuZ2UpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5n
KCIgZ2l2ZW5BY3Rpb246IikgKyBlZGl0aW5nQWN0aW9uRGVzY3JpcHRpb24oYWN0aW9uKSArICJc
biIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJUZXN0UHJveHlCYXNl
OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKAotICAgIGNvbnN0IFdlYlJhbmdlJiBmcm9tUmFu
Z2UsIGNvbnN0IFdlYlJhbmdlJiB0b1JhbmdlLCBXZWJUZXh0QWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBtX2RlbGVnYXRl
LT5wcmludE1lc3NhZ2UoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6Iik7Ci0gICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcm9t
UmFuZ2UpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIiB0b0RPTVJhbmdlOiIp
OwotICAgICAgICBwcmludFJhbmdlRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgdG9SYW5nZSk7Ci0g
ICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIiBhZmZpbml0eToiKSArIHRl
eHRBZmZpbml0eURlc2NyaXB0aW9uKGFmZmluaXR5KSArICIgc3RpbGxTZWxlY3Rpbmc6IiArIChz
dGlsbFNlbGVjdGluZyA/ICJUUlVFIiA6ICJGQUxTRSIpICsgIlxuIik7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6OnNob3VsZERlbGV0ZVJhbmdl
KGNvbnN0IFdlYlJhbmdlJiByYW5nZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAgIG1fZGVs
ZWdhdGUtPnByaW50TWVzc2FnZSgiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFu
Z2U6Iik7Ci0gICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCByYW5nZSk7
Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6c2hvdWxkQXBwbHlTdHlsZShj
b25zdCBXZWJTdHJpbmcmIHN0eWxlLCBjb25zdCBXZWJSYW5nZSYgcmFuZ2UpCi17Ci0gICAgaWYg
KG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFj
a3MoKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJFRElUSU5H
IERFTEVHQVRFOiBzaG91bGRBcHBseVN0eWxlOiIpICsgc3R5bGUudXRmOCgpLmRhdGEoKSArICIg
dG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7Ci0gICAgICAgIHByaW50UmFuZ2VEZXNjcmlwdGlvbiht
X2RlbGVnYXRlLCByYW5nZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4i
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6
ZGlkQmVnaW5FZGl0aW5nKCkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2UoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6V2Vi
Vmlld0RpZEJlZ2luRWRpdGluZ05vdGlmaWNhdGlvblxuIik7Ci19Ci0KLXZvaWQgV2ViVGVzdFBy
b3h5QmFzZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKGJvb2wgaXNFbXB0eVNlbGVjdGlvbikKLXsKLSAg
ICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKQotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIkVESVRJTkcgREVM
RUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlv
bk5vdGlmaWNhdGlvblxuIik7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkQ2hhbmdl
Q29udGVudHMoKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVz
c2FnZSgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJWaWV3RGlkQ2hhbmdl
Tm90aWZpY2F0aW9uXG4iKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRFbmRFZGl0
aW5nKCkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uo
IkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRFbmRFZGl0aW5nOldlYlZpZXdEaWRFbmRFZGl0
aW5nTm90aWZpY2F0aW9uXG4iKTsKLX0KLQotYm9vbCBXZWJUZXN0UHJveHlCYXNlOjpjcmVhdGVW
aWV3KFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViV2lu
ZG93RmVhdHVyZXMmLCBjb25zdCBXZWJTdHJpbmcmLCBXZWJOYXZpZ2F0aW9uUG9saWN5KQotewot
ICAgIGlmICghbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5jYW5PcGVuV2luZG93cygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcENyZWF0ZVZpZXcoKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJp
bnRNZXNzYWdlKHN0cmluZygiY3JlYXRlVmlldygiKSArIFVSTERlc2NyaXB0aW9uKHJlcXVlc3Qu
dXJsKCkpICsgIilcbiIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1XZWJQbHVnaW4qIFdlYlRl
c3RQcm94eUJhc2U6OmNyZWF0ZVBsdWdpbihXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlBsdWdp
blBhcmFtcyYgcGFyYW1zKQotewotICAgIGlmIChwYXJhbXMubWltZVR5cGUgPT0gVGVzdFBsdWdp
bjo6bWltZVR5cGUoKSkKLSAgICAgICAgcmV0dXJuIFRlc3RQbHVnaW46OmNyZWF0ZShmcmFtZSwg
cGFyYW1zLCBtX2RlbGVnYXRlKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJUZXN0UHJv
eHlCYXNlOjpzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYlN0cmluZyYgdGV4dCkKLXsKLSAgICBpZiAo
IW1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNr
cygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmlu
ZygiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIpICsgdGV4dC51
dGY4KCkuZGF0YSgpICsgIlxuIik7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkU3Rv
cExvYWRpbmcoKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+
cHJpbnRNZXNzYWdlKCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvblxuIik7Ci19Ci0K
LXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6c2hvd0NvbnRleHRNZW51KFdlYkZyYW1lKiwgY29uc3Qg
V2ViQ29udGV4dE1lbnVEYXRhJiBjb250ZXh0TWVudURhdGEpCi17Ci0gICAgbV90ZXN0SW50ZXJm
YWNlcy0+ZXZlbnRTZW5kZXIoKS0+c2V0Q29udGV4dE1lbnVEYXRhKGNvbnRleHRNZW51RGF0YSk7
Ci19Ci0KLVdlYlVzZXJNZWRpYUNsaWVudCogV2ViVGVzdFByb3h5QmFzZTo6dXNlck1lZGlhQ2xp
ZW50KCkKLXsKLSNpZiBFTkFCTEVfV0VCUlRDCi0gICAgaWYgKCFtX3VzZXJNZWRpYUNsaWVudC5n
ZXQoKSkKLSAgICAgICAgbV91c2VyTWVkaWFDbGllbnQucmVzZXQobmV3IFdlYlVzZXJNZWRpYUNs
aWVudE1vY2sobV9kZWxlZ2F0ZSkpOwotICAgIHJldHVybiBtX3VzZXJNZWRpYUNsaWVudC5nZXQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYgLy8gRU5BQkxFX1dFQlJUQwotfQotCi0v
LyBTaW11bGF0ZSBhIHByaW50IGJ5IGdvaW5nIGludG8gcHJpbnQgbW9kZSBhbmQgdGhlbiBleGl0
IHN0cmFpZ2h0IGF3YXkuCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnByaW50UGFnZShXZWJGcmFt
ZSogZnJhbWUpCi17Ci0gICAgV2ViU2l6ZSBwYWdlU2l6ZUluUGl4ZWxzID0gbV90ZXN0SW50ZXJm
YWNlcy0+d2ViVmlldygpLT5zaXplKCk7Ci0gICAgV2ViUHJpbnRQYXJhbXMgcHJpbnRQYXJhbXMo
cGFnZVNpemVJblBpeGVscyk7Ci0gICAgZnJhbWUtPnByaW50QmVnaW4ocHJpbnRQYXJhbXMpOwot
ICAgIGZyYW1lLT5wcmludEVuZCgpOwotfQotCi1XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIqIFdl
YlRlc3RQcm94eUJhc2U6Om5vdGlmaWNhdGlvblByZXNlbnRlcigpCi17Ci0jaWYgRU5BQkxFX05P
VElGSUNBVElPTlMKLSAgICByZXR1cm4gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5u
b3RpZmljYXRpb25QcmVzZW50ZXIoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0K
LQotV2ViR2VvbG9jYXRpb25DbGllbnQqIFdlYlRlc3RQcm94eUJhc2U6Omdlb2xvY2F0aW9uQ2xp
ZW50KCkKLXsKLSAgICByZXR1cm4gZ2VvbG9jYXRpb25DbGllbnRNb2NrKCk7Ci19Ci0KLVdlYlNw
ZWVjaElucHV0Q29udHJvbGxlciogV2ViVGVzdFByb3h5QmFzZTo6c3BlZWNoSW5wdXRDb250cm9s
bGVyKFdlYlNwZWVjaElucHV0TGlzdGVuZXIqIGxpc3RlbmVyKQotewotI2lmIEVOQUJMRV9JTlBV
VF9TUEVFQ0gKLSAgICBpZiAoIW1fc3BlZWNoSW5wdXRDb250cm9sbGVyLmdldCgpKSB7Ci0gICAg
ICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLnJlc2V0KG5ldyBNb2NrV2ViU3BlZWNoSW5wdXRD
b250cm9sbGVyKGxpc3RlbmVyKSk7Ci0gICAgICAgIG1fc3BlZWNoSW5wdXRDb250cm9sbGVyLT5z
ZXREZWxlZ2F0ZShtX2RlbGVnYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fc3BlZWNoSW5wdXRD
b250cm9sbGVyLmdldCgpOwotI2Vsc2UKLSAgICBXRUJLSVRfQVNTRVJUKGxpc3RlbmVyKTsKLSAg
ICByZXR1cm4gMDsKLSNlbmRpZgotfQotCi1XZWJTcGVlY2hSZWNvZ25pemVyKiBXZWJUZXN0UHJv
eHlCYXNlOjpzcGVlY2hSZWNvZ25pemVyKCkKLXsKLSAgICByZXR1cm4gc3BlZWNoUmVjb2duaXpl
ck1vY2soKTsKLX0KLQotV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQqIFdlYlRlc3RQcm94eUJh
c2U6OmRldmljZU9yaWVudGF0aW9uQ2xpZW50KCkKLXsKLSAgICByZXR1cm4gZGV2aWNlT3JpZW50
YXRpb25DbGllbnRNb2NrKCk7Ci19Ci0KLWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6cmVxdWVzdFBv
aW50ZXJMb2NrKCkKLXsKLSAgICByZXR1cm4gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigp
LT5yZXF1ZXN0UG9pbnRlckxvY2soKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpyZXF1
ZXN0UG9pbnRlclVubG9jaygpCi17Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigp
LT5yZXF1ZXN0UG9pbnRlclVubG9jaygpOwotfQotCi1ib29sIFdlYlRlc3RQcm94eUJhc2U6Omlz
UG9pbnRlckxvY2tlZCgpCi17Ci0gICAgcmV0dXJuIG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5u
ZXIoKS0+aXNQb2ludGVyTG9ja2VkKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlk
Rm9jdXMoKQotewotICAgIG1fZGVsZWdhdGUtPnNldEZvY3VzKHRoaXMsIHRydWUpOwotfQotCi12
b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEJsdXIoKQotewotICAgIG1fZGVsZWdhdGUtPnNldEZv
Y3VzKHRoaXMsIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjp3aWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0KFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViVVJMJiwgY29uc3QgV2Vi
VVJMJiB0bywgZG91YmxlLCBkb3VibGUpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHBy
aW50RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZShzdHJpbmcoIiAtIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VS
TDogIikgKyB0by5zcGVjKCkuZGF0YSgpICsgIiBcbiIpOwotICAgIH0KLQotICAgIGlmIChtX3Rl
c3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50RnJhbWVVc2VyR2VzdHVyZVN0YXR1cyhtX2Rl
bGVnYXRlLCBmcmFtZSwgIiAtIGluIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RcbiIpOwotfQot
Ci12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZENhbmNlbENsaWVudFJlZGlyZWN0KFdlYkZyYW1l
KiBmcmFtZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURlc2NyaXB0
aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdl
KCIgLSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lXG4iKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWQoV2ViRnJhbWUqIGZy
YW1lKQotewotICAgIGlmICghbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT50b3BMb2Fk
aW5nRnJhbWUoKSkKLSAgICAgICAgbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zZXRU
b3BMb2FkaW5nRnJhbWUoZnJhbWUsIGZhbHNlKTsKLQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2Vz
LT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAg
ICBwcmludEZyYW1lRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2Rl
bGVnYXRlLT5wcmludE1lc3NhZ2UoIiAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVc
biIpOwotICAgIH0KLQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50
RnJhbWVVc2VyR2VzdHVyZVN0YXR1cyhtX2RlbGVnYXRlLCBmcmFtZSwgIiAtIGluIGRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVcbiIpOwotCi0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMt
PnRlc3RSdW5uZXIoKS0+c3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKSB7Ci0gICAgICAgIHBy
aW50RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZSgiIC0gc3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lIGNhbGxiYWNrXG4iKTsKLSAgICAgICAgZnJhbWUtPnN0b3BMb2FkaW5nKCk7
Ci0gICAgfQotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKG1fdGVz
dEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
KSB7Ci0gICAgICAgIHByaW50RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0g
ICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiIC0gZGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVcbiIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJU
ZXN0UHJveHlCYXNlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkKFdlYkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViVVJMRXJyb3ImKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludEZyYW1l
RGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmlu
dE1lc3NhZ2UoIiAtIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JcbiIpOwotICAgIH0K
LSAgICBsb2NhdGlvbkNoYW5nZURvbmUoZnJhbWUpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJh
c2U6OmRpZENvbW1pdFByb3Zpc2lvbmFsTG9hZChXZWJGcmFtZSogZnJhbWUsIGJvb2wpCi17Ci0g
ICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHByaW50RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVnYXRl
LCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiIC0gZGlkQ29tbWl0
TG9hZEZvckZyYW1lXG4iKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlk
UmVjZWl2ZVRpdGxlKFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiB0aXRsZSwgV2Vi
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgV2ViQ1N0cmluZyB0aXRsZTggPSB0aXRs
ZS51dGY4KCk7Ci0KLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgcHJpbnRGcmFtZURlc2NyaXB0
aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdl
KHN0cmluZygiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiKSArIHRpdGxlOC5kYXRhKCkgKyAiXG4iKTsK
LSAgICB9Ci0KLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wVGl0bGVDaGFuZ2VzKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJp
bmcoIlRJVExFIENIQU5HRUQ6ICciKSArIHRpdGxlOC5kYXRhKCkgKyAiJ1xuIik7Ci0KLSAgICBt
X3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNldFRpdGxlVGV4dERpcmVjdGlvbihkaXJl
Y3Rpb24pOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZENoYW5nZUljb24oV2ViRnJh
bWUqIGZyYW1lLCBXZWJJY29uVVJMOjpUeXBlKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2Vz
LT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBJY29uQ2hhbmdlcygpKSB7Ci0gICAgICAgIHByaW50
RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUt
PnByaW50TWVzc2FnZShzdHJpbmcoIiAtIGRpZENoYW5nZUljb25zXG4iKSk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEZpbmlzaERvY3VtZW50TG9hZChXZWJGcmFtZSog
ZnJhbWUpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHByaW50RnJhbWVEZXNjcmlwdGlv
bihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgi
IC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHVuc2lnbmVkIHBlbmRpbmdVbmxvYWRFdmVudHMgPSBmcmFtZS0+dW5sb2FkTGlzdGVuZXJD
b3VudCgpOwotICAgICAgICBpZiAocGVuZGluZ1VubG9hZEV2ZW50cykgewotICAgICAgICAgICAg
cHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgICAgIGNo
YXIgYnVmZmVyWzEwMF07Ci0gICAgICAgICAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZm
ZXIpLCAiIC0gaGFzICV1IG9udW5sb2FkIGhhbmRsZXIocylcbiIsIHBlbmRpbmdVbmxvYWRFdmVu
dHMpOwotICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKGJ1ZmZlcik7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkSGFuZGxlT25sb2Fk
RXZlbnRzKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgcHJp
bnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAgbV9kZWxlZ2F0
ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZVxuIik7Ci0g
ICAgfQotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEZhaWxMb2FkKFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgV2ViVVJMRXJyb3ImKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBw
cmludEZyYW1lRGVzY3JpcHRpb24obV9kZWxlZ2F0ZSwgZnJhbWUpOwotICAgICAgICBtX2RlbGVn
YXRlLT5wcmludE1lc3NhZ2UoIiAtIGRpZEZhaWxMb2FkV2l0aEVycm9yXG4iKTsKLSAgICB9Ci0g
ICAgbG9jYXRpb25DaGFuZ2VEb25lKGZyYW1lKTsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNl
OjpkaWRGaW5pc2hMb2FkKFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJm
YWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAg
ICAgICAgcHJpbnRGcmFtZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIGZyYW1lKTsKLSAgICAgICAg
bV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRGaW5pc2hMb2FkRm9yRnJhbWVcbiIpOwot
ICAgIH0KLSAgICBsb2NhdGlvbkNoYW5nZURvbmUoZnJhbWUpOwotfQotCi12b2lkIFdlYlRlc3RQ
cm94eUJhc2U6OmRpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZShXZWJGcmFtZSogZnJhbWUpCi17
Ci0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIHByaW50RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVn
YXRlLCBmcmFtZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiIC0gZGlkQ2hh
bmdlTG9jYXRpb25XaXRoaW5QYWdlRm9yRnJhbWVcbiIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJU
ZXN0UHJveHlCYXNlOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KFdlYkZyYW1lKikKLXsKLSAg
ICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCi0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiZGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudFxuIik7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkUnVu
SW5zZWN1cmVDb250ZW50KFdlYkZyYW1lKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBjb25z
dCBXZWJVUkwmKQotewotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOwotfQotCi12b2lkIFdlYlRlc3RQcm94
eUJhc2U6OmRpZERldGVjdFhTUyhXZWJGcmFtZSosIGNvbnN0IFdlYlVSTCYsIGJvb2wpCi17Ci0g
ICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKQotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoImRpZERldGVj
dFhTU1xuIik7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6YXNzaWduSWRlbnRpZmllclRv
UmVxdWVzdChXZWJGcmFtZSosIHVuc2lnbmVkIGlkZW50aWZpZXIsIGNvbnN0IFdlYktpdDo6V2Vi
VVJMUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkgfHwgbV90ZXN0SW50ZXJm
YWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VQcmlvcml0aWVzKCkpIHsKLSAg
ICAgICAgV0VCS0lUX0FTU0VSVChtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5kKGlkZW50aWZp
ZXIpID09IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpKTsKLSAgICAgICAgbV9yZXNvdXJj
ZUlkZW50aWZpZXJNYXBbaWRlbnRpZmllcl0gPSBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChyZXF1ZXN0LnVybCgpLnNwZWMoKSk7Ci0gICAgfQotfQotCi12b2lkIFdlYlRlc3RQcm94
eUJhc2U6OndpbGxSZXF1ZXN0UmVzb3VyY2UoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJLaXQ6
OldlYkNhY2hlZFVSTFJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFj
ZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUmVxdWVzdENhbGxiYWNrcygpKSB7
Ci0gICAgICAgIHByaW50RnJhbWVEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCBmcmFtZSk7Ci0gICAg
ICAgIFdlYkVsZW1lbnQgZWxlbWVudCA9IHJlcXVlc3QuaW5pdGlhdG9yRWxlbWVudCgpOwotICAg
ICAgICBpZiAoIWVsZW1lbnQuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fZGVsZWdhdGUtPnBy
aW50TWVzc2FnZSgiIC0gZWxlbWVudCB3aXRoICIpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQu
aGFzQXR0cmlidXRlKCJpZCIpKQotICAgICAgICAgICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVz
c2FnZShzdHJpbmcoImlkICciKSArIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpLnV0ZjgoKS5k
YXRhKCkgKyAiJyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZSgibm8gaWQiKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCIgLSAiKSArIHJlcXVlc3QuaW5pdGlhdG9y
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uo
c3RyaW5nKCIgcmVxdWVzdGVkICciKSArIFVSTERlc2NyaXB0aW9uKHJlcXVlc3QudXJsUmVxdWVz
dCgpLnVybCgpKS5jX3N0cigpICsgIidcbiIpOwotICAgIH0KLX0KLQotYm9vbCBXZWJUZXN0UHJv
eHlCYXNlOjpjYW5IYW5kbGVSZXF1ZXN0KFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMUmVxdWVzdCYg
cmVxdWVzdCkKLXsKLSAgICBHVVJMIHVybCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgLy8gSnVzdCBy
ZWplY3QgdGhlIHNjaGVtZSB1c2VkIGluCi0gICAgLy8gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9t
aXNjL3JlZGlyZWN0LXRvLWV4dGVybmFsLXVybC5odG1sCi0gICAgcmV0dXJuICF1cmwuU2NoZW1l
SXMoInNwYWNlYmFsbHMiKTsKLX0KLQotV2ViVVJMRXJyb3IgV2ViVGVzdFByb3h5QmFzZTo6Y2Fu
bm90SGFuZGxlUmVxdWVzdEVycm9yKFdlYkZyYW1lKiwgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVx
dWVzdCkKLXsKLSAgICBXZWJVUkxFcnJvciBlcnJvcjsKLSAgICAvLyBBIFdlYktpdCBsYXlvdXQg
dGVzdCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgdmFsdWVzLgotICAgIC8vIHVuYWJsZVRvSW1wbGVt
ZW50UG9saWN5V2l0aEVycm9yKCkgYmVsb3cgcHJpbnRzIHRoZW0uCi0gICAgZXJyb3IuZG9tYWlu
ID0gV2ViU3RyaW5nOjpmcm9tVVRGOCgiV2ViS2l0RXJyb3JEb21haW4iKTsKLSAgICBlcnJvci5y
ZWFzb24gPSAxMDE7Ci0gICAgZXJyb3IudW5yZWFjaGFibGVVUkwgPSByZXF1ZXN0LnVybCgpOwot
ICAgIHJldHVybiBlcnJvcjsKLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRDcmVhdGVE
YXRhU291cmNlKFdlYkZyYW1lKiwgV2ViRGF0YVNvdXJjZSogZHMpCi17Ci0gICAgaWYgKCFtX3Rl
c3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPmRlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoKSkK
LSAgICAgICAgZHMtPnNldERlZmVyTWFpblJlc291cmNlRGF0YUxvYWQoZmFsc2UpOwotfQotCi12
b2lkIFdlYlRlc3RQcm94eUJhc2U6OndpbGxTZW5kUmVxdWVzdChXZWJGcmFtZSosIHVuc2lnbmVk
IGlkZW50aWZpZXIsIFdlYktpdDo6V2ViVVJMUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViS2l0
OjpXZWJVUkxSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKLXsKLSAgICAvLyBOZWVkIHRvIHVz
ZSBHVVJMIGZvciBob3N0KCkgYW5kIFNjaGVtZUlzKCkKLSAgICBHVVJMIHVybCA9IHJlcXVlc3Qu
dXJsKCk7Ci0gICAgc3RyaW5nIHJlcXVlc3RVUkwgPSB1cmwucG9zc2libHlfaW52YWxpZF9zcGVj
KCk7Ci0KLSAgICBHVVJMIG1haW5Eb2N1bWVudFVSTCA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNv
b2tpZXMoKTsKLQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBpZiAobV9yZXNvdXJjZUlk
ZW50aWZpZXJNYXAuZmluZChpZGVudGlmaWVyKSA9PSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5l
bmQoKSkKLSAgICAgICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiPHVua25vd24+Iik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShtX3Jl
c291cmNlSWRlbnRpZmllck1hcFtpZGVudGlmaWVyXSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnBy
aW50TWVzc2FnZSgiIC0gd2lsbFNlbmRSZXF1ZXN0IDxOU1VSTFJlcXVlc3QgVVJMICIpOwotICAg
ICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RS
ZXN1bHQocmVxdWVzdFVSTCkuY19zdHIoKSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVz
c2FnZSgiLCBtYWluIGRvY3VtZW50IFVSTCAiKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKFVSTERlc2NyaXB0aW9uKG1haW5Eb2N1bWVudFVSTCkuY19zdHIoKSk7Ci0gICAgICAg
IG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiLCBodHRwIG1ldGhvZCAiKTsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHJlcXVlc3QuaHR0cE1ldGhvZCgpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIj4gcmVkaXJlY3RSZXNwb25zZSAi
KTsKLSAgICAgICAgcHJpbnRSZXNwb25zZURlc2NyaXB0aW9uKG1fZGVsZWdhdGUsIHJlZGlyZWN0
UmVzcG9uc2UpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIlxuIik7Ci0gICAg
fQotCi0gICAgaWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJl
c291cmNlUHJpb3JpdGllcygpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShk
ZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0VVJMKS5jX3N0cigpKTsKLSAg
ICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgaGFzIHByaW9yaXR5ICIpOwotICAgICAg
ICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoUHJpb3JpdHlEZXNjcmlwdGlvbihyZXF1ZXN0LnBy
aW9yaXR5KCkpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJcbiIpOwotICAg
IH0KLQotICAgIGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSAmJiBtX3Rlc3RJbnRlcmZh
Y2VzLT50ZXN0UnVubmVyKCktPnNob3VsZEJsb2NrUmVkaXJlY3RzKCkpIHsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxu
Iik7Ci0gICAgICAgIGJsb2NrUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVx
dWVzdFNob3VsZFJldHVybk51bGwoKSkgewotICAgICAgICBibG9ja1JlcXVlc3QocmVxdWVzdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVz
dFJ1bm5lcigpLT5odHRwSGVhZGVyc1RvQ2xlYXIoKSkgewotICAgICAgICBjb25zdCBzZXQ8c3Ry
aW5nPiAqY2xlYXJIZWFkZXJzID0gbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5odHRw
SGVhZGVyc1RvQ2xlYXIoKTsKLSAgICAgICAgZm9yIChzZXQ8c3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaGVhZGVyID0gY2xlYXJIZWFkZXJzLT5iZWdpbigpOyBoZWFkZXIgIT0gY2xlYXJIZWFkZXJz
LT5lbmQoKTsgKytoZWFkZXIpCi0gICAgICAgICAgICByZXF1ZXN0LmNsZWFySFRUUEhlYWRlckZp
ZWxkKFdlYlN0cmluZzo6ZnJvbVVURjgoKmhlYWRlcikpOwotICAgIH0KLQotICAgIHN0cmluZyBo
b3N0ID0gdXJsLmhvc3QoKTsKLSAgICBpZiAoIWhvc3QuZW1wdHkoKSAmJiAodXJsLlNjaGVtZUlz
KCJodHRwIikgfHwgdXJsLlNjaGVtZUlzKCJodHRwcyIpKSkgewotICAgICAgICBpZiAoIWlzTG9j
YWxob3N0KGhvc3QpICYmICFob3N0SXNVc2VkQnlTb21lVGVzdHNUb0dlbmVyYXRlRXJyb3IoaG9z
dCkKLSAgICAgICAgICAgICYmICgoIW1haW5Eb2N1bWVudFVSTC5TY2hlbWVJcygiaHR0cCIpICYm
ICFtYWluRG9jdW1lbnRVUkwuU2NoZW1lSXMoImh0dHBzIikpIHx8IGlzTG9jYWxob3N0KG1haW5E
b2N1bWVudFVSTC5ob3N0KCkpKQotICAgICAgICAgICAgJiYgIW1fZGVsZWdhdGUtPmFsbG93RXh0
ZXJuYWxQYWdlcygpKSB7Ci0gICAgICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3Ry
aW5nKCJCbG9ja2VkIGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIikgKyByZXF1ZXN0VVJMICsgIlxu
Iik7Ci0gICAgICAgICAgICBibG9ja1JlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBTZXQgdGhlIG5ldyBzdWJzdGl0dXRlZCBV
UkwuCi0gICAgcmVxdWVzdC5zZXRVUkwobV9kZWxlZ2F0ZS0+cmV3cml0ZUxheW91dFRlc3RzVVJM
KHJlcXVlc3QudXJsKCkuc3BlYygpKSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKFdlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3QgV2Vi
S2l0OjpXZWJVUkxSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgaWYgKG1fdGVzdEludGVyZmFj
ZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIGlmIChtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5kKGlkZW50aWZpZXIpID09IG1f
cmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpKQotICAgICAgICAgICAgbV9kZWxlZ2F0ZS0+cHJp
bnRNZXNzYWdlKCI8dW5rbm93bj4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwW2lkZW50aWZpZXJdKTsK
LSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgLSBkaWRSZWNlaXZlUmVzcG9uc2Ug
Iik7Ci0gICAgICAgIHByaW50UmVzcG9uc2VEZXNjcmlwdGlvbihtX2RlbGVnYXRlLCByZXNwb25z
ZSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICB9Ci0gICAg
aWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUmVz
cG9uc2VNSU1FVHlwZXMoKSkgewotICAgICAgICBHVVJMIHVybCA9IHJlc3BvbnNlLnVybCgpOwot
ICAgICAgICBXZWJTdHJpbmcgbWltZVR5cGUgPSByZXNwb25zZS5taW1lVHlwZSgpOwotICAgICAg
ICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UodXJsLkV4dHJhY3RGaWxlTmFtZSgpKTsKLSAgICAg
ICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgaGFzIE1JTUUgdHlwZSAiKTsKLSAgICAgICAg
Ly8gU2ltdWxhdGUgTlNVUkxSZXNwb25zZSdzIG1hcHBpbmcgb2YgZW1wdHkvdW5rbm93biBNSU1F
IHR5cGVzIHRvIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQotICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2UobWltZVR5cGUuaXNFbXB0eSgpID8gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bSIgOiBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRN
ZXNzYWdlKCJcbiIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRDaGFu
Z2VSZXNvdXJjZVByaW9yaXR5KFdlYkZyYW1lKiwgdW5zaWduZWQgaWRlbnRpZmllciwgY29uc3Qg
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpQcmlvcml0eSYgcHJpb3JpdHkpCi17Ci0gICAgaWYgKG1f
dGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlUHJpb3JpdGll
cygpKSB7Ci0gICAgICAgIGlmIChtX3Jlc291cmNlSWRlbnRpZmllck1hcC5maW5kKGlkZW50aWZp
ZXIpID09IG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVuZCgpKQotICAgICAgICAgICAgbV9kZWxl
Z2F0ZS0+cHJpbnRNZXNzYWdlKCI8dW5rbm93bj4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwW2lkZW50
aWZpZXJdKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCIgY2hhbmdlZCBwcmlv
cml0eSB0byAiKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKFByaW9yaXR5RGVz
Y3JpcHRpb24ocHJpb3JpdHkpKTsKLSAgICAgICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKCJc
biIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJUZXN0UHJveHlCYXNlOjpkaWRGaW5pc2hSZXNvdXJj
ZUxvYWQoV2ViRnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyKQotewotICAgIGlmIChtX3Rlc3RJ
bnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSkgewotICAgICAgICBpZiAobV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZmluZChpZGVudGlmaWVy
KSA9PSBtX3Jlc291cmNlSWRlbnRpZmllck1hcC5lbmQoKSkKLSAgICAgICAgICAgIG1fZGVsZWdh
dGUtPnByaW50TWVzc2FnZSgiPHVua25vd24+Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShtX3Jlc291cmNlSWRlbnRpZmllck1hcFtpZGVudGlm
aWVyXSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiIC0gZGlkRmluaXNoTG9h
ZGluZ1xuIik7Ci0gICAgfQotICAgIG1fcmVzb3VyY2VJZGVudGlmaWVyTWFwLmVyYXNlKGlkZW50
aWZpZXIpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OmRpZEZhaWxSZXNvdXJjZUxvYWQo
V2ViRnJhbWUqLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBjb25zdCBXZWJLaXQ6OldlYlVSTEVycm9y
JiBlcnJvcikKLXsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgaWYgKG1fcmVzb3VyY2VJ
ZGVudGlmaWVyTWFwLmZpbmQoaWRlbnRpZmllcikgPT0gbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAu
ZW5kKCkpCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UoIjx1bmtub3duPiIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3NhZ2UobV9y
ZXNvdXJjZUlkZW50aWZpZXJNYXBbaWRlbnRpZmllcl0pOwotICAgICAgICBtX2RlbGVnYXRlLT5w
cmludE1lc3NhZ2UoIiAtIGRpZEZhaWxMb2FkaW5nV2l0aEVycm9yOiAiKTsKLSAgICAgICAgbV9k
ZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKG1fZGVsZWdhdGUtPm1ha2VVUkxFcnJvckRlc2NyaXB0aW9u
KGVycm9yKSk7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICB9
Ci0gICAgbV9yZXNvdXJjZUlkZW50aWZpZXJNYXAuZXJhc2UoaWRlbnRpZmllcik7Ci19Ci0KLXZv
aWQgV2ViVGVzdFByb3h5QmFzZTo6dW5hYmxlVG9JbXBsZW1lbnRQb2xpY3lXaXRoRXJyb3IoV2Vi
S2l0OjpXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViVVJMRXJyb3ImIGVycm9yKQot
ewotICAgIGNoYXIgZXJyb3JCdWZmZXJbNDBdOwotICAgIHNucHJpbnRmKGVycm9yQnVmZmVyLCBz
aXplb2YoZXJyb3JCdWZmZXIpLCAiJWQiLCBlcnJvci5yZWFzb24pOwotICAgIG1fZGVsZWdhdGUt
PnByaW50TWVzc2FnZShzdHJpbmcoIlBvbGljeSBkZWxlZ2F0ZTogdW5hYmxlIHRvIGltcGxlbWVu
dCBwb2xpY3kgd2l0aCBlcnJvciBkb21haW4gJyIpICsgZXJyb3IuZG9tYWluLnV0ZjgoKS5kYXRh
KCkgKwotICAgICAgICAiJywgZXJyb3IgY29kZSAiICsgIGVycm9yQnVmZmVyICsKLSAgICAgICAg
IiwgaW4gZnJhbWUgJyIgKyBmcmFtZS0+dW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCkgKyAiJ1xu
Iik7Ci19Ci0KLXZvaWQgV2ViVGVzdFByb3h5QmFzZTo6ZGlkQWRkTWVzc2FnZVRvQ29uc29sZShj
b25zdCBXZWJDb25zb2xlTWVzc2FnZSYgbWVzc2FnZSwgY29uc3QgV2ViU3RyaW5nJiBzb3VyY2VO
YW1lLCB1bnNpZ25lZCBzb3VyY2VMaW5lKQotewotICAgIC8vIFRoaXMgbWF0Y2hlcyB3aW4gRHVt
cFJlbmRlclRyZWUncyBVSURlbGVnYXRlLmNwcC4KLSAgICBpZiAoIW1fbG9nQ29uc29sZU91dHB1
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmco
IkNPTlNPTEUgTUVTU0FHRTogIikpOwotICAgIGlmIChzb3VyY2VMaW5lKSB7Ci0gICAgICAgIGNo
YXIgYnVmZmVyWzQwXTsKLSAgICAgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
ImxpbmUgJWQ6ICIsIHNvdXJjZUxpbmUpOwotICAgICAgICBtX2RlbGVnYXRlLT5wcmludE1lc3Nh
Z2UoYnVmZmVyKTsKLSAgICB9Ci0gICAgaWYgKCFtZXNzYWdlLnRleHQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHN0cmluZyBuZXdNZXNzYWdlOwotICAgICAgICBuZXdNZXNzYWdlID0gbWVzc2FnZS50
ZXh0LnV0ZjgoKTsKLSAgICAgICAgc2l6ZV90IGZpbGVQcm90b2NvbCA9IG5ld01lc3NhZ2UuZmlu
ZCgiZmlsZTovLyIpOwotICAgICAgICBpZiAoZmlsZVByb3RvY29sICE9IHN0cmluZzo6bnBvcykg
ewotICAgICAgICAgICAgbmV3TWVzc2FnZSA9IG5ld01lc3NhZ2Uuc3Vic3RyKDAsIGZpbGVQcm90
b2NvbCkKLSAgICAgICAgICAgICAgICArIHVybFN1aXRhYmxlRm9yVGVzdFJlc3VsdChuZXdNZXNz
YWdlLnN1YnN0cihmaWxlUHJvdG9jb2wpKTsKLSAgICAgICAgfQotICAgICAgICBtX2RlbGVnYXRl
LT5wcmludE1lc3NhZ2UobmV3TWVzc2FnZSk7Ci0gICAgfQotICAgIG1fZGVsZWdhdGUtPnByaW50
TWVzc2FnZShzdHJpbmcoIlxuIikpOwotfQotCi12b2lkIFdlYlRlc3RQcm94eUJhc2U6OnJ1bk1v
ZGFsQWxlcnREaWFsb2coV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgbV9kZWxlZ2F0ZS0+cHJpbnRNZXNzYWdlKHN0cmluZygiQUxFUlQ6ICIpICsgbWVzc2FnZS51
dGY4KCkuZGF0YSgpICsgIlxuIik7Ci19Ci0KLWJvb2wgV2ViVGVzdFByb3h5QmFzZTo6cnVuTW9k
YWxDb25maXJtRGlhbG9nKFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIkNPTkZJUk06ICIpICsgbWVzc2Fn
ZS51dGY4KCkuZGF0YSgpICsgIlxuIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
VGVzdFByb3h5QmFzZTo6cnVuTW9kYWxQcm9tcHREaWFsb2coV2ViRnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFdlYlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXZWJT
dHJpbmcqKQotewotICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZShzdHJpbmcoIlBST01QVDog
IikgKyBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkgKyAiLCBkZWZhdWx0IHRleHQ6ICIgKyBkZWZhdWx0
VmFsdWUudXRmOCgpLmRhdGEoKSArICJcbiIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYlRlc3RQcm94eUJhc2U6OnJ1bk1vZGFsQmVmb3JlVW5sb2FkRGlhbG9nKFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2Fn
ZShzdHJpbmcoIkNPTkZJUk0gTkFWSUdBVElPTjogIikgKyBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkg
KyAiXG4iKTsKLSAgICByZXR1cm4gIW1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+c2hv
dWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKTsKLX0KLQotdm9pZCBXZWJU
ZXN0UHJveHlCYXNlOjpsb2NhdGlvbkNoYW5nZURvbmUoV2ViRnJhbWUqIGZyYW1lKQotewotICAg
IGlmIChmcmFtZSAhPSBtX3Rlc3RJbnRlcmZhY2VzLT50ZXN0UnVubmVyKCktPnRvcExvYWRpbmdG
cmFtZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5l
cigpLT5zZXRUb3BMb2FkaW5nRnJhbWUoZnJhbWUsIHRydWUpOwotfQotCi1XZWJOYXZpZ2F0aW9u
UG9saWN5IFdlYlRlc3RQcm94eUJhc2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb24oV2ViRnJh
bWUqLCBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0LCBXZWJOYXZpZ2F0aW9uVHlwZSB0eXBl
LCBjb25zdCBXZWJOb2RlJiBvcmlnaW5hdGluZ05vZGUsIFdlYk5hdmlnYXRpb25Qb2xpY3kgZGVm
YXVsdFBvbGljeSwgYm9vbCBpc1JlZGlyZWN0KQotewotICAgIFdlYk5hdmlnYXRpb25Qb2xpY3kg
cmVzdWx0OwotICAgIGlmICghbV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5wb2xpY3lE
ZWxlZ2F0ZUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRQb2xpY3k7Ci0KLSAgICBt
X2RlbGVnYXRlLT5wcmludE1lc3NhZ2Uoc3RyaW5nKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQg
dG8gbG9hZCAiKSArIFVSTERlc2NyaXB0aW9uKHJlcXVlc3QudXJsKCkpICsgIiB3aXRoIG5hdmln
YXRpb24gdHlwZSAnIiArIHdlYk5hdmlnYXRpb25UeXBlVG9TdHJpbmcodHlwZSkgKyAiJyIpOwot
ICAgIGlmICghb3JpZ2luYXRpbmdOb2RlLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUt
PnByaW50TWVzc2FnZSgiIG9yaWdpbmF0aW5nIGZyb20gIik7Ci0gICAgICAgIHByaW50Tm9kZURl
c2NyaXB0aW9uKG1fZGVsZWdhdGUsIG9yaWdpbmF0aW5nTm9kZSwgMCk7Ci0gICAgfQotICAgIG1f
ZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiXG4iKTsKLSAgICBpZiAobV90ZXN0SW50ZXJmYWNlcy0+
dGVzdFJ1bm5lcigpLT5wb2xpY3lEZWxlZ2F0ZUlzUGVybWlzc2l2ZSgpKQotICAgICAgICByZXN1
bHQgPSBXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lDdXJyZW50VGFiOwotICAgIGVsc2UKLSAg
ICAgICAgcmVzdWx0ID0gV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5SWdub3JlOwotCi0gICAg
aWYgKG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+cG9saWN5RGVsZWdhdGVTaG91bGRO
b3RpZnlEb25lKCkpCi0gICAgICAgIG1fdGVzdEludGVyZmFjZXMtPnRlc3RSdW5uZXIoKS0+cG9s
aWN5RGVsZWdhdGVEb25lKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBXZWJUZXN0
UHJveHlCYXNlOjp3aWxsQ2hlY2tBbmREaXNwYXRjaE1lc3NhZ2VFdmVudChXZWJGcmFtZSosIFdl
YkZyYW1lKiwgV2ViU2VjdXJpdHlPcmlnaW4sIFdlYkRPTU1lc3NhZ2VFdmVudCkKLXsKLSAgICBp
ZiAobV90ZXN0SW50ZXJmYWNlcy0+dGVzdFJ1bm5lcigpLT5zaG91bGRJbnRlcmNlcHRQb3N0TWVz
c2FnZSgpKSB7Ci0gICAgICAgIG1fZGVsZWdhdGUtPnByaW50TWVzc2FnZSgiaW50ZXJjZXB0ZWQg
cG9zdE1lc3NhZ2VcbiIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUNvbnRyb2xXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUNv
bnRyb2xXaW4uY3BwCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVDb250cm9sV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0OTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8vIFRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgc2ltcGxl
IGdlbmVyaWMgdmVyc2lvbiBvZiB0aGUgV2ViVGhlbWVFbmdpbmUsCi0vLyB3aGljaCBpcyB1c2Vk
IHRvIGRyYXcgYWxsIHRoZSBuYXRpdmUgY29udHJvbHMgb24gYSB3ZWIgcGFnZS4gV2UgdXNlIHRo
aXMKLS8vIGZpbGUgd2hlbiBydW5uaW5nIGluIGxheW91dCB0ZXN0IG1vZGUgaW4gb3JkZXIgdG8g
cmVtb3ZlIGFueQotLy8gcGxhdGZvcm0tc3BlY2lmaWMgcmVuZGVyaW5nIGRpZmZlcmVuY2VzIGR1
ZSB0byB0aGVtZXMsIGNvbG9ycywgZXRjLgotLy8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldlYlRlc3RUaGVtZUNvbnRyb2xXaW4uaCIKLQotI2luY2x1ZGUgIlRlc3RDb21tb24u
aCIKLSNpbmNsdWRlICJza2lhL2V4dC9za2lhX3V0aWxzX3dpbi5oIgotI2luY2x1ZGUgInRoaXJk
X3BhcnR5L3NraWEvaW5jbHVkZS9jb3JlL1NrQ2FudmFzLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFy
dHkvc2tpYS9pbmNsdWRlL2NvcmUvU2tQYWludC5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3Nr
aWEvaW5jbHVkZS9jb3JlL1NrUGF0aC5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5j
bHVkZS9jb3JlL1NrUmVjdC5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYlRlc3RS
dW5uZXIgewotCi1uYW1lc3BhY2UgewotCi1jb25zdCBTa0NvbG9yIGVkZ2VDb2xvciAgICAgPSBT
S19Db2xvckJMQUNLOwotY29uc3QgU2tDb2xvciByZWFkT25seUNvbG9yID0gU2tDb2xvclNldFJH
QigweGU5LCAweGMyLCAweGE2KTsKLWNvbnN0IFNrQ29sb3IgZmdDb2xvciAgICAgICA9IFNLX0Nv
bG9yQkxBQ0s7Ci1jb25zdCBTa0NvbG9yIGJnQ29sb3JzW10gICAgPSB7Ci0gICAgU0tfQ29sb3JC
TEFDSywgLy8gVW5rbm93bgotICAgIFNrQ29sb3JTZXRSR0IoMHhjOSwgMHhjOSwgMHhjOSksIC8v
IERpc2FibGVkCi0gICAgU2tDb2xvclNldFJHQigweGYzLCAweGUwLCAweGQwKSwgLy8gUmVhZG9u
bHkKLSAgICBTa0NvbG9yU2V0UkdCKDB4ODksIDB4YzQsIDB4ZmYpLCAvLyBOb3JtYWwKLSAgICBT
a0NvbG9yU2V0UkdCKDB4NDMsIDB4ZjksIDB4ZmYpLCAvLyBIb3QKLSAgICBTa0NvbG9yU2V0UkdC
KDB4MjAsIDB4ZjYsIDB4Y2MpLCAvLyBGb2N1c2VkCi0gICAgU2tDb2xvclNldFJHQigweDAwLCAw
eGYzLCAweGFjKSwgLy8gSG92ZXIKLSAgICBTa0NvbG9yU2V0UkdCKDB4YTksIDB4ZmYsIDB4MTIp
LCAvLyBQcmVzc2VkCi0gICAgU2tDb2xvclNldFJHQigweGNjLCAweGNjLCAweGNjKSAvLyBJbmRl
dGVybWluYXRlCi19OwotCi1Ta0lSZWN0IHZhbGlkYXRlKGNvbnN0IFNrSVJlY3QmIHJlY3QsIFdl
YlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUpCi17Ci0gICAgc3dpdGNoIChjdHlwZSkg
ewotICAgIGNhc2UgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5jaGVja2VkQm94VHlwZToKLSAg
ICBjYXNlIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkNoZWNrZWRCb3hUeXBlOgotICAgIGNhc2Ug
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5jaGVja2VkUmFkaW9UeXBlOgotICAgIGNhc2UgV2Vi
VGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tlZFJhZGlvVHlwZTogewotICAgICAgICBTa0lSZWN0
IHJldHZhbCA9IHJlY3Q7Ci0KLSAgICAgICAgLy8gVGhlIG1heGltdW0gd2lkdGggYW5kIGhlaWdo
dCBpcyAxMy4KLSAgICAgICAgLy8gQ2VudGVyIHRoZSBzcXVhcmUgaW4gdGhlIHBhc3NlZCByZWN0
YW5nbGUuCi0gICAgICAgIGNvbnN0IGludCBtYXhDb250cm9sU2l6ZSA9IDEzOwotICAgICAgICBp
bnQgY29udHJvbFNpemUgPSBzdGQ6Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwot
ICAgICAgICBjb250cm9sU2l6ZSA9IHN0ZDo6bWluKGNvbnRyb2xTaXplLCBtYXhDb250cm9sU2l6
ZSk7Ci0KLSAgICAgICAgcmV0dmFsLmZMZWZ0ICAgPSByZWN0LmZMZWZ0ICsgKHJlY3Qud2lkdGgo
KSAvIDIpIC0gKGNvbnRyb2xTaXplIC8gMik7Ci0gICAgICAgIHJldHZhbC5mUmlnaHQgID0gcmV0
dmFsLmZMZWZ0ICsgY29udHJvbFNpemUgLSAxOwotICAgICAgICByZXR2YWwuZlRvcCAgICA9IHJl
Y3QuZlRvcCArIChyZWN0LmhlaWdodCgpIC8gMikgLSAoY29udHJvbFNpemUgLyAyKTsKLSAgICAg
ICAgcmV0dmFsLmZCb3R0b20gPSByZXR2YWwuZlRvcCArIGNvbnRyb2xTaXplIC0gMTsKLQotICAg
ICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biByZWN0OwotICAgIH0KLX0KLQotfQotCi1XZWJUZXN0VGhlbWVDb250cm9sV2luOjpXZWJUZXN0
VGhlbWVDb250cm9sV2luKFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0IFNrSVJlY3QmIGlyZWN0LCBU
eXBlIGN0eXBlLCBTdGF0ZSBjc3RhdGUpCi0gICAgOiBtX2NhbnZhcyhjYW52YXMpCi0gICAgLCBt
X2lyZWN0KHZhbGlkYXRlKGlyZWN0LCBjdHlwZSkpCi0gICAgLCBtX3R5cGUoY3R5cGUpCi0gICAg
LCBtX3N0YXRlKGNzdGF0ZSkKLSAgICAsIG1fbGVmdChtX2lyZWN0LmZMZWZ0KQotICAgICwgbV9y
aWdodChtX2lyZWN0LmZSaWdodCkKLSAgICAsIG1fdG9wKG1faXJlY3QuZlRvcCkKLSAgICAsIG1f
Ym90dG9tKG1faXJlY3QuZkJvdHRvbSkKLSAgICAsIG1faGVpZ2h0KG1faXJlY3QuaGVpZ2h0KCkp
Ci0gICAgLCBtX3dpZHRoKG1faXJlY3Qud2lkdGgoKSkKLSAgICAsIG1fZWRnZUNvbG9yKGVkZ2VD
b2xvcikKLSAgICAsIG1fYmdDb2xvcihiZ0NvbG9yc1tjc3RhdGVdKQotICAgICwgbV9mZ0NvbG9y
KGZnQ29sb3IpCi17Ci19Ci0KLVdlYlRlc3RUaGVtZUNvbnRyb2xXaW46On5XZWJUZXN0VGhlbWVD
b250cm9sV2luKCkKLXsKLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpib3goY29u
c3QgU2tJUmVjdCYgcmVjdCwgU2tDb2xvciBmaWxsQ29sb3IpCi17Ci0gICAgU2tQYWludCBwYWlu
dDsKLQotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKLSAgICBwYWlu
dC5zZXRDb2xvcihmaWxsQ29sb3IpOwotICAgIG1fY2FudmFzLT5kcmF3SVJlY3QocmVjdCwgcGFp
bnQpOwotCi0gICAgcGFpbnQuc2V0Q29sb3IobV9lZGdlQ29sb3IpOwotICAgIHBhaW50LnNldFN0
eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwotICAgIG1fY2FudmFzLT5kcmF3SVJlY3QocmVj
dCwgcGFpbnQpOwotfQotCi12b2lkIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OmxpbmUoaW50IHgw
LCBpbnQgeTAsIGludCB4MSwgaW50IHkxLCBTa0NvbG9yIGNvbG9yKQotewotICAgIFNrUGFpbnQg
cGFpbnQ7Ci0gICAgcGFpbnQuc2V0Q29sb3IoY29sb3IpOwotICAgIG1fY2FudmFzLT5kcmF3TGlu
ZShTa0ludFRvU2NhbGFyKHgwKSwgU2tJbnRUb1NjYWxhcih5MCksIFNrSW50VG9TY2FsYXIoeDEp
LCBTa0ludFRvU2NhbGFyKHkxKSwgcGFpbnQpOwotfQotCi12b2lkIFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW46OnRyaWFuZ2xlKGludCB4MCwgaW50IHkwLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBp
bnQgeTIsIFNrQ29sb3IgY29sb3IpCi17Ci0gICAgU2tQYXRoIHBhdGg7Ci0gICAgU2tQYWludCBw
YWludDsKLQotICAgIHBhaW50LnNldENvbG9yKGNvbG9yKTsKLSAgICBwYWludC5zZXRTdHlsZShT
a1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAgcGF0aC5pbmNSZXNlcnZlKDQpOwotICAgIHBhdGgu
bW92ZVRvKFNrSW50VG9TY2FsYXIoeDApLCBTa0ludFRvU2NhbGFyKHkwKSk7Ci0gICAgcGF0aC5s
aW5lVG8oU2tJbnRUb1NjYWxhcih4MSksIFNrSW50VG9TY2FsYXIoeTEpKTsKLSAgICBwYXRoLmxp
bmVUbyhTa0ludFRvU2NhbGFyKHgyKSwgU2tJbnRUb1NjYWxhcih5MikpOwotICAgIHBhdGguY2xv
c2UoKTsKLSAgICBtX2NhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotCi0gICAgcGFpbnQu
c2V0Q29sb3IobV9lZGdlQ29sb3IpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJv
a2VfU3R5bGUpOwotICAgIG1fY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci19Ci0KLXZv
aWQgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6cm91bmRSZWN0KFNrQ29sb3IgY29sb3IpCi17Ci0g
ICAgU2tSZWN0IHJlY3Q7Ci0gICAgU2tTY2FsYXIgcmFkaXVzID0gU2tJbnRUb1NjYWxhcig1KTsK
LSAgICBTa1BhaW50IHBhaW50OwotCi0gICAgcmVjdC5zZXQobV9pcmVjdCk7Ci0gICAgcGFpbnQu
c2V0Q29sb3IoY29sb3IpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxl
KTsKLSAgICBtX2NhbnZhcy0+ZHJhd1JvdW5kUmVjdChyZWN0LCByYWRpdXMsIHJhZGl1cywgcGFp
bnQpOwotCi0gICAgcGFpbnQuc2V0Q29sb3IobV9lZGdlQ29sb3IpOwotICAgIHBhaW50LnNldFN0
eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwotICAgIG1fY2FudmFzLT5kcmF3Um91bmRSZWN0
KHJlY3QsIHJhZGl1cywgcmFkaXVzLCBwYWludCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6b3ZhbChTa0NvbG9yIGNvbG9yKQotewotICAgIFNrUmVjdCByZWN0OwotICAgIFNr
UGFpbnQgcGFpbnQ7Ci0KLSAgICByZWN0LnNldChtX2lyZWN0KTsKLSAgICBwYWludC5zZXRDb2xv
cihjb2xvcik7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAg
IG1fY2FudmFzLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7Ci0KLSAgICBwYWludC5zZXRDb2xvciht
X2VkZ2VDb2xvcik7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7
Ci0gICAgbV9jYW52YXMtPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKLX0KLQotdm9pZCBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpjaXJjbGUoU2tTY2FsYXIgcmFkaXVzLCBTa0NvbG9yIGNvbG9yKQot
ewotICAgIFNrU2NhbGFyIGN5ID0gU2tJbnRUb1NjYWxhcihtX3RvcCAgKyBtX2hlaWdodCAvIDIp
OwotICAgIFNrU2NhbGFyIGN4ID0gU2tJbnRUb1NjYWxhcihtX2xlZnQgKyBtX3dpZHRoIC8gMik7
Ci0gICAgU2tQYWludCBwYWludDsKLQotICAgIHBhaW50LnNldENvbG9yKGNvbG9yKTsKLSAgICBw
YWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAgbV9jYW52YXMtPmRyYXdD
aXJjbGUoY3gsIGN5LCByYWRpdXMsIHBhaW50KTsKLQotICAgIHBhaW50LnNldENvbG9yKG1fZWRn
ZUNvbG9yKTsKLSAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprU3Ryb2tlX1N0eWxlKTsKLSAg
ICBtX2NhbnZhcy0+ZHJhd0NpcmNsZShjeCwgY3ksIHJhZGl1cywgcGFpbnQpOwotfQotCi12b2lk
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Om5lc3RlZEJveGVzKGludCBpbmRlbnRMZWZ0LCBpbnQg
aW5kZW50VG9wLCBpbnQgaW5kZW50UmlnaHQsIGludCBpbmRlbnRCb3R0b20sIFNrQ29sb3Igb3V0
ZXJDb2xvciwgU2tDb2xvciBpbm5lckNvbG9yKQotewotICAgIFNrSVJlY3QgbGlyZWN0OwotICAg
IGJveChtX2lyZWN0LCBvdXRlckNvbG9yKTsKLSAgICBsaXJlY3Quc2V0KG1faXJlY3QuZkxlZnQg
KyBpbmRlbnRMZWZ0LCBtX2lyZWN0LmZUb3AgKyBpbmRlbnRUb3AsIG1faXJlY3QuZlJpZ2h0IC0g
aW5kZW50UmlnaHQsIG1faXJlY3QuZkJvdHRvbSAtIGluZGVudEJvdHRvbSk7Ci0gICAgYm94KGxp
cmVjdCwgaW5uZXJDb2xvcik7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6bWFy
a1N0YXRlKCkKLXsKLSAgICAvLyBUaGUgaG9yaXpvbnRhbCBsaW5lcyBpbiBhIHJlYWQgb25seSBj
b250cm9sIGFyZSBzcGFjZWQgYnkgdGhpcyBhbW91bnQuCi0gICAgY29uc3QgaW50IHJlYWRPbmx5
TGluZU9mZnNldCA9IDU7Ci0KLSAgICAvLyBUaGUgbGVuZ3RoIG9mIGEgdHJpYW5nbGUgc2lkZSBm
b3IgdGhlIGNvcm5lciBtYXJrcy4KLSAgICBjb25zdCBpbnQgdHJpYW5nbGVTaXplID0gNTsKLQot
ICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgIGNhc2UgVW5rbm93blN0YXRlOgotICAgIGNhc2Ug
RGlzYWJsZWRTdGF0ZToKLSAgICBjYXNlIE5vcm1hbFN0YXRlOgotICAgIGNhc2UgSW5kZXRlcm1p
bmF0ZVN0YXRlOgotICAgICAgICAvLyBEb24ndCB2aXN1YWxseSBtYXJrIHRoZXNlIHN0YXRlcyAo
Y29sb3IgaXMgZW5vdWdoKS4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSZWFkT25seVN0YXRl
OgotICAgICAgICAvLyBEcmF3aW5nIGxpbmVzIGFjcm9zcyB0aGUgY29udHJvbC4KLSAgICAgICAg
Zm9yIChpbnQgaSA9IG1fdG9wICsgcmVhZE9ubHlMaW5lT2Zmc2V0OyBpIDwgbV9ib3R0b207IGkg
Kz0gcmVhZE9ubHlMaW5lT2Zmc2V0KQotICAgICAgICAgICAgbGluZShtX2xlZnQgKyAxLCBpLCBt
X3JpZ2h0IC0gMSwgaSwgcmVhZE9ubHlDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBIb3RTdGF0ZToKLSAgICAgICAgLy8gRHJhdyBhIHRyaWFuZ2xlIGluIHRoZSB1cHBlciBsZWZ0
IGNvcm5lciBvZiB0aGUgY29udHJvbC4KLSAgICAgICAgdHJpYW5nbGUobV9sZWZ0LCBtX3RvcCwg
bV9sZWZ0ICsgdHJpYW5nbGVTaXplLCBtX3RvcCwgbV9sZWZ0LCBtX3RvcCArIHRyaWFuZ2xlU2l6
ZSwgbV9lZGdlQ29sb3IpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSG92ZXJTdGF0ZToK
LSAgICAgICAgLy8gRHJhdyBhIHRyaWFuZ2xlIGluIHRoZSB1cHBlciByaWdodCBjb3JuZXIgb2Yg
dGhlIGNvbnRyb2wuCi0gICAgICAgIHRyaWFuZ2xlKG1fcmlnaHQsIG1fdG9wLCBtX3JpZ2h0LCBt
X3RvcCArIHRyaWFuZ2xlU2l6ZSwgbV9yaWdodCAtIHRyaWFuZ2xlU2l6ZSwgbV90b3AsIG1fZWRn
ZUNvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZvY3VzZWRTdGF0ZToKLSAgICAg
ICAgLy8gRHJhdyBhIHRyaWFuZ2xlIGluIHRoZSBib3R0b20gcmlnaHQgY29ybmVyIG9mIHRoZSBj
b250cm9sLgotICAgICAgICB0cmlhbmdsZShtX3JpZ2h0LCBtX2JvdHRvbSwgbV9yaWdodCAtIHRy
aWFuZ2xlU2l6ZSwgbV9ib3R0b20sIG1fcmlnaHQsIG1fYm90dG9tIC0gdHJpYW5nbGVTaXplLCBt
X2VkZ2VDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBQcmVzc2VkU3RhdGU6Ci0g
ICAgICAgIC8vIERyYXcgYSB0cmlhbmdsZSBpbiB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIHRo
ZSBjb250cm9sLgotICAgICAgICB0cmlhbmdsZShtX2xlZnQsIG1fYm90dG9tLCBtX2xlZnQsIG1f
Ym90dG9tIC0gdHJpYW5nbGVTaXplLCBtX2xlZnQgKyB0cmlhbmdsZVNpemUsIG1fYm90dG9tLCBt
X2VkZ2VDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZv
aWQgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6ZHJhdygpCi17Ci0gICAgaW50IGhhbGZXaWR0aCA9
IG1fd2lkdGggLyAyOwotICAgIGludCBoYWxmSGVpZ2h0ID0gbV9oZWlnaHQgLyAyOwotICAgIGlu
dCBxdWFydGVyV2lkdGggPSBtX3dpZHRoIC8gNDsKLSAgICBpbnQgcXVhcnRlckhlaWdodCA9IG1f
aGVpZ2h0IC8gNDsKLQotICAgIC8vIEluZGVudCBhbW91bnRzIGZvciB0aGUgY2hlY2sgaW4gYSBj
aGVja2JveCBvciByYWRpbyBidXR0b24uCi0gICAgY29uc3QgaW50IGNoZWNrSW5kZW50ID0gMzsK
LQotICAgIC8vIEluZGVudCBhbW91bnRzIGZvciBzaG9ydCBhbmQgbG9uZyBzaWRlcyBvZiB0aGUg
c2Nyb2xsYmFyIG5vdGNoZXMuCi0gICAgY29uc3QgaW50IG5vdGNoTG9uZ09mZnNldCA9IDE7Ci0g
ICAgY29uc3QgaW50IG5vdGNoU2hvcnRPZmZzZXQgPSA0OwotICAgIGNvbnN0IGludCBub09mZnNl
dCA9IDA7Ci0KLSAgICAvLyBJbmRlbnQgYW1vdW50cyBmb3IgdGhlIHNob3J0IGFuZCBsb25nIHNp
ZGVzIG9mIGEgc2Nyb2xsIHRodW1iIGJveC4KLSAgICBjb25zdCBpbnQgdGh1bWJMb25nSW5kZW50
ID0gMDsKLSAgICBjb25zdCBpbnQgdGh1bWJTaG9ydEluZGVudCA9IDI7Ci0KLSAgICAvLyBJbmRl
bnRzIGZvciB0aGUgY3Jvc3NoYXRjaCBvbiBhIHNjcm9sbCBncmlwLgotICAgIGNvbnN0IGludCBn
cmlwTG9uZ0luZGVudCA9IDM7Ci0gICAgY29uc3QgaW50IGdyaXBTaG9ydEluZGVudCA9IDU7Ci0K
LSAgICAvLyBJbmRlbnRzIGZvciB0aGUgdGhlIHNsaWRlciB0cmFjay4KLSAgICBjb25zdCBpbnQg
c2xpZGVySW5kZW50ID0gMjsKLQotICAgIHN3aXRjaCAobV90eXBlKSB7Ci0gICAgY2FzZSBVbmtu
b3duVHlwZToKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgVGV4dEZpZWxkVHlwZToKLSAgICAgICAgLy8gV2UgcmVuZGVyIHRo
aXMgYnkgaGFuZCBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgIFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFB1c2hCdXR0b25U
eXBlOgotICAgICAgICAvLyBwdXNoIGJ1dHRvbnMgcmVuZGVyIGFzIGEgcm91bmRlZCByZWN0YW5n
bGUKLSAgICAgICAgcm91bmRSZWN0KG1fYmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBVbmNoZWNrZWRCb3hUeXBlOgotICAgICAgICAvLyBVbmNoZWNrZWQgYm94ZXMgYXJlIHNp
bXBseSBwbGFpbiBib3hlcy4KLSAgICAgICAgYm94KG1faXJlY3QsIG1fYmdDb2xvcik7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBDaGVja2VkQm94VHlwZToKLSAgICAgICAgbmVzdGVkQm94
ZXMoY2hlY2tJbmRlbnQsIGNoZWNrSW5kZW50LCBjaGVja0luZGVudCwgY2hlY2tJbmRlbnQsIG1f
YmdDb2xvciwgbV9mZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEluZGV0ZXJt
aW5hdGVDaGVja2JveFR5cGU6Ci0gICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgY2hlY2tib3ggaXMg
YSBib3ggY29udGFpbmluZyAnLScuCi0gICAgICAgIG5lc3RlZEJveGVzKGNoZWNrSW5kZW50LCBo
YWxmSGVpZ2h0LCBjaGVja0luZGVudCwgaGFsZkhlaWdodCwgbV9iZ0NvbG9yLCBtX2ZnQ29sb3Ip
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgVW5jaGVja2VkUmFkaW9UeXBlOgotICAgICAg
ICBjaXJjbGUoU2tJbnRUb1NjYWxhcihoYWxmSGVpZ2h0KSwgbV9iZ0NvbG9yKTsKLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIENoZWNrZWRSYWRpb1R5cGU6Ci0gICAgICAgIGNpcmNsZShTa0lu
dFRvU2NhbGFyKGhhbGZIZWlnaHQpLCBtX2JnQ29sb3IpOwotICAgICAgICBjaXJjbGUoU2tJbnRU
b1NjYWxhcihoYWxmSGVpZ2h0IC0gY2hlY2tJbmRlbnQpLCBtX2ZnQ29sb3IpOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgSG9yaXpvbnRhbFNjcm9sbFRyYWNrQmFja1R5cGU6IHsKLSAgICAg
ICAgLy8gRHJhdyBhIGJveCB3aXRoIGEgbm90Y2ggYXQgdGhlIGxlZnQuCi0gICAgICAgIGludCBs
b25nT2Zmc2V0ID0gaGFsZkhlaWdodCAtIG5vdGNoTG9uZ09mZnNldDsKLSAgICAgICAgaW50IHNo
b3J0T2Zmc2V0ID0gbV93aWR0aCAtIG5vdGNoU2hvcnRPZmZzZXQ7Ci0gICAgICAgIG5lc3RlZEJv
eGVzKG5vT2Zmc2V0LCBsb25nT2Zmc2V0LCBzaG9ydE9mZnNldCwgbG9uZ09mZnNldCwgbV9iZ0Nv
bG9yLCBtX2VkZ2VDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgSG9y
aXpvbnRhbFNjcm9sbFRyYWNrRm9yd2FyZFR5cGU6IHsKLSAgICAgICAgLy8gRHJhdyBhIGJveCB3
aXRoIGEgbm90Y2ggYXQgdGhlIHJpZ2h0LgotICAgICAgICBpbnQgbG9uZ09mZnNldCAgPSBoYWxm
SGVpZ2h0IC0gbm90Y2hMb25nT2Zmc2V0OwotICAgICAgICBpbnQgc2hvcnRPZmZzZXQgPSBtX3dp
ZHRoIC0gbm90Y2hTaG9ydE9mZnNldDsKLSAgICAgICAgbmVzdGVkQm94ZXMoc2hvcnRPZmZzZXQs
IGxvbmdPZmZzZXQsIG5vT2Zmc2V0LCBsb25nT2Zmc2V0LCBtX2JnQ29sb3IsIG1fZmdDb2xvcik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgVmVydGljYWxTY3JvbGxUcmFja0Jh
Y2tUeXBlOiB7Ci0gICAgICAgIC8vIERyYXcgYSBib3ggd2l0aCBhIG5vdGNoIGF0IHRoZSB0b3Au
Ci0gICAgICAgIGludCBsb25nT2Zmc2V0ICA9IGhhbGZXaWR0aCAtIG5vdGNoTG9uZ09mZnNldDsK
LSAgICAgICAgaW50IHNob3J0T2Zmc2V0ID0gbV9oZWlnaHQgLSBub3RjaFNob3J0T2Zmc2V0Owot
ICAgICAgICBuZXN0ZWRCb3hlcyhsb25nT2Zmc2V0LCBub09mZnNldCwgbG9uZ09mZnNldCwgc2hv
cnRPZmZzZXQsIG1fYmdDb2xvciwgbV9mZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgY2FzZSBWZXJ0aWNhbFNjcm9sbFRyYWNrRm9yd2FyZFR5cGU6IHsKLSAgICAgICAgLy8g
RHJhdyBhIGJveCB3aXRoIGEgbm90Y2ggYXQgdGhlIGJvdHRvbS4KLSAgICAgICAgaW50IGxvbmdP
ZmZzZXQgID0gaGFsZldpZHRoIC0gbm90Y2hMb25nT2Zmc2V0OwotICAgICAgICBpbnQgc2hvcnRP
ZmZzZXQgPSBtX2hlaWdodCAtIG5vdGNoU2hvcnRPZmZzZXQ7Ci0gICAgICAgIG5lc3RlZEJveGVz
KGxvbmdPZmZzZXQsIHNob3J0T2Zmc2V0LCBsb25nT2Zmc2V0LCBub09mZnNldCwgbV9iZ0NvbG9y
LCBtX2ZnQ29sb3IpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIEhvcml6b250
YWxTY3JvbGxUaHVtYlR5cGU6Ci0gICAgICAgIC8vIERyYXcgYSBuYXJyb3dlciBib3ggb24gdG9w
IG9mIHRoZSBvdXRzaWRlIGJveC4KLSAgICAgICAgbmVzdGVkQm94ZXModGh1bWJMb25nSW5kZW50
LCB0aHVtYlNob3J0SW5kZW50LCB0aHVtYkxvbmdJbmRlbnQsIHRodW1iU2hvcnRJbmRlbnQsIG1f
YmdDb2xvciwgbV9iZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFZlcnRpY2Fs
U2Nyb2xsVGh1bWJUeXBlOgotICAgICAgICAvLyBEcmF3IGEgc2hvcnRlciBib3ggb24gdG9wIG9m
IHRoZSBvdXRzaWRlIGJveC4KLSAgICAgICAgbmVzdGVkQm94ZXModGh1bWJTaG9ydEluZGVudCwg
dGh1bWJMb25nSW5kZW50LCB0aHVtYlNob3J0SW5kZW50LCB0aHVtYkxvbmdJbmRlbnQsIG1fYmdD
b2xvciwgbV9iZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEhvcml6b250YWxT
bGlkZXJUaHVtYlR5cGU6Ci0gICAgY2FzZSBWZXJ0aWNhbFNsaWRlclRodW1iVHlwZToKLSAgICAg
ICAgLy8gU2xpZGVyIHRodW1icyBhcmUgb3ZhbHMuCi0gICAgICAgIG92YWwobV9iZ0NvbG9yKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEhvcml6b250YWxTY3JvbGxHcmlwVHlwZTogewot
ICAgICAgICAvLyBEcmF3IGEgaG9yaXpvbnRhbCBjcm9zc2hhdGNoIGZvciB0aGUgZ3JpcC4KLSAg
ICAgICAgaW50IGxvbmdPZmZzZXQgPSBoYWxmV2lkdGggLSBncmlwTG9uZ0luZGVudDsKLSAgICAg
ICAgbGluZShtX2xlZnQgKyBncmlwTG9uZ0luZGVudCwgbV90b3AgKyBoYWxmSGVpZ2h0LCBtX3Jp
Z2h0IC0gZ3JpcExvbmdJbmRlbnQsIG1fdG9wICsgaGFsZkhlaWdodCwgbV9mZ0NvbG9yKTsKLSAg
ICAgICAgbGluZShtX2xlZnQgKyBsb25nT2Zmc2V0LCBtX3RvcCArIGdyaXBTaG9ydEluZGVudCwg
bV9sZWZ0ICsgbG9uZ09mZnNldCwgbV9ib3R0b20gLSBncmlwU2hvcnRJbmRlbnQsIG1fZmdDb2xv
cik7Ci0gICAgICAgIGxpbmUobV9yaWdodCAtIGxvbmdPZmZzZXQsIG1fdG9wICsgZ3JpcFNob3J0
SW5kZW50LCBtX3JpZ2h0IC0gbG9uZ09mZnNldCwgbV9ib3R0b20gLSBncmlwU2hvcnRJbmRlbnQs
IG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgVmVydGljYWxT
Y3JvbGxHcmlwVHlwZTogewotICAgICAgICAvLyBEcmF3IGEgdmVydGljYWwgY3Jvc3NoYXRjaCBm
b3IgdGhlIGdyaXAuCi0gICAgICAgIGludCBsb25nT2Zmc2V0ID0gaGFsZkhlaWdodCAtIGdyaXBM
b25nSW5kZW50OwotICAgICAgICBsaW5lKG1fbGVmdCArIGhhbGZXaWR0aCwgbV90b3AgKyBncmlw
TG9uZ0luZGVudCwgbV9sZWZ0ICsgaGFsZldpZHRoLCBtX2JvdHRvbSAtIGdyaXBMb25nSW5kZW50
LCBtX2ZnQ29sb3IpOwotICAgICAgICBsaW5lKG1fbGVmdCArIGdyaXBTaG9ydEluZGVudCwgbV90
b3AgKyBsb25nT2Zmc2V0LCBtX3JpZ2h0IC0gZ3JpcFNob3J0SW5kZW50LCBtX3RvcCArIGxvbmdP
ZmZzZXQsIG1fZmdDb2xvcik7Ci0gICAgICAgIGxpbmUobV9sZWZ0ICsgZ3JpcFNob3J0SW5kZW50
LCBtX2JvdHRvbSAtIGxvbmdPZmZzZXQsIG1fcmlnaHQgLSBncmlwU2hvcnRJbmRlbnQsIG1fYm90
dG9tIC0gbG9uZ09mZnNldCwgbV9mZ0NvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgY2FzZSBMZWZ0QXJyb3dUeXBlOgotICAgICAgICAvLyBEcmF3IGEgbGVmdCBhcnJvdyBpbnNp
ZGUgYSBib3guCi0gICAgICAgIGJveChtX2lyZWN0LCBtX2JnQ29sb3IpOwotICAgICAgICB0cmlh
bmdsZShtX3JpZ2h0IC0gcXVhcnRlcldpZHRoLCBtX3RvcCArIHF1YXJ0ZXJIZWlnaHQsIG1fcmln
aHQgLSBxdWFydGVyV2lkdGgsIG1fYm90dG9tIC0gcXVhcnRlckhlaWdodCwgbV9sZWZ0ICsgcXVh
cnRlcldpZHRoLCBtX3RvcCArIGhhbGZIZWlnaHQsIG1fZmdDb2xvcik7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBSaWdodEFycm93VHlwZToKLSAgICAgICAgLy8gRHJhdyBhIGxlZnQgYXJy
b3cgaW5zaWRlIGEgYm94LgotICAgICAgICBib3gobV9pcmVjdCwgbV9iZ0NvbG9yKTsKLSAgICAg
ICAgdHJpYW5nbGUobV9sZWZ0ICsgcXVhcnRlcldpZHRoLCBtX3RvcCArIHF1YXJ0ZXJIZWlnaHQs
IG1fcmlnaHQgLSBxdWFydGVyV2lkdGgsIG1fdG9wICsgaGFsZkhlaWdodCwgbV9sZWZ0ICsgcXVh
cnRlcldpZHRoLCBtX2JvdHRvbSAtIHF1YXJ0ZXJIZWlnaHQsIG1fZmdDb2xvcik7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBVcEFycm93VHlwZToKLSAgICAgICAgLy8gRHJhdyBhbiB1cCBh
cnJvdyBpbnNpZGUgYSBib3guCi0gICAgICAgIGJveChtX2lyZWN0LCBtX2JnQ29sb3IpOwotICAg
ICAgICB0cmlhbmdsZShtX2xlZnQgKyBxdWFydGVyV2lkdGgsIG1fYm90dG9tIC0gcXVhcnRlckhl
aWdodCwgbV9sZWZ0ICsgaGFsZldpZHRoLCBtX3RvcCArIHF1YXJ0ZXJIZWlnaHQsIG1fcmlnaHQg
LSBxdWFydGVyV2lkdGgsIG1fYm90dG9tIC0gcXVhcnRlckhlaWdodCwgbV9mZ0NvbG9yKTsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIERvd25BcnJvd1R5cGU6Ci0gICAgICAgIC8vIERyYXcg
YSBkb3duIGFycm93IGluc2lkZSBhIGJveC4KLSAgICAgICAgYm94KG1faXJlY3QsIG1fYmdDb2xv
cik7Ci0gICAgICAgIHRyaWFuZ2xlKG1fbGVmdCArIHF1YXJ0ZXJXaWR0aCwgbV90b3AgKyBxdWFy
dGVySGVpZ2h0LCBtX3JpZ2h0IC0gcXVhcnRlcldpZHRoLCBtX3RvcCArIHF1YXJ0ZXJIZWlnaHQs
IG1fbGVmdCArIGhhbGZXaWR0aCwgbV9ib3R0b20gLSBxdWFydGVySGVpZ2h0LCBtX2ZnQ29sb3Ip
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSG9yaXpvbnRhbFNsaWRlclRyYWNrVHlwZTog
ewotICAgICAgICAvLyBEcmF3IGEgbmFycm93IHJlY3QgZm9yIHRoZSB0cmFjayBwbHVzIGJveCBo
YXRjaGVzIG9uIHRoZSBlbmRzLgotICAgICAgICBTa0lSZWN0IGxpcmVjdDsKLSAgICAgICAgbGly
ZWN0ID0gbV9pcmVjdDsKLSAgICAgICAgbGlyZWN0Lmluc2V0KG5vT2Zmc2V0LCBoYWxmSGVpZ2h0
IC0gc2xpZGVySW5kZW50KTsKLSAgICAgICAgYm94KGxpcmVjdCwgbV9iZ0NvbG9yKTsKLSAgICAg
ICAgbGluZShtX2xlZnQsICBtX3RvcCwgbV9sZWZ0LCAgbV9ib3R0b20sIG1fZWRnZUNvbG9yKTsK
LSAgICAgICAgbGluZShtX3JpZ2h0LCBtX3RvcCwgbV9yaWdodCwgbV9ib3R0b20sIG1fZWRnZUNv
bG9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBWZXJ0aWNhbFNsaWRlclRy
YWNrVHlwZTogewotICAgICAgICAvLyBEcmF3IGEgbmFycm93IHJlY3QgZm9yIHRoZSB0cmFjayBw
bHVzIGJveCBoYXRjaGVzIG9uIHRoZSBlbmRzLgotICAgICAgICBTa0lSZWN0IGxpcmVjdDsKLSAg
ICAgICAgbGlyZWN0ID0gbV9pcmVjdDsKLSAgICAgICAgbGlyZWN0Lmluc2V0KGhhbGZXaWR0aCAt
IHNsaWRlckluZGVudCwgbm9PZmZzZXQpOwotICAgICAgICBib3gobGlyZWN0LCBtX2JnQ29sb3Ip
OwotICAgICAgICBsaW5lKG1fbGVmdCwgbV90b3AsIG1fcmlnaHQsIG1fdG9wLCBtX2VkZ2VDb2xv
cik7Ci0gICAgICAgIGxpbmUobV9sZWZ0LCBtX2JvdHRvbSwgbV9yaWdodCwgbV9ib3R0b20sIG1f
ZWRnZUNvbG9yKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBEcm9wRG93bkJ1
dHRvblR5cGU6Ci0gICAgICAgIC8vIERyYXcgYSBib3ggd2l0aCBhIGJpZyBkb3duIGFycm93IG9u
IHRvcC4KLSAgICAgICAgYm94KG1faXJlY3QsIG1fYmdDb2xvcik7Ci0gICAgICAgIHRyaWFuZ2xl
KG1fbGVmdCArIHF1YXJ0ZXJXaWR0aCwgbV90b3AsIG1fcmlnaHQgLSBxdWFydGVyV2lkdGgsIG1f
dG9wLCBtX2xlZnQgKyBoYWxmV2lkdGgsIG1fYm90dG9tLCBtX2ZnQ29sb3IpOwotICAgICAgICBi
cmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbWFya1N0YXRlKCk7Ci19Ci0KLS8vIEJl
Y2F1c2UgcmVuZGVyaW5nIGEgdGV4dCBmaWVsZCBpcyBkZXBlbmRlbnQgb24gaW5wdXQKLS8vIHBh
cmFtZXRlcnMgdGhlIG90aGVyIGNvbnRyb2xzIGRvbid0IGhhdmUsIHdlIHJlbmRlciBpdCBkaXJl
Y3RseQotLy8gcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIG92ZXJjb21wbGljYXRlIGRyYXcoKSBmdXJ0
aGVyLgotdm9pZCBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpkcmF3VGV4dEZpZWxkKGJvb2wgZHJh
d0VkZ2VzLCBib29sIGZpbGxDb250ZW50QXJlYSwgU2tDb2xvciBjb2xvcikKLXsKLSAgICBTa1Bh
aW50IHBhaW50OwotCi0gICAgaWYgKGZpbGxDb250ZW50QXJlYSkgewotICAgICAgICBwYWludC5z
ZXRDb2xvcihjb2xvcik7Ci0gICAgICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0
eWxlKTsKLSAgICAgICAgbV9jYW52YXMtPmRyYXdJUmVjdChtX2lyZWN0LCBwYWludCk7Ci0gICAg
fQotICAgIGlmIChkcmF3RWRnZXMpIHsKLSAgICAgICAgcGFpbnQuc2V0Q29sb3IobV9lZGdlQ29s
b3IpOwotICAgICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprU3Ryb2tlX1N0eWxlKTsKLSAg
ICAgICAgbV9jYW52YXMtPmRyYXdJUmVjdChtX2lyZWN0LCBwYWludCk7Ci0gICAgfQotCi0gICAg
bWFya1N0YXRlKCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6ZHJhd1Byb2dy
ZXNzQmFyKGNvbnN0IFNrSVJlY3QmIGZpbGxSZWN0KQotewotICAgIFNrUGFpbnQgcGFpbnQ7Ci0K
LSAgICBwYWludC5zZXRDb2xvcihtX2JnQ29sb3IpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFp
bnQ6OmtGaWxsX1N0eWxlKTsKLSAgICBtX2NhbnZhcy0+ZHJhd0lSZWN0KG1faXJlY3QsIHBhaW50
KTsKLQotICAgIC8vIEVtdWxhdGUgY2xpcHBpbmcKLSAgICBTa0lSZWN0IHRvZmlsbDsKLSAgICB0
b2ZpbGwuaW50ZXJzZWN0KG1faXJlY3QsIGZpbGxSZWN0KTsKLSAgICBwYWludC5zZXRDb2xvciht
X2ZnQ29sb3IpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKLSAg
ICBtX2NhbnZhcy0+ZHJhd0lSZWN0KHRvZmlsbCwgcGFpbnQpOwotCi0gICAgbWFya1N0YXRlKCk7
Ci19Ci0KLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL1dlYlRlc3RUaGVtZUNvbnRyb2xXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVDb250cm9sV2luLmgJ
KHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlRlc3RUaGVtZUNvbnRyb2xXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLS8vIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW4gaW1wbGVtZW50cyB0aGUgZ2VuZXJp
YyByZW5kZXJpbmcgb2YgY29udHJvbHMKLS8vIG5lZWRlZCBieSBXZWJUaGVtZUVuZ2luZURSVFdp
bi4gU2VlIHRoZSBjb21tZW50cyBpbiB0aGF0IGNsYXNzCi0vLyBoZWFkZXIgZmlsZSBmb3Igd2h5
IHRoaXMgY2xhc3MgaXMgbmVlZGVkIGFuZCB1c2VkLgotLy8KLS8vIFRoaXMgY2xhc3MgaW1wbGVt
ZW50cyBhIGdlbmVyaWMgc2V0IG9mIHdpZGdldHMgdXNpbmcgU2tpYS4gVGhlIHdpZGdldHMKLS8v
IGFyZSBvcHRpbWl6ZWQgZm9yIHRlc3RhYmlsaXR5LCBub3QgYSBwbGVhc2luZyBhcHBlYXJhbmNl
LgotLy8KLQotI2lmbmRlZiBXZWJUZXN0VGhlbWVDb250cm9sV2luX2gKLSNkZWZpbmUgV2ViVGVz
dFRoZW1lQ29udHJvbFdpbl9oCi0KLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1ZGUv
Y29yZS9Ta0NvbG9yLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL2NvcmUv
U2tSZWN0LmgiCi0KLS8vIFNraWEgZm9yd2FyZCBkZWNsYXJhdGlvbnMKLWNsYXNzIFNrQ2FudmFz
OwotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW4gewotcHVibGljOgotICAgIC8vIFRoaXMgbGlzdCBvZiBzdGF0ZXMgbW9zdGx5IG1pcnJv
cnMgdGhlIGxpc3QgaW4gV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZVR5cGVzLmgKLSAgICAvLyBidXQg
aXMgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IHNpbmNlIHRoYXQgaXNuJ3QgcHVibGljIGFuZCBhbHNv
IHRvIG1pbmltaXplCi0gICAgLy8gZGVwZW5kZW5jaWVzLgotICAgIC8vIE5vdGUgdGhhdCB0aGUg
V2ViS2l0IFRoZW1lVHlwZXMgc2VlbSB0byBpbXBseSB0aGF0IGEgY29udHJvbCBjYW4gYmUKLSAg
ICAvLyBpbiBtdWx0aXBsZSBzdGF0ZXMgc2ltdWx0YW5lb3VzbHkgYnV0IFdlYlRoZW1lRW5naW5l
IG9ubHkgYWxsb3dzIGZvcgotICAgIC8vIGEgc2luZ2xlIHN0YXRlIGF0IGEgdGltZS4KLSAgICAv
LwotICAgIC8vIFNvbWUgZGVmaW5pdGlvbnMgZm9yIHRoZSB2YXJpb3VzIHN0YXRlczoKLSAgICAv
LyAgIERpc2FibGVkIC0gaW5kaWNhdGVzIHRoYXQgYSBjb250cm9sIGNhbid0IGJlIG1vZGlmaWVk
IG9yIHNlbGVjdGVkCi0gICAgLy8gICAgICAgICAgICAgIChjb3JyZXNwb25kcyB0byBIVE1MICdk
aXNhYmxlZCcgYXR0cmlidXRlKQotICAgIC8vICAgUmVhZE9ubHkgLSBpbmRpY2F0ZXMgdGhhdCBh
IGNvbnRyb2wgY2FuJ3QgYmUgbW9kaWZpZWQgYnV0IGNhbiBiZQotICAgIC8vICAgICAgICAgICAg
ICBzZWxlY3RlZAotICAgIC8vICAgTm9ybWFsICAgLSB0aGUgbm9ybWFsIHN0YXRlIG9mIGNvbnRy
b2wgb24gdGhlIHBhZ2Ugd2hlbiBpdCBpc24ndAotICAgIC8vICAgICAgICAgICAgICBmb2N1c2Vk
IG9yIG90aGVyd2lzZSBhY3RpdmUKLSAgICAvLyAgIEhvdCAgICAgIC0gd2hlbiB0aGUgbW91c2Ug
aXMgaG92ZXJpbmcgb3ZlciBhIHBhcnQgb2YgdGhlIGNvbnRyb2wsCi0gICAgLy8gICAgICAgICAg
ICAgIGFsbCB0aGUgb3RoZXIgcGFydHMgYXJlIGNvbnNpZGVyZWQgImhvdCIKLSAgICAvLyAgIEhv
dmVyICAgIC0gd2hlbiB0aGUgbW91c2UgaXMgZGlyZWN0bHkgb3ZlciBhIGNvbnRyb2wgKHRoZSBD
U1MKLSAgICAvLyAgICAgICAgICAgICAgIDpob3ZlciBwc2V1ZG8tY2xhc3MpCi0gICAgLy8gICBG
b2N1c2VkICAtIHdoZW4gdGhlIGNvbnRyb2wgaGFzIHRoZSBrZXlib2FyZCBmb2N1cwotICAgIC8v
ICAgUHJlc3NlZCAgLSB3aGVuIHRoZSBjb250cm9sIGlzIGJlaW5nIHRyaWdnZXJlZCAoYnkgYSBt
b3VzZWRvd24gb3IKLSAgICAvLyAgICAgICAgICAgICAgYSBrZXkgZXZlbnQpLgotICAgIC8vICAg
SW5kZXRlcm1pbmF0ZSAtIHdoZW4gc2V0IHRvIGluZGV0ZXJtaW5hdGUgKG9ubHkgZm9yIHByb2dy
ZXNzIGJhcikKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgVW5rbm93blN0YXRlID0gMCwKLSAg
ICAgICAgRGlzYWJsZWRTdGF0ZSwKLSAgICAgICAgUmVhZE9ubHlTdGF0ZSwKLSAgICAgICAgTm9y
bWFsU3RhdGUsCi0gICAgICAgIEhvdFN0YXRlLAotICAgICAgICBIb3ZlclN0YXRlLAotICAgICAg
ICBGb2N1c2VkU3RhdGUsCi0gICAgICAgIFByZXNzZWRTdGF0ZSwKLSAgICAgICAgSW5kZXRlcm1p
bmF0ZVN0YXRlCi0gICAgfTsKLQotICAgIC8vIFRoaXMgbGlzdCBvZiB0eXBlcyBtb3N0bHkgbWly
cm9ycyB0aGUgbGlzdCBpbgotICAgIC8vIFdlYkNvcmUvcGxhdGZvcm0vVGhlbWVUeXBlcy5oIGJ1
dCBpcyBtYWludGFpbmVkCi0gICAgLy8gc2VwYXJhdGVseSBzaW5jZSB0aGF0IGlzbid0IHB1Ymxp
YyBhbmQgYWxzbyB0byBtaW5pbWl6ZSBkZXBlbmRlbmNpZXMuCi0gICAgLy8KLSAgICAvLyBOb3Rl
IHRoYXQgd2hhdCB0aGUgdXNlciBtaWdodCB0aGluayBvZiBhcyBhIHNpbmdsZSBjb250cm9sIGNh
biBiZQotICAgIC8vIG1hZGUgdXAgb2YgbXVsdGlwbGUgcGFydHMuIEZvciBleGFtcGxlLCBhIHNp
bmdsZSBzY3JvbGwgYmFyIGNvbnRhaW5zCi0gICAgLy8gc2l4IGNsaWNrYWJsZSBwYXJ0cyAtIHR3
byBhcnJvd3MsIHRoZSAidGh1bWIiIGluZGljYXRpbmcgdGhlIGN1cnJlbnQKLSAgICAvLyBwb3Np
dGlvbiBvbiB0aGUgYmFyLCB0aGUgb3RoZXIgdHdvIHBhcnRzIG9mIHRoZSBiYXIgKGJlZm9yZSBh
bmQgYWZ0ZXIKLSAgICAvLyB0aGUgdGh1bWIpIGFuZCB0aGUgImdyaXBwZXIiIG9uIHRoZSB0aHVt
YiBpdHNlbGYuCi0gICAgLy8KLSAgICBlbnVtIFR5cGUgewotICAgICAgICBVbmtub3duVHlwZSA9
IDAsCi0gICAgICAgIFRleHRGaWVsZFR5cGUsCi0gICAgICAgIFB1c2hCdXR0b25UeXBlLAotICAg
ICAgICBVbmNoZWNrZWRCb3hUeXBlLAotICAgICAgICBDaGVja2VkQm94VHlwZSwKLSAgICAgICAg
SW5kZXRlcm1pbmF0ZUNoZWNrYm94VHlwZSwKLSAgICAgICAgVW5jaGVja2VkUmFkaW9UeXBlLAot
ICAgICAgICBDaGVja2VkUmFkaW9UeXBlLAotICAgICAgICBIb3Jpem9udGFsU2Nyb2xsVHJhY2tC
YWNrVHlwZSwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbFRyYWNrRm9yd2FyZFR5cGUsCi0gICAg
ICAgIEhvcml6b250YWxTY3JvbGxUaHVtYlR5cGUsCi0gICAgICAgIEhvcml6b250YWxTY3JvbGxH
cmlwVHlwZSwKLSAgICAgICAgVmVydGljYWxTY3JvbGxUcmFja0JhY2tUeXBlLAotICAgICAgICBW
ZXJ0aWNhbFNjcm9sbFRyYWNrRm9yd2FyZFR5cGUsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsVGh1
bWJUeXBlLAotICAgICAgICBWZXJ0aWNhbFNjcm9sbEdyaXBUeXBlLAotICAgICAgICBMZWZ0QXJy
b3dUeXBlLAotICAgICAgICBSaWdodEFycm93VHlwZSwKLSAgICAgICAgVXBBcnJvd1R5cGUsCi0g
ICAgICAgIERvd25BcnJvd1R5cGUsCi0gICAgICAgIEhvcml6b250YWxTbGlkZXJUcmFja1R5cGUs
Ci0gICAgICAgIEhvcml6b250YWxTbGlkZXJUaHVtYlR5cGUsCi0gICAgICAgIFZlcnRpY2FsU2xp
ZGVyVHJhY2tUeXBlLAotICAgICAgICBWZXJ0aWNhbFNsaWRlclRodW1iVHlwZSwKLSAgICAgICAg
RHJvcERvd25CdXR0b25UeXBlLAotICAgICAgICBQcm9ncmVzc0JhclR5cGUKLSAgICB9OwotCi0g
ICAgLy8gQ29uc3RydWN0cyBhIGNvbnRyb2wgb2YgdGhlIGdpdmVuIHNpemUsIHR5cGUgYW5kIHN0
YXRlIHRvIGRyYXcKLSAgICAvLyBvbiB0byB0aGUgZ2l2ZW4gY2FudmFzLgotICAgIFdlYlRlc3RU
aGVtZUNvbnRyb2xXaW4oU2tDYW52YXMqLCBjb25zdCBTa0lSZWN0JiwgVHlwZSwgU3RhdGUpOwot
ICAgIH5XZWJUZXN0VGhlbWVDb250cm9sV2luKCk7Ci0KLSAgICAvLyBEcmF3cyB0aGUgY29udHJv
bC4KLSAgICB2b2lkIGRyYXcoKTsKLQotICAgIC8vIFVzZSB0aGlzIGZvciBUZXh0RmllbGQgY29u
dHJvbHMgaW5zdGVhZCwgYmVjYXVzZSB0aGUgbG9naWMKLSAgICAvLyBmb3IgZHJhd2luZyB0aGVt
IGlzIGRlcGVuZGVudCBvbiB3aGF0IFdlYktpdCB0ZWxscyB1cyB0byBkby4KLSAgICAvLyBJZiBk
cmF3RWRnZXMgaXMgdHJ1ZSwgZHJhdyBhbiBlZGdlIGFyb3VuZCB0aGUgY29udHJvbC4gSWYKLSAg
ICAvLyBmaWxsQ29udGVudEFyZWEgaXMgdHJ1ZSwgZmlsbCB0aGUgY29udGVudCBhcmVhIHdpdGgg
dGhlIGdpdmVuIGNvbG9yLgotICAgIHZvaWQgZHJhd1RleHRGaWVsZChib29sIGRyYXdFZGdlcywg
Ym9vbCBmaWxsQ29udGVudEFyZWEsIFNrQ29sb3IpOwotCi0gICAgLy8gVXNlIHRoaXMgZm9yIGRy
YXdpbmcgUHJvZ3Jlc3NCYXIgY29udHJvbHMgaW5zdGVhZCwgc2luY2Ugd2UKLSAgICAvLyBuZWVk
IHRvIGtub3cgdGhlIHJlY3QgdG8gZmlsbCBpbnNpZGUgdGhlIGJhci4KLSAgICB2b2lkIGRyYXdQ
cm9ncmVzc0Jhcihjb25zdCBTa0lSZWN0JiBmaWxsUmVjdCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8g
RHJhd3MgYSBib3ggb2Ygc2l6ZSBzcGVjaWZpZWQgYnkgaXJlY3QsIGZpbGxlZCB3aXRoIHRoZSBn
aXZlbiBjb2xvci4KLSAgICAvLyBUaGUgYm94IHdpbGwgaGF2ZSBhIGJvcmRlciBkcmF3biBpbiB0
aGUgZGVmYXVsdCBlZGdlIGNvbG9yLgotICAgIHZvaWQgYm94KGNvbnN0IFNrSVJlY3QmIGlyZWN0
LCBTa0NvbG9yKTsKLQotCi0gICAgLy8gRHJhd3MgYSB0cmlhbmdsZSBvZiBzaXplIHNwZWNpZmll
ZCBieSB0aGUgdGhyZWUgcGFpcnMgb2YgY29vcmRpbmF0ZXMsCi0gICAgLy8gZmlsbGVkIHdpdGgg
dGhlIGdpdmVuIGNvbG9yLiBUaGUgYm94IHdpbGwgaGF2ZSBhbiBlZGdlIGRyYXduIGluIHRoZQot
ICAgIC8vIGRlZmF1bHQgZWRnZSBjb2xvci4KLSAgICB2b2lkIHRyaWFuZ2xlKGludCB4MCwgaW50
IHkwLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIFNrQ29sb3IpOwotCi0gICAgLy8g
RHJhd3MgYSByZWN0YW5nbGUgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgd2l0aCByb3VuZGVkIGNv
cm5lcnMsIGZpbGxlZAotICAgIC8vIHdpdGggdGhlIHNwZWNpZmllZCBjb2xvciAoYW5kIHdpdGgg
YSBib3JkZXIgaW4gdGhlIGRlZmF1bHQgZWRnZSBjb2xvcikuCi0gICAgdm9pZCByb3VuZFJlY3Qo
U2tDb2xvcik7Ci0KLSAgICAvLyBEcmF3cyBhbiBvdmFsIHRoZSBzaXplIG9mIHRoZSBjb250cm9s
LCBmaWxsZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yCi0gICAgLy8gYW5kIHdpdGggYSBib3Jk
ZXIgaW4gdGhlIGRlZmF1bHQgZWRnZSBjb2xvci4KLSAgICB2b2lkIG92YWwoU2tDb2xvcik7Ci0K
LSAgICAvLyBEcmF3cyBhIGNpcmNsZSBjZW50ZXJlZCBpbiB0aGUgY29udHJvbCB3aXRoIHRoZSBz
cGVjaWZpZWQgcmFkaXVzLAotICAgIC8vIGZpbGxlZCB3aXRoIHRoZSBzcGVjaWZpZWQgY29sb3Is
IGFuZCB3aXRoIGEgYm9yZGVyIGRyYXcgaW4gdGhlCi0gICAgLy8gZGVmYXVsdCBlZGdlIGNvbG9y
LgotICAgIHZvaWQgY2lyY2xlKFNrU2NhbGFyIHJhZGl1cywgU2tDb2xvcik7Ci0KLSAgICAvLyBE
cmF3cyBhIGJveCB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCwgZmlsbGVkIHdpdGggdGhlIG91dGVy
Q29sb3IgYW5kCi0gICAgLy8gd2l0aCBhIGJvcmRlciBpbiB0aGUgZGVmYXVsdCBlZGdlIGNvbG9y
LCBhbmQgdGhlbiBkcmF3cyBhbm90aGVyIGJveAotICAgIC8vIGluZGVudGVkIG9uIGFsbCBmb3Vy
IHNpZGVzIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50cywgZmlsbGVkIHdpdGggdGhlCi0gICAgLy8g
aW5uZXIgY29sb3IgYW5kIHdpdGggYSBib3JkZXIgaW4gdGhlIGRlZmF1bHQgZWRnZSBjb2xvci4K
LSAgICB2b2lkIG5lc3RlZEJveGVzKGludCBpbmRlbnRMZWZ0LCBpbnQgaW5kZW50VG9wLCBpbnQg
aW5kZW50UmlnaHQsIGludCBpbmRlbnRCb3R0b20sIFNrQ29sb3Igb3V0ZXJDb2xvciwgU2tDb2xv
ciBpbm5lckNvbG9yKTsKLQotICAgIC8vIERyYXdzIGEgbGluZSBiZXR3ZWVuIHRoZSB0d28gcG9p
bnRzIGluIHRoZSBnaXZlbiBjb2xvci4KLSAgICB2b2lkIGxpbmUoaW50IHgwLCBpbnQgeTAsIGlu
dCB4MSwgaW50IHkxLCBTa0NvbG9yKTsKLQotICAgIC8vIERyYXdzIGEgZGlzdGluY3RpdmUgbWFy
ayBvbiB0aGUgY29udHJvbCBmb3IgZWFjaCBzdGF0ZSwgc28gdGhhdCB0aGUKLSAgICAvLyBzdGF0
ZSBvZiB0aGUgY29udHJvbCBjYW4gYmUgZGV0ZXJtaW5lZCB3aXRob3V0IG5lZWRpbmcgdG8ga25v
dyB3aGljaAotICAgIC8vIGNvbG9yIGlzIHdoaWNoLgotICAgIHZvaWQgbWFya1N0YXRlKCk7Ci0K
LSAgICBTa0NhbnZhcyogbV9jYW52YXM7Ci0gICAgY29uc3QgU2tJUmVjdCBtX2lyZWN0OwotICAg
IGNvbnN0IFR5cGUgbV90eXBlOwotICAgIGNvbnN0IFN0YXRlIG1fc3RhdGU7Ci0gICAgY29uc3Qg
U2tDb2xvciBtX2VkZ2VDb2xvcjsKLSAgICBjb25zdCBTa0NvbG9yIG1fYmdDb2xvcjsKLSAgICBj
b25zdCBTa0NvbG9yIG1fZmdDb2xvcjsKLQotICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGNvbnZl
bmllbmNlIGFjY2Vzc29ycyBmb3IgbV9pcmVjdC4KLSAgICBjb25zdCBpbnQgbV9sZWZ0OwotICAg
IGNvbnN0IGludCBtX3JpZ2h0OwotICAgIGNvbnN0IGludCBtX3RvcDsKLSAgICBjb25zdCBpbnQg
bV9ib3R0b207Ci0gICAgY29uc3QgaW50IG1fd2lkdGg7Ci0gICAgY29uc3QgaW50IG1faGVpZ2h0
OwotfTsKLQotfQotCi0jZW5kaWYgLy8gV2ViVGVzdFRoZW1lQ29udHJvbFdpbl9oCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVF
bmdpbmVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVFbmdpbmVNYWMuaAkocmV2aXNpb24gMTQ3NzAxKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRo
ZW1lRW5naW5lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGlzIGltcGxlbWVudHMg
dGhlIFdlYlRoZW1lRW5naW5lIEFQSSBpbiBzdWNoIGEgd2F5IHRoYXQgd2UgbWF0Y2ggdGhlIE1h
YwotLy8gcG9ydCByZW5kZXJpbmcgbW9yZSB0aGFuIHVzdWFsIENocm9taXVtIHBhdGgsIHRodXMg
YWxsb3dpbmcgdXMgdG8gc2hhcmUKLS8vIG1vcmUgcGl4ZWwgYmFzZWxpbmVzLgotCi0jaWZuZGVm
IFdlYlRlc3RUaGVtZUVuZ2luZU1hY19oCi0jZGVmaW5lIFdlYlRlc3RUaGVtZUVuZ2luZU1hY19o
Ci0KLSNpbmNsdWRlIDxwdWJsaWMvbWFjL1dlYlRoZW1lRW5naW5lLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJUZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdFRoZW1lRW5naW5lTWFjIDogcHVibGljIFdl
YktpdDo6V2ViVGhlbWVFbmdpbmUgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwYWludFNj
cm9sbGJhclRodW1iKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyosCi0gICAgICAgIFdlYktp
dDo6V2ViVGhlbWVFbmdpbmU6OlN0YXRlLAotICAgICAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5l
OjpTaXplLAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmLAotICAgICAgICBjb25zdCBX
ZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvJik7Ci0KLXByaXZhdGU6Ci0gICAg
dmlydHVhbCB2b2lkIHBhaW50SElUaGVtZVNjcm9sbGJhclRodW1iKAotICAgICAgICBXZWJLaXQ6
OldlYkNhbnZhcyosCi0gICAgICAgIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU6OlN0YXRlLAotICAg
ICAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTaXplLAotICAgICAgICBjb25zdCBXZWJLaXQ6
OldlYlJlY3QmLAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTY3JvbGxi
YXJJbmZvJik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50TlNTY3JvbGxlclNjcm9sbGJhclRodW1i
KAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyosCi0gICAgICAgIFdlYktpdDo6V2ViVGhlbWVF
bmdpbmU6OlN0YXRlLAotICAgICAgICBXZWJLaXQ6OldlYlRoZW1lRW5naW5lOjpTaXplLAotICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmLAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlRo
ZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvJik7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBXZWJUZXN0
VGhlbWVFbmdpbmVNYWNfaApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2lu
ZU1hYy5tbQkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvV2ViVGVzdFRoZW1lRW5naW5lTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIldlYlRlc3RUaGVtZUVuZ2luZU1hYy5oIgotCi0j
aW5jbHVkZSA8cHVibGljL1dlYkNhbnZhcy5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+
Ci0jaW5jbHVkZSAic2tpYS9leHQvc2tpYV91dGlsc19tYWMuaCIKLSNpbXBvcnQgPEFwcEtpdC9O
U0FmZmluZVRyYW5zZm9ybS5oPgotI2ltcG9ydCA8QXBwS2l0L05TR3JhcGhpY3NDb250ZXh0Lmg+
Ci0jaW1wb3J0IDxBcHBLaXQvTlNTY3JvbGxlci5oPgotI2ltcG9ydCA8QXBwS2l0L05TV2luZG93
Lmg+Ci0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotCi11c2luZyBXZWJLaXQ6OldlYkNhbnZh
czsKLXVzaW5nIFdlYktpdDo6V2ViUmVjdDsKLXVzaW5nIFdlYktpdDo6V2ViVGhlbWVFbmdpbmU7
Ci0KLS8vIFdlIGNhbid0IGRpcmVjdGx5IHRlbGwgdGhlIE5TU2Nyb2xsZXIgdG8gZHJhdyBpdHNl
bGYgYXMgYWN0aXZlIG9yIGluYWN0aXZlLAotLy8gaW5zdGVhZCB3ZSBoYXZlIHRvIG1ha2UgaXQg
YSBjaGlsZCBvZiBhbiAoaW4pYWN0aXZlIHdpbmRvdy4gVGhpcyBjbGFzcyBsZXRzCi0vLyB1cyBm
YWtlIHRoYXQgcGFyZW50IHdpbmRvdy4KLUBpbnRlcmZhY2UgRmFrZUFjdGl2ZVdpbmRvdyA6IE5T
V2luZG93IHsKLUBwcml2YXRlCi0gICAgQk9PTCBoYXNBY3RpdmVDb250cm9sczsKLX0KLSsgKE5T
V2luZG93KilhbHdheXNBY3RpdmVXaW5kb3c7Ci0rIChOU1dpbmRvdyopYWx3YXlzSW5hY3RpdmVX
aW5kb3c7Ci0tIChpZClpbml0V2l0aEFjdGl2ZUNvbnRyb2xzOihCT09MKV9oYXNBY3RpdmVDb250
cm9sczsKLS0gKEJPT0wpX2hhc0FjdGl2ZUNvbnRyb2xzOwotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gRmFrZUFjdGl2ZVdpbmRvdwotCi1zdGF0aWMgTlNXaW5kb3cqIGFsd2F5c0FjdGl2ZVdpbmRv
dyA9IG5pbDsKLXN0YXRpYyBOU1dpbmRvdyogYWx3YXlzSW5hY3RpdmVXaW5kb3cgPSBuaWw7Ci0K
LSsgKE5TV2luZG93KilhbHdheXNBY3RpdmVXaW5kb3cKLXsKLSAgICBpZiAoYWx3YXlzQWN0aXZl
V2luZG93ID09IG5pbCkKLSAgICAgICAgYWx3YXlzQWN0aXZlV2luZG93ID0gW1tzZWxmIGFsbG9j
XSBpbml0V2l0aEFjdGl2ZUNvbnRyb2xzOllFU107Ci0gICAgcmV0dXJuIGFsd2F5c0FjdGl2ZVdp
bmRvdzsKLX0KLQotKyAoTlNXaW5kb3cqKWFsd2F5c0luYWN0aXZlV2luZG93Ci17Ci0gICAgaWYg
KGFsd2F5c0luYWN0aXZlV2luZG93ID09IG5pbCkKLSAgICAgICAgYWx3YXlzSW5hY3RpdmVXaW5k
b3cgPSBbW3NlbGYgYWxsb2NdIGluaXRXaXRoQWN0aXZlQ29udHJvbHM6Tk9dOwotICAgIHJldHVy
biBhbHdheXNJbmFjdGl2ZVdpbmRvdzsKLX0KLQotLSAoaWQpaW5pdFdpdGhBY3RpdmVDb250cm9s
czooQk9PTClfaGFzQWN0aXZlQ29udHJvbHMKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwot
ICAgIGhhc0FjdGl2ZUNvbnRyb2xzID0gX2hhc0FjdGl2ZUNvbnRyb2xzOwotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tIChCT09MKV9oYXNBY3RpdmVDb250cm9scwotewotICAgIHJldHVybiBoYXNB
Y3RpdmVDb250cm9sczsKLX0KLQotQGVuZAotCi1uYW1lc3BhY2UgV2ViVGVzdFJ1bm5lciB7Ci0K
LW5hbWVzcGFjZSB7Ci0KLVRoZW1lVHJhY2tFbmFibGVTdGF0ZSBzdGF0ZVRvSElFbmFibGVTdGF0
ZShXZWJUaGVtZUVuZ2luZTo6U3RhdGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewot
ICAgIGNhc2UgV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ6Ci0gICAgICAgIHJldHVybiBr
VGhlbWVUcmFja0Rpc2FibGVkOwotICAgIGNhc2UgV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3Rp
dmU6Ci0gICAgICAgIHJldHVybiBrVGhlbWVUcmFja0luYWN0aXZlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBrVGhlbWVUcmFja0FjdGl2ZTsKLSAgICB9Ci19Ci0KLX0KLQotdm9pZCBX
ZWJUZXN0VGhlbWVFbmdpbmVNYWM6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgV2ViQ2FudmFz
KiBjYW52YXMsCi0gICAgV2ViVGhlbWVFbmdpbmU6OlN0YXRlIHN0YXRlLAotICAgIFdlYlRoZW1l
RW5naW5lOjpTaXplIHNpemUsCi0gICAgY29uc3QgV2ViUmVjdCYgcmVjdCwKLSAgICBjb25zdCBX
ZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFySW5mbyYgc2Nyb2xsYmFySW5mbykKLXsKLSAgICAvLyBU
byBtYXRjaCB0aGUgTWFjIHBvcnQsIHdlIHN0aWxsIHVzZSBISVRoZW1lIGZvciBpbm5lciBzY3Jv
bGxiYXJzLgotICAgIGlmIChzY3JvbGxiYXJJbmZvLnBhcmVudCA9PSBXZWJUaGVtZUVuZ2luZTo6
U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXIpCi0gICAgICAgIHBhaW50SElUaGVtZVNjcm9sbGJh
clRodW1iKGNhbnZhcywgc3RhdGUsIHNpemUsIHJlY3QsIHNjcm9sbGJhckluZm8pOwotICAgIGVs
c2UKLSAgICAgICAgcGFpbnROU1Njcm9sbGVyU2Nyb2xsYmFyVGh1bWIoY2FudmFzLCBzdGF0ZSwg
c2l6ZSwgcmVjdCwgc2Nyb2xsYmFySW5mbyk7Ci19Ci0KLS8vIER1cGxpY2F0ZWQgZnJvbSB3ZWJr
aXQvZ2x1ZS93ZWJ0aGVtZWVuZ2luZV9pbXBsX21hYy5jYyBpbiB0aGUgZG93bnN0cmVhbQotLy8g
Q2hyb21pdW0gV2ViVGhlbWVFbmdpbmUgaW1wbGVtZW50YXRpb24uCi12b2lkIFdlYlRlc3RUaGVt
ZUVuZ2luZU1hYzo6cGFpbnRISVRoZW1lU2Nyb2xsYmFyVGh1bWIoCi0gICAgV2ViQ2FudmFzKiBj
YW52YXMsCi0gICAgV2ViVGhlbWVFbmdpbmU6OlN0YXRlIHN0YXRlLAotICAgIFdlYlRoZW1lRW5n
aW5lOjpTaXplIHNpemUsCi0gICAgY29uc3QgV2ViUmVjdCYgcmVjdCwKLSAgICBjb25zdCBXZWJU
aGVtZUVuZ2luZTo6U2Nyb2xsYmFySW5mbyYgc2Nyb2xsYmFySW5mbykKLXsKLSAgICBISVRoZW1l
VHJhY2tEcmF3SW5mbyB0cmFja0luZm87Ci0gICAgdHJhY2tJbmZvLnZlcnNpb24gPSAwOwotICAg
IHRyYWNrSW5mby5raW5kID0gc2l6ZSA9PSBXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIgPyBr
VGhlbWVNZWRpdW1TY3JvbGxCYXIgOiBrVGhlbWVTbWFsbFNjcm9sbEJhcjsKLSAgICB0cmFja0lu
Zm8uYm91bmRzID0gQ0dSZWN0TWFrZShyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5o
ZWlnaHQpOwotICAgIHRyYWNrSW5mby5taW4gPSAwOwotICAgIHRyYWNrSW5mby5tYXggPSBzY3Jv
bGxiYXJJbmZvLm1heFZhbHVlOwotICAgIHRyYWNrSW5mby52YWx1ZSA9IHNjcm9sbGJhckluZm8u
Y3VycmVudFZhbHVlOwotICAgIHRyYWNrSW5mby50cmFja0luZm8uc2Nyb2xsYmFyLnZpZXdzaXpl
ID0gc2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZTsKLSAgICB0cmFja0luZm8uYXR0cmlidXRlcyA9
IDA7Ci0gICAgaWYgKHNjcm9sbGJhckluZm8ub3JpZW50YXRpb24gPT0gV2ViVGhlbWVFbmdpbmU6
OlNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCkKLSAgICAgICAgdHJhY2tJbmZvLmF0dHJp
YnV0ZXMgfD0ga1RoZW1lVHJhY2tIb3Jpem9udGFsOwotCi0gICAgdHJhY2tJbmZvLmVuYWJsZVN0
YXRlID0gc3RhdGVUb0hJRW5hYmxlU3RhdGUoc3RhdGUpOwotCi0gICAgdHJhY2tJbmZvLnRyYWNr
SW5mby5zY3JvbGxiYXIucHJlc3NTdGF0ZSA9Ci0gICAgICAgIHN0YXRlID09IFdlYlRoZW1lRW5n
aW5lOjpTdGF0ZVByZXNzZWQgPyBrVGhlbWVUaHVtYlByZXNzZWQgOiAwOwotICAgIHRyYWNrSW5m
by5hdHRyaWJ1dGVzIHw9IChrVGhlbWVUcmFja1Nob3dUaHVtYiB8IGtUaGVtZVRyYWNrSGlkZVRy
YWNrKTsKLSAgICBnZng6OlNraWFCaXRMb2NrZXIgYml0TG9ja2VyKGNhbnZhcyk7Ci0gICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IGJpdExvY2tlci5jZ0NvbnRleHQoKTsKLSAgICBISVRoZW1l
RHJhd1RyYWNrKCZ0cmFja0luZm8sIDAsIGNnQ29udGV4dCwga0hJVGhlbWVPcmllbnRhdGlvbk5v
cm1hbCk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1lRW5naW5lTWFjOjpwYWludE5TU2Nyb2xsZXJT
Y3JvbGxiYXJUaHVtYigKLSAgICBXZWJDYW52YXMqIGNhbnZhcywKLSAgICBXZWJUaGVtZUVuZ2lu
ZTo6U3RhdGUgc3RhdGUsCi0gICAgV2ViVGhlbWVFbmdpbmU6OlNpemUgc2l6ZSwKLSAgICBjb25z
dCBXZWJSZWN0JiByZWN0LAotICAgIGNvbnN0IFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZv
JiBzY3JvbGxiYXJJbmZvKQotewotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NT
dGF0ZV07Ci0gICAgTlNTY3JvbGxlciogc2Nyb2xsZXIgPSBbW05TU2Nyb2xsZXIgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5o
ZWlnaHQpXTsKLSAgICBbc2Nyb2xsZXIgc2V0RW5hYmxlZDpzdGF0ZSAhPSBXZWJUaGVtZUVuZ2lu
ZTo6U3RhdGVEaXNhYmxlZF07Ci0gICAgaWYgKHN0YXRlID09IFdlYlRoZW1lRW5naW5lOjpTdGF0
ZUluYWN0aXZlKQotICAgICAgICBbW1tGYWtlQWN0aXZlV2luZG93IGFsd2F5c0luYWN0aXZlV2lu
ZG93XSBjb250ZW50Vmlld10gYWRkU3VidmlldzpzY3JvbGxlcl07Ci0gICAgZWxzZQotICAgICAg
ICBbW1tGYWtlQWN0aXZlV2luZG93IGFsd2F5c0FjdGl2ZVdpbmRvd10gY29udGVudFZpZXddIGFk
ZFN1YnZpZXc6c2Nyb2xsZXJdOwotCi0gICAgW3Njcm9sbGVyIHNldENvbnRyb2xTaXplOnNpemUg
PT0gV2ViVGhlbWVFbmdpbmU6OlNpemVSZWd1bGFyID8gTlNSZWd1bGFyQ29udHJvbFNpemUgOiBO
U1NtYWxsQ29udHJvbFNpemVdOwotCi0gICAgZG91YmxlIHZhbHVlID0gZG91YmxlKHNjcm9sbGJh
ckluZm8uY3VycmVudFZhbHVlKSAvIGRvdWJsZShzY3JvbGxiYXJJbmZvLm1heFZhbHVlKTsKLSAg
ICBbc2Nyb2xsZXIgc2V0RG91YmxlVmFsdWU6IHZhbHVlXTsKLQotICAgIGZsb2F0IGtub2JQcm9w
b3J0aW9uID0gZmxvYXQoc2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZSkgLyBmbG9hdChzY3JvbGxi
YXJJbmZvLnRvdGFsU2l6ZSk7Ci0gICAgW3Njcm9sbGVyIHNldEtub2JQcm9wb3J0aW9uOiBrbm9i
UHJvcG9ydGlvbl07Ci0KLSAgICBnZng6OlNraWFCaXRMb2NrZXIgYml0TG9ja2VyKGNhbnZhcyk7
Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGJpdExvY2tlci5jZ0NvbnRleHQoKTsKLSAg
ICBOU0dyYXBoaWNzQ29udGV4dCogbnNHcmFwaGljc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjZ0NvbnRleHQgZmxpcHBlZDpZRVNd
OwotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuc0dyYXBoaWNzQ29u
dGV4dF07Ci0KLSAgICAvLyBEZXNwaXRlIHBhc3NpbmcgaW4gZnJhbWVSZWN0KCkgdG8gdGhlIHNj
cm9sbGVyLCBpdCBhbHdheXMgZHJhd3MgYXQgKDAsIDApLgotICAgIC8vIEZvcmNlIGl0IHRvIGRy
YXcgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uIGJ5IHRyYW5zbGF0aW5nIHRoZSB3aG9sZSBncmFwaGlj
cwotICAgIC8vIGNvbnRleHQuCi0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjZ0NvbnRleHQpOwot
ICAgIE5TQWZmaW5lVHJhbnNmb3JtICp0cmFuc2Zvcm0gPSBbTlNBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtXTsKLSAgICBbdHJhbnNmb3JtIHRyYW5zbGF0ZVhCeTpyZWN0LnggeUJ5OnJlY3QueV07
Ci0gICAgW3RyYW5zZm9ybSBjb25jYXRdOwotCi0gICAgW3Njcm9sbGVyIGRyYXdLbm9iXTsKLSAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNnQ29udGV4dCk7Ci0KLSAgICBbc2Nyb2xsZXIgcmVs
ZWFzZV07Ci0KLSAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwot
fQotCi19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9XZWJUZXN0VGhlbWVFbmdpbmVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2luZVdpbi5jcHAJ
KHJldmlzaW9uIDE0NzcwMSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlRlc3RUaGVtZUVuZ2luZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NzQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViVGVzdFRoZW1lRW5n
aW5lV2luLmgiCi0KLSNpbmNsdWRlICJUZXN0Q29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbi5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3NraWEvaW5jbHVkZS9jb3Jl
L1NrUmVjdC5oIgotI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWN0Lmg+Ci0KLS8vIEFsdGhvdWdoIGFs
bCB0aGlzIGNvZGUgaXMgZ2VuZXJpYywgd2UgaW5jbHVkZSB0aGVzZSBoZWFkZXJzCi0vLyB0byBw
dWxsIGluIHRoZSBXaW5kb3dzICNkZWZpbmVzIGZvciB0aGUgcGFydHMgYW5kIHN0YXRlcyBvZgot
Ly8gdGhlIGNvbnRyb2xzLgotI2luY2x1ZGUgPHZzc3R5bGUuaD4KLSNpbmNsdWRlIDx3aW5kb3dz
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJUZXN0UnVubmVy
IHsKLQotbmFtZXNwYWNlIHsKLQotLy8gV2UgZGVmaW5lIHRoaXMgZm9yIGNsYXJpdHksIGFsdGhv
dWdoIHRoZXJlIHJlYWxseSBzaG91bGQgYmUgYSBERkNTX05PUk1BTCBpbiB3aW51c2VyLmguCi1j
b25zdCBpbnQgZGZjc05vcm1hbCA9IDB4MDAwMDsKLQotU2tJUmVjdCB3ZWJSZWN0VG9Ta0lSZWN0
KGNvbnN0IFdlYlJlY3QmIHdlYlJlY3QpCi17Ci0gICAgU2tJUmVjdCBpcmVjdDsKLSAgICBpcmVj
dC5zZXQod2ViUmVjdC54LCB3ZWJSZWN0LnksIHdlYlJlY3QueCArIHdlYlJlY3Qud2lkdGggLSAx
LCB3ZWJSZWN0LnkgKyB3ZWJSZWN0LmhlaWdodCAtIDEpOwotICAgIHJldHVybiBpcmVjdDsKLX0K
LQotdm9pZCBkcmF3Q29udHJvbChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVj
dCwgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VHlwZSBjdHlwZSwgV2ViVGVzdFRoZW1lQ29udHJv
bFdpbjo6U3RhdGUgY3N0YXRlKQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW4gY29udHJv
bChjYW52YXMsIHdlYlJlY3RUb1NrSVJlY3QocmVjdCksIGN0eXBlLCBjc3RhdGUpOwotICAgIGNv
bnRyb2wuZHJhdygpOwotfQotCi12b2lkIGRyYXdUZXh0RmllbGQoV2ViQ2FudmFzKiBjYW52YXMs
IGNvbnN0IFdlYlJlY3QmIHJlY3QsIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUs
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlN0YXRlIGNzdGF0ZSwgYm9vbCBkcmF3RWRnZXMsIGJv
b2wgZmlsbENvbnRlbnRBcmVhLCBXZWJDb2xvciBjb2xvcikKLXsKLSAgICBXZWJUZXN0VGhlbWVD
b250cm9sV2luIGNvbnRyb2woY2FudmFzLCB3ZWJSZWN0VG9Ta0lSZWN0KHJlY3QpLCBjdHlwZSwg
Y3N0YXRlKTsKLSAgICBjb250cm9sLmRyYXdUZXh0RmllbGQoZHJhd0VkZ2VzLCBmaWxsQ29udGVu
dEFyZWEsIGNvbG9yKTsKLX0KLQotdm9pZCBkcmF3UHJvZ3Jlc3NCYXIoV2ViQ2FudmFzKiBjYW52
YXMsIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUsIFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW46OlN0YXRlIGNzdGF0ZSwgY29uc3QgV2ViUmVjdCYgYmFyUmVjdCwgY29uc3QgV2ViUmVj
dCYgZmlsbFJlY3QpCi17Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbiBjb250cm9sKGNhbnZh
cywgd2ViUmVjdFRvU2tJUmVjdChiYXJSZWN0KSwgY3R5cGUsIGNzdGF0ZSk7Ci0gICAgY29udHJv
bC5kcmF3UHJvZ3Jlc3NCYXIod2ViUmVjdFRvU2tJUmVjdChmaWxsUmVjdCkpOwotfQotCi19Ci0K
LXZvaWQgV2ViVGVzdFRoZW1lRW5naW5lV2luOjpwYWludEJ1dHRvbihXZWJDYW52YXMqIGNhbnZh
cywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgV2ViUmVjdCYg
cmVjdCkKLXsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpUeXBlIGN0eXBlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blR5cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6U3RhdGUgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blN0YXRlOwot
Ci0gICAgaWYgKHBhcnQgPT0gQlBfQ0hFQ0tCT1gpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkg
ewotICAgICAgICBjYXNlIENCU19VTkNIRUNLRUROT1JNQUw6Ci0gICAgICAgICAgICBXRUJLSVRf
QVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAgICAgIGN0eXBlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5jaGVja2VkQm94VHlwZTsKLSAgICAgICAgICAgIGNz
dGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDQlNfVU5DSEVDS0VESE9UOgotICAgICAgICAgICAgV0VC
S0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfQlVUVE9OQ0hFQ0sgfCBERkNTX0hPVCkp
OwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmNoZWNrZWRC
b3hUeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG90
U3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENCU19VTkNIRUNLRURQ
UkVTU0VEOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1Nf
QlVUVE9OQ0hFQ0sgfCBERkNTX1BVU0hFRCkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpVbmNoZWNrZWRCb3hUeXBlOwotICAgICAgICAgICAgY3N0YXRlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHJlc3NlZFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSBDQlNfVU5DSEVDS0VERElTQUJMRUQ6Ci0gICAgICAgICAgICBXRUJL
SVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVDSyB8IERGQ1NfSU5BQ1RJ
VkUpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5jaGVj
a2VkQm94VHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENCU19D
SEVDS0VETk9STUFMOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0g
KERGQ1NfQlVUVE9OQ0hFQ0sgfCBERkNTX0NIRUNLRUQpKTsKLSAgICAgICAgICAgIGN0eXBlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tlZEJveFR5cGU7Ci0gICAgICAgICAgICBjc3Rh
dGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgQ0JTX0NIRUNLRURIT1Q6Ci0gICAgICAgICAgICBXRUJLSVRf
QVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVDSyB8IERGQ1NfQ0hFQ0tFRCB8
IERGQ1NfSE9UKSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OkNoZWNrZWRCb3hUeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJv
bFdpbjo6SG90U3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENCU19D
SEVDS0VEUFJFU1NFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09
IChERkNTX0JVVFRPTkNIRUNLIHwgREZDU19DSEVDS0VEIHwgREZDU19QVVNIRUQpKTsKLSAgICAg
ICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tlZEJveFR5cGU7Ci0g
ICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENCU19DSEVDS0VERElTQUJMRUQ6
Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05D
SEVDSyB8IERGQ1NfQ0hFQ0tFRCB8IERGQ1NfSU5BQ1RJVkUpKTsKLSAgICAgICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tlZEJveFR5cGU7Ci0gICAgICAgICAgICBj
c3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDQlNfTUlYRUROT1JNQUw6Ci0gICAgICAgICAgICAv
LyBDbGFzc2ljIHRoZW1lIGNhbid0IHJlcHJlc2VudCBtaXhlZCBzdGF0ZSBjaGVja2JveC4gV2Ug
YXNzdW1lCi0gICAgICAgICAgICAvLyBpdCdzIGVxdWl2YWxlbnQgdG8gdW5jaGVja2VkLgotICAg
ICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19CVVRUT05DSEVDSyk7
Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkluZGV0ZXJtaW5h
dGVDaGVja2JveFR5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9s
V2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ0JT
X01JWEVESE9UOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERG
Q1NfQlVUVE9OQ0hFQ0sgfCBERkNTX0hPVCkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpJbmRldGVybWluYXRlQ2hlY2tib3hUeXBlOwotICAgICAgICAgICAg
Y3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG90U3RhdGU7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIENCU19NSVhFRFBSRVNTRUQ6Ci0gICAgICAgICAgICBXRUJL
SVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05DSEVDSyB8IERGQ1NfUFVTSEVE
KSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkluZGV0ZXJt
aW5hdGVDaGVja2JveFR5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250
cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENCU19NSVhFRERJU0FCTEVEOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3Rh
dGUgPT0gKERGQ1NfQlVUVE9OQ0hFQ0sgfCBERkNTX0lOQUNUSVZFKSk7Ci0gICAgICAgICAgICBj
dHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkluZGV0ZXJtaW5hdGVDaGVja2JveFR5cGU7
Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0
YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIGlmIChCUF9SQURJT0JVVFRPTiA9PSBwYXJ0KSB7Ci0gICAgICAgIHN3
aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSBSQlNfVU5DSEVDS0VETk9STUFMOgotICAgICAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19CVVRUT05SQURJTyk7Ci0g
ICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVuY2hlY2tlZFJhZGlv
VHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1h
bFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSQlNfVU5DSEVDS0VE
SE9UOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfQlVU
VE9OUkFESU8gfCBERkNTX0hPVCkpOwotICAgICAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpVbmNoZWNrZWRSYWRpb1R5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJU
ZXN0VGhlbWVDb250cm9sV2luOjpIb3RTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgUkJTX1VOQ0hFQ0tFRFBSRVNTRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJU
KGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05SQURJTyB8IERGQ1NfUFVTSEVEKSk7Ci0gICAg
ICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVuY2hlY2tlZFJhZGlvVHlw
ZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRT
dGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUkJTX1VOQ0hFQ0tFRERJ
U0FCTEVEOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1Nf
QlVUVE9OUkFESU8gfCBERkNTX0lOQUNUSVZFKSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OlVuY2hlY2tlZFJhZGlvVHlwZTsKLSAgICAgICAgICAgIGNzdGF0
ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBjYXNlIFJCU19DSEVDS0VETk9STUFMOgotICAgICAgICAgICAgV0VC
S0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfQlVUVE9OUkFESU8gfCBERkNTX0NIRUNL
RUQpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tl
ZFJhZGlvVHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
Ok5vcm1hbFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSQlNfQ0hF
Q0tFREhPVDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNT
X0JVVFRPTlJBRElPIHwgREZDU19DSEVDS0VEIHwgREZDU19IT1QpKTsKLSAgICAgICAgICAgIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Q2hlY2tlZFJhZGlvVHlwZTsKLSAgICAgICAg
ICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSQlNfQ0hFQ0tFRFBSRVNTRUQ6Ci0gICAgICAgICAg
ICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05SQURJTyB8IERGQ1Nf
Q0hFQ0tFRCB8IERGQ1NfUFVTSEVEKSk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVt
ZUNvbnRyb2xXaW46OkNoZWNrZWRSYWRpb1R5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJU
ZXN0VGhlbWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlIFJCU19DSEVDS0VERElTQUJMRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNT
RVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05SQURJTyB8IERGQ1NfQ0hFQ0tFRCB8IERG
Q1NfSU5BQ1RJVkUpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6Q2hlY2tlZFJhZGlvVHlwZTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNv
bnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKEJQX1BVU0hCVVRUT04gPT0g
cGFydCkgewotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgUEJTX05PUk1B
TDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfQlVUVE9O
UFVTSCk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlB1c2hC
dXR0b25UeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6
Tm9ybWFsU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFBCU19IT1Q6
Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19CVVRUT05Q
VVNIIHwgREZDU19IT1QpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJv
bFdpbjo6UHVzaEJ1dHRvblR5cGU7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpIb3RTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Ug
UEJTX1BSRVNTRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAo
REZDU19CVVRUT05QVVNIIHwgREZDU19QVVNIRUQpKTsKLSAgICAgICAgICAgIGN0eXBlID0gV2Vi
VGVzdFRoZW1lQ29udHJvbFdpbjo6UHVzaEJ1dHRvblR5cGU7Ci0gICAgICAgICAgICBjc3RhdGUg
PSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIFBCU19ESVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NF
UlQoY2xhc3NpY1N0YXRlID09IChERkNTX0JVVFRPTlBVU0ggfCBERkNTX0lOQUNUSVZFKSk7Ci0g
ICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlB1c2hCdXR0b25UeXBl
OwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRT
dGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUEJTX0RFRkFVTFRFRDoK
LSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfQlVUVE9OUFVT
SCk7Ci0gICAgICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlB1c2hCdXR0
b25UeXBlOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Rm9j
dXNlZFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLQotICAgIGRyYXdDb250cm9sKGNhbnZhcywgcmVjdCwgY3R5cGUsIGNzdGF0ZSk7Ci19Ci0K
LXZvaWQgV2ViVGVzdFRoZW1lRW5naW5lV2luOjpwYWludE1lbnVMaXN0KFdlYkNhbnZhcyogY2Fu
dmFzLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBXZWJSZWN0
JiByZWN0KQotewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUgPSBXZWJU
ZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duVHlwZTsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9s
V2luOjpTdGF0ZSBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpVbmtub3duU3RhdGU7
Ci0KLSAgICBpZiAoQ1BfRFJPUERPV05CVVRUT04gPT0gcGFydCkgewotICAgICAgICBjdHlwZSA9
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRyb3BEb3duQnV0dG9uVHlwZTsKLSAgICAgICAgc3dp
dGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIENCWFNfTk9STUFMOgotICAgICAgICAgICAgV0VC
S0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19NRU5VQVJST1cpOwotICAgICAgICAgICAg
Y3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIENCWFNfSE9UOgotICAgICAgICAgICAgV0VCS0lUX0FT
U0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfTUVOVUFSUk9XIHwgREZDU19IT1QpKTsKLSAgICAg
ICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdmVyU3RhdGU7Ci0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENCWFNfUFJFU1NFRDoKLSAgICAgICAgICAg
IFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX01FTlVBUlJPVyB8IERGQ1NfUFVT
SEVEKSk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVz
c2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIENCWFNfRElTQUJM
RUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19NRU5V
QVJST1cgfCBERkNTX0lOQUNUSVZFKSk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGRyYXdDb250cm9sKGNhbnZhcywgcmVjdCwgY3R5
cGUsIGNzdGF0ZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRoZW1lRW5naW5lV2luOjpwYWludFNjcm9s
bGJhckFycm93KFdlYkNhbnZhcyogY2FudmFzLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
IGNvbnN0IFdlYlJlY3QmIHJlY3QpCi17Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VHlw
ZSBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVua25vd25UeXBlOwotICAgIFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OlN0YXRlIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OlVua25vd25TdGF0ZTsKLQotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIEFCU19VUE5P
Uk1BTDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19TQ1JPTExV
UCk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VXBBcnJvd1R5cGU7
Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlOwot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX0RPV05OT1JNQUw6Ci0gICAgICAgIFdFQktJ
VF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfU0NST0xMRE9XTik7Ci0gICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RG93bkFycm93VHlwZTsKLSAgICAgICAgY3N0YXRl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBBQlNfTEVGVE5PUk1BTDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2lj
U3RhdGUgPT0gREZDU19TQ1JPTExMRUZUKTsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpMZWZ0QXJyb3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpOb3JtYWxTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFCU19S
SUdIVE5PUk1BTDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19T
Q1JPTExSSUdIVCk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Umln
aHRBcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5v
cm1hbFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX1VQSE9UOgotICAgICAg
ICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExVUCB8IERGQ1NfSE9U
KSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VXBBcnJvd1R5cGU7
Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX0RPV05IT1Q6Ci0gICAgICAgIFdFQktJVF9BU1NF
UlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9MTERPV04gfCBERkNTX0hPVCkpOwotICAgICAg
ICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRvd25BcnJvd1R5cGU7Ci0gICAgICAg
IGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQUJTX0xFRlRIT1Q6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3Np
Y1N0YXRlID09IChERkNTX1NDUk9MTExFRlQgfCBERkNTX0hPVCkpOwotICAgICAgICBjdHlwZSA9
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkxlZnRBcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAg
IGNhc2UgQUJTX1JJR0hUSE9UOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9
PSAoREZDU19TQ1JPTExSSUdIVCB8IERGQ1NfSE9UKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6UmlnaHRBcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
QUJTX1VQSE9WRVI6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1Nf
U0NST0xMVVApOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVwQXJy
b3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3ZlclN0
YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX0RPV05IT1ZFUjoKLSAgICAgICAg
V0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19TQ1JPTExET1dOKTsKLSAgICAgICAg
Y3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEb3duQXJyb3dUeXBlOwotICAgICAgICBj
c3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpIb3ZlclN0YXRlOwotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgQUJTX0xFRlRIT1ZFUjoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFz
c2ljU3RhdGUgPT0gREZDU19TQ1JPTExMRUZUKTsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpMZWZ0QXJyb3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpIb3ZlclN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJT
X1JJR0hUSE9WRVI6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1Nf
U0NST0xMUklHSFQpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlJp
Z2h0QXJyb3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpI
b3ZlclN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUJTX1VQUFJFU1NFRDoKLSAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xMVVAgfCBERkNT
X1BVU0hFRCB8IERGQ1NfRkxBVCkpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW46OlVwQXJyb3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9s
V2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfRE9XTlBS
RVNTRUQ6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX1NDUk9M
TERPV04gfCBERkNTX1BVU0hFRCB8IERGQ1NfRkxBVCkpOwotICAgICAgICBjdHlwZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OkRvd25BcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEFCU19MRUZUUFJFU1NFRDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUg
PT0gKERGQ1NfU0NST0xMTEVGVCB8IERGQ1NfUFVTSEVEIHwgREZDU19GTEFUKSk7Ci0gICAgICAg
IGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6TGVmdEFycm93VHlwZTsKLSAgICAgICAg
Y3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHJlc3NlZFN0YXRlOwotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgQUJTX1JJR0hUUFJFU1NFRDoKLSAgICAgICAgV0VCS0lUX0FTU0VS
VChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xMUklHSFQgfCBERkNTX1BVU0hFRCB8IERGQ1Nf
RkxBVCkpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlJpZ2h0QXJy
b3dUeXBlOwotICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVzc2Vk
U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfVVBESVNBQkxFRDoKLSAgICAg
ICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xMVVAgfCBERkNTX0lO
QUNUSVZFKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VXBBcnJv
d1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRpc2FibGVk
U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfRE9XTkRJU0FCTEVEOgotICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExET1dOIHwgREZD
U19JTkFDVElWRSkpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRv
d25BcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRp
c2FibGVkU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfTEVGVERJU0FCTEVE
OgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExMRUZU
IHwgREZDU19JTkFDVElWRSkpOwotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xX
aW46OkxlZnRBcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xX
aW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBQlNfUklHSFRE
SVNBQkxFRDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NS
T0xMUklHSFQgfCBERkNTX0lOQUNUSVZFKSk7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1l
Q29udHJvbFdpbjo6UmlnaHRBcnJvd1R5cGU7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVt
ZUNvbnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBkcmF3Q29udHJvbChjYW52YXMsIHJlY3QsIGN0eXBlLCBjc3RhdGUpOwot
fQotCi12b2lkIFdlYlRlc3RUaGVtZUVuZ2luZVdpbjo6cGFpbnRTY3JvbGxiYXJUaHVtYihXZWJD
YW52YXMqIGNhbnZhcywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29u
c3QgV2ViUmVjdCYgcmVjdCkKLXsKLSAgICBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpUeXBlIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blR5cGU7Ci0gICAgV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6U3RhdGUgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5r
bm93blN0YXRlOwotCi0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBTQlBfVEhVTUJCVE5I
T1JaOgotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Okhvcml6b250YWxT
Y3JvbGxUaHVtYlR5cGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTQlBfVEhVTUJCVE5W
RVJUOgotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlZlcnRpY2FsU2Ny
b2xsVGh1bWJUeXBlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0JQX0dSSVBQRVJIT1Ja
OgotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Okhvcml6b250YWxTY3Jv
bGxHcmlwVHlwZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNCUF9HUklQUEVSVkVSVDoK
LSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpWZXJ0aWNhbFNjcm9sbEdy
aXBUeXBlOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc3dpdGNo
IChzdGF0ZSkgewotICAgIGNhc2UgU0NSQlNfTk9STUFMOgotICAgICAgICBXRUJLSVRfQVNTRVJU
KGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBT
Q1JCU19IT1Q6Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfSE9U
KTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG90U3RhdGU7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTQ1JCU19IT1ZFUjoKLSAgICAgICAgV0VCS0lUX0FT
U0VSVChjbGFzc2ljU3RhdGUgPT0gZGZjc05vcm1hbCk7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OkhvdmVyU3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBTQ1JCU19QUkVTU0VEOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBk
ZmNzTm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHJl
c3NlZFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0NSQlNfRElTQUJMRUQ6Ci0g
ICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVGhpcyBzaG91bGQgbmV2ZXIg
aGFwcGVuIGluIHByYWN0aWNlLgotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgZHJhd0NvbnRyb2woY2FudmFzLCByZWN0LCBjdHlwZSwgY3N0YXRlKTsKLX0KLQotdm9p
ZCBXZWJUZXN0VGhlbWVFbmdpbmVXaW46OnBhaW50U2Nyb2xsYmFyVHJhY2soV2ViQ2FudmFzKiBj
YW52YXMsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IFdlYlJl
Y3QmIHJlY3QsIGNvbnN0IFdlYlJlY3QmIGFsaWduUmVjdCkKLXsKLSAgICBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpUeXBlIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blR5
cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6U3RhdGUgY3N0YXRlID0gV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6VW5rbm93blN0YXRlOwotCi0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAg
Y2FzZSBTQlBfVVBQRVJUUkFDS0hPUlo6Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29u
dHJvbFdpbjo6SG9yaXpvbnRhbFNjcm9sbFRyYWNrQmFja1R5cGU7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBTQlBfTE9XRVJUUkFDS0hPUlo6Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRo
ZW1lQ29udHJvbFdpbjo6SG9yaXpvbnRhbFNjcm9sbFRyYWNrRm9yd2FyZFR5cGU7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBTQlBfVVBQRVJUUkFDS1ZFUlQ6Ci0gICAgICAgIGN0eXBlID0g
V2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VmVydGljYWxTY3JvbGxUcmFja0JhY2tUeXBlOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgU0JQX0xPV0VSVFJBQ0tWRVJUOgotICAgICAgICBjdHlw
ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlZlcnRpY2FsU2Nyb2xsVHJhY2tGb3J3YXJkVHlw
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBXRUJLSVRfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHN3aXRjaCAoc3Rh
dGUpIHsKLSAgICBjYXNlIFNDUkJTX05PUk1BTDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFz
c2ljU3RhdGUgPT0gZGZjc05vcm1hbCk7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNv
bnRyb2xXaW46Ok5vcm1hbFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0NSQlNf
SE9UOgotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIFRoaXMgc2hvdWxk
IG5ldmVyIGhhcHBlbiBpbiBwcmFjdGljZS4KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFND
UkJTX0hPVkVSOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9y
bWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG92ZXJTdGF0
ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNDUkJTX1BSRVNTRUQ6Ci0gICAgICAgIFdF
QktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGlu
IHByYWN0aWNlLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU0NSQlNfRElTQUJMRUQ6Ci0g
ICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfSU5BQ1RJVkUpOwotICAg
ICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpEaXNhYmxlZFN0YXRlOwotICAg
ICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZHJhd0NvbnRyb2woY2FudmFz
LCByZWN0LCBjdHlwZSwgY3N0YXRlKTsKLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVFbmdpbmVXaW46
OnBhaW50U3BpbkJ1dHRvbihXZWJDYW52YXMqIGNhbnZhcywgaW50IHBhcnQsIGludCBzdGF0ZSwg
aW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCkKLXsKLSAgICBXZWJUZXN0VGhl
bWVDb250cm9sV2luOjpUeXBlIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93
blR5cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6U3RhdGUgY3N0YXRlID0gV2ViVGVz
dFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blN0YXRlOwotCi0gICAgaWYgKHBhcnQgPT0gU1BOUF9V
UCkgewotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVwQXJyb3dUeXBl
OwotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgVVBTX05PUk1BTDoKLSAg
ICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfU0NST0xMVVApOwot
ICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVUFNfRElTQUJMRUQ6Ci0gICAgICAg
ICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExVUCB8IERGQ1Nf
SU5BQ1RJVkUpKTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46
OkRpc2FibGVkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVUFNfUFJF
U1NFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IChERkNTX1ND
Uk9MTFVQIHwgREZDU19QVVNIRUQpKTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVt
ZUNvbnRyb2xXaW46OlByZXNzZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFVQU19IT1Q6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSAo
REZDU19TQ1JPTExVUCB8IERGQ1NfSE9UKSk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0
VGhlbWVDb250cm9sV2luOjpIb3ZlclN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKHBhcnQgPT0gU1BOUF9ET1dOKSB7Ci0gICAgICAgIGN0eXBl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RG93bkFycm93VHlwZTsKLSAgICAgICAgc3dpdGNo
IChzdGF0ZSkgewotICAgICAgICBjYXNlIEROU19OT1JNQUw6Ci0gICAgICAgICAgICBXRUJLSVRf
QVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX1NDUk9MTERPV04pOwotICAgICAgICAgICAgY3N0
YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3RhdGU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBETlNfRElTQUJMRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNT
RVJUKGNsYXNzaWNTdGF0ZSA9PSAoREZDU19TQ1JPTExET1dOIHwgREZDU19JTkFDVElWRSkpOwot
ICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlzYWJsZWRTdGF0
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEROU19QUkVTU0VEOgotICAgICAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xMRE9XTiB8IERG
Q1NfUFVTSEVEKSk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2lu
OjpQcmVzc2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBETlNfSE9U
OgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gKERGQ1NfU0NST0xM
RE9XTiB8IERGQ1NfSE9UKSk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250
cm9sV2luOjpIb3ZlclN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIGRyYXdD
b250cm9sKGNhbnZhcywgcmVjdCwgY3R5cGUsIGNzdGF0ZSk7Ci19Ci0KLXZvaWQgV2ViVGVzdFRo
ZW1lRW5naW5lV2luOjpwYWludFRleHRGaWVsZChXZWJDYW52YXMqIGNhbnZhcywgaW50IHBhcnQs
IGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgV2ViUmVjdCYgcmVjdCwgV2ViQ29s
b3IgY29sb3IsIGJvb2wgZmlsbENvbnRlbnRBcmVhLCBib29sIGRyYXdFZGdlcykKLXsKLSAgICBX
ZWJUZXN0VGhlbWVDb250cm9sV2luOjpUeXBlIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6VW5rbm93blR5cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6U3RhdGUgY3N0YXRl
ID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6VW5rbm93blN0YXRlOwotCi0gICAgV0VCS0lUX0FT
U0VSVChFUF9FRElUVEVYVCA9PSBwYXJ0KTsKLSAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW46OlRleHRGaWVsZFR5cGU7Ci0KLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBF
VFNfTk9STUFMOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9y
bWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6Tm9ybWFsU3Rh
dGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBFVFNfSE9UOgotICAgICAgICBXRUJLSVRf
QVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX0hPVCk7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
RVRTX0RJU0FCTEVEOgotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNT
X0lOQUNUSVZFKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6RGlz
YWJsZWRTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEVUU19TRUxFQ1RFRDoKLSAg
ICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19QVVNIRUQpOwotICAgICAg
ICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVzc2VkU3RhdGU7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBFVFNfRk9DVVNFRDoKLSAgICAgICAgV0VCS0lUX0FTU0VSVChj
bGFzc2ljU3RhdGUgPT0gZGZjc05vcm1hbCk7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVt
ZUNvbnRyb2xXaW46OkZvY3VzZWRTdGF0ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEVU
U19SRUFET05MWToKLSAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gZGZjc05v
cm1hbCk7Ci0gICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlJlYWRPbmx5
U3RhdGU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgV0VCS0lUX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkcmF3VGV4
dEZpZWxkKGNhbnZhcywgcmVjdCwgY3R5cGUsIGNzdGF0ZSwgZHJhd0VkZ2VzLCBmaWxsQ29udGVu
dEFyZWEsIGNvbG9yKTsKLX0KLQotdm9pZCBXZWJUZXN0VGhlbWVFbmdpbmVXaW46OnBhaW50VHJh
Y2tiYXIoV2ViQ2FudmFzKiBjYW52YXMsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2lj
U3RhdGUsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCi17Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdp
bjo6VHlwZSBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlVua25vd25UeXBlOwotICAg
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlN0YXRlIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRy
b2xXaW46OlVua25vd25TdGF0ZTsKLQotICAgIGlmIChUS1BfVEhVTUJCT1RUT00gPT0gcGFydCkg
ewotICAgICAgICBjdHlwZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Okhvcml6b250YWxTbGlk
ZXJUaHVtYlR5cGU7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2FzZSBUVVNf
Tk9STUFMOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gZGZjc05v
cm1hbCk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3Jt
YWxTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVFVTX0hPVDoKLSAg
ICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1NfSE9UKTsKLSAgICAg
ICAgICAgIGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkhvdFN0YXRlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBUVVNfRElTQUJMRUQ6Ci0gICAgICAgICAgICBX
RUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX0lOQUNUSVZFKTsKLSAgICAgICAgICAg
IGNzdGF0ZSA9IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkRpc2FibGVkU3RhdGU7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRVU19QUkVTU0VEOgotICAgICAgICAgICAgV0VC
S0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gREZDU19QVVNIRUQpOwotICAgICAgICAgICAgY3N0
YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6UHJlc3NlZFN0YXRlOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChUS1BfVEhVTUJWRVJUID09IHBhcnQpIHsKLSAgICAgICAgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpWZXJ0aWNhbFNsaWRlclRodW1iVHlwZTsKLSAgICAgICAgc3dpdGNoIChzdGF0
ZSkgewotICAgICAgICBjYXNlIFRVU19OT1JNQUw6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJU
KGNsYXNzaWNTdGF0ZSA9PSBkZmNzTm9ybWFsKTsKLSAgICAgICAgICAgIGNzdGF0ZSA9IFdlYlRl
c3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBUVVNfSE9UOgotICAgICAgICAgICAgV0VCS0lUX0FTU0VSVChjbGFzc2ljU3Rh
dGUgPT0gREZDU19IT1QpOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJv
bFdpbjo6SG90U3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRVU19E
SVNBQkxFRDoKLSAgICAgICAgICAgIFdFQktJVF9BU1NFUlQoY2xhc3NpY1N0YXRlID09IERGQ1Nf
SU5BQ1RJVkUpOwotICAgICAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6
RGlzYWJsZWRTdGF0ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVFVTX1BS
RVNTRUQ6Ci0gICAgICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9PSBERkNTX1BV
U0hFRCk7Ci0gICAgICAgICAgICBjc3RhdGUgPSBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpQcmVz
c2VkU3RhdGU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKFRLUF9UUkFDSyA9PSBwYXJ0KSB7Ci0gICAgICAgIGN0
eXBlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6SG9yaXpvbnRhbFNsaWRlclRyYWNrVHlwZTsK
LSAgICAgICAgV0VCS0lUX0FTU0VSVChzdGF0ZSA9PSBUUlNfTk9STUFMKTsKLSAgICAgICAgV0VC
S0lUX0FTU0VSVChjbGFzc2ljU3RhdGUgPT0gZGZjc05vcm1hbCk7Ci0gICAgICAgIGNzdGF0ZSA9
IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46Ok5vcm1hbFN0YXRlOwotICAgIH0gZWxzZSBpZiAoVEtQ
X1RSQUNLVkVSVCA9PSBwYXJ0KSB7Ci0gICAgICAgIGN0eXBlID0gV2ViVGVzdFRoZW1lQ29udHJv
bFdpbjo6VmVydGljYWxTbGlkZXJUcmFja1R5cGU7Ci0gICAgICAgIFdFQktJVF9BU1NFUlQoc3Rh
dGUgPT0gVFJWU19OT1JNQUwpOwotICAgICAgICBXRUJLSVRfQVNTRVJUKGNsYXNzaWNTdGF0ZSA9
PSBkZmNzTm9ybWFsKTsKLSAgICAgICAgY3N0YXRlID0gV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6
Tm9ybWFsU3RhdGU7Ci0gICAgfSBlbHNlCi0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLQotICAgIGRyYXdDb250cm9sKGNhbnZhcywgcmVjdCwgY3R5cGUsIGNzdGF0ZSk7Ci19
Ci0KLQotdm9pZCBXZWJUZXN0VGhlbWVFbmdpbmVXaW46OnBhaW50UHJvZ3Jlc3NCYXIoV2ViS2l0
OjpXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViS2l0OjpXZWJSZWN0JiBiYXJSZWN0LCBjb25z
dCBXZWJLaXQ6OldlYlJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlKQot
ewotICAgIFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OlR5cGUgY3R5cGUgPSBXZWJUZXN0VGhlbWVD
b250cm9sV2luOjpQcm9ncmVzc0JhclR5cGU7Ci0gICAgV2ViVGVzdFRoZW1lQ29udHJvbFdpbjo6
U3RhdGUgY3N0YXRlID0gZGV0ZXJtaW5hdGUgPyBXZWJUZXN0VGhlbWVDb250cm9sV2luOjpOb3Jt
YWxTdGF0ZSA6IFdlYlRlc3RUaGVtZUNvbnRyb2xXaW46OkluZGV0ZXJtaW5hdGVTdGF0ZTsKLSAg
ICBkcmF3UHJvZ3Jlc3NCYXIoY2FudmFzLCBjdHlwZSwgY3N0YXRlLCBiYXJSZWN0LCB2YWx1ZVJl
Y3QpOwotfQotCi0KLVdlYktpdDo6V2ViU2l6ZSBXZWJUZXN0VGhlbWVFbmdpbmVXaW46OmdldFNp
emUoaW50IHBhcnQpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6V2ViU2l6ZSgpOwotfQotCi19Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0
VGhlbWVFbmdpbmVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9XZWJUZXN0VGhlbWVFbmdpbmVXaW4uaAkocmV2aXNpb24gMTQ3
NzAxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2Vi
VGVzdFRoZW1lRW5naW5lV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBU
aGlzIGltcGxlbWVudHMgdGhlIFdlYlRoZW1lRW5naW5lIEFQSSB1c2VkIGJ5IHRoZSBXaW5kb3dz
IHZlcnNpb24gb2YKLS8vIENocm9taXVtIHRvIHJlbmRlciBuYXRpdmUgZm9ybSBjb250cm9scyBs
aWtlIGNoZWNrYm94ZXMsIHJhZGlvIGJ1dHRvbnMsCi0vLyBhbmQgc2Nyb2xsIGJhcnMuCi0vLyBU
aGUgbm9ybWFsIGltcGxlbWVudGF0aW9uIChuYXRpdmVfdGhlbWUpIHJlbmRlcnMgdGhlIGNvbnRy
b2xzIHVzaW5nIGVpdGhlcgotLy8gdGhlIFVYVGhlbWUgdGhlbWluZyBlbmdpbmUgcHJlc2VudCBp
biBYUCwgVmlzdGEsIGFuZCBXaW4gNywgb3IgdGhlICJjbGFzc2ljIgotLy8gdGhlbWUgdXNlZCBp
ZiB0aGF0IHRoZW1lIGlzIHNlbGVjdGVkIGluIHRoZSBEZXNrdG9wIHNldHRpbmdzLgotLy8gVW5m
b3J0dW5hdGVseSwgYm90aCBvZiB0aGVzZSB0aGVtZXMgcmVuZGVyIGNvbnRyb2xzIGRpZmZlcmVu
dGx5IG9uIHRoZQotLy8gZGlmZmVyZW50IHZlcnNpb25zIG9mIFdpbmRvd3MuCi0vLwotLy8gSW4g
b3JkZXIgdG8gZW5zdXJlIG1heGltdW0gY29uc2lzdGVuY3kgb2YgYmFzZWxpbmVzIGFjcm9zcyB0
aGUgZGlmZmVyZW50Ci0vLyBXaW5kb3dzIHZlcnNpb25zLCB3ZSBwcm92aWRlIGEgc2ltcGxlIGlt
cGxlbWVudGF0aW9uIGZvciBEUlQgaGVyZQotLy8gaW5zdGVhZC4gVGhlc2UgY29udHJvbHMgYXJl
IGFjdHVhbGx5IHBsYXRmb3JtLWluZGVwZW5kZW50ICh0aGV5J3JlIHJlbmRlcmVkCi0vLyB1c2lu
ZyBTa2lhKSBhbmQgY291bGQgYmUgdXNlZCBvbiBMaW51eCBhbmQgdGhlIE1hYyBhcyB3ZWxsLCBz
aG91bGQgd2UKLS8vIGNob29zZSB0byBkbyBzbyBhdCBzb21lIHBvaW50LgotLy8KLQotI2lmbmRl
ZiBXZWJUZXN0VGhlbWVFbmdpbmVXaW5faAotI2RlZmluZSBXZWJUZXN0VGhlbWVFbmdpbmVXaW5f
aAotCi0jaW5jbHVkZSA8cHVibGljL3dpbi9XZWJUaGVtZUVuZ2luZS5oPgotCi1uYW1lc3BhY2Ug
V2ViVGVzdFJ1bm5lciB7Ci0KLWNsYXNzIFdlYlRlc3RUaGVtZUVuZ2luZVdpbiA6IHB1YmxpYyBX
ZWJLaXQ6OldlYlRoZW1lRW5naW5lIHsKLXB1YmxpYzoKLSAgICBXZWJUZXN0VGhlbWVFbmdpbmVX
aW4oKSB7IH0KLQotICAgIC8vIFdlYlRoZW1lRW5naW5lIG1ldGhvZHM6Ci0gICAgdmlydHVhbCB2
b2lkIHBhaW50QnV0dG9uKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyosIGludCBwYXJ0LCBp
bnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViUmVj
dCYpOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50TWVudUxpc3QoCi0gICAgICAgIFdlYktpdDo6
V2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAg
ICAgY29uc3QgV2ViS2l0OjpXZWJSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3Jv
bGxiYXJBcnJvdygKLSAgICAgICAgV2ViS2l0OjpXZWJDYW52YXMqLCBpbnQgc3RhdGUsIGludCBj
bGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwotCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIFdlYktpdDo6V2ViQ2FudmFz
KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3Qg
V2ViS2l0OjpXZWJSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJUcmFj
aygKLSAgICAgICAgV2ViS2l0OjpXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmLCBjb25zdCBXZWJL
aXQ6OldlYlJlY3QmIGFsaWduUmVjdCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTcGluQnV0
dG9uKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViUmVjdCYpOwotCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50VGV4dEZpZWxkKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyos
IGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdl
YktpdDo6V2ViUmVjdCYsIFdlYktpdDo6V2ViQ29sb3IsIGJvb2wgZmlsbENvbnRlbnRBcmVhLAot
ICAgICAgICBib29sIGRyYXdFZGdlcyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja2Jh
cigKLSAgICAgICAgV2ViS2l0OjpXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlJlY3QmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKAotICAgICAgICBXZWJLaXQ6OldlYkNhbnZhcyos
IGNvbnN0IFdlYktpdDo6V2ViUmVjdCYgYmFyUmVjdCwKLSAgICAgICAgY29uc3QgV2ViS2l0OjpX
ZWJSZWN0JiB2YWx1ZVJlY3QsCi0gICAgICAgIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSB0aW1l
KTsKLQotICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJTaXplIGdldFNpemUoaW50IHBhcnQpOwotfTsK
LQotfQotCi0jZW5kaWYgLy8gV2ViVGVzdFRoZW1lRW5naW5lV2luX2gKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlVzZXJNZWRpYUNsaWVudE1v
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1dlYlVzZXJNZWRpYUNsaWVudE1vY2suY3BwCShyZXZpc2lvbiAxNDc3MDEpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9XZWJVc2VyTWVk
aWFDbGllbnRNb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRV9XRUJSVEMKLSNpbmNsdWRlICJXZWJVc2VyTWVkaWFD
bGllbnRNb2NrLmgiCi0KLSNpbmNsdWRlICJNb2NrQ29uc3RyYWludHMuaCIKLSNpbmNsdWRlICJX
ZWJEb2N1bWVudC5oIgotI2luY2x1ZGUgIldlYk1lZGlhU3RyZWFtUmVnaXN0cnkuaCIKLSNpbmNs
dWRlICJXZWJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJVc2VyTWVkaWFSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSA8cHVibGljL1dlYk1lZGlhQ29uc3RyYWludHMuaD4KLSNpbmNsdWRlIDxwdWJs
aWMvV2ViTWVkaWFTdHJlYW0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1Tb3Vy
Y2UuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViTWVkaWFTdHJlYW1UcmFjay5oPgotI2luY2x1ZGUg
PHB1YmxpYy9XZWJWZWN0b3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFtZXNw
YWNlIFdlYlRlc3RSdW5uZXIgewotCi1jbGFzcyBVc2VyTWVkaWFSZXF1ZXN0VGFzayA6IHB1Ymxp
YyBXZWJNZXRob2RUYXNrPFdlYlVzZXJNZWRpYUNsaWVudE1vY2s+IHsKLXB1YmxpYzoKLSAgICBV
c2VyTWVkaWFSZXF1ZXN0VGFzayhXZWJVc2VyTWVkaWFDbGllbnRNb2NrKiBvYmplY3QsIGNvbnN0
IFdlYlVzZXJNZWRpYVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYk1lZGlhU3RyZWFtIHJlc3Vs
dCkKLSAgICAgICAgOiBXZWJNZXRob2RUYXNrPFdlYlVzZXJNZWRpYUNsaWVudE1vY2s+KG9iamVj
dCkKLSAgICAgICAgLCBtX3JlcXVlc3QocmVxdWVzdCkKLSAgICAgICAgLCBtX3Jlc3VsdChyZXN1
bHQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJ
REUKLSAgICB7Ci0gICAgICAgIGlmIChtX3Jlc3VsdC5pc051bGwoKSkKLSAgICAgICAgICAgIG1f
cmVxdWVzdC5yZXF1ZXN0RmFpbGVkKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVx
dWVzdC5yZXF1ZXN0U3VjY2VlZGVkKG1fcmVzdWx0KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
V2ViVXNlck1lZGlhUmVxdWVzdCBtX3JlcXVlc3Q7Ci0gICAgV2ViTWVkaWFTdHJlYW0gbV9yZXN1
bHQ7Ci19OwotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1jbGFzcyBNb2Nr
RXh0cmFEYXRhIDogcHVibGljIFdlYk1lZGlhU3RyZWFtOjpFeHRyYURhdGEgewotcHVibGljOgot
ICAgIGludCBmb287Ci19OwotCi1XZWJVc2VyTWVkaWFDbGllbnRNb2NrOjpXZWJVc2VyTWVkaWFD
bGllbnRNb2NrKFdlYlRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi0gICAgOiBtX2RlbGVnYXRlKGRl
bGVnYXRlKQotewotfQotCi12b2lkIFdlYlVzZXJNZWRpYUNsaWVudE1vY2s6OnJlcXVlc3RVc2Vy
TWVkaWEoY29uc3QgV2ViVXNlck1lZGlhUmVxdWVzdCYgc3RyZWFtUmVxdWVzdCwgY29uc3QgV2Vi
VmVjdG9yPFdlYk1lZGlhU3RyZWFtU291cmNlPiYgYXVkaW9Tb3VyY2VzVmVjdG9yLCBjb25zdCBX
ZWJWZWN0b3I8V2ViTWVkaWFTdHJlYW1Tb3VyY2U+JiB2aWRlb1NvdXJjZXNWZWN0b3IpCi17Ci0g
ICAgV0VCS0lUX0FTU0VSVCghc3RyZWFtUmVxdWVzdC5pc051bGwoKSk7Ci0gICAgV2ViVXNlck1l
ZGlhUmVxdWVzdCByZXF1ZXN0ID0gc3RyZWFtUmVxdWVzdDsKLQotICAgIGlmIChyZXF1ZXN0Lm93
bmVyRG9jdW1lbnQoKS5pc051bGwoKSB8fCAhcmVxdWVzdC5vd25lckRvY3VtZW50KCkuZnJhbWUo
KSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgVXNlck1lZGlhUmVxdWVzdFRh
c2sodGhpcywgcmVxdWVzdCwgV2ViTWVkaWFTdHJlYW0oKSkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgV2ViTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHJlcXVlc3QuYXVk
aW9Db25zdHJhaW50cygpOwotICAgIGlmICghY29uc3RyYWludHMuaXNOdWxsKCkgJiYgIU1vY2tD
b25zdHJhaW50czo6dmVyaWZ5Q29uc3RyYWludHMoY29uc3RyYWludHMpKSB7Ci0gICAgICAgIG1f
ZGVsZWdhdGUtPnBvc3RUYXNrKG5ldyBVc2VyTWVkaWFSZXF1ZXN0VGFzayh0aGlzLCByZXF1ZXN0
LCBXZWJNZWRpYVN0cmVhbSgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3Ry
YWludHMgPSByZXF1ZXN0LnZpZGVvQ29uc3RyYWludHMoKTsKLSAgICBpZiAoIWNvbnN0cmFpbnRz
LmlzTnVsbCgpICYmICFNb2NrQ29uc3RyYWludHM6OnZlcmlmeUNvbnN0cmFpbnRzKGNvbnN0cmFp
bnRzKSkgewotICAgICAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgVXNlck1lZGlhUmVxdWVz
dFRhc2sodGhpcywgcmVxdWVzdCwgV2ViTWVkaWFTdHJlYW0oKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IHplcm8gPSAwOwotICAgIGNvbnN0IHNpemVfdCBv
bmUgPSAxOwotICAgIFdlYlZlY3RvcjxXZWJNZWRpYVN0cmVhbVRyYWNrPiBhdWRpb1RyYWNrcyhy
ZXF1ZXN0LmF1ZGlvKCkgPyBvbmUgOiB6ZXJvKTsKLSAgICBXZWJWZWN0b3I8V2ViTWVkaWFTdHJl
YW1UcmFjaz4gdmlkZW9UcmFja3MocmVxdWVzdC52aWRlbygpID8gb25lIDogemVybyk7Ci0KLSAg
ICBpZiAocmVxdWVzdC5hdWRpbygpKSB7Ci0gICAgICAgIFdlYk1lZGlhU3RyZWFtU291cmNlIHNv
dXJjZTsKLSAgICAgICAgc291cmNlLmluaXRpYWxpemUoIk1vY2tBdWRpb0RldmljZSMxIiwgV2Vi
TWVkaWFTdHJlYW1Tb3VyY2U6OlR5cGVBdWRpbywgIk1vY2sgYXVkaW8gZGV2aWNlIik7Ci0gICAg
ICAgIGF1ZGlvVHJhY2tzWzBdLmluaXRpYWxpemUoc291cmNlKTsKLSAgICB9Ci0KLSAgICBpZiAo
cmVxdWVzdC52aWRlbygpKSB7Ci0gICAgICAgIFdlYk1lZGlhU3RyZWFtU291cmNlIHNvdXJjZTsK
LSAgICAgICAgc291cmNlLmluaXRpYWxpemUoIk1vY2tWaWRlb0RldmljZSMxIiwgV2ViTWVkaWFT
dHJlYW1Tb3VyY2U6OlR5cGVWaWRlbywgIk1vY2sgdmlkZW8gZGV2aWNlIik7Ci0gICAgICAgIHZp
ZGVvVHJhY2tzWzBdLmluaXRpYWxpemUoc291cmNlKTsKLSAgICB9Ci0KLSAgICBXZWJNZWRpYVN0
cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtLmluaXRpYWxpemUoYXVkaW9UcmFja3MsIHZpZGVvVHJh
Y2tzKTsKLQotICAgIHN0cmVhbS5zZXRFeHRyYURhdGEobmV3IE1vY2tFeHRyYURhdGEoKSk7Ci0K
LSAgICBtX2RlbGVnYXRlLT5wb3N0VGFzayhuZXcgVXNlck1lZGlhUmVxdWVzdFRhc2sodGhpcywg
cmVxdWVzdCwgc3RyZWFtKSk7Ci19Ci0KLXZvaWQgV2ViVXNlck1lZGlhQ2xpZW50TW9jazo6Y2Fu
Y2VsVXNlck1lZGlhUmVxdWVzdChjb25zdCBXZWJVc2VyTWVkaWFSZXF1ZXN0JikKLXsKLX0KLQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFX1dFQlJUQwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVXNlck1lZGlhQ2xpZW50TW9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1dlYlVz
ZXJNZWRpYUNsaWVudE1vY2suaAkocmV2aXNpb24gMTQ3NzAxKQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvV2ViVXNlck1lZGlhQ2xpZW50TW9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlVzZXJNZWRpYUNsaWVudE1v
Y2tfaAotI2RlZmluZSBXZWJVc2VyTWVkaWFDbGllbnRNb2NrX2gKLQotI2luY2x1ZGUgIlRlc3RD
b21tb24uaCIKLSNpbmNsdWRlICJXZWJUYXNrLmgiCi0jaW5jbHVkZSAiV2ViVXNlck1lZGlhQ2xp
ZW50LmgiCi0jaW5jbHVkZSA8cHVibGljL1dlYkNvbW1vbi5oPgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJTdHJpbmcuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+Ci0KLW5hbWVzcGFjZSBXZWJU
ZXN0UnVubmVyIHsKLQotY2xhc3MgV2ViVGVzdERlbGVnYXRlOwotCi1jbGFzcyBXZWJVc2VyTWVk
aWFDbGllbnRNb2NrIDogcHVibGljIFdlYktpdDo6V2ViVXNlck1lZGlhQ2xpZW50IHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBXZWJVc2VyTWVkaWFDbGllbnRNb2NrKFdlYlRlc3REZWxlZ2F0ZSop
OwotICAgIH5XZWJVc2VyTWVkaWFDbGllbnRNb2NrKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdFVzZXJNZWRpYShjb25zdCBXZWJLaXQ6OldlYlVzZXJNZWRpYVJlcXVlc3QmLCBjb25z
dCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYk1lZGlhU3RyZWFtU291cmNlPiYsIGNvbnN0
IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViTWVkaWFTdHJlYW1Tb3VyY2U+JikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbFVzZXJNZWRpYVJlcXVlc3QoY29uc3QgV2ViS2l0
OjpXZWJVc2VyTWVkaWFSZXF1ZXN0Jik7Ci0KLSAgICAvLyBUYXNrIHJlbGF0ZWQgbWV0aG9kcwot
ICAgIFdlYlRhc2tMaXN0KiB0YXNrTGlzdCgpIHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9Ci0KLXBy
aXZhdGU6Ci0gICAgV2ViVGFza0xpc3QgbV90YXNrTGlzdDsKLSAgICBXZWJUZXN0RGVsZWdhdGUq
IG1fZGVsZWdhdGU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBXZWJVc2VyTWVkaWFDbGllbnRNb2Nr
X2gKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL2Nv
bmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL2NvbmZpZy5oCShyZXZpc2lvbiAxNDc3MDEpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9jb25maWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBjb25maWdfaAotI2RlZmluZSBjb25maWdfaAotCi0jZGVmaW5l
IFVTRShmZWF0dXJlKSAoZGVmaW5lZCBXVEZfVVNFXyMjZmVhdHVyZSAmJiBXVEZfVVNFXyMjZmVh
dHVyZSkKLQotI2VuZGlmIC8vIGNvbmZpZ19oCg==
</data>
<flag name="review"
          id="218663"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>