<?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>99776</bug_id>
          
          <creation_ts>2012-10-18 16:44:51 -0700</creation_ts>
          <short_desc>[chromium] move TestRunner files into a src/ sub directory</short_desc>
          <delta_ts>2012-10-18 17:32:03 -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>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>745735</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-10-18 16:44:51 -0700</bug_when>
    <thetext>[chromium] move TestRunner files into a src/ sub directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745740</commentid>
    <comment_count>1</comment_count>
      <attachid>169507</attachid>
    <who name="">jochen</who>
    <bug_when>2012-10-18 16:47:51 -0700</bug_when>
    <thetext>Created attachment 169507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745745</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 16:51:54 -0700</bug_when>
    <thetext>Attachment 169507 did not pass style-queue:

Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp:32:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Tools/DumpRenderTree/chromium/TestRunner/src/GamepadController.cpp:194:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/AccessibilityControllerChromium.cpp:196:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.h:130:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:96:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:97:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:98:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/TextInputController.cpp:206:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.h:231:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:127:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:128:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:150:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:154:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:184:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:185:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:227:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:228:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppBoundClass.cpp:229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/EventSender.cpp:1184:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:91:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:192:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:201:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cppFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/DumpRenderTree/D...&quot; exit_code: 1
:223:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:290:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:299:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Tools/DumpRenderTree/chromium/TestRunner/src/CppVariant.cpp:313:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 29 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745778</commentid>
    <comment_count>3</comment_count>
      <attachid>169507</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 17:31:59 -0700</bug_when>
    <thetext>Comment on attachment 169507
Patch

Clearing flags on attachment: 169507

Committed r131828: &lt;http://trac.webkit.org/changeset/131828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745779</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-18 17:32:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169507</attachid>
            <date>2012-10-18 16:47:51 -0700</date>
            <delta_ts>2012-10-18 17:31:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99776-20121019014635.patch</filename>
            <type>text/plain</type>
            <size>401289</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxODIxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzRjZjI3ZDVjNTUwZjEzNjBiNjg4YjBjMzc3NTgyNDNi
OTY0Yzk2My4uOGFkNTlmMmRlMDYyYzNjMjA5N2IxMGY0YTc4N2I2OWZhMjY2ZWUxMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM5
IEBACiAyMDEyLTEwLTE4ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgog
CisgICAgICAgIFtjaHJvbWl1bV0gbW92ZSBUZXN0UnVubmVyIGZpbGVzIGludG8gYSBzcmMvIHN1
YiBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5Nzc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBvZiBhZGRpbmcgYSBwdWJsaWMgQVBJIHRvIHRoZSBU
ZXN0UnVubmVyIGxpYnJhcnkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLmd5cGk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
VGVzdFJ1bm5lci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwOiBSZW5hbWVkIGZyb20g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlckNocm9taXVtLmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmg6IFJlbmFtZWQg
ZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxp
dHlDb250cm9sbGVyQ2hyb21pdW0uaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwOiBSZW5h
bWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oOiBS
ZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBCb3VuZENsYXNzLmNwcDogUmVuYW1lZCBmcm9tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91
bmRDbGFzcy5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9DcHBCb3VuZENsYXNzLmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9zcmMvQ3BwVmFyaWFudC5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQuY3BwLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuaDogUmVu
YW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwVmFy
aWFudC5oLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L0V2ZW50U2VuZGVyLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvRXZlbnRTZW5kZXIuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmg6IFJlbmFtZWQgZnJvbSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0V2ZW50U2VuZGVyLmguCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRy
b2xsZXIuY3BwOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9HYW1lcGFkQ29udHJvbGxlci5jcHAuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvR2FtZXBhZENvbnRyb2xs
ZXIuaC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9U
YXNrLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvVGFzay5jcHAuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvVGFzay5oOiBSZW5hbWVkIGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9UYXNrLmguCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGVzdERlbGVnYXRlLmg6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3REZWxlZ2F0ZS5oLgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmNwcDog
UmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVz
dEludGVyZmFjZXMuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmg6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmguCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdFJ1bm5lci5jcHA6IFJlbmFt
ZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RSdW5u
ZXIuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1Rlc3RSdW5uZXIuaDogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvVGVzdFJ1bm5lci5oLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOiBSZW5hbWVkIGZyb20g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9UZXh0SW5wdXRDb250cm9s
bGVyLmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3Ny
Yy9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0UnVubmVyL1RleHRJbnB1dENvbnRyb2xsZXIuaC4KKworMjAxMi0xMC0x
OCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hy
b21pdW1dIFNpbXBsaWZ5IFRlc3RJbnRlcmZhY2VzLCBhcyB0aGlzIGNsYXNzIHdvbid0IGJlIGRp
cmVjdGx5IGV4cG9zZWQgaW4gdGhlIFRlc3RSdW5uZXIgbGlicmFyeSdzIGludGVyZmFjZQogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk3NjYKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5k
ZXJUcmVlLmd5cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1w
UmVuZGVyVHJlZS5neXAKaW5kZXggYTI0MDUxNTg0NjIxOTE4OTcyZDU2YWU4MzAxNTJhODdiZWRk
NGY1Ny4uMDc0MDZhZTAwMmZiZWNjOWFmMDI2MWZkMzc3MjBhOWYwMjhkNzJkYSAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVl
Lmd5cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJl
bmRlclRyZWUuZ3lwCkBAIC04NywxMSArODcsMTEgQEAKICAgICAgICAgICAgICAgICAnPChjaHJv
bWl1bV9zcmNfZGlyKScsCiAgICAgICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV2ViS2l0L2No
cm9taXVtL3B1YmxpYycsCiAgICAgICAgICAgICAgICAgJzwoREVQVEgpJywKLSAgICAgICAgICAg
ICAgICAnLi4vY2hyb21pdW0vVGVzdFJ1bm5lcicsCisgICAgICAgICAgICAgICAgJy4uL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnZGlyZWN0
X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzog
WwotICAgICAgICAgICAgICAgICAgICAnLi4vY2hyb21pdW0vVGVzdFJ1bm5lcicsCisgICAgICAg
ICAgICAgICAgICAgICcuLi9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYycsCiAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAnc291cmNlcyc6IFsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IDQ1NjJhYWY3M2EzMjIwYTUyN2Q1
NzlhOGU0MmRiNjUyNmM3MDNlZmQuLmY0Mzg1ZGQ0MWE2Njg0NjFjMThkMjBhOGJiZmNhZjYzNDdi
OGMzYTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5
cGkKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtMSw2
ICsxLDggQEAKIHsKICAgICAndmFyaWFibGVzJzogewogICAgICAgICAnZHJ0X2ZpbGVzJzogWwor
ICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlLmgnLAorICAgICAgICAgICAgJ0R1bXBSZW5kZXJU
cmVlQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5j
cHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuaCcsCiAgICAgICAg
ICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwJywKQEAgLTYyLDI4ICs2NCwyNiBA
QAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0U29mdHdhcmVPdXRwdXREZXZpY2Uu
aCcsCiAgICAgICAgIF0sCiAgICAgICAgICd0ZXN0X3J1bm5lcl9maWxlcyc6IFsKLSAgICAgICAg
ICAgICdEdW1wUmVuZGVyVHJlZS5oJywKLSAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZUNvbW1v
bi5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5oJywKLSAgICAgICAgICAgICdjaHJvbWl1
bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAnLAotICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVt
LmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAn
LAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91bmRDbGFzcy5oJywKLSAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQuY3BwJywKLSAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQuaCcsCi0gICAgICAgICAgICAnY2hy
b21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RSdW5uZXIvRXZlbnRTZW5kZXIuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1
bm5lci9HYW1lcGFkQ29udHJvbGxlci5jcHAnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RS
dW5uZXIvR2FtZXBhZENvbnRyb2xsZXIuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1
bm5lci9UYXNrLmNwcCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9UYXNrLmgn
LAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdEludGVyZmFjZXMuY3BwJywK
LSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmgnLAotICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvVGV4dElucHV0Q29udHJvbGxlci5jcHAnLAot
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvVGV4dElucHV0Q29udHJvbGxlci5oJywK
LSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RSdW5uZXIuY3BwJywKLSAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RSdW5uZXIuaCcsCisgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bS5j
cHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQ2hyb21pdW0uaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcCcsCisgICAgICAgICAgICAnY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmgnLAor
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcEJvdW5kQ2xhc3MuY3BwJywK
KyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBCb3VuZENsYXNzLmgnLAor
ICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuY3BwJywKKyAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBWYXJpYW50LmgnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmNwcCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuaCcsCisgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuY3BwJywKKyAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5oJywKKyAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UYXNrLmNwcCcsCisgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGFzay5oJywKKyAgICAgICAgICAgICdjaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAnLAorICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgnLAorICAgICAgICAgICAgJ2Nocm9t
aXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXh0SW5wdXRDb250cm9sbGVyLmgnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuY3BwJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVubmVyLmgnLAogICAgICAgICBdLAog
ICAgICAgICAndGVzdF9wbHVnaW5fZmlsZXMnOiBbCiAgICAgICAgICAgICAnVGVzdE5ldHNjYXBl
UGx1Z0luL1BsdWdpbk9iamVjdC5jcHAnLApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRFJUVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRFJUVGVzdFJ1bm5lci5oCmluZGV4IDMwNDFiODZhNzNjNWFiMmUwMzljOGVlMWQwYTc5Mjdi
NzJlOTc1MTIuLjYwYTAzOGEyN2RkODk0Y2ExZDQ0NzEwOWJlYmFkNzhhZTJmZTA2MTkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVFRlc3RSdW5uZXIuaAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRUZXN0UnVubmVyLmgKQEAgLTQyLDcg
KzQyLDcgQEAKICNpZm5kZWYgRFJUVGVzdFJ1bm5lcl9oCiAjZGVmaW5lIERSVFRlc3RSdW5uZXJf
aAogCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci9UZXN0UnVubmVyLmgiCisjaW5jbHVkZSAiVGVzdFJ1
bm5lci9zcmMvVGVzdFJ1bm5lci5oIgogCiBjbGFzcyBUZXN0U2hlbGw7CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJDaHJvbWl1bS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4OWQ1ZDU4NzcwYzYxZDFhYWU5MTYwYmEzNGU0MzY3NjUxNmIwN2My
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJD
aHJvbWl1bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
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
aWcuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgiCi0KLSNp
bmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViRWxlbWVudC5o
IgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViTm9kZS5oIgotI2luY2x1ZGUg
IldlYlZpZXcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci0KLUFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcigpCi0gICAgOiBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMoZmFsc2UpCi17Ci0K
LSAgICBiaW5kTWV0aG9kKCJsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzIiwgJkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRo
b2QoImFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjph
ZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lciIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90
aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7Ci0KLSAgICBiaW5kUHJvcGVydHkoImZvY3VzZWRF
bGVtZW50IiwgJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNh
bGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoInJvb3RFbGVtZW50IiwgJkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyb290RWxlbWVudEdldHRlckNhbGxiYWNrKTsKLQotICAgIGJpbmRNZXRob2Qo
ImFjY2Vzc2libGVFbGVtZW50QnlJZCIsICZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNz
aWJsZUVsZW1lbnRCeUlkR2V0dGVyQ2FsbGJhY2spOwotCi0gICAgYmluZEZhbGxiYWNrTWV0aG9k
KCZBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayk7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmJpbmRUb0phdmFzY3JpcHQoV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGNsYXNzbmFtZSkKLXsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjplbmFibGVBY2Nlc3NpYmlsaXR5KCk7Ci0gICAgQ3BwQm91bmRDbGFzczo6YmluZFRvSmF2
YXNjcmlwdChmcmFtZSwgY2xhc3NuYW1lKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcjo6cmVzZXQoKQotewotICAgIG1fcm9vdEVsZW1lbnQgPSBXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCk7Ci0gICAgbV9mb2N1c2VkRWxlbWVudCA9IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoKTsK
LSAgICBtX2VsZW1lbnRzLmNsZWFyKCk7Ci0KLSAgICBtX2xvZ0FjY2Vzc2liaWxpdHlFdmVudHMg
PSBmYWxzZTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6c2V0Rm9jdXNlZEVs
ZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgZm9jdXNlZEVsZW1lbnQpCi17Ci0g
ICAgbV9mb2N1c2VkRWxlbWVudCA9IGZvY3VzZWRFbGVtZW50OwotfQotCi1BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Z2V0Rm9jdXNlZEVsZW1lbnQoKQot
ewotICAgIGlmIChtX2ZvY3VzZWRFbGVtZW50LmlzTnVsbCgpKQotICAgICAgICBtX2ZvY3VzZWRF
bGVtZW50ID0gbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7Ci0gICAgcmV0dXJuIG1f
ZWxlbWVudHMuZ2V0T3JDcmVhdGUobV9mb2N1c2VkRWxlbWVudCk7Ci19Ci0KLUFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRSb290RWxlbWVudCgpCi17
Ci0gICAgaWYgKG1fcm9vdEVsZW1lbnQuaXNOdWxsKCkpCi0gICAgICAgIG1fcm9vdEVsZW1lbnQg
PSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmplY3QoKTsKLSAgICByZXR1cm4gbV9lbGVtZW50
cy5jcmVhdGVSb290KG1fcm9vdEVsZW1lbnQpOwotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vy
c2l2ZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmosIGNvbnN0IFdlYlN0cmluZyYg
aWQpCi17Ci0gICAgaWYgKG9iai5pc051bGwoKSB8fCBvYmouaXNEZXRhY2hlZCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFdlYk5vZGUgbm9kZSA9IG9iai5ub2RlKCk7Ci0gICAgaWYgKCFu
b2RlLmlzTnVsbCgpICYmIG5vZGUuaXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgIFdlYkVsZW1l
bnQgZWxlbWVudCA9IG5vZGUudG88V2ViRWxlbWVudD4oKTsKLSAgICAgICAgZWxlbWVudC5nZXRB
dHRyaWJ1dGUoImlkIik7Ci0gICAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKSA9
PSBpZCkgCi0gICAgICAgICAgICByZXR1cm4gbV9lbGVtZW50cy5nZXRPckNyZWF0ZShvYmopOwot
ICAgIH0KLQotICAgIHVuc2lnbmVkIGNoaWxkQ291bnQgPSBvYmouY2hpbGRDb3VudCgpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKLSAgICAgICAgaWYg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHJlc3VsdCA9IGZpbmRBY2Nlc3NpYmxlRWxlbWVudEJ5
SWRSZWN1cnNpdmUob2JqLmNoaWxkQXQoaSksIGlkKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29uc3Qg
c3RkOjpzdHJpbmcmIGlkKQotewotICAgIGlmIChtX3Jvb3RFbGVtZW50LmlzTnVsbCgpKQotICAg
ICAgICBtX3Jvb3RFbGVtZW50ID0gbV93ZWJWaWV3LT5hY2Nlc3NpYmlsaXR5T2JqZWN0KCk7Ci0K
LSAgICByZXR1cm4gZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShtX3Jvb3RFbGVt
ZW50LCBXZWJTdHJpbmc6OmZyb21VVEY4KGlkLmNfc3RyKCkpKTsKLX0KLQotYm9vbCBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6c2hvdWxkTG9nQWNjZXNzaWJpbGl0eUV2ZW50cygpCi17Ci0gICAg
cmV0dXJuIG1fbG9nQWNjZXNzaWJpbGl0eUV2ZW50czsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0JiB0YXJnZXQsIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUpCi17Ci0g
ICAgLy8gQ2FsbCBub3RpZmljYXRpb24gbGlzdGVuZXJzIG9uIHRoZSBlbGVtZW50LgotICAgIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQgPSBtX2VsZW1lbnRzLmdldE9yQ3JlYXRlKHRh
cmdldCk7Ci0gICAgZWxlbWVudC0+bm90aWZpY2F0aW9uUmVjZWl2ZWQobm90aWZpY2F0aW9uTmFt
ZSk7Ci0KLSAgICAvLyBDYWxsIGdsb2JhbCBub3RpZmljYXRpb24gbGlzdGVuZXJzLgotICAgIHNp
emVfdCBjYWxsYmFja0NvdW50ID0gbV9ub3RpZmljYXRpb25DYWxsYmFja3Muc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7Ci0gICAgICAgIENw
cFZhcmlhbnQgYXJndW1lbnRzWzJdOwotICAgICAgICBhcmd1bWVudHNbMF0uc2V0KCplbGVtZW50
LT5nZXRBc0NwcFZhcmlhbnQoKSk7Ci0gICAgICAgIGFyZ3VtZW50c1sxXS5zZXQobm90aWZpY2F0
aW9uTmFtZSk7Ci0gICAgICAgIENwcFZhcmlhbnQgaW52b2tlUmVzdWx0OwotICAgICAgICBtX25v
dGlmaWNhdGlvbkNhbGxiYWNrc1tpXS5pbnZva2VEZWZhdWx0KGFyZ3VtZW50cywgMiwgaW52b2tl
UmVzdWx0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0Fj
Y2Vzc2liaWxpdHlFdmVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzID0gdHJ1ZTsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
IDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRO
dWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX25vdGlmaWNhdGlvbkNhbGxi
YWNrcy5wdXNoX2JhY2soYXJndW1lbnRzWzBdKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudEdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldCgqKGdldEZvY3Vz
ZWRFbGVtZW50KCktPmdldEFzQ3BwVmFyaWFudCgpKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0KCooZ2V0Um9vdEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJpYW50
KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1l
bnRCeUlkR2V0dGVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHN0ZDo6c3RyaW5nIGlkID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7
Ci0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZm91bmRFbGVtZW50ID0gZ2V0QWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKGlkKTsKLSAgICBpZiAoIWZvdW5kRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcmVzdWx0LT5zZXQoKihmb3VuZEVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKSk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHByaW50Zigi
Q09OU09MRSBNRVNTQUdFOiBKYXZhU2NyaXB0IEVSUk9SOiB1bmtub3duIG1ldGhvZCBjYWxsZWQg
b24gIgotICAgICAgICAgICAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJcbiIpOwotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlDb250cm9sbGVy
Q2hyb21pdW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmNWRlZTg1NjJkOTU0
MWYwMGNmMTAyNGQ4NmNmNjYxYzYzN2QxMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDg4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
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
LSAqLwotCi0jaWZuZGVmIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW1faAotI2RlZmlu
ZSBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtX2gKLQotI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwotY2xhc3Mg
V2ViRnJhbWU7Ci1jbGFzcyBXZWJWaWV3OwotfQotCi1jbGFzcyBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcigpOwotCi0gICAgLy8gU2hhZG93IHRvIGluY2x1ZGUgYWNjZXNzaWJpbGl0eSBp
bml0aWFsaXphdGlvbi4KLSAgICB2b2lkIGJpbmRUb0phdmFzY3JpcHQoV2ViS2l0OjpXZWJGcmFt
ZSosIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBjbGFzc25hbWUpOwotICAgIHZvaWQgcmVzZXQo
KTsKLQotICAgIHZvaWQgc2V0Rm9jdXNlZEVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0Jik7Ci0gICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0Rm9jdXNlZEVs
ZW1lbnQoKTsKLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRSb290RWxlbWVudCgpOwot
ICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldEFjY2Vzc2libGVFbGVtZW50QnlJZChjb25z
dCBzdGQ6OnN0cmluZyYgaWQpOwotCi0gICAgYm9vbCBzaG91bGRMb2dBY2Nlc3NpYmlsaXR5RXZl
bnRzKCk7Ci0KLSAgICB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IFdlYktpdDo6V2Vi
QWNjZXNzaWJpbGl0eU9iamVjdCYgdGFyZ2V0LCBjb25zdCBjaGFyKiBub3RpZmljYXRpb25OYW1l
KTsKLQotICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsgbV93
ZWJWaWV3ID0gd2ViVmlldzsgfQotCi1wcml2YXRlOgotICAgIC8vIElmIHRydWUsIHdpbGwgbG9n
IGFsbCBhY2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbnMuCi0gICAgYm9vbCBtX2xvZ0FjY2Vzc2li
aWxpdHlFdmVudHM7Ci0KLSAgICAvLyBCb3VuZCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzCi0gICAg
dm9pZCBsb2dBY2Nlc3NpYmlsaXR5RXZlbnRzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZmFsbGJhY2tDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhZGROb3RpZmljYXRpb25MaXN0ZW5l
ckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBmb2N1c2VkRWxlbWVudEdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgYWNjZXNzaWJsZUVsZW1lbnRCeUlkR2V0dGVyQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogZmluZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShjb25zdCBXZWJLaXQ6
OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgaWQpOwot
Ci0gICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG1fZm9jdXNlZEVsZW1lbnQ7Ci0g
ICAgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IG1fcm9vdEVsZW1lbnQ7Ci0KLSAgICBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCBtX2VsZW1lbnRzOwotCi0gICAgc3RkOjp2ZWN0b3I8
Q3BwVmFyaWFudD4gbV9ub3RpZmljYXRpb25DYWxsYmFja3M7Ci0KLSAgICBXZWJLaXQ6OldlYlZp
ZXcqIG1fd2ViVmlldzsKLX07Ci0KLSNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNo
cm9taXVtX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVt
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYwODIyYmU4ZjIzZjEwZTNiYzc2
YTNjYWUxZGVkYThhODhkNjYxZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5NjggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
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
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Q2hyb21pdW0uaCIKLQotI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNs
dWRlICJwbGF0Zm9ybS9XZWJDU3RyaW5nLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQu
aCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJSZWN0LmgiCi0jaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi0vLyBNYXAgcm9sZSB2YWx1ZSB0byBzdHJpbmcsIG1hdGNoaW5nIFNhZmFyaS9NYWMg
cGxhdGZvcm0gaW1wbGVtZW50YXRpb24gdG8KLS8vIGF2b2lkIHJlYmFzZWxpbmluZyBsYXlvdXQg
dGVzdHMuCi1zdGF0aWMgc3RyaW5nIHJvbGVUb1N0cmluZyhXZWJBY2Nlc3NpYmlsaXR5Um9sZSBy
b2xlKQotewotICAgIHN0cmluZyByZXN1bHQgPSAiQVhSb2xlOiBBWCI7Ci0gICAgc3dpdGNoIChy
b2xlKSB7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUJ1dHRvbjoKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIkJ1dHRvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVSYWRpb0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJhZGlvQnV0dG9u
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNoZWNrQm94OgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiQ2hlY2tCb3giKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlU2xpZGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2xpZGVyIik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYkdyb3VwOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiVGFiR3JvdXAiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGV4dEZp
ZWxkOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEZpZWxkIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVN0YXRpY1RleHQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJTdGF0aWNUZXh0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRleHRB
cmVhOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGV4dEFyZWEiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlU2Nyb2xsQXJlYToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIlNjcm9sbEFyZWEiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUG9wVXBC
dXR0b246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQb3BVcEJ1dHRvbiIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNZW51QnV0dG9uOgotICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiTWVudUJ1dHRvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVU
YWJsZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYmxlIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiQXBwbGljYXRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JvdXA6
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJHcm91cCIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVSYWRpb0dyb3VwOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgi
UmFkaW9Hcm91cCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMaXN0OgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGlzdCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVTY3JvbGxCYXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTY3JvbGxCYXIi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVmFsdWVJbmRpY2F0b3I6Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJWYWx1ZUluZGljYXRvciIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVJbWFnZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdl
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVCYXI6Ci0gICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJNZW51QmFyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZU1lbnU6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51Iik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnVJdGVtOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiTWVudUl0ZW0iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sdW1uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3Np
YmlsaXR5Um9sZVJvdzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJvdyIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUb29sYmFyOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiVG9vbGJhciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVCdXN5SW5k
aWNhdG9yOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnVzeUluZGljYXRvciIpOwot
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVQcm9ncmVzc0luZGljYXRvcjoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIlByb2dyZXNzSW5kaWNhdG9yIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZVdpbmRvdzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIldp
bmRvdyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEcmF3ZXI6Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJEcmF3ZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlU3lzdGVtV2lkZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlN5c3RlbVdpZGUi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlT3V0bGluZToKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIk91dGxpbmUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
SW5jcmVtZW50b3I6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJJbmNyZW1lbnRvciIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVCcm93c2VyOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiQnJvd3NlciIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVD
b21ib0JveDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNvbWJvQm94Iik7Ci0gICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNwbGl0R3JvdXA6Ci0gICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJTcGxpdEdyb3VwIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNw
bGl0dGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiU3BsaXR0ZXIiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sb3JXZWxsOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiQ29sb3JXZWxsIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUdyb3dB
cmVhOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiR3Jvd0FyZWEiKTsKLSAgICBjYXNl
IFdlYkFjY2Vzc2liaWxpdHlSb2xlU2hlZXQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJTaGVldCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVIZWxwVGFnOgotICAgICAg
ICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiSGVscFRhZyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVNYXR0ZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1hdHRlIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJ1bGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiUnVsZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVsZXJNYXJr
ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJSdWxlck1hcmtlciIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMaW5rOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiTGluayIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEaXNjbG9zdXJlVHJpYW5n
bGU6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJEaXNjbG9zdXJlVHJpYW5nbGUiKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JpZDoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkdyaWQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ2VsbDoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNlbGwiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlQ29sdW1uSGVhZGVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29s
dW1uSGVhZGVyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvd0hlYWRlcjoKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJvd0hlYWRlciIpOwotICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVXZWJDb3JlTGluazoKLSAgICAgICAgLy8gTWFwcyB0byBMaW5rIHJvbGUu
Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaW5rIik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZUltYWdlTWFwTGluazoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkltYWdlTWFwTGluayIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZU1hcDoK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlTWFwIik7Ci0gICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUxpc3RNYXJrZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJMaXN0TWFya2VyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkFyZWE6Ci0g
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJXZWJBcmVhIik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZUhlYWRpbmc6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJIZWFk
aW5nIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3g6Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Qm94Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZUxpc3RCb3hPcHRpb246Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Qm94
T3B0aW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlSGVhZGVyQ29udGFp
bmVyOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFibGVIZWFkZXJDb250YWluZXIi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGVmaW5pdGlvbkxpc3RUZXJtOgotICAg
ICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGVmaW5pdGlvbkxpc3RUZXJtIik7Ci0gICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURlZmluaXRpb25MaXN0RGVmaW5pdGlvbjoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRlZmluaXRpb25MaXN0RGVmaW5pdGlvbiIpOwotICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBbm5vdGF0aW9uOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiQW5ub3RhdGlvbiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTbGlk
ZXJUaHVtYjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNsaWRlclRodW1iIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQXBwbGljYXRpb246Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0FwcGxpY2F0aW9uIik7Ci0gICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQmFubmVyOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiTGFuZG1hcmtCYW5uZXIiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
TGFuZG1hcmtDb21wbGVtZW50YXJ5OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFu
ZG1hcmtDb21wbGVtZW50YXJ5Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRt
YXJrQ29udGVudEluZm86Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0Nv
bnRlbnRJbmZvIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrTWFpbjoK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkxhbmRtYXJrTWFpbiIpOwotICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVMYW5kbWFya05hdmlnYXRpb246Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJMYW5kbWFya05hdmlnYXRpb24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlTGFuZG1hcmtTZWFyY2g6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJM
YW5kbWFya1NlYXJjaCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlv
bkxvZzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTG9nIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uTWFycXVlZToKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTWFycXVlZSIpOwotICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvblN0YXR1czoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkFwcGxpY2F0aW9uU3RhdHVzIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZUFwcGxpY2F0aW9uVGltZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBcHBs
aWNhdGlvblRpbWVyIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50Ogot
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnQiKTsKLSAgICBjYXNlIFdlYkFj
Y2Vzc2liaWxpdHlSb2xlRG9jdW1lbnRBcnRpY2xlOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiRG9jdW1lbnRBcnRpY2xlIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURv
Y3VtZW50Tm90ZToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRvY3VtZW50Tm90ZSIp
OwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudFJlZ2lvbjoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRvY3VtZW50UmVnaW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZVVzZXJJbnRlcmZhY2VUb29sdGlwOgotICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiVXNlckludGVyZmFjZVRvb2x0aXAiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxp
dHlSb2xlVG9nZ2xlQnV0dG9uOgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9nZ2xl
QnV0dG9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUNhbnZhczoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkNhbnZhcyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVQYXJhZ3JhcGg6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQYXJhZ3JhcGgi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRGl2OgotICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiRGl2Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhYmVsOgot
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFiZWwiKTsKLSAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlRm9ybToKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkZvcm0iKTsK
LSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSG9yaXpvbnRhbFJ1bGU6Ci0gICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJIb3Jpem9udGFsUnVsZSIpOwotICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVMZWdlbmQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMZWdlbmQi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQXBwbGljYXRpb25BbGVydDoKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFsZXJ0Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUFwcGxpY2F0aW9uQWxlcnREaWFsb2c6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJBbGVydERpYWxvZyIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNh
dGlvbkRpYWxvZzoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uRGlh
bG9nIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURpcmVjdG9yeToKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRpcmVjdG9yeSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVEb2N1bWVudE1hdGg6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNYXRo
Iik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUVkaXRhYmxlVGV4dDoKLSAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkVkaXRhYmxlVGV4dCIpOwotICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVGb290ZXI6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJGb290ZXIi
KTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSWdub3JlZDoKLSAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIklnbm9yZWQiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
TGlzdEl0ZW06Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0SXRlbSIpOwotICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNZW51TGlzdFBvcHVwOgotICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiTWVudUxpc3RQb3B1cCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVNZW51TGlzdE9wdGlvbjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnVM
aXN0T3B0aW9uIik7Ci0gICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVByZXNlbnRhdGlvbmFs
OgotICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUHJlc2VudGF0aW9uYWwiKTsKLSAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BpbkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIlNwaW5CdXR0b24iKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3Bp
bkJ1dHRvblBhcnQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGluQnV0dG9uUGFy
dCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJMaXN0OgotICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiVGFiTGlzdCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVUYWJQYW5lbDoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYlBhbmVsIik7Ci0g
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYjoKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIlRhYiIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUcmVlUm9sZToKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRyZWUiKTsKLSAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlVHJlZUdyaWQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUcmVlR3Jp
ZCIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUcmVlSXRlbVJvbGU6Ci0gICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJUcmVlSXRlbSIpOwotICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVVbmtub3duOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiByZXN1bHQuYXBw
ZW5kKCJVbmtub3duIik7Ci0gICAgfQotfQotCi1zdHJpbmcgZ2V0RGVzY3JpcHRpb24oY29uc3Qg
V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIHN0cmluZyBkZXNjcmlwdGlv
biA9IG9iamVjdC5hY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKS51dGY4KCk7Ci0gICAgcmV0dXJu
IGRlc2NyaXB0aW9uLmluc2VydCgwLCAiQVhEZXNjcmlwdGlvbjogIik7Ci19Ci0KLXN0cmluZyBn
ZXRIZWxwVGV4dChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAg
c3RyaW5nIGhlbHBUZXh0ID0gb2JqZWN0LmhlbHBUZXh0KCkudXRmOCgpOwotICAgIHJldHVybiBo
ZWxwVGV4dC5pbnNlcnQoMCwgIkFYSGVscDogIik7Ci19Ci0KLXN0cmluZyBnZXRTdHJpbmdWYWx1
ZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHZh
bHVlID0gb2JqZWN0LnN0cmluZ1ZhbHVlKCkudXRmOCgpOwotICAgIHJldHVybiB2YWx1ZS5pbnNl
cnQoMCwgIkFYVmFsdWU6ICIpOwotfQotCi1zdHJpbmcgZ2V0Um9sZShjb25zdCBXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0JiBvYmplY3QpCi17Ci0gICAgc3RyaW5nIHJvbGVTdHJpbmcgPSByb2xlVG9T
dHJpbmcob2JqZWN0LnJvbGVWYWx1ZSgpKTsKLQotICAgIC8vIFNwZWNpYWwtY2FzZSBjYW52YXMg
d2l0aCBmYWxsYmFjayBjb250ZW50IGJlY2F1c2UgQ2hyb21pdW0gd2FudHMgdG8KLSAgICAvLyB0
cmVhdCB0aGlzIGFzIGVzc2VudGlhbGx5IGEgc2VwYXJhdGUgcm9sZSB0aGF0IGl0IGNhbiBtYXAg
ZGlmZmVyZW50bHkgZGVwZW5kaW5nCi0gICAgLy8gb24gdGhlIHBsYXRmb3JtLgotICAgIGlmIChv
YmplY3Qucm9sZVZhbHVlKCkgPT0gV2ViQWNjZXNzaWJpbGl0eVJvbGVDYW52YXMgJiYgb2JqZWN0
LmNhbnZhc0hhc0ZhbGxiYWNrQ29udGVudCgpKQotICAgICAgICByb2xlU3RyaW5nICs9ICJXaXRo
RmFsbGJhY2tDb250ZW50IjsKLQotICAgIHJldHVybiByb2xlU3RyaW5nOwotfQotCi1zdHJpbmcg
Z2V0VGl0bGUoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIHN0
cmluZyB0aXRsZSA9IG9iamVjdC50aXRsZSgpLnV0ZjgoKTsKLSAgICByZXR1cm4gdGl0bGUuaW5z
ZXJ0KDAsICJBWFRpdGxlOiAiKTsKLX0KLQotc3RyaW5nIGdldE9yaWVudGF0aW9uKGNvbnN0IFdl
YkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBpZiAob2JqZWN0LmlzVmVydGlj
YWwoKSkKLSAgICAgICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWFZlcnRpY2FsT3JpZW50YXRp
b24iOwotCi0gICAgcmV0dXJuICJBWE9yaWVudGF0aW9uOiBBWEhvcml6b250YWxPcmllbnRhdGlv
biI7Ci19Ci0KLXN0cmluZyBnZXRWYWx1ZURlc2NyaXB0aW9uKGNvbnN0IFdlYkFjY2Vzc2liaWxp
dHlPYmplY3QmIG9iamVjdCkKLXsKLSAgICBzdHJpbmcgdmFsdWVEZXNjcmlwdGlvbiA9IG9iamVj
dC52YWx1ZURlc2NyaXB0aW9uKCkudXRmOCgpOwotICAgIHJldHVybiB2YWx1ZURlc2NyaXB0aW9u
Lmluc2VydCgwLCAiQVhWYWx1ZURlc2NyaXB0aW9uOiAiKTsKLX0KLQotc3RyaW5nIGdldEF0dHJp
YnV0ZXMoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIC8vIEZJ
WE1FOiBDb25jYXRlbmF0ZSBhbGwgYXR0cmlidXRlcyBvZiB0aGUgQWNjZXNzaWJpbGl0eU9iamVj
dC4KLSAgICBzdHJpbmcgYXR0cmlidXRlcyhnZXRUaXRsZShvYmplY3QpKTsKLSAgICBhdHRyaWJ1
dGVzLmFwcGVuZCgiXG4iKTsKLSAgICBhdHRyaWJ1dGVzLmFwcGVuZChnZXRSb2xlKG9iamVjdCkp
OwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKCJcbiIpOwotICAgIGF0dHJpYnV0ZXMuYXBwZW5kKGdl
dERlc2NyaXB0aW9uKG9iamVjdCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVzOwotfQotCi0KLS8v
IENvbGxlY3RzIGF0dHJpYnV0ZXMgaW50byBhIHN0cmluZywgZGVsaW1pdGVkIGJ5IGRhc2hlcy4g
VXNlZCBieSBhbGwgbWV0aG9kcwotLy8gdGhhdCBvdXRwdXQgbGlzdHMgb2YgYXR0cmlidXRlczog
YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0NhbGxiYWNrLAotLy8gQXR0cmlidXRlc09mQ2hp
bGRyZW5DYWxsYmFjaywgZXRjLgotY2xhc3MgQXR0cmlidXRlc0NvbGxlY3RvciB7Ci1wdWJsaWM6
Ci0gICAgdm9pZCBjb2xsZWN0QXR0cmlidXRlcyhjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0
JiBvYmplY3QpCi0gICAgewotICAgICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKCJcbi0tLS0tLS0t
LS0tLVxuIik7Ci0gICAgICAgIG1fYXR0cmlidXRlcy5hcHBlbmQoZ2V0QXR0cmlidXRlcyhvYmpl
Y3QpKTsKLSAgICB9Ci0KLSAgICBzdHJpbmcgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlczsgfQotCi1wcml2YXRlOgotICAgIHN0cmluZyBtX2F0dHJpYnV0ZXM7Ci19Owot
Ci1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdl
YkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCwgRmFjdG9yeSogZmFjdG9yeSkKLSAgICA6IG1f
YWNjZXNzaWJpbGl0eU9iamVjdChvYmplY3QpCi0gICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKLXsK
LQotICAgIEFTU0VSVChmYWN0b3J5KTsKLQotICAgIC8vCi0gICAgLy8gUHJvcGVydGllcwotICAg
IC8vCi0KLSAgICBiaW5kUHJvcGVydHkoInJvbGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm9sZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoInRpdGxlIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnRpdGxlR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgi
ZGVzY3JpcHRpb24iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb25HZXR0ZXJD
YWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJoZWxwVGV4dCIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpoZWxwVGV4dEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoInN0cmlu
Z1ZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlR2V0dGVyQ2FsbGJh
Y2spOwotICAgIGJpbmRQcm9wZXJ0eSgieCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4R2V0
dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgieSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojp5R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgid2lkdGgiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6d2lkdGhHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5
KCJoZWlnaHQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVpZ2h0R2V0dGVyQ2FsbGJhY2sp
OwotICAgIGJpbmRQcm9wZXJ0eSgiaW50VmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aW50VmFsdWVHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJtaW5WYWx1ZSIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5k
UHJvcGVydHkoIm1heFZhbHVlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlR2V0
dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgidmFsdWVEZXNjcmlwdGlvbiIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2spOwotICAg
IGJpbmRQcm9wZXJ0eSgiY2hpbGRyZW5Db3VudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
aGlsZHJlbkNvdW50R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaW5zZXJ0aW9u
UG9pbnRMaW5lTnVtYmVyIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50
TGluZU51bWJlckdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoInNlbGVjdGVkVGV4
dFJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlR2V0dGVy
Q2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNFbmFibGVkIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRW5hYmxlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlz
UmVxdWlyZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZEdldHRlckNhbGxi
YWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzRm9jdXNlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0ZvY3VzZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc0ZvY3Vz
YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZUdldHRlckNhbGxiYWNr
KTsKLSAgICBiaW5kUHJvcGVydHkoImlzU2VsZWN0ZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzU2VsZWN0
YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGVHZXR0ZXJDYWxsYmFj
ayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc011bHRpU2VsZWN0YWJsZSIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJv
cGVydHkoImlzU2VsZWN0ZWRPcHRpb25BY3RpdmUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZUdldHRlckNhbGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHko
ImlzRXhwYW5kZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZEdldHRlckNh
bGxiYWNrKTsKLSAgICBiaW5kUHJvcGVydHkoImlzQ2hlY2tlZCIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojppc0NoZWNrZWRHZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc1Zp
c2libGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlR2V0dGVyQ2FsbGJhY2sp
OwotICAgIGJpbmRQcm9wZXJ0eSgiaXNPZmZTY3JlZW4iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW5HZXR0ZXJDYWxsYmFjayk7Ci0gICAgYmluZFByb3BlcnR5KCJpc0NvbGxh
cHNlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxhcHNlZEdldHRlckNhbGxiYWNr
KTsKLSAgICBiaW5kUHJvcGVydHkoImhhc1BvcHVwIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omhhc1BvcHVwR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgiaXNWYWxpZCIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ZhbGlkR2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQ
cm9wZXJ0eSgiaXNSZWFkT25seSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlYWRPbmx5
R2V0dGVyQ2FsbGJhY2spOwotICAgIGJpbmRQcm9wZXJ0eSgib3JpZW50YXRpb24iLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb25HZXR0ZXJDYWxsYmFjayk7Ci0KLSAgICAvLwot
ICAgIC8vIE1ldGhvZHMKLSAgICAvLwotCi0gICAgYmluZE1ldGhvZCgiYWxsQXR0cmlidXRlcyIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphbGxBdHRyaWJ1dGVzQ2FsbGJhY2spOwotICAgIGJp
bmRNZXRob2QoImF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHMiLCAmQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXR0cmlidXRlc09mTGlua2VkVUlFbGVtZW50c0NhbGxiYWNrKTsKLSAgICBiaW5k
TWV0aG9kKCJhdHRyaWJ1dGVzT2ZEb2N1bWVudExpbmtzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkRvY3VtZW50TGlua3NDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgi
YXR0cmlidXRlc09mQ2hpbGRyZW4iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mQ2hpbGRyZW5DYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgibGluZUZvckluZGV4IiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVGb3JJbmRleENhbGxiYWNrKTsKLSAgICBiaW5kTWV0
aG9kKCJib3VuZHNGb3JSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JS
YW5nZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzdHJpbmdGb3JSYW5nZSIsICZBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JSYW5nZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9k
KCJjaGlsZEF0SW5kZXgiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4Q2Fs
bGJhY2spOwotICAgIGJpbmRNZXRob2QoImVsZW1lbnRBdFBvaW50IiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0dHJp
YnV0ZXNPZkNvbHVtbkhlYWRlcnMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRl
c09mQ29sdW1uSGVhZGVyc0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZS
b3dIZWFkZXJzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRl
cnNDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mQ29sdW1ucyIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2spOwotICAgIGJp
bmRNZXRob2QoImF0dHJpYnV0ZXNPZlJvd3MiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mUm93c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZWaXNp
YmxlQ2VsbHMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNl
bGxzQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkhlYWRlciIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZIZWFkZXJDYWxsYmFjayk7Ci0gICAgYmlu
ZE1ldGhvZCgiaW5kZXhJblRhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5U
YWJsZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJyb3dJbmRleFJhbmdlIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2VDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgi
Y29sdW1uSW5kZXhSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJh
bmdlQ2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImNlbGxGb3JDb2x1bW5BbmRSb3ciLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKTsKLSAgICBi
aW5kTWV0aG9kKCJ0aXRsZVVJRWxlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRs
ZVVJRWxlbWVudENhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRTZWxlY3RlZFRleHRSYW5n
ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNr
KTsKLSAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVWYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVWYWx1ZUNhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJpc0F0dHJpYnV0
ZVNldHRhYmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGVD
YWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiaXNBY3Rpb25TdXBwb3J0ZWQiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhv
ZCgicGFyZW50RWxlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50
Q2FsbGJhY2spOwotICAgIGJpbmRNZXRob2QoImluY3JlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmNyZW1lbnRDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiZGVjcmVtZW50Iiwg
JkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlY3JlbWVudENhbGxiYWNrKTsKLSAgICBiaW5kTWV0
aG9kKCJzaG93TWVudSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudUNhbGxiYWNr
KTsKLSAgICBiaW5kTWV0aG9kKCJwcmVzcyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVz
c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJpc0VxdWFsIiwgJkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRXF1YWxDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgiYWRkTm90aWZpY2F0aW9u
TGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVu
ZXJDYWxsYmFjayk7Ci0gICAgYmluZE1ldGhvZCgicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxs
YmFjayk7Ci0gICAgYmluZE1ldGhvZCgidGFrZUZvY3VzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRha2VGb2N1c0NhbGxiYWNrKTsKLSAgICBiaW5kTWV0aG9kKCJzY3JvbGxUb01ha2VWaXNp
YmxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVDYWxsYmFj
ayk7Ci0gICAgYmluZE1ldGhvZCgic2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzQ2Fs
bGJhY2spOwotICAgIGJpbmRNZXRob2QoInNjcm9sbFRvR2xvYmFsUG9pbnQiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludENhbGxiYWNrKTsKLQotICAgIGJpbmRG
YWxsYmFja01ldGhvZCgmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZmFsbGJhY2tDYWxsYmFjayk7
Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omdl
dENoaWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gbV9mYWN0b3J5LT5n
ZXRPckNyZWF0ZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2hpbGRBdChpbmRleCkpOwotfQotCi1i
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWwoY29uc3QgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBvdGhlcikKLXsKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVj
dCgpLmVxdWFscyhvdGhlcik7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bm90
aWZpY2F0aW9uUmVjZWl2ZWQoY29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSkKLXsKLSAgICBz
aXplX3QgY2FsbGJhY2tDb3VudCA9IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrQ291bnQ7IGkrKykgewotICAgICAgICBD
cHBWYXJpYW50IG5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudDsKLSAgICAgICAgbm90aWZpY2F0aW9u
TmFtZUFyZ3VtZW50LnNldChub3RpZmljYXRpb25OYW1lKTsKLSAgICAgICAgQ3BwVmFyaWFudCBp
bnZva2VSZXN1bHQ7Ci0gICAgICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmludm9rZURl
ZmF1bHQoJm5vdGlmaWNhdGlvbk5hbWVBcmd1bWVudCwgMSwgaW52b2tlUmVzdWx0KTsKLSAgICB9
Ci19Ci0KLS8vCi0vLyBQcm9wZXJ0aWVzCi0vLwotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvbGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoZ2V0Um9sZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojp0aXRsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldChnZXRUaXRsZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkZXNjcmlwdGlvbkdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXREZXNjcmlwdGlvbihh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpoZWxwVGV4dEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChnZXRIZWxwVGV4dChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRTdHJpbmdWYWx1ZShhY2Nlc3NpYmls
aXR5T2JqZWN0KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4R2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJlY3QoKS54KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp5R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJlY3QoKS55KTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aEdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkuYm91bmRpbmdCb3hSZWN0KCkud2lkdGgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmhlaWdodEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuYm91bmRpbmdCb3hSZWN0KCkuaGVpZ2h0
KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZUdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkudmFsdWVGb3JSYW5nZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjptaW5WYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBy
ZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubWluVmFsdWVGb3JSYW5nZSgpKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZUdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0
KCkubWF4VmFsdWVGb3JSYW5nZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojp2YWx1ZURlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0KGdldFZhbHVlRGVzY3JpcHRpb24oYWNjZXNzaWJpbGl0eU9iamVjdCgp
KSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudEdldHRl
ckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpbnQgY291bnQgPSAxOyAvLyBS
b290IG9iamVjdCBhbHdheXMgaGFzIG9ubHkgb25lIGNoaWxkLCB0aGUgV2ViVmlldy4KLSAgICBp
ZiAoIWlzUm9vdCgpKQotICAgICAgICBjb3VudCA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGls
ZENvdW50KCk7Ci0gICAgcmVzdWx0LT5zZXQoY291bnQpOwotfQotCi12b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoIWFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0ZvY3Vz
ZWQoKSkgewotICAgICAgICByZXN1bHQtPnNldCgtMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpbnQgbGluZU51bWJlciA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zZWxlY3Rpb25F
bmRMaW5lTnVtYmVyKCk7Ci0gICAgcmVzdWx0LT5zZXQobGluZU51bWJlcik7Ci19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSBhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICB1bnNpZ25lZCBzZWxlY3Rp
b25FbmQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2VsZWN0aW9uRW5kKCk7Ci0gICAgY2hhciBi
dWZmZXJbMTAwXTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAieyVkLCAl
ZH0iLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kIC0gc2VsZWN0aW9uU3RhcnQpOwotCi0g
ICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoYnVmZmVyKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNFbmFibGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0VuYWJsZWQoKSk7
Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkuaXNSZXF1aXJlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0ZvY3VzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRm9jdXNlZCgpKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2Fu
U2V0Rm9jdXNBdHRyaWJ1dGUoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNTZWxlY3RlZCgpKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNh
blNldFNlbGVjdGVkQXR0cmlidXRlKCkpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzTXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc011bHRpU2VsZWN0YWJs
ZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9u
QWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoIWFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5pc0NvbGxhcHNlZCgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c0NoZWNrZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ2hlY2tlZCgpKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1Zpc2libGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzVmlzaWJs
ZSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbkdldHRl
ckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkuaXNPZmZTY3JlZW4oKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzQ29sbGFwc2VkKCkpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5hcmlhSGFzUG9wdXAoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNWYWxpZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldCghYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzRGV0YWNoZWQoKSk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZWFkT25seUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNSZWFk
T25seSgpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbkdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldChnZXRP
cmllbnRhdGlvbihhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKLX0KLQotLy8KLS8vIE1ldGhvZHMK
LS8vCi0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlc0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1
bHQtPnNldChnZXRBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOwotfQotCi12b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mRG9jdW1lbnRMaW5rc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
QXR0cmlidXRlc0NvbGxlY3RvciBjb2xsZWN0b3I7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGFjY2Vz
c2liaWxpdHlPYmplY3QoKS5jaGlsZENvdW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgY29sbGVjdG9yLmNvbGxlY3RBdHRyaWJ1dGVzKGFjY2Vz
c2liaWxpdHlPYmplY3QoKS5jaGlsZEF0KGkpKTsKLSAgICByZXN1bHQtPnNldChjb2xsZWN0b3Iu
YXR0cmlidXRlcygpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0
cml6ZWRBdHRyaWJ1dGVOYW1lc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpsaW5lRm9ySW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmICghYXJndW1l
bnRzLnNpemUoKSB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgaW5kZXggPSBh
cmd1bWVudHNbMF0udG9JbnQzMigpOwotCi0gICAgV2ViVmVjdG9yPGludD4gbGluZUJyZWFrczsK
LSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubGluZUJyZWFrcyhsaW5lQnJlYWtzKTsKLSAgICBp
bnQgbGluZSA9IDA7Ci0gICAgaW50IHZlY3RvclNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGxpbmVC
cmVha3Muc2l6ZSgpKTsKLSAgICB3aGlsZSAobGluZSA8IHZlY3RvclNpemUgJiYgbGluZUJyZWFr
c1tsaW5lXSA8PSBpbmRleCkKLSAgICAgICAgbGluZSsrOwotICAgIHJlc3VsdC0+c2V0KGxpbmUp
OwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVz
dWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNoaWxkQXRJbmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKCFhcmd1bWVudHMuc2l6ZSgp
IHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkgewotICAgICAgICByZXN1bHQtPnNldE51bGwo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGNoaWxkID0gZ2V0Q2hpbGRBdEluZGV4KGFyZ3VtZW50c1swXS50b0ludDMyKCkpOwotICAgIGlm
ICghY2hpbGQpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICByZXN1bHQtPnNldCgqKGNoaWxkLT5nZXRBc0NwcFZhcmlhbnQoKSkpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0
ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93SGVhZGVyc0NhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51
bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1
bW5zQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQot
ewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNP
ZkhlYWRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmRleEluVGFibGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlQ2FsbGJh
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJl
c3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxG
b3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6dGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8
fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSBhcmd1bWVudHNbMF0u
dG9JbnQzMigpOwotICAgIGludCBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25TdGFydCArIGFyZ3Vt
ZW50c1sxXS50b0ludDMyKCk7Ci0gICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNldFNlbGVjdGVk
VGV4dFJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotfQotCi12b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZVZhbHVlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwot
fQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGVDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSAmJiAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBzdHJpbmcgYXR0cmlidXRlID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0g
ICAgYm9vbCBzZXR0YWJsZSA9IGZhbHNlOwotICAgIGlmIChhdHRyaWJ1dGUgPT0gIkFYVmFsdWUi
KQotICAgICAgICBzZXR0YWJsZSA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jYW5TZXRWYWx1ZUF0
dHJpYnV0ZSgpOwotICAgIHJlc3VsdC0+c2V0KHNldHRhYmxlKTsKLX0KLQotdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojppc0FjdGlvblN1cHBvcnRlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBUaGlzIG9uZSBtYXkgYmUg
cmVhbGx5IGhhcmQgdG8gaW1wbGVtZW50LgotICAgIC8vIE5vdCBleHBvc2VkIGJ5IEFjY2Vzc2li
aWxpdHlPYmplY3QuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cGFyZW50RWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQot
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnByZXNzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQotewotICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5wZXJmb3JtRGVmYXVsdEFjdGlvbigpOwot
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzRXF1YWxDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1l
bnRzWzBdLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICByZXN1bHQtPnNldChhcmd1bWVudHNbMF0uaXNFcXVhbCgq
Z2V0QXNDcHBWYXJpYW50KCkpKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
ZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmplY3QoKSkgewotICAgICAgICByZXN1bHQtPnNldE51
bGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJh
Y2tzLnB1c2hfYmFjayhhcmd1bWVudHNbMF0pOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQot
Ci12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVy
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXNDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgYWNjZXNzaWJpbGl0
eU9iamVjdCgpLnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkuc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOwotICAgIHJlc3VsdC0+c2V0
TnVsbCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZp
c2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gNAotICAgICAgICB8fCAhYXJndW1lbnRzWzBdLmlzTnVt
YmVyKCkKLSAgICAgICAgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpCi0gICAgICAgIHx8ICFh
cmd1bWVudHNbMl0uaXNOdW1iZXIoKQotICAgICAgICB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVy
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIo
KTsKLSAgICBpbnQgeSA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgaW50IHdpZHRoID0g
YXJndW1lbnRzWzJdLnRvSW50MzIoKTsKLSAgICBpbnQgaGVpZ2h0ID0gYXJndW1lbnRzWzNdLnRv
SW50MzIoKTsKLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1cyhXZWJSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2Jh
bFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpICE9IDIKLSAgICAgICAgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpCi0gICAg
ICAgIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aW50IHggPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIGludCB5ID0gYXJndW1lbnRzWzFd
LnRvSW50MzIoKTsKLQotICAgIGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zY3JvbGxUb0dsb2JhbFBv
aW50KFdlYlBvaW50KHgsIHkpKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCAmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi1Sb290QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Um9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdCAmb2JqZWN0LCBGYWN0b3J5ICpmYWN0b3J5KQotICAgIDogQWNjZXNzaWJpbGl0eVVJRWxl
bWVudChvYmplY3QsIGZhY3RvcnkpIHsgfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBSb290
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQot
ewotICAgIGlmIChpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZmFjdG9y
eSgpLT5nZXRPckNyZWF0ZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpOwotfQotCi0KLUFjY2Vzc2li
aWxpdHlVSUVsZW1lbnRMaXN0IDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0KCkKLXsKLSAg
ICBjbGVhcigpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpjbGVhcigp
Ci17Ci0gICAgZm9yIChFbGVtZW50TGlzdDo6aXRlcmF0b3IgaSA9IG1fZWxlbWVudHMuYmVnaW4o
KTsgaSAhPSBtX2VsZW1lbnRzLmVuZCgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSAoKmkpOwotICAg
IG1fZWxlbWVudHMuY2xlYXIoKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNz
aWJpbGl0eVVJRWxlbWVudExpc3Q6OmdldE9yQ3JlYXRlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlP
YmplY3QmIG9iamVjdCkKLXsKLSAgICBpZiAob2JqZWN0LmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHNpemVfdCBlbGVtZW50Q291bnQgPSBtX2VsZW1lbnRzLnNpemUoKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVsZW1lbnRDb3VudDsgaSsrKSB7Ci0gICAgICAgIGlm
IChtX2VsZW1lbnRzW2ldLT5pc0VxdWFsKG9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gbV9l
bGVtZW50c1tpXTsKLSAgICB9Ci0KLSAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50
ID0gbmV3IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0LCB0aGlzKTsKLSAgICBtX2VsZW1l
bnRzLmFwcGVuZChlbGVtZW50KTsKLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQotQWNjZXNzaWJp
bGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3Q6OmNyZWF0ZVJvb3QoY29u
c3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQotewotICAgIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGVsZW1lbnQgPSBuZXcgUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0
LCB0aGlzKTsKLSAgICBtX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKLSAgICByZXR1cm4gZWxl
bWVudDsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWU3M2U1N2U5ZDAzNDA0ZDE4ZDMzN2Yw
ZGU1ODBhODBlOTU1MmIwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudENocm9taXVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAot
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
Zm5kZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtX2gKLSNkZWZpbmUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudENocm9taXVtX2gKLQotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLSNp
bmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSA8dmVjdG9yPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotY2xhc3MgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCA6IHB1
YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBjbGFzcyBGYWN0b3J5IHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkZhY3RvcnkoKSB7IH0KLSAgICAgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRPckNyZWF0ZShjb25zdCBXZWJLaXQ6OldlYkFjY2Vz
c2liaWxpdHlPYmplY3QmKSA9IDA7Ci0gICAgfTsKLQotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgRmFjdG9yeSopOwotCi0g
ICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBnZXRDaGlsZEF0SW5kZXgodW5zaWdu
ZWQpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc0VxdWFsKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9i
amVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmaWNhdGlvblJlY2VpdmVkKGNvbnN0IGNo
YXIgKm5vdGlmaWNhdGlvbk5hbWUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgV2ViS2l0OjpX
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9hY2Nlc3NpYmlsaXR5T2JqZWN0OyB9Ci0KLSAgICBGYWN0b3J5KiBmYWN0b3J5KCkgY29u
c3QgeyByZXR1cm4gbV9mYWN0b3J5OyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gQm91bmQgcHJvcGVy
dGllcy4KLSAgICB2b2lkIHJvbGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCB0aXRsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGRlc2NyaXB0aW9u
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaGVscFRleHRHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHhHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCB5R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgd2lkdGhHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBoZWlnaHRHZXR0ZXJDYWxsYmFjayhDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBpbnRWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIG1pblZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
bWF4VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB2YWx1ZURlc2Ny
aXB0aW9uR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2hpbGRyZW5Db3Vu
dEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGluc2VydGlvblBvaW50TGlu
ZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNlbGVjdGVkVGV4
dFJhbmdlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNFbmFibGVkR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNSZXF1aXJlZEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzRm9jdXNlZEdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGlzRm9jdXNhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCop
OwotICAgIHZvaWQgaXNTZWxlY3RlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGlzU2VsZWN0YWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlz
TXVsdGlTZWxlY3RhYmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNT
ZWxlY3RlZE9wdGlvbkFjdGl2ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lk
IGlzRXhwYW5kZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0NoZWNr
ZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc1Zpc2libGVHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc09mZlNjcmVlbkdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQ29sbGFwc2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgaGFzUG9wdXBHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBpc1ZhbGlkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaXNS
ZWFkT25seUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIG9yaWVudGF0aW9u
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwotCi0gICAgLy8gQm91bmQgbWV0aG9kcy4KLSAg
ICB2b2lkIGFsbEF0dHJpYnV0ZXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRl
c09mRG9jdW1lbnRMaW5rc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGF0dHJpYnV0ZXNPZkNoaWxkcmVuQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcGFyYW1ldHJpemVkQXR0cmlidXRl
TmFtZXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBsaW5lRm9ySW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50Kik7Ci0gICAgdm9pZCBib3VuZHNGb3JSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHN0cmluZ0ZvclJhbmdlQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2hpbGRBdEluZGV4
Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
ZWxlbWVudEF0UG9pbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZDb2x1bW5IZWFkZXJzQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mUm93SGVh
ZGVyc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGF0dHJpYnV0ZXNPZkNvbHVtbnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCBhdHRyaWJ1dGVzT2ZSb3dzQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYXR0cmlidXRlc09mVmlzaWJs
ZUNlbGxzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgYXR0cmlidXRlc09mSGVhZGVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwotICAgIHZvaWQgaW5kZXhJblRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcm93SW5kZXhSYW5nZUNhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNvbHVtbklu
ZGV4UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBjZWxsRm9yQ29sdW1uQW5kUm93Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdGl0bGVVSUVsZW1lbnRDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZFRleHRS
YW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIGF0dHJpYnV0ZVZhbHVlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwotICAgIHZvaWQgaXNBdHRyaWJ1dGVTZXR0YWJsZUNhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGlzQWN0aW9uU3VwcG9ydGVkQ2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcGFy
ZW50RWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIGluY3JlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGRlY3JlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNob3dNZW51Q2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgcHJlc3NDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBpc0VxdWFsQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgYWRkTm90aWZp
Y2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHRha2VGb2N1c0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNjcm9sbFRv
TWFrZVZpc2libGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgc2Nyb2xsVG9HbG9iYWxQ
b2ludENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAg
IHZvaWQgZmFsbGJhY2tDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0KLSAgICBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QgbV9hY2Nlc3NpYmlsaXR5
T2JqZWN0OwotICAgIEZhY3RvcnkqIG1fZmFjdG9yeTsKLSAgICBzdGQ6OnZlY3RvcjxDcHBWYXJp
YW50PiBtX25vdGlmaWNhdGlvbkNhbGxiYWNrczsKLX07Ci0KLQotY2xhc3MgUm9vdEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCB7Ci1wdWJsaWM6
Ci0gICAgUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0JiwgRmFjdG9yeSopOwotCi0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50KiBnZXRDaGlsZEF0SW5kZXgodW5zaWduZWQpOwotICAgIHZpcnR1YWwgYm9vbCBpc1Jv
b3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci19OwotCi0KLS8vIFByb3ZpZGVzIHNpbXBsZSBs
aWZldGltZSBtYW5hZ2VtZW50IG9mIHRoZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IGluc3RhbmNl
czoKLS8vIGFsbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50cyBldmVyIGNyZWF0ZWQgZnJvbSB0aGUg
Y29udHJvbGxlciBhcmUgc3RvcmVkIGluCi0vLyBhIGxpc3QgYW5kIGNsZWFyZWQgZXhwbGljaXRs
eS4KLWNsYXNzIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0IDogcHVibGljIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OkZhY3RvcnkgewotcHVibGljOgotICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnRMaXN0KCkgeyB9Ci0gICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QoKTsK
LQotICAgIHZvaWQgY2xlYXIoKTsKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQq
IGdldE9yQ3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOwotICAg
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGNyZWF0ZVJvb3QoY29uc3QgV2ViS2l0OjpXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBWZWN0b3I8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudCo+IEVsZW1lbnRMaXN0OwotICAgIEVsZW1lbnRMaXN0IG1fZWxlbWVu
dHM7Ci19OwotCi0jZW5kaWYgLy8gQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtX2gKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwQm91
bmRDbGFzcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0Nw
cEJvdW5kQ2xhc3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjI5ZDJiMGY1
NWQwMWY3Mzg3MTQ1Nzg3N2Y5ZGJkZjA2ZjFiNDkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvQ3BwQm91bmRDbGFzcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IFBhd2VsIEhhamRhbiAocGhhamRhbi5qckBjaHJvbWl1
bS5vcmcpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
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
LQotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciBDcHBCb3VuZENsYXNzCi0K
LS8vIEhlcmUncyB0aGUgY29udHJvbCBmbG93IG9mIGEgSlMgbWV0aG9kIGdldHRpbmcgZm9yd2Fy
ZGVkIHRvIGEgY2xhc3MuCi0vLyAtIFNvbWV0aGluZyBjYWxscyBvdXIgTlBPYmplY3Qgd2l0aCBh
IGZ1bmN0aW9uIGxpa2UgIkludm9rZSIuCi0vLyAtIENwcE5QT2JqZWN0J3Mgc3RhdGljIGludm9r
ZSgpIGZ1bmN0aW9uIGZvcndhcmRzIGl0IHRvIGl0cyBhdHRhY2hlZAotLy8gICBDcHBCb3VuZENs
YXNzJ3MgaW52b2tlKCkgbWV0aG9kLgotLy8gLSBDcHBCb3VuZENsYXNzIGhhcyB0aGVuIG92ZXJy
aWRkZW4gaW52b2tlKCkgdG8gbG9vayB1cCB0aGUgZnVuY3Rpb24KLS8vICAgbmFtZSBpbiBpdHMg
aW50ZXJuYWwgbWFwIG9mIG1ldGhvZHMsIGFuZCB0aGVuIGNhbGxzIHRoZSBhcHByb3ByaWF0ZQot
Ly8gICBtZXRob2QuCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDcHBCb3VuZENs
YXNzLmgiCi0KLSNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgi
Ci0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1jbGFzcyBDcHBWYXJpYW50UHJvcGVydHlDYWxsYmFj
ayA6IHB1YmxpYyBDcHBCb3VuZENsYXNzOjpQcm9wZXJ0eUNhbGxiYWNrIHsKLXB1YmxpYzoKLSAg
ICBDcHBWYXJpYW50UHJvcGVydHlDYWxsYmFjayhDcHBWYXJpYW50KiB2YWx1ZSkgOiBtX3ZhbHVl
KHZhbHVlKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBnZXRWYWx1ZShDcHBWYXJpYW50KiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHZhbHVlLT5zZXQoKm1fdmFsdWUpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWUoY29uc3QgQ3BwVmFyaWFu
dCYgdmFsdWUpCi0gICAgewotICAgICAgICBtX3ZhbHVlLT5zZXQodmFsdWUpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ3BwVmFyaWFudCogbV92YWx1ZTsK
LX07Ci0KLWNsYXNzIEdldHRlclByb3BlcnR5Q2FsbGJhY2sgOiBwdWJsaWMgQ3BwQm91bmRDbGFz
czo6UHJvcGVydHlDYWxsYmFjayB7Ci1wdWJsaWM6Ci0gICAgR2V0dGVyUHJvcGVydHlDYWxsYmFj
ayhQYXNzT3duUHRyPENwcEJvdW5kQ2xhc3M6OkdldHRlckNhbGxiYWNrPiBjYWxsYmFjaykKLSAg
ICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgZ2V0VmFsdWUoQ3BwVmFyaWFudCogdmFsdWUpCi0gICAgewotICAgICAgICBtX2NhbGxi
YWNrLT5ydW4odmFsdWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgc2V0VmFsdWUoY29uc3QgQ3BwVmFyaWFudCYgdmFsdWUpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLXByaXZhdGU6Ci0gICAgT3duUHRyPENwcEJvdW5kQ2xhc3M6OkdldHRlckNhbGxiYWNr
PiBtX2NhbGxiYWNrOwotfTsKLQotLy8gT3VyIHNwZWNpYWwgTlBPYmplY3QgdHlwZS4gV2UgZXh0
ZW5kIGFuIE5QT2JqZWN0IHdpdGggYSBwb2ludGVyIHRvIGEKLS8vIENwcEJvdW5kQ2xhc3MsIHdo
aWNoIGlzIGp1c3QgYSBDKysgaW50ZXJmYWNlIHRoYXQgd2UgZm9yd2FyZCBhbGwgTlBPYmplY3QK
LS8vIGNhbGxiYWNrcyB0by4KLXN0cnVjdCBDcHBOUE9iamVjdCB7Ci0gICAgTlBPYmplY3QgcGFy
ZW50OyAvLyBUaGlzIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuCi0gICAg
Q3BwQm91bmRDbGFzcyogYm91bmRDbGFzczsKLQotICAgIC8vCi0gICAgLy8gQWxsIGZvbGxvd2lu
ZyBvYmplY3RzIGFuZCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgYW5kIGp1c3QgdXNlZCB0byBpbnRl
cmZhY2UKLSAgICAvLyB3aXRoIE5QT2JqZWN0L05QQ2xhc3MuCi0gICAgLy8KLQotICAgIC8vIEFu
IE5QQ2xhc3MgYXNzb2NpYXRlcyBzdGF0aWMgZnVuY3Rpb25zIG9mIENwcE5QT2JqZWN0IHdpdGgg
dGhlCi0gICAgLy8gZnVuY3Rpb24gcG9pbnRlcnMgdXNlZCBieSB0aGUgSlMgcnVudGltZS4KLSAg
ICBzdGF0aWMgTlBDbGFzcyBucENsYXNzOwotCi0gICAgLy8gQWxsb2NhdGUgYSBuZXcgTlBPYmpl
Y3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGNsYXNzLgotICAgIHN0YXRpYyBOUE9iamVjdCogYWxsb2Nh
dGUoTlBQLCBOUENsYXNzKik7Ci0KLSAgICAvLyBGcmVlIGFuIG9iamVjdC4KLSAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKE5QT2JqZWN0Kik7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IEMrKyBjbGFzcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBOUE9iamVjdCBleHBvc2VzIHRoZQotICAg
IC8vIGdpdmVuIHByb3BlcnR5LiBDYWxsZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCi0gICAgc3RhdGlj
IGJvb2wgaGFzUHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIpOwotCi0gICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBDKysgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTlBPYmplY3Qg
ZXhwb3NlcyB0aGUKLSAgICAvLyBnaXZlbiBtZXRob2QuIENhbGxlZCBieSB0aGUgSlMgcnVudGlt
ZS4KLSAgICBzdGF0aWMgYm9vbCBoYXNNZXRob2QoTlBPYmplY3QqLCBOUElkZW50aWZpZXIpOwot
Ci0gICAgLy8gSWYgdGhlIGdpdmVuIG1ldGhvZCBpcyBleHBvc2VkIGJ5IHRoZSBDKysgY2xhc3Mg
YXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAvLyBOUE9iamVjdCwgaW52b2tlcyBpdCB3aXRoIHRo
ZSBnaXZlbiBhcmd1bWVudHMgYW5kIHJldHVybnMgYSByZXN1bHQuIE90aGVyd2lzZSwKLSAgICAv
LyByZXR1cm5zICJ1bmRlZmluZWQiIChpbiB0aGUgSmF2YVNjcmlwdCBzZW5zZSkuIENhbGxlZCBi
eSB0aGUgSlMgcnVudGltZS4KLSAgICBzdGF0aWMgYm9vbCBpbnZva2UoTlBPYmplY3QqLCBOUElk
ZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5QVmFyaWFudCogYXJndW1l
bnRzLCB1aW50MzJfdCBhcmd1bWVudENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICBOUFZh
cmlhbnQqIHJlc3VsdCk7Ci0KLSAgICAvLyBJZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXMgZXhwb3Nl
ZCBieSB0aGUgQysrIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgLy8gTlBPYmplY3Qs
IHJldHVybnMgaXRzIHZhbHVlLiBPdGhlcndpc2UsIHJldHVybnMgInVuZGVmaW5lZCIgKGluIHRo
ZQotICAgIC8vIEphdmFTY3JpcHQgc2Vuc2UpLiBDYWxsZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCi0g
ICAgc3RhdGljIGJvb2wgZ2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIsIE5QVmFy
aWFudCogcmVzdWx0KTsKLQotICAgIC8vIElmIHRoZSBnaXZlbiBwcm9wZXJ0eSBpcyBleHBvc2Vk
IGJ5IHRoZSBDKysgY2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMKLSAgICAvLyBOUE9iamVjdCwg
c2V0cyBpdHMgdmFsdWUuIE90aGVyd2lzZSwgZG9lcyBub3RoaW5nLiBDYWxsZWQgYnkgdGhlIEpT
Ci0gICAgLy8gcnVudGltZS4KLSAgICBzdGF0aWMgYm9vbCBzZXRQcm9wZXJ0eShOUE9iamVjdCos
IE5QSWRlbnRpZmllciwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSk7Ci19OwotCi0vLyBCdWlsZCBD
cHBOUE9iamVjdCdzIHN0YXRpYyBmdW5jdGlvbiBwb2ludGVycyBpbnRvIGFuIE5QQ2xhc3MsIGZv
ciB1c2UKLS8vIGluIGNvbnN0cnVjdGluZyBOUE9iamVjdHMgZm9yIHRoZSBDKysgY2xhc3Nlcy4K
LU5QQ2xhc3MgQ3BwTlBPYmplY3Q6Om5wQ2xhc3MgPSB7Ci0gICAgTlBfQ0xBU1NfU1RSVUNUX1ZF
UlNJT04sCi0gICAgQ3BwTlBPYmplY3Q6OmFsbG9jYXRlLAotICAgIENwcE5QT2JqZWN0OjpkZWFs
bG9jYXRlLAotICAgIC8qIE5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyICovIDAsCi0gICAgQ3BwTlBP
YmplY3Q6Omhhc01ldGhvZCwKLSAgICBDcHBOUE9iamVjdDo6aW52b2tlLAotICAgIC8qIE5QSW52
b2tlRGVmYXVsdEZ1bmN0aW9uUHRyICovIDAsCi0gICAgQ3BwTlBPYmplY3Q6Omhhc1Byb3BlcnR5
LAotICAgIENwcE5QT2JqZWN0OjpnZXRQcm9wZXJ0eSwKLSAgICBDcHBOUE9iamVjdDo6c2V0UHJv
cGVydHksCi0gICAgLyogTlBSZW1vdmVQcm9wZXJ0eUZ1bmN0aW9uUHRyICovIDAKLX07Ci0KLU5Q
T2JqZWN0KiBDcHBOUE9iamVjdDo6YWxsb2NhdGUoTlBQIG5wcCwgTlBDbGFzcyogYUNsYXNzKQot
ewotICAgIENwcE5QT2JqZWN0KiBvYmogPSBuZXcgQ3BwTlBPYmplY3Q7Ci0gICAgLy8gb2JqLT5w
YXJlbnQgd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUgTlBPYmplY3QgY29kZSBjYWxsaW5nIHRo
aXMuCi0gICAgb2JqLT5ib3VuZENsYXNzID0gMDsKLSAgICByZXR1cm4gJm9iai0+cGFyZW50Owot
fQotCi12b2lkIENwcE5QT2JqZWN0OjpkZWFsbG9jYXRlKE5QT2JqZWN0KiBucE9iaikKLXsKLSAg
ICBDcHBOUE9iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxDcHBOUE9iamVjdCo+KG5wT2Jq
KTsKLSAgICBkZWxldGUgb2JqOwotfQotCi1ib29sIENwcE5QT2JqZWN0OjpoYXNNZXRob2QoTlBP
YmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQpCi17Ci0gICAgQ3BwTlBPYmplY3QqIG9i
aiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAgcmV0dXJuIG9i
ai0+Ym91bmRDbGFzcy0+aGFzTWV0aG9kKGlkZW50KTsKLX0KLQotYm9vbCBDcHBOUE9iamVjdDo6
aGFzUHJvcGVydHkoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQpCi17Ci0gICAg
Q3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7
Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+aGFzUHJvcGVydHkoaWRlbnQpOwotfQotCi1i
b29sIENwcE5QT2JqZWN0OjppbnZva2UoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRl
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVudHMs
IHVpbnQzMl90IGFyZ3VtZW50Q291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+aW52b2tl
KGlkZW50LCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgQ3Bw
TlBPYmplY3Q6OmdldFByb3BlcnR5KE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVyIGlkZW50
LCBOUFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBDcHBOUE9iamVjdCogb2JqID0gcmVpbnRlcnBy
ZXRfY2FzdDxDcHBOUE9iamVjdCo+KG5wT2JqKTsKLSAgICByZXR1cm4gb2JqLT5ib3VuZENsYXNz
LT5nZXRQcm9wZXJ0eShpZGVudCwgcmVzdWx0KTsKLX0KLQotYm9vbCBDcHBOUE9iamVjdDo6c2V0
UHJvcGVydHkoTlBPYmplY3QqIG5wT2JqLCBOUElkZW50aWZpZXIgaWRlbnQsIGNvbnN0IE5QVmFy
aWFudCogdmFsdWUpCi17Ci0gICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Q3BwTlBPYmplY3QqPihucE9iaik7Ci0gICAgcmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+c2V0UHJv
cGVydHkoaWRlbnQsIHZhbHVlKTsKLX0KLQotQ3BwQm91bmRDbGFzczo6fkNwcEJvdW5kQ2xhc3Mo
KQotewotICAgIGZvciAoTWV0aG9kTGlzdDo6aXRlcmF0b3IgaSA9IG1fbWV0aG9kcy5iZWdpbigp
OyBpICE9IG1fbWV0aG9kcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+dmFsdWU7Ci0K
LSAgICBmb3IgKFByb3BlcnR5TGlzdDo6aXRlcmF0b3IgaSA9IG1fcHJvcGVydGllcy5iZWdpbigp
OyBpICE9IG1fcHJvcGVydGllcy5lbmQoKTsgKytpKQotICAgICAgICBkZWxldGUgaS0+dmFsdWU7
Ci0KLSAgICAvLyBVbnJlZ2lzdGVyIG91cnNlbHZlcyBpZiB3ZSB3ZXJlIGJvdW5kIHRvIGEgZnJh
bWUuCi0gICAgaWYgKG1fYm91bmRUb0ZyYW1lKQotICAgICAgICBXZWJCaW5kaW5nczo6dW5yZWdp
c3Rlck9iamVjdChOUFZBUklBTlRfVE9fT0JKRUNUKG1fc2VsZlZhcmlhbnQpKTsKLX0KLQotYm9v
bCBDcHBCb3VuZENsYXNzOjpoYXNNZXRob2QoTlBJZGVudGlmaWVyIGlkZW50KSBjb25zdAotewot
ICAgIHJldHVybiBtX21ldGhvZHMuZmluZChpZGVudCkgIT0gbV9tZXRob2RzLmVuZCgpOwotfQot
Ci1ib29sIENwcEJvdW5kQ2xhc3M6Omhhc1Byb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpICE9IG1fcHJvcGVydGll
cy5lbmQoKTsKLX0KLQotYm9vbCBDcHBCb3VuZENsYXNzOjppbnZva2UoTlBJZGVudGlmaWVyIGlk
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlBWYXJpYW50KiBhcmd1bWVu
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCogcmVzdWx0KSB7Ci0gICAgTWV0aG9k
TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9tZXRob2RzLmVuZCgpOwotICAgIE1ldGhvZExp
c3Q6OmNvbnN0X2l0ZXJhdG9yIG1ldGhvZCA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKLSAgICBD
YWxsYmFjayogY2FsbGJhY2s7Ci0gICAgaWYgKG1ldGhvZCA9PSBlbmQpIHsKLSAgICAgICAgaWYg
KCFtX2ZhbGxiYWNrQ2FsbGJhY2suZ2V0KCkpIHsKLSAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJ
QU5UKCpyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGNhbGxiYWNrID0gbV9mYWxsYmFja0NhbGxiYWNrLmdldCgpOwotICAgIH0gZWxzZQotICAg
ICAgICBjYWxsYmFjayA9ICgqbWV0aG9kKS52YWx1ZTsKLQotICAgIC8vIEJ1aWxkIGEgQ3BwQXJn
dW1lbnRMaXN0IGFyZ3VtZW50IHZlY3RvciBmcm9tIHRoZSBOUFZhcmlhbnRzIGNvbWluZyBpbi4K
LSAgICBDcHBBcmd1bWVudExpc3QgY3BwQXJndW1lbnRzKGFyZ3VtZW50Q291bnQpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgaSsrKQotICAgICAgICBjcHBBcmd1
bWVudHNbaV0uc2V0KGFyZ3VtZW50c1tpXSk7Ci0KLSAgICBDcHBWYXJpYW50IGNwcFJlc3VsdDsK
LSAgICBjYWxsYmFjay0+cnVuKGNwcEFyZ3VtZW50cywgJmNwcFJlc3VsdCk7Ci0KLSAgICBjcHBS
ZXN1bHQuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQ3BwQm91bmRDbGFzczo6Z2V0UHJvcGVydHkoTlBJZGVudGlmaWVyIGlkZW50LCBOUFZhcmlh
bnQqIHJlc3VsdCkgY29uc3QKLXsKLSAgICBQcm9wZXJ0eUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGNh
bGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOwotICAgIGlmIChjYWxsYmFjayA9PSBt
X3Byb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDcHBWYXJpYW50IGNwcFZhbHVl
OwotICAgIGlmICghY2FsbGJhY2stPnZhbHVlLT5nZXRWYWx1ZSgmY3BwVmFsdWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY3BwVmFsdWUuY29weVRvTlBWYXJpYW50KHJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ3BwQm91bmRDbGFzczo6c2V0UHJvcGVydHkoTlBJ
ZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhbnQqIHZhbHVlKQotewotICAgIFByb3BlcnR5
TGlzdDo6aXRlcmF0b3IgY2FsbGJhY2sgPSBtX3Byb3BlcnRpZXMuZmluZChpZGVudCk7Ci0gICAg
aWYgKGNhbGxiYWNrID09IG1fcHJvcGVydGllcy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKLSAgICBjcHBWYWx1ZS5zZXQoKnZhbHVlKTsK
LSAgICByZXR1cm4gKCpjYWxsYmFjaykudmFsdWUtPnNldFZhbHVlKGNwcFZhbHVlKTsKLX0KLQot
dm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kQ2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBDYWxs
YmFjayogY2FsbGJhY2spCi17Ci0gICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6
OmdldFN0cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKLSAgICBNZXRob2RMaXN0OjppdGVy
YXRvciBvbGRDYWxsYmFjayA9IG1fbWV0aG9kcy5maW5kKGlkZW50KTsKLSAgICBpZiAob2xkQ2Fs
bGJhY2sgIT0gbV9tZXRob2RzLmVuZCgpKSB7Ci0gICAgICAgIGRlbGV0ZSBvbGRDYWxsYmFjay0+
dmFsdWU7Ci0gICAgICAgIGlmICghY2FsbGJhY2spIHsKLSAgICAgICAgICAgIG1fbWV0aG9kcy5y
ZW1vdmUob2xkQ2FsbGJhY2spOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgbV9tZXRob2RzLnNldChpZGVudCwgY2FsbGJhY2spOwotfQotCi12b2lkIENwcEJv
dW5kQ2xhc3M6OmJpbmRHZXR0ZXJDYWxsYmFjayhjb25zdCBzdHJpbmcmIG5hbWUsIFBhc3NPd25Q
dHI8R2V0dGVyQ2FsbGJhY2s+IGNhbGxiYWNrKQotewotICAgIFByb3BlcnR5Q2FsbGJhY2sqIHBy
b3BlcnR5Q2FsbGJhY2sgPSBjYWxsYmFjayA/IG5ldyBHZXR0ZXJQcm9wZXJ0eUNhbGxiYWNrKGNh
bGxiYWNrKSA6IDA7Ci0gICAgYmluZFByb3BlcnR5KG5hbWUsIHByb3BlcnR5Q2FsbGJhY2spOwot
fQotCi12b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRQcm9wZXJ0eShjb25zdCBzdHJpbmcmIG5hbWUs
IENwcFZhcmlhbnQqIHByb3ApCi17Ci0gICAgUHJvcGVydHlDYWxsYmFjayogcHJvcGVydHlDYWxs
YmFjayA9IHByb3AgPyBuZXcgQ3BwVmFyaWFudFByb3BlcnR5Q2FsbGJhY2socHJvcCkgOiAwOwot
ICAgIGJpbmRQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eUNhbGxiYWNrKTsKLX0KLQotdm9pZCBDcHBC
b3VuZENsYXNzOjpiaW5kUHJvcGVydHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBQcm9wZXJ0eUNhbGxi
YWNrKiBjYWxsYmFjaykKLXsKLSAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6
Z2V0U3RyaW5nSWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOwotICAgIFByb3BlcnR5TGlzdDo6aXRl
cmF0b3Igb2xkQ2FsbGJhY2sgPSBtX3Byb3BlcnRpZXMuZmluZChpZGVudCk7Ci0gICAgaWYgKG9s
ZENhbGxiYWNrICE9IG1fcHJvcGVydGllcy5lbmQoKSkgewotICAgICAgICBkZWxldGUgb2xkQ2Fs
bGJhY2stPnZhbHVlOwotICAgICAgICBpZiAoIWNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBtX3By
b3BlcnRpZXMucmVtb3ZlKG9sZENhbGxiYWNrKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fcHJvcGVydGllcy5zZXQoaWRlbnQsIGNhbGxiYWNrKTsKLX0K
LQotYm9vbCBDcHBCb3VuZENsYXNzOjppc01ldGhvZFJlZ2lzdGVyZWQoY29uc3Qgc3RyaW5nJiBu
YW1lKSBjb25zdAotewotICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRT
dHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7Ci0gICAgTWV0aG9kTGlzdDo6Y29uc3RfaXRl
cmF0b3IgY2FsbGJhY2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7Ci0gICAgcmV0dXJuIGNhbGxi
YWNrICE9IG1fbWV0aG9kcy5lbmQoKTsKLX0KLQotQ3BwVmFyaWFudCogQ3BwQm91bmRDbGFzczo6
Z2V0QXNDcHBWYXJpYW50KCkKLXsKLSAgICBpZiAoIW1fc2VsZlZhcmlhbnQuaXNPYmplY3QoKSkg
ewotICAgICAgICAvLyBDcmVhdGUgYW4gTlBPYmplY3QgdXNpbmcgb3VyIHN0YXRpYyBOUENsYXNz
LiBUaGUgZmlyc3QgYXJndW1lbnQgKGEKLSAgICAgICAgLy8gcGx1Z2luJ3MgaW5zdGFuY2UgaGFu
ZGxlKSBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgYWxsb2NhdGUgZnVuY3Rpb24KLSAgICAgICAg
Ly8gZGlyZWN0bHksIGFuZCB3ZSBkb24ndCB1c2UgaXQsIHNvIGl0J3Mgb2sgdG8gYmUgMC4KLSAg
ICAgICAgTlBPYmplY3QqIG5wT2JqID0gV2ViQmluZGluZ3M6OmNyZWF0ZU9iamVjdCgwLCAmQ3Bw
TlBPYmplY3Q6Om5wQ2xhc3MpOwotICAgICAgICBDcHBOUE9iamVjdCogb2JqID0gcmVpbnRlcnBy
ZXRfY2FzdDxDcHBOUE9iamVjdCo+KG5wT2JqKTsKLSAgICAgICAgb2JqLT5ib3VuZENsYXNzID0g
dGhpczsKLSAgICAgICAgbV9zZWxmVmFyaWFudC5zZXQobnBPYmopOwotICAgICAgICBXZWJCaW5k
aW5nczo6cmVsZWFzZU9iamVjdChucE9iaik7IC8vIENwcFZhcmlhbnQgdGFrZXMgdGhlIHJlZmVy
ZW5jZS4KLSAgICB9Ci0gICAgQVNTRVJUKG1fc2VsZlZhcmlhbnQuaXNPYmplY3QoKSk7Ci0gICAg
cmV0dXJuICZtX3NlbGZWYXJpYW50OwotfQotCi12b2lkIENwcEJvdW5kQ2xhc3M6OmJpbmRUb0ph
dmFzY3JpcHQoV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGNsYXNzbmFtZSkKLXsK
LSAgICAvLyBCaW5kVG9XaW5kb3dPYmplY3Qgd2lsbCB0YWtlIGl0cyBvd24gcmVmZXJlbmNlIHRv
IHRoZSBOUE9iamVjdCwgYW5kIGNsZWFuCi0gICAgLy8gdXAgYWZ0ZXIgaXRzZWxmLiBJdCB3aWxs
IGFsc28gKGluZGlyZWN0bHkpIHJlZ2lzdGVyIHRoZSBvYmplY3Qgd2l0aCBWOCwKLSAgICAvLyBz
byB3ZSBtdXN0IHJlbWVtYmVyIHRoaXMgc28gd2UgY2FuIHVucmVnaXN0ZXIgaXQgd2hlbiB3ZSdy
ZSBkZXN0cm95ZWQuCi0gICAgZnJhbWUtPmJpbmRUb1dpbmRvd09iamVjdChjbGFzc25hbWUsIE5Q
VkFSSUFOVF9UT19PQkpFQ1QoKmdldEFzQ3BwVmFyaWFudCgpKSk7Ci0gICAgbV9ib3VuZFRvRnJh
bWUgPSB0cnVlOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9DcHBCb3VuZENsYXNzLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNGZiNTM2MWUxYmM4M2RhMGM2MzVkNDdhMTNmM2E0YTQzZjZiOTQ1Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0NwcEJvdW5kQ2xhc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGF3ZWwgSGFqZGFuIChwaGFqZGFu
LmpyQGNocm9taXVtLm9yZykKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
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
TUFHRS4KLSAqLwotCi0vKgotICBDcHBCb3VuZENsYXNzIGNsYXNzOgotICBUaGlzIGJhc2UgY2xh
c3Mgc2VydmVzIGFzIGEgcGFyZW50IGZvciBDKysgY2xhc3NlcyBkZXNpZ25lZCB0byBiZSBib3Vu
ZCB0bwotICBKYXZhU2NyaXB0IG9iamVjdHMuCi0KLSAgU3ViY2xhc3NlcyBzaG91bGQgZGVmaW5l
IHRoZSBjb25zdHJ1Y3RvciB0byBidWlsZCB0aGUgcHJvcGVydHkgYW5kIG1ldGhvZAotICBsaXN0
cyBuZWVkZWQgdG8gYmluZCB0aGlzIGNsYXNzIHRvIGEgSlMgb2JqZWN0LiAgVGhleSBzaG91bGQg
YWxzbyBkZWNsYXJlCi0gIGFuZCBkZWZpbmUgbWVtYmVyIHZhcmlhYmxlcyBhbmQgbWV0aG9kcyB0
byBiZSBleHBvc2VkIHRvIEpTIHRocm91Z2gKLSAgdGhhdCBvYmplY3QuCi0qLwotCi0jaWZuZGVm
IENwcEJvdW5kQ2xhc3NfaAotI2RlZmluZSBDcHBCb3VuZENsYXNzX2gKLQotI2luY2x1ZGUgIkNw
cFZhcmlhbnQuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1j
bGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYlN0cmluZzsKLX0KLQotdHlwZWRlZiBWZWN0b3I8Q3Bw
VmFyaWFudD4gQ3BwQXJndW1lbnRMaXN0OwotCi0vLyBDcHBCb3VuZENsYXNzIGxldHMgeW91IG1h
cCBKYXZhc2NyaXB0IG1ldGhvZCBjYWxscyBhbmQgcHJvcGVydHkgYWNjZXNzZXMKLS8vIGRpcmVj
dGx5IHRvIEMrKyBtZXRob2QgY2FsbHMgYW5kIENwcFZhcmlhbnQqIHZhcmlhYmxlIGFjY2Vzcy4K
LWNsYXNzIENwcEJvdW5kQ2xhc3MgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENwcEJvdW5k
Q2xhc3MpOwotcHVibGljOgotICAgIGNsYXNzIFByb3BlcnR5Q2FsbGJhY2sgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgdmlydHVhbCB+UHJvcGVydHlDYWxsYmFjaygpIHsgfQotCi0gICAgICAgIC8v
IFNldHMgfHZhbHVlfCB0byB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiBSZXR1cm5zIGZhbHNl
IGluIGNhc2Ugb2YKLSAgICAgICAgLy8gZmFpbHVyZS4gfHZhbHVlfCBpcyBhbHdheXMgbm9uLTAu
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRWYWx1ZShDcHBWYXJpYW50KiByZXN1bHQpID0gMDsK
LQotICAgICAgICAvLyBzZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSB0byB8dmFsdWV8LiBSZXR1cm5z
IGZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZS4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFZhbHVl
KGNvbnN0IENwcFZhcmlhbnQmKSA9IDA7Ci0gICAgfTsKLQotICAgIC8vIENhbGxiYWNrIGNsYXNz
IGZvciAidm9pZCBmdW5jdGlvbihDcHBWYXJpYW50KikiCi0gICAgY2xhc3MgR2V0dGVyQ2FsbGJh
Y2sgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+R2V0dGVyQ2FsbGJhY2soKSB7IH0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHJ1bihDcHBWYXJpYW50KikgPSAwOwotICAgIH07Ci0KLSAg
ICAvLyBUaGUgY29uc3RydWN0b3Igc2hvdWxkIGNhbGwgQmluZE1ldGhvZCwgQmluZFByb3BlcnR5
LCBhbmQKLSAgICAvLyBTZXRGYWxsYmFja01ldGhvZCBhcyBuZWVkZWQgdG8gc2V0IHVwIHRoZSBt
ZXRob2RzLCBwcm9wZXJ0aWVzLCBhbmQKLSAgICAvLyBmYWxsYmFjayBtZXRob2QuCi0gICAgQ3Bw
Qm91bmRDbGFzcygpIDogbV9ib3VuZFRvRnJhbWUoZmFsc2UpIHsgfQotICAgIHZpcnR1YWwgfkNw
cEJvdW5kQ2xhc3MoKTsKLQotICAgIC8vIFJldHVybiBhIENwcFZhcmlhbnQgcmVwcmVzZW50aW5n
IHRoaXMgY2xhc3MsIGZvciB1c2Ugd2l0aCBCaW5kUHJvcGVydHkoKS4KLSAgICAvLyBUaGUgdmFy
aWFudCB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgTlBWYXJpYW50VHlwZV9PYmplY3QuCi0gICAg
Q3BwVmFyaWFudCogZ2V0QXNDcHBWYXJpYW50KCk7Ci0KLSAgICAvLyBHaXZlbiBhIFdlYkZyYW1l
LCBCaW5kVG9KYXZhc2NyaXB0IGJ1aWxkcyB0aGUgTlBPYmplY3QgdGhhdCB3aWxsIHJlcHJlc2Vu
dAotICAgIC8vIHRoZSBjbGFzcyBhbmQgYmluZHMgaXQgdG8gdGhlIGZyYW1lJ3Mgd2luZG93IHVu
ZGVyIHRoZSBnaXZlbiBuYW1lLiBUaGlzCi0gICAgLy8gc2hvdWxkIGdlbmVyYWxseSBiZSBjYWxs
ZWQgZnJvbSB0aGUgV2ViVmlldyBkZWxlZ2F0ZSdzCi0gICAgLy8gV2luZG93T2JqZWN0Q2xlYXJl
ZCgpLiBBIGNsYXNzIHNvIGJvdW5kIHdpbGwgYmUgYWNjZXNzaWJsZSB0byBKYXZhU2NyaXB0Ci0g
ICAgLy8gYXMgd2luZG93LjxjbGFzc25hbWU+LiBUaGUgb3duZXIgb2YgdGhlIENwcEJvdW5kT2Jq
ZWN0IGlzIHJlc3BvbnNpYmxlIGZvcgotICAgIC8vIGtlZXBpbmcgdGhlIG9iamVjdCBhcm91bmQg
d2hpbGUgdGhlIGZyYW1lIGlzIGFsaXZlLCBhbmQgZm9yIGRlc3Ryb3lpbmcgaXQKLSAgICAvLyBh
ZnRlcndhcmRzLgotICAgIHZvaWQgYmluZFRvSmF2YXNjcmlwdChXZWJLaXQ6OldlYkZyYW1lKiwg
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNsYXNzbmFtZSk7Ci0KLSAgICAvLyBVc2VkIGJ5IGEg
dGVzdC4gUmV0dXJucyB0cnVlIGlmIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGV4
aXN0cywKLSAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBmYWxsYmFjayBpcyByZWdpc3Rl
cmVkLgotICAgIGJvb2wgaXNNZXRob2RSZWdpc3RlcmVkKGNvbnN0IHN0ZDo6c3RyaW5nJikgY29u
c3Q7Ci0KLXByb3RlY3RlZDoKLSAgICAvLyBDYWxsYmFjayBmb3IgInZvaWQgZnVuY3Rpb24oY29u
c3QgQ3BwQXJndWVtbnRMaXN0JiwgQ3BwVmFyaWFudCopIgotICAgIGNsYXNzIENhbGxiYWNrIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNhbGxiYWNrKCkgeyB9Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBydW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopID0gMDsK
LSAgICB9OwotCi0gICAgLy8gQ2FsbGJhY2sgZm9yICJ2b2lkIFQ6Om1ldGhvZChjb25zdCBDcHBB
cmd1ZW1udExpc3QmLCBDcHBWYXJpYW50KikiCi0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNz
IE1lbWJlckNhbGxiYWNrIDogcHVibGljIENhbGxiYWNrIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZFR5cGUpKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICAgICAgTWVtYmVyQ2FsbGJhY2soVCogb2JqZWN0LCBNZXRob2RUeXBl
IG1ldGhvZCkKLSAgICAgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAgICAgLCBt
X21ldGhvZChtZXRob2QpIHsgfQotICAgICAgICB2aXJ0dWFsIH5NZW1iZXJDYWxsYmFjaygpIHsg
fQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBydW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgKG1fb2Jq
ZWN0LT4qbV9tZXRob2QpKGFyZ3VtZW50cywgcmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgVCogbV9vYmplY3Q7Ci0gICAgICAgIE1ldGhvZFR5cGUgbV9tZXRob2Q7
Ci0gICAgfTsKLQotICAgIC8vIENhbGxiYWNrIGNsYXNzIGZvciAidm9pZCBUOjptZXRob2QoQ3Bw
VmFyaWFudCopIgotICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBNZW1iZXJHZXR0ZXJDYWxs
YmFjayA6IHB1YmxpYyBHZXR0ZXJDYWxsYmFjayB7Ci0gICAgcHVibGljOgotICAgICAgICB0eXBl
ZGVmIHZvaWQgKFQ6OipNZXRob2RUeXBlKShDcHBWYXJpYW50Kik7Ci0gICAgICAgIE1lbWJlckdl
dHRlckNhbGxiYWNrKFQqIG9iamVjdCwgTWV0aG9kVHlwZSBtZXRob2QpCi0gICAgICAgICAgICA6
IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgICAgICwgbV9tZXRob2QobWV0aG9kKSB7IH0KLSAg
ICAgICAgdmlydHVhbCB+TWVtYmVyR2V0dGVyQ2FsbGJhY2soKSB7IH0KLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgcnVuKENwcFZhcmlhbnQqIHJlc3VsdCkgeyAobV9vYmplY3QtPiptX21ldGhvZCko
cmVzdWx0KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgVCogbV9vYmplY3Q7Ci0gICAgICAg
IE1ldGhvZFR5cGUgbV9tZXRob2Q7Ci0gICAgfTsKLQotICAgIC8vIEJpbmQgdGhlIEphdmFzY3Jp
cHQgbWV0aG9kIGNhbGxlZCB0aGUgc3RyaW5nIHBhcmFtZXRlciB0byB0aGUgQysrIG1ldGhvZC4K
LSAgICB2b2lkIGJpbmRDYWxsYmFjayhjb25zdCBzdGQ6OnN0cmluZyYsIENhbGxiYWNrKik7Ci0K
LSAgICAvLyBBIHdyYXBwZXIgZm9yIGJpbmRDYWxsYmFjaywgdG8gc2ltcGxpZnkgdGhlIGNvbW1v
biBjYXNlIG9mIGJpbmRpbmcgYQotICAgIC8vIG1ldGhvZCBvbiB0aGUgY3VycmVudCBvYmplY3Qu
IFRob3VnaCBub3QgdmVyaWZpZWQgaGVyZSwgdGhlIG1ldGhvZCBwYXJhbWV0ZXIKLSAgICAvLyBt
dXN0IGJlIGEgbWV0aG9kIG9mIHRoaXMgQ3BwQm91bmRDbGFzcyBzdWJjbGFzcy4KLSAgICB0ZW1w
bGF0ZTxjbGFzcyBUPgotICAgIHZvaWQgYmluZE1ldGhvZChjb25zdCBzdGQ6OnN0cmluZyYgbmFt
ZSwgdm9pZCAoVDo6Km1ldGhvZCkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCop
KQotICAgIHsKLSAgICAgICAgQ2FsbGJhY2sqIGNhbGxiYWNrID0gbmV3IE1lbWJlckNhbGxiYWNr
PFQ+KHN0YXRpY19jYXN0PFQqPih0aGlzKSwgbWV0aG9kKTsKLSAgICAgICAgYmluZENhbGxiYWNr
KG5hbWUsIGNhbGxiYWNrKTsKLSAgICB9Ci0KLSAgICAvLyBCaW5kIEphdmFzY3JpcHQgcHJvcGVy
dHkgfG5hbWV8IHRvIHRoZSBDKysgZ2V0dGVyIGNhbGxiYWNrIHxjYWxsYmFja3wuCi0gICAgLy8g
VGhpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgcmVhZC1vbmx5IHByb3BlcnRpZXMuCi0gICAgdm9p
ZCBiaW5kR2V0dGVyQ2FsbGJhY2soY29uc3Qgc3RkOjpzdHJpbmcmLCBQYXNzT3duUHRyPEdldHRl
ckNhbGxiYWNrPik7Ci0KLSAgICAvLyBBIHdyYXBwZXIgZm9yIEJpbmRHZXR0ZXJDYWxsYmFjaywg
dG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBjYXNlIG9mIGJpbmRpbmcgYQotICAgIC8vIHByb3BlcnR5
IG9uIHRoZSBjdXJyZW50IG9iamVjdC4gVGhvdWdoIG5vdCB2ZXJpZmllZCBoZXJlLCB0aGUgbWV0
aG9kIHBhcmFtZXRlcgotICAgIC8vIG11c3QgYmUgYSBtZXRob2Qgb2YgdGhpcyBDcHBCb3VuZENs
YXNzIHN1YmNsYXNzLgotICAgIHRlbXBsYXRlPGNsYXNzIFQ+Ci0gICAgdm9pZCBiaW5kUHJvcGVy
dHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHZvaWQgKFQ6OiptZXRob2QpKENwcFZhcmlhbnQq
KSkKLSAgICB7Ci0gICAgICAgIE93blB0cjxHZXR0ZXJDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9w
dFB0cihuZXcgTWVtYmVyR2V0dGVyQ2FsbGJhY2s8VD4oc3RhdGljX2Nhc3Q8VCo+KHRoaXMpLCBt
ZXRob2QpKTsKLSAgICAgICAgYmluZEdldHRlckNhbGxiYWNrKG5hbWUsIGNhbGxiYWNrLnJlbGVh
c2UoKSk7Ci0gICAgfQotCi0gICAgLy8gQmluZCB0aGUgSmF2YXNjcmlwdCBwcm9wZXJ0eSBjYWxs
ZWQgfG5hbWV8IHRvIGEgQ3BwVmFyaWFudC4KLSAgICB2b2lkIGJpbmRQcm9wZXJ0eShjb25zdCBz
dGQ6OnN0cmluZyYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEJpbmQgSmF2YXNjcmlwdCBwcm9w
ZXJ0eSBjYWxsZWQgfG5hbWV8IHRvIGEgUHJvcGVydHlDYWxsYmFjay4KLSAgICAvLyBDcHBCb3Vu
ZENsYXNzIGFzc3VtZXMgY29udHJvbCBvdmVyIHRoZSBsaWZlIHRpbWUgb2YgdGhlIGNhbGxiYWNr
LgotICAgIHZvaWQgYmluZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiwgUHJvcGVydHlDYWxs
YmFjayopOwotCi0gICAgLy8gU2V0IHRoZSBmYWxsYmFjayBjYWxsYmFjaywgd2hpY2ggaXMgY2Fs
bGVkIHdoZW4gd2hlbiBhIGNhbGxiYWNrIGlzCi0gICAgLy8gaW52b2tlZCB0aGF0IGlzbid0IGJv
dW5kLgotICAgIC8vIElmIGl0IGlzIDAgKGl0cyBkZWZhdWx0IHZhbHVlKSwgYSBKYXZhU2NyaXB0
IGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4KLSAgICAvLyB0aGF0IGNhc2UgKGFzIG5vcm1hbGx5IGV4
cGVjdGVkKS4gSWYgbm9uIDAsIHRoZSBmYWxsYmFjayBtZXRob2QgaXMKLSAgICAvLyBpbnZva2Vk
IGFuZCB0aGUgc2NyaXB0IGNvbnRpbnVlcyBpdHMgZXhlY3V0aW9uLgotICAgIC8vIFBhc3Npbmcg
MCBjbGVhcnMgb3V0IGFueSBleGlzdGluZyBiaW5kaW5nLgotICAgIC8vIEl0IGlzIHVzZWQgZm9y
IHRlc3RzIGFuZCBzaG91bGQgcHJvYmFibHkgb25seSBiZSB1c2VkIGluIHN1Y2ggY2FzZXMKLSAg
ICAvLyBhcyBpdCBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMgKGEgSmF2YVNjcmlwdCBv
YmplY3Qgd2l0aCBhCi0gICAgLy8gZmFsbGJhY2sgYWx3YXlzIHJldHVybnMgdHJ1ZSB3aGVuIGNo
ZWNrZWQgZm9yIGEgbWV0aG9kJ3MKLSAgICAvLyBleGlzdGVuY2UpLgotICAgIHZvaWQgYmluZEZh
bGxiYWNrQ2FsbGJhY2soUGFzc093blB0cjxDYWxsYmFjaz4gZmFsbGJhY2tDYWxsYmFjaykKLSAg
ICB7Ci0gICAgICAgIG1fZmFsbGJhY2tDYWxsYmFjayA9IGZhbGxiYWNrQ2FsbGJhY2s7Ci0gICAg
fQotCi0gICAgLy8gQSB3cmFwcGVyIGZvciBCaW5kRmFsbGJhY2tDYWxsYmFjaywgdG8gc2ltcGxp
ZnkgdGhlIGNvbW1vbiBjYXNlIG9mCi0gICAgLy8gYmluZGluZyBhIG1ldGhvZCBvbiB0aGUgY3Vy
cmVudCBvYmplY3QuIFRob3VnaCBub3QgdmVyaWZpZWQgaGVyZSwKLSAgICAvLyB8bWV0aG9kfCBt
dXN0IGJlIGEgbWV0aG9kIG9mIHRoaXMgQ3BwQm91bmRDbGFzcyBzdWJjbGFzcy4KLSAgICAvLyBQ
YXNzaW5nIDAgZm9yIHxtZXRob2R8IGNsZWFycyBvdXQgYW55IGV4aXN0aW5nIGJpbmRpbmcuCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgVD4KLSAgICB2b2lkIGJpbmRGYWxsYmFja01ldGhvZCh2b2lkIChU
OjoqbWV0aG9kKShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikpCi0gICAgewot
ICAgICAgICBpZiAobWV0aG9kKSB7Ci0gICAgICAgICAgICBPd25QdHI8Q2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRQdHIobmV3IE1lbWJlckNhbGxiYWNrPFQ+KHN0YXRpY19jYXN0PFQqPih0aGlz
KSwgbWV0aG9kKSk7Ci0gICAgICAgICAgICBiaW5kRmFsbGJhY2tDYWxsYmFjayhjYWxsYmFjay5y
ZWxlYXNlKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGJpbmRGYWxsYmFja0NhbGxi
YWNrKG51bGxwdHIpOwotICAgIH0KLQotICAgIC8vIFNvbWUgZmllbGRzIGFyZSBwcm90ZWN0ZWQg
YmVjYXVzZSBzb21lIHRlc3RzIGRlcGVuZCBvbiBhY2Nlc3NpbmcgdGhlbSwKLSAgICAvLyBidXQg
b3RoZXJ3aXNlIHRoZXkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4KLQotICAgIHR5cGVk
ZWYgSGFzaE1hcDxOUElkZW50aWZpZXIsIFByb3BlcnR5Q2FsbGJhY2sqPiBQcm9wZXJ0eUxpc3Q7
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPE5QSWRlbnRpZmllciwgQ2FsbGJhY2sqPiBNZXRob2RMaXN0
OwotICAgIC8vIFRoZXNlIG1hcHMgYXNzb2NpYXRlIG5hbWVzIHdpdGggcHJvcGVydHkgYW5kIG1l
dGhvZCBwb2ludGVycyB0byBiZQotICAgIC8vIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KLSAgICBQ
cm9wZXJ0eUxpc3QgbV9wcm9wZXJ0aWVzOwotICAgIE1ldGhvZExpc3QgbV9tZXRob2RzOwotCi0g
ICAgLy8gVGhlIGNhbGxiYWNrIGdldHMgaW52b2tlZCB3aGVuIGEgY2FsbCBpcyBtYWRlIHRvIGFu
IG5vbmV4aXN0ZW50IG1ldGhvZC4KLSAgICBPd25QdHI8Q2FsbGJhY2s+IG1fZmFsbGJhY2tDYWxs
YmFjazsKLQotcHJpdmF0ZToKLSAgICAvLyBOUE9iamVjdCBjYWxsYmFja3MuCi0gICAgZnJpZW5k
IHN0cnVjdCBDcHBOUE9iamVjdDsKLSAgICBib29sIGhhc01ldGhvZChOUElkZW50aWZpZXIpIGNv
bnN0OwotICAgIGJvb2wgaW52b2tlKE5QSWRlbnRpZmllciwgY29uc3QgTlBWYXJpYW50KiBhcmdz
LCBzaXplX3QgYXJnQ291bnQsCi0gICAgICAgICAgICAgICAgTlBWYXJpYW50KiByZXN1bHQpOwot
ICAgIGJvb2wgaGFzUHJvcGVydHkoTlBJZGVudGlmaWVyKSBjb25zdDsKLSAgICBib29sIGdldFBy
b3BlcnR5KE5QSWRlbnRpZmllciwgTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0OwotICAgIGJvb2wg
c2V0UHJvcGVydHkoTlBJZGVudGlmaWVyLCBjb25zdCBOUFZhcmlhbnQqKTsKLQotICAgIC8vIEEg
bGF6aWx5LWluaXRpYWxpemVkIENwcFZhcmlhbnQgcmVwcmVzZW50aW5nIHRoaXMgY2xhc3MuIFdl
IHJldGFpbiAxCi0gICAgLy8gcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LCBhbmQgaXQgaXMgcmVs
ZWFzZWQgb24gZGVsZXRpb24uCi0gICAgQ3BwVmFyaWFudCBtX3NlbGZWYXJpYW50OwotCi0gICAg
Ly8gVHJ1ZSBpZiBvdXIgbnBfb2JqZWN0IGhhcyBiZWVuIGJvdW5kIHRvIGEgV2ViRnJhbWUsIGlu
IHdoaWNoIGNhc2UgaXQgbXVzdAotICAgIC8vIGJlIHVucmVnaXN0ZXJlZCB3aXRoIFY4IHdoZW4g
d2UgZGVsZXRlIGl0LgotICAgIGJvb2wgbV9ib3VuZFRvRnJhbWU7Ci19OwotCi0jZW5kaWYgLy8g
Q3BwQm91bmRDbGFzc19oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFJ1bm5lci9DcHBWYXJpYW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjU4N2Q3NWFhYzUxOGRkOTE4MGUxZTRhN2VjNjZhNTQ1MWFkYTYyMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzIx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
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
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ3BwVmFyaWFudC5oIgotCi0j
aW5jbHVkZSAiV2ViQmluZGluZ3MuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1DcHBWYXJpYW50OjpDcHBW
YXJpYW50KCkKLXsKLSAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9OdWxsOwotfQotCi0vLyBOb3Rl
IHRoYXQgU2V0KCkgcGVyZm9ybXMgYSBkZWVwIGNvcHksIHdoaWNoIGlzIG5lY2Vzc2FyeSB0byBz
YWZlbHkKLS8vIGNhbGwgRnJlZURhdGEoKSBvbiB0aGUgdmFsdWUgaW4gdGhlIGRlc3RydWN0b3Iu
Ci1DcHBWYXJpYW50OjpDcHBWYXJpYW50KGNvbnN0IENwcFZhcmlhbnQmIG9yaWdpbmFsKQotewot
ICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBlX051bGw7Ci0gICAgc2V0KG9yaWdpbmFsKTsKLX0KLQot
Ly8gU2VlIGNvbW1lbnQgZm9yIGNvcHkgY29uc3RydWN0b3IsIGFib3ZlLgotQ3BwVmFyaWFudCYg
Q3BwVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IENwcFZhcmlhbnQmIG9yaWdpbmFsKQotewotICAg
IGlmICgmb3JpZ2luYWwgIT0gdGhpcykKLSAgICAgICAgc2V0KG9yaWdpbmFsKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLUNwcFZhcmlhbnQ6On5DcHBWYXJpYW50KCkKLXsKLSAgICBmcmVlRGF0
YSgpOwotfQotCi12b2lkIENwcFZhcmlhbnQ6OmZyZWVEYXRhKCkKLXsKLSAgICBXZWJCaW5kaW5n
czo6cmVsZWFzZVZhcmlhbnRWYWx1ZSh0aGlzKTsKLX0KLQotYm9vbCBDcHBWYXJpYW50Ojppc0Vx
dWFsKGNvbnN0IENwcFZhcmlhbnQmIG90aGVyKSBjb25zdAotewotICAgIGlmICh0eXBlICE9IG90
aGVyLnR5cGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Cb29sOgotICAgICAgICByZXR1cm4gKHZhbHVlLmJvb2xW
YWx1ZSA9PSBvdGhlci52YWx1ZS5ib29sVmFsdWUpOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9J
bnQzMjoKLSAgICAgICAgcmV0dXJuICh2YWx1ZS5pbnRWYWx1ZSA9PSBvdGhlci52YWx1ZS5pbnRW
YWx1ZSk7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0RvdWJsZToKLSAgICAgICAgcmV0dXJuICh2
YWx1ZS5kb3VibGVWYWx1ZSA9PSBvdGhlci52YWx1ZS5kb3VibGVWYWx1ZSk7Ci0gICAgY2FzZSBO
UFZhcmlhbnRUeXBlX1N0cmluZzogewotICAgICAgICBjb25zdCBOUFN0cmluZyAqdGhpc192YWx1
ZSA9ICZ2YWx1ZS5zdHJpbmdWYWx1ZTsKLSAgICAgICAgY29uc3QgTlBTdHJpbmcgKm90aGVyX3Zh
bHVlID0gJm90aGVyLnZhbHVlLnN0cmluZ1ZhbHVlOwotICAgICAgICB1aW50MzJfdCBsZW4gPSB0
aGlzX3ZhbHVlLT5VVEY4TGVuZ3RoOwotICAgICAgICByZXR1cm4gbGVuID09IG90aGVyX3ZhbHVl
LT5VVEY4TGVuZ3RoCi0gICAgICAgICAgICAmJiAhc3RybmNtcCh0aGlzX3ZhbHVlLT5VVEY4Q2hh
cmFjdGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyX3ZhbHVlLT5VVEY4Q2hhcmFj
dGVycywgbGVuKTsKLSAgICB9Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX051bGw6Ci0gICAgY2Fz
ZSBOUFZhcmlhbnRUeXBlX1ZvaWQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgTlBW
YXJpYW50VHlwZV9PYmplY3Q6IHsKLSAgICAgICAgTlBPYmplY3QqIHRoaXNWYWx1ZSA9IHZhbHVl
Lm9iamVjdFZhbHVlOwotICAgICAgICBOUE9iamVjdCogb3RoZXJWYWx1ZSA9IG90aGVyLnZhbHVl
Lm9iamVjdFZhbHVlOwotICAgICAgICByZXR1cm4gdGhpc1ZhbHVlLT5fY2xhc3MgPT0gb3RoZXJW
YWx1ZS0+X2NsYXNzCi0gICAgICAgICAgICAmJiB0aGlzVmFsdWUtPnJlZmVyZW5jZUNvdW50ID09
IG90aGVyVmFsdWUtPnJlZmVyZW5jZUNvdW50OwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIENwcFZhcmlhbnQ6OmNvcHlUb05QVmFyaWFudChOUFZhcmlhbnQqIHJl
c3VsdCkgY29uc3QKLXsKLSAgICByZXN1bHQtPnR5cGUgPSB0eXBlOwotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Cb29sOgotICAgICAgICByZXN1bHQtPnZhbHVl
LmJvb2xWYWx1ZSA9IHZhbHVlLmJvb2xWYWx1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBO
UFZhcmlhbnRUeXBlX0ludDMyOgotICAgICAgICByZXN1bHQtPnZhbHVlLmludFZhbHVlID0gdmFs
dWUuaW50VmFsdWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Eb3Vi
bGU6Ci0gICAgICAgIHJlc3VsdC0+dmFsdWUuZG91YmxlVmFsdWUgPSB2YWx1ZS5kb3VibGVWYWx1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX1N0cmluZzoKLSAgICAg
ICAgV2ViQmluZGluZ3M6OmluaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkocmVzdWx0LCAm
dmFsdWUuc3RyaW5nVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudFR5
cGVfTnVsbDoKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKLSAgICAgICAgLy8gTm90aGlu
ZyB0byBzZXQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9PYmplY3Q6
Ci0gICAgICAgIHJlc3VsdC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfT2JqZWN0OwotICAgICAgICBy
ZXN1bHQtPnZhbHVlLm9iamVjdFZhbHVlID0gV2ViQmluZGluZ3M6OnJldGFpbk9iamVjdCh2YWx1
ZS5vYmplY3RWYWx1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBDcHBWYXJp
YW50OjpzZXQoY29uc3QgTlBWYXJpYW50JiBuZXdWYWx1ZSkKLXsKLSAgICBmcmVlRGF0YSgpOwot
ICAgIHN3aXRjaCAobmV3VmFsdWUudHlwZSkgewotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Cb29s
OgotICAgICAgICBzZXQobmV3VmFsdWUudmFsdWUuYm9vbFZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOUFZhcmlhbnRUeXBlX0ludDMyOgotICAgICAgICBzZXQobmV3VmFsdWUudmFs
dWUuaW50VmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfRG91
YmxlOgotICAgICAgICBzZXQobmV3VmFsdWUudmFsdWUuZG91YmxlVmFsdWUpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgotICAgICAgICBzZXQobmV3VmFs
dWUudmFsdWUuc3RyaW5nVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5QVmFyaWFu
dFR5cGVfTnVsbDoKLSAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKLSAgICAgICAgdHlwZSA9
IG5ld1ZhbHVlLnR5cGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTlBWYXJpYW50VHlwZV9P
YmplY3Q6Ci0gICAgICAgIHNldChuZXdWYWx1ZS52YWx1ZS5vYmplY3RWYWx1ZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBDcHBWYXJpYW50OjpzZXROdWxsKCkKLXsKLSAgICBm
cmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBlX051bGw7Ci19Ci0KLXZvaWQgQ3Bw
VmFyaWFudDo6c2V0KGJvb2wgbmV3VmFsdWUpCi17Ci0gICAgZnJlZURhdGEoKTsKLSAgICB0eXBl
ID0gTlBWYXJpYW50VHlwZV9Cb29sOwotICAgIHZhbHVlLmJvb2xWYWx1ZSA9IG5ld1ZhbHVlOwot
fQotCi12b2lkIENwcFZhcmlhbnQ6OnNldChpbnQzMl90IG5ld1ZhbHVlKQotewotICAgIGZyZWVE
YXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfSW50MzI7Ci0gICAgdmFsdWUuaW50VmFs
dWUgPSBuZXdWYWx1ZTsKLX0KLQotdm9pZCBDcHBWYXJpYW50OjpzZXQoZG91YmxlIG5ld1ZhbHVl
KQotewotICAgIGZyZWVEYXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfRG91YmxlOwot
ICAgIHZhbHVlLmRvdWJsZVZhbHVlID0gbmV3VmFsdWU7Ci19Ci0KLS8vIFRoZSBuZXdWYWx1ZSBt
dXN0IGJlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4KLXZvaWQgQ3BwVmFyaWFudDo6c2V0KGNv
bnN0IGNoYXIqIG5ld1ZhbHVlKQotewotICAgIGZyZWVEYXRhKCk7Ci0gICAgdHlwZSA9IE5QVmFy
aWFudFR5cGVfU3RyaW5nOwotICAgIE5QU3RyaW5nIG5ld1N0cmluZyA9IHtuZXdWYWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0cmxlbihuZXdW
YWx1ZSkpfTsKLSAgICBXZWJCaW5kaW5nczo6aW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29w
eSh0aGlzLCAmbmV3U3RyaW5nKTsKLX0KLQotdm9pZCBDcHBWYXJpYW50OjpzZXQoY29uc3Qgc3Ry
aW5nJiBuZXdWYWx1ZSkKLXsKLSAgICBmcmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlhbnRU
eXBlX1N0cmluZzsKLSAgICBOUFN0cmluZyBuZXdTdHJpbmcgPSB7bmV3VmFsdWUuZGF0YSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4obmV3VmFsdWUu
c2l6ZSgpKX07Ci0gICAgV2ViQmluZGluZ3M6OmluaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0Nv
cHkodGhpcywgJm5ld1N0cmluZyk7Ci19Ci0KLXZvaWQgQ3BwVmFyaWFudDo6c2V0KGNvbnN0IE5Q
U3RyaW5nJiBuZXdWYWx1ZSkKLXsKLSAgICBmcmVlRGF0YSgpOwotICAgIHR5cGUgPSBOUFZhcmlh
bnRUeXBlX1N0cmluZzsKLSAgICBXZWJCaW5kaW5nczo6aW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3Ry
aW5nQ29weSh0aGlzLCAmbmV3VmFsdWUpOwotfQotCi12b2lkIENwcFZhcmlhbnQ6OnNldChOUE9i
amVjdCogbmV3VmFsdWUpCi17Ci0gICAgZnJlZURhdGEoKTsKLSAgICB0eXBlID0gTlBWYXJpYW50
VHlwZV9PYmplY3Q7Ci0gICAgdmFsdWUub2JqZWN0VmFsdWUgPSBXZWJCaW5kaW5nczo6cmV0YWlu
T2JqZWN0KG5ld1ZhbHVlKTsKLX0KLQotc3RyaW5nIENwcFZhcmlhbnQ6OnRvU3RyaW5nKCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoaXNTdHJpbmcoKSk7Ci0gICAgcmV0dXJuIHN0cmluZyh2YWx1ZS5z
dHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycywKLSAgICAgICAgICAgICAgICAgIHZhbHVlLnN0cmlu
Z1ZhbHVlLlVURjhMZW5ndGgpOwotfQotCi1pbnQzMl90IENwcFZhcmlhbnQ6OnRvSW50MzIoKSBj
b25zdAotewotICAgIGlmIChpc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5pbnRWYWx1
ZTsKLSAgICBpZiAoaXNEb3VibGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlLmRvdWJsZVZhbHVlKTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotZG91YmxlIENwcFZhcmlhbnQ6OnRvRG91YmxlKCkgY29uc3QKLXsKLSAg
ICBpZiAoaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1
ZS5pbnRWYWx1ZSk7Ci0gICAgaWYgKGlzRG91YmxlKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5k
b3VibGVWYWx1ZTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBDcHBWYXJpYW50Ojp0b0Jvb2xlYW4oKSBjb25zdAotewotICAgIEFTU0VSVChpc0Jv
b2woKSk7Ci0gICAgcmV0dXJuIHZhbHVlLmJvb2xWYWx1ZTsKLX0KLQotVmVjdG9yPHN0cmluZz4g
Q3BwVmFyaWFudDo6dG9TdHJpbmdWZWN0b3IoKSBjb25zdAotewotCi0gICAgQVNTRVJUKGlzT2Jq
ZWN0KCkpOwotICAgIFZlY3RvcjxzdHJpbmc+IHN0cmluZ1ZlY3RvcjsKLSAgICBOUE9iamVjdCog
bnBWYWx1ZSA9IHZhbHVlLm9iamVjdFZhbHVlOwotICAgIE5QSWRlbnRpZmllciBsZW5ndGhJZCA9
IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVudGlmaWVyKCJsZW5ndGgiKTsKLQotICAgIGlmICgh
V2ViQmluZGluZ3M6Omhhc1Byb3BlcnR5KDAsIG5wVmFsdWUsIGxlbmd0aElkKSkKLSAgICAgICAg
cmV0dXJuIHN0cmluZ1ZlY3RvcjsKLQotICAgIE5QVmFyaWFudCBsZW5ndGhWYWx1ZTsKLSAgICBp
ZiAoIVdlYkJpbmRpbmdzOjpnZXRQcm9wZXJ0eSgwLCBucFZhbHVlLCBsZW5ndGhJZCwgJmxlbmd0
aFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZ1ZlY3RvcjsKLQotICAgIGludCBsZW5ndGgg
PSAwOwotICAgIC8vIFRoZSBsZW5ndGggaXMgYSBkb3VibGUgaW4gc29tZSBjYXNlcy4KLSAgICBp
ZiAoTlBWQVJJQU5UX0lTX0RPVUJMRShsZW5ndGhWYWx1ZSkpCi0gICAgICAgIGxlbmd0aCA9IHN0
YXRpY19jYXN0PGludD4oTlBWQVJJQU5UX1RPX0RPVUJMRShsZW5ndGhWYWx1ZSkpOwotICAgIGVs
c2UgaWYgKE5QVkFSSUFOVF9JU19JTlQzMihsZW5ndGhWYWx1ZSkpCi0gICAgICAgIGxlbmd0aCA9
IE5QVkFSSUFOVF9UT19JTlQzMihsZW5ndGhWYWx1ZSk7Ci0gICAgV2ViQmluZGluZ3M6OnJlbGVh
c2VWYXJpYW50VmFsdWUoJmxlbmd0aFZhbHVlKTsKLQotICAgIC8vIEZvciBzYW5pdHksIG9ubHkg
YWxsb3cgMTAwIGl0ZW1zLgotICAgIGxlbmd0aCA9IG1pbigxMDAsIGxlbmd0aCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAvLyBHZXQgZWFjaCBvZiB0
aGUgaXRlbXMuCi0gICAgICAgIGNoYXIgaW5kZXhJbkNoYXJbMjBdOyAvLyBFbm91Z2ggc2l6ZSB0
byBzdG9yZSAzMi1iaXQgaW50ZWdlcgotICAgICAgICBzbnByaW50ZihpbmRleEluQ2hhciwgMjAs
ICIlZCIsIGkpOwotICAgICAgICBzdHJpbmcgaW5kZXgoaW5kZXhJbkNoYXIpOwotICAgICAgICBO
UElkZW50aWZpZXIgaW5kZXhJZCA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVudGlmaWVyKGlu
ZGV4LmNfc3RyKCkpOwotICAgICAgICBpZiAoIVdlYkJpbmRpbmdzOjpoYXNQcm9wZXJ0eSgwLCBu
cFZhbHVlLCBpbmRleElkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBOUFZhcmlh
bnQgaW5kZXhWYWx1ZTsKLSAgICAgICAgaWYgKCFXZWJCaW5kaW5nczo6Z2V0UHJvcGVydHkoMCwg
bnBWYWx1ZSwgaW5kZXhJZCwgJmluZGV4VmFsdWUpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGlmIChOUFZBUklBTlRfSVNfU1RSSU5HKGluZGV4VmFsdWUpKSB7Ci0gICAgICAgICAg
ICBzdHJpbmcgaXRlbShOUFZBUklBTlRfVE9fU1RSSU5HKGluZGV4VmFsdWUpLlVURjhDaGFyYWN0
ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgTlBWQVJJQU5UX1RPX1NUUklORyhpbmRleFZh
bHVlKS5VVEY4TGVuZ3RoKTsKLSAgICAgICAgICAgIHN0cmluZ1ZlY3Rvci5hcHBlbmQoaXRlbSk7
Ci0gICAgICAgIH0KLSAgICAgICAgV2ViQmluZGluZ3M6OnJlbGVhc2VWYXJpYW50VmFsdWUoJmlu
ZGV4VmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gc3RyaW5nVmVjdG9yOwotfQotCi1ib29sIENw
cFZhcmlhbnQ6Omludm9rZShjb25zdCBzdHJpbmcmIG1ldGhvZCwgY29uc3QgQ3BwVmFyaWFudCog
YXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3Vu
dCwgQ3BwVmFyaWFudCYgcmVzdWx0KSBjb25zdAotewotICAgIEFTU0VSVChpc09iamVjdCgpKTsK
LSAgICBOUElkZW50aWZpZXIgbWV0aG9kTmFtZSA9IFdlYkJpbmRpbmdzOjpnZXRTdHJpbmdJZGVu
dGlmaWVyKG1ldGhvZC5jX3N0cigpKTsKLSAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2YWx1ZS5v
YmplY3RWYWx1ZTsKLSAgICBpZiAoIVdlYkJpbmRpbmdzOjpoYXNNZXRob2QoMCwgbnBPYmplY3Qs
IG1ldGhvZE5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgTlBWYXJpYW50IHI7Ci0g
ICAgYm9vbCBzdGF0dXMgPSBXZWJCaW5kaW5nczo6aW52b2tlKDAsIG5wT2JqZWN0LCBtZXRob2RO
YW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQsICZyKTsKLSAgICByZXN1bHQuc2V0KHIpOwot
ICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLWJvb2wgQ3BwVmFyaWFudDo6aW52b2tlRGVmYXVsdChj
b25zdCBDcHBWYXJpYW50KiBhcmd1bWVudHMsIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3BwVmFyaWFudCYgcmVzdWx0KSBjb25zdAotewot
ICAgIEFTU0VSVChpc09iamVjdCgpKTsKLSAgICBOUE9iamVjdCogbnBPYmplY3QgPSB2YWx1ZS5v
YmplY3RWYWx1ZTsKLSAgICBOUFZhcmlhbnQgcjsKLSAgICBib29sIHN0YXR1cyA9IFdlYkJpbmRp
bmdzOjppbnZva2VEZWZhdWx0KDAsIG5wT2JqZWN0LCBhcmd1bWVudHMsIGFyZ3VtZW50Q291bnQs
ICZyKTsKLSAgICByZXN1bHQuc2V0KHIpOwotICAgIHJldHVybiBzdGF0dXM7Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0NwcFZhcmlhbnQu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwVmFyaWFudC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGNjNjI3MWVjZmFkOWVkNjhiZGU0Mjg4
NTE1Mzg0MjZkNmI4NDAzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvQ3BwVmFyaWFu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
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
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICBUaGlzIGZpbGUgY29udGFp
bnMgdGhlIGRlY2xhcmF0aW9uIGZvciBDcHBWYXJpYW50LCBhIHR5cGUgdXNlZCBieSBDKysgY2xh
c3NlcwotICB0aGF0IGFyZSB0byBiZSBib3VuZCB0byBKYXZhU2NyaXB0IG9iamVjdHMuCi0KLSAg
Q3BwVmFyaWFudCBleGlzdHMgcHJpbWFyaWx5IGFzIGFuIGludGVyZmFjZSBiZXR3ZWVuIEMrKyBj
YWxsZXJzIGFuZCB0aGUKLSAgY29ycmVzcG9uZGluZyBOUFZhcmlhbnQgdHlwZS4gIENwcFZhcmlh
bnQgYWxzbyBwcm92aWRlcyBhIG51bWJlciBvZgotICBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvcnMg
YW5kIGFjY2Vzc29ycywgc28gdGhhdCB0aGUgTlBWYXJpYW50VHlwZSB2YWx1ZXMKLSAgZG9uJ3Qg
bmVlZCB0byBiZSBleHBvc2VkLCBhbmQgYSBkZXN0cnVjdG9yIHRvIGZyZWUgYW55IG1lbW9yeSBh
bGxvY2F0ZWQgZm9yCi0gIHN0cmluZyB2YWx1ZXMuCi0qLwotCi0jaWZuZGVmIENwcFZhcmlhbnRf
aAotI2RlZmluZSBDcHBWYXJpYW50X2gKLQotI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgiCi0jaW5j
bHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbmNsdWRlIDxzdHJpbmc+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1jbGFzcyBDcHBWYXJpYW50IDogcHVibGljIE5Q
VmFyaWFudCB7Ci1wdWJsaWM6Ci0gICAgQ3BwVmFyaWFudCgpOwotICAgIH5DcHBWYXJpYW50KCk7
Ci0gICAgdm9pZCBzZXROdWxsKCk7Ci0gICAgdm9pZCBzZXQoYm9vbCk7Ci0gICAgdm9pZCBzZXQo
aW50MzJfdCk7Ci0gICAgdm9pZCBzZXQoZG91YmxlKTsKLQotICAgIC8vIE5vdGUgdGhhdCBzZXR0
aW5nIGEgQ3BwVmFyaWFudCB0byBhIHN0cmluZyB2YWx1ZSBpbnZvbHZlcyBjb3B5aW5nIHRoZQot
ICAgIC8vIHN0cmluZyBkYXRhLCB3aGljaCBtdXN0IGJlIGZyZWVkIHdpdGggYSBjYWxsIHRvIGZy
ZWVEYXRhKCkgd2hlbiB0aGUKLSAgICAvLyBDcHBWYXJpYW50IGlzIHNldCB0byBhIGRpZmZlcmVu
dCB2YWx1ZSBvciBpcyBubyBsb25nZXIgbmVlZGVkLiBOb3JtYWxseQotICAgIC8vIHRoaXMgaXMg
aGFuZGxlZCBieSB0aGUgb3RoZXIgc2V0KCkgbWV0aG9kcyBhbmQgYnkgdGhlIGRlc3RydWN0b3Iu
Ci0gICAgdm9pZCBzZXQoY29uc3QgY2hhciopOyAvLyBNdXN0IGJlIGEgbnVsbC10ZXJtaW5hdGVk
IHN0cmluZy4KLSAgICB2b2lkIHNldChjb25zdCBzdGQ6OnN0cmluZyYpOwotICAgIHZvaWQgc2V0
KGNvbnN0IE5QU3RyaW5nJik7Ci0gICAgdm9pZCBzZXQoY29uc3QgTlBWYXJpYW50Jik7Ci0KLSAg
ICAvLyBOb3RlIHRoYXQgc2V0dGluZyBhIENwcFZhcmlhbnQgdG8gYW4gTlBPYmplY3QgaW52b2x2
ZXMgcmVmLWNvdW50aW5nCi0gICAgLy8gdGhlIGFjdHVhbCBvYmplY3QuIGZyZWVEYXRhKCkgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBDcHBWYXJpYW50Ci0gICAgLy8gaXMgbm8gbG9uZ2Vy
IG5lZWRlZC4gVGhlIG90aGVyIHNldCgpIG1ldGhvZHMgaGFuZGxlIHRoaXMgaW50ZXJuYWxseS4K
LSAgICAvLyBBbHNvLCB0aGUgb2JqZWN0J3MgTlBDbGFzcyBpcyBleHBlY3RlZCB0byBiZSBhIHN0
YXRpYyBvYmplY3Q6IG5laXRoZXIKLSAgICAvLyB0aGUgTlAgcnVudGltZSBub3IgQ3BwVmFyaWFu
dCB3aWxsIGV2ZXIgZnJlZSBpdC4KLSAgICB2b2lkIHNldChOUE9iamVjdCpfdmFsdWUpOwotCi0g
ICAgLy8gVGhlc2UgdGhyZWUgbWV0aG9kcyBhbGwgcGVyZm9ybSBkZWVwIGNvcGllcyBvZiBhbnkg
c3RyaW5nIGRhdGEuIFRoaXMKLSAgICAvLyBhbGxvd3MgbG9jYWwgQ3BwVmFyaWFudHMgdG8gYmUg
cmVsZWFzZWQgYnkgdGhlIGRlc3RydWN0b3Igd2l0aG91dAotICAgIC8vIGNvcnJ1cHRpbmcgdGhl
aXIgc291cmNlcy4gSW4gcGVyZm9ybWFuY2UtY3JpdGljYWwgY29kZSwgb3Igd2hlbiBzdHJpbmdz
Ci0gICAgLy8gYXJlIHZlcnkgbG9uZywgYXZvaWQgY3JlYXRpbmcgbmV3IENwcFZhcmlhbnRzLgot
ICAgIC8vIEluIGNhc2Ugb2YgTlBPYmplY3QgYXMgdGhlIGRhdGEsIHRoZSBjb3B5aW5nIGludm9s
dmVzIHJlZi1jb3VudGluZwotICAgIC8vIGFzIG9wcG9zZWQgdG8gZGVlcC1jb3B5aW5nLiBUaGUg
cmVmLWNvdW50aW5nIGVuc3VyZXMgdGhhdCBzb3VyY2VzIGRvbid0Ci0gICAgLy8gZ2V0IGNvcnJ1
cHRlZCB3aGVuIHRoZSBjb3BpZXMgZ2V0IGRlc3Ryb3llZC4KLSAgICB2b2lkIGNvcHlUb05QVmFy
aWFudChOUFZhcmlhbnQqIHJlc3VsdCkgY29uc3Q7Ci0gICAgQ3BwVmFyaWFudCYgb3BlcmF0b3I9
KGNvbnN0IENwcFZhcmlhbnQmIG9yaWdpbmFsKTsKLSAgICBDcHBWYXJpYW50KGNvbnN0IENwcFZh
cmlhbnQmIG9yaWdpbmFsKTsKLQotICAgIC8vIENhbGxzIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVl
LCB3aGljaCBmcmVlcyBhbnkgc3RyaW5nIGRhdGEKLSAgICAvLyBoZWxkIGJ5IHRoZSBvYmplY3Qg
YW5kIHNldHMgaXRzIHR5cGUgdG8gbnVsbC4KLSAgICAvLyBJbiBjYXNlIG9mIE5QT2JqZWN0LCB0
aGUgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUgZGVjcmVtZW50cwotICAgIC8vIHRoZSByZWYtY291
bnQgKHJlbGVhc2VzIHdoZW4gcmVmLWNvdW50IGJlY29tZXMgMCkKLSAgICB2b2lkIGZyZWVEYXRh
KCk7Ci0KLSAgICAvLyBDb21wYXJlcyB0aGlzIENwcFZhcmlhbnQncyB0eXBlIGFuZCB2YWx1ZSB0
byBhbm90aGVyJ3MuIFRoZXkgbXVzdCBiZQotICAgIC8vIGlkZW50aWNhbCBpbiBib3RoIHR5cGUg
YW5kIHZhbHVlIHRvIGJlIGNvbnNpZGVyZWQgZXF1YWwuIEZvciBzdHJpbmcgYW5kCi0gICAgLy8g
b2JqZWN0IHR5cGVzLCBhIGRlZXAgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQ7IHRoYXQgaXMsIHRo
ZSBjb250ZW50cyBvZiB0aGUKLSAgICAvLyBzdHJpbmdzLCBvciB0aGUgY2xhc3NlcyBhbmQgcmVm
Y291bnRzIG9mIHRoZSBvYmplY3RzLCBtdXN0IGJlIHRoZSBzYW1lLAotICAgIC8vIGJ1dCB0aGV5
IG5lZWQgbm90IGJlIHRoZSBzYW1lIHBvaW50ZXJzLgotICAgIGJvb2wgaXNFcXVhbChjb25zdCBD
cHBWYXJpYW50JikgY29uc3Q7Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgYSBDcHBWYXJpYW50IG1h
eSBiZSByZWFkIGRpcmVjdGx5IGZyb20gaXRzIE5QVmFyaWFudCAoYnV0Ci0gICAgLy8gc2hvdWxk
IG9ubHkgYmUgc2V0IHVzaW5nIG9uZSBvZiB0aGUgc2V0KCkgbWV0aG9kcyBhYm92ZSkuIEFsdGhv
dWdoIHRoZQotICAgIC8vIHR5cGUgb2YgYSBDcHBWYXJpYW50IGlzIGxpa2V3aXNlIHB1YmxpYywg
aXQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlc2UKLSAgICAvLyBmdW5jdGlvbnMgcmF0aGVy
IHRoYW4gZGlyZWN0bHkgaWYgYSBjYWxsZXIgd2lzaGVzIHRvIGF2b2lkIGRlcGVuZGVuY2Ugb24K
LSAgICAvLyB0aGUgTlBWYXJpYW50VHlwZSB2YWx1ZXMuCi0gICAgYm9vbCBpc0Jvb2woKSBjb25z
dCB7IHJldHVybiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX0Jvb2wpOyB9Ci0gICAgYm9vbCBpc0lu
dDMyKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9JbnQzMik7IH0KLSAg
ICBib29sIGlzRG91YmxlKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9E
b3VibGUpOyB9Ci0gICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIChpc0ludDMyKCkg
fHwgaXNEb3VibGUoKSk7IH0KLSAgICBib29sIGlzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKHR5
cGUgPT0gTlBWYXJpYW50VHlwZV9TdHJpbmcpOyB9Ci0gICAgYm9vbCBpc1ZvaWQoKSBjb25zdCB7
IHJldHVybiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX1ZvaWQpOyB9Ci0gICAgYm9vbCBpc051bGwo
KSBjb25zdCB7IHJldHVybiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX051bGwpOyB9Ci0gICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gKGlzVm9pZCgpIHx8IGlzTnVsbCgpKTsgfQotICAg
IGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiAodHlwZSA9PSBOUFZhcmlhbnRUeXBlX09i
amVjdCk7IH0KLQotICAgIC8vIENvbnZlcnRlcnMuIFRoZSBDcHBWYXJpYW50IG11c3QgYmUgb2Yg
YSB0eXBlIGNvbnZlcnRpYmxlIHRvIHRoZXNlIHZhbHVlcy4KLSAgICAvLyBGb3IgZXhhbXBsZSwg
dG9JbnQzMigpIHdvcmtzIG9ubHkgaWYgaXNOdW1iZXIoKSBpcyB0cnVlLgotICAgIHN0ZDo6c3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgaW50MzJfdCB0b0ludDMyKCkgY29uc3Q7Ci0gICAg
ZG91YmxlIHRvRG91YmxlKCkgY29uc3Q7Ci0gICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25zdDsKLSAg
ICAvLyBSZXR1cm5zIGEgdmVjdG9yIG9mIHN0cmluZ3MgZm9yIHRoZSBzcGVjaWZpZWQgYXJndW1l
bnQuIFRoaXMgaXMgdXNlZnVsCi0gICAgLy8gZm9yIGNvbnZlcnRpbmcgYSBKYXZhU2NyaXB0IGFy
cmF5IG9mIHN0cmluZ3MgaW50byBhIHZlY3RvciBvZiBzdHJpbmdzLgotICAgIFZlY3RvcjxzdGQ6
OnN0cmluZz4gdG9TdHJpbmdWZWN0b3IoKSBjb25zdDsKLQotICAgIC8vIEludm9rZSBtZXRob2Qg
b2YgdGhlIGdpdmVuIG5hbWUgb24gYW4gb2JqZWN0IHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50
cy4KLSAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIG1ldGhvZCBpcyB0byBiZQotICAgIC8vIGludm9rZWQuIFJldHVybnMgd2hldGhlciB0
aGUgbWV0aG9kIHdhcyBzdWNjZXNzZnVsbHkgaW52b2tlZC4gSWYgdGhlCi0gICAgLy8gbWV0aG9k
IHdhcyBpbnZva2VkIHN1Y2Nlc3NmdWxseSwgYW55IHJldHVybiB2YWx1ZSBpcyBzdG9yZWQgaW4g
dGhlCi0gICAgLy8gQ3BwVmFyaWFudCBzcGVjaWZpZWQgYnkgcmVzdWx0LgotICAgIGJvb2wgaW52
b2tlKGNvbnN0IHN0ZDo6c3RyaW5nJiwgY29uc3QgQ3BwVmFyaWFudCogYXJndW1lbnRzLAotICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGFyZ3VtZW50Q291bnQsIENwcFZhcmlhbnQmIHJlc3VsdCkg
Y29uc3Q7Ci0KLSAgICAvLyBJbnZva2UgYW4gb2JqZWN0J3MgZGVmYXVsdCBtZXRob2Qgd2l0aCB0
aGUgc3VwcGxpZWQgYXJndW1lbnRzLgotICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBzaG91bGQg
YmUgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIGlzIHRvIGJlCi0gICAgLy8gaW52b2tl
ZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBtZXRob2Qgd2FzIHN1Y2Nlc3NmdWxseSBpbnZva2VkLiBJ
ZiB0aGUKLSAgICAvLyBtZXRob2Qgd2FzIGludm9rZWQgc3VjY2Vzc2Z1bGx5LCBhbnkgcmV0dXJu
IHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUKLSAgICAvLyBDcHBWYXJpYW50IHNwZWNpZmllZCBieSBy
ZXN1bHQuCi0gICAgYm9vbCBpbnZva2VEZWZhdWx0KGNvbnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50
cywKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJndW1lbnRDb3VudCwgQ3BwVmFy
aWFudCYgcmVzdWx0KSBjb25zdDsKLX07Ci0KLSNlbmRpZiAvLyBDcHBWYXJpYW50X2gKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvRXZlbnRTZW5k
ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNl
bmRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYjY1ZDA3MTdiNWYzZTU5
MzM2ZTJmYzhkMGE1ZWZiMDU5NTFlMzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9F
dmVudFNlbmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUaGlzIGZp
bGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gZm9yIEV2ZW50U2VuZGVyLgotLy8KLS8vIFNvbWUg
bm90ZXMgYWJvdXQgZHJhZyBhbmQgZHJvcCBoYW5kbGluZzoKLS8vIFdpbmRvd3MgZHJhZyBhbmQg
ZHJvcCBnb2VzIHRocm91Z2ggYSBzeXN0ZW0gY2FsbCB0byBkb0RyYWdEcm9wLiBBdCB0aGF0Ci0v
LyBwb2ludCwgcHJvZ3JhbSBjb250cm9sIGlzIGdpdmVuIHRvIFdpbmRvd3Mgd2hpY2ggdGhlbiBw
ZXJpb2RpY2FsbHkgbWFrZXMKLS8vIGNhbGxiYWNrcyBpbnRvIHRoZSB3ZWJ2aWV3LiBUaGlzIHdv
bid0IHdvcmsgZm9yIGxheW91dCB0ZXN0cywgc28gaW5zdGVhZCwKLS8vIHdlIHF1ZXVlIHVwIGFs
bCB0aGUgbW91c2UgbW92ZSBhbmQgbW91c2UgdXAgZXZlbnRzLiBXaGVuIHRoZSB0ZXN0IHRyaWVz
IHRvCi0vLyBzdGFydCBhIGRyYWcgKGJ5IGNhbGxpbmcgRXZlblNlbmRpbmdDb250cm9sbGVyOjpk
b0RyYWdEcm9wKSwgd2UgdGFrZSB0aGUKLS8vIGV2ZW50cyBpbiB0aGUgcXVldWUgYW5kIHJlcGxh
eSB0aGVtLgotLy8gVGhlIGJlaGF2aW9yIG9mIHF1ZXVpbmcgZXZlbnRzIGFuZCByZXBsYXlpbmcg
dGhlbSBjYW4gYmUgZGlzYWJsZWQgYnkgYQotLy8gbGF5b3V0IHRlc3QgYnkgc2V0dGluZyBldmVu
dFNlbmRlci5kcmFnTW9kZSB0byBmYWxzZS4KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkV2ZW50U2VuZGVyLmgiCi0KLSNpbmNsdWRlICJUZXN0RGVsZWdhdGUuaCIKLSNpbmNsdWRl
ICJXZWJDb250ZXh0TWVudURhdGEuaCIKLSNpbmNsdWRlICJXZWJEcmFnT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiV2ViVG91Y2hQb2ludC5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJEcmFnRGF0YS5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50Lmgi
Ci0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAid2Via2l0L3N1cHBv
cnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3
dGYvU3RyaW5nRXh0cmFzLmg+Ci0KLSNpZiBPUyhXSU5ET1dTKQotI2luY2x1ZGUgIndpbi9XZWJJ
bnB1dEV2ZW50RmFjdG9yeS5oIgotI2VuZGlmCi0KLS8vIEZJWE1FOiBsYXlvdXQgYmVmb3JlIGVh
Y2ggZXZlbnQ/Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwotCi1XZWJQb2ludCBFdmVudFNlbmRlcjo6bGFzdE1vdXNlUG9zOwotV2ViTW91c2VFdmVudDo6
QnV0dG9uIEV2ZW50U2VuZGVyOjpwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9u
Tm9uZTsKLVdlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBFdmVudFNlbmRlcjo6bGFzdEJ1dHRvblR5cGUg
PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwotCi1zdHJ1Y3QgU2F2ZWRFdmVudCB7Ci0gICAg
ZW51bSBTYXZlZEV2ZW50VHlwZSB7Ci0gICAgICAgIFVuc3BlY2lmaWVkLAotICAgICAgICBNb3Vz
ZVVwLAotICAgICAgICBNb3VzZU1vdmUsCi0gICAgICAgIExlYXBGb3J3YXJkCi0gICAgfTsKLQot
ICAgIFNhdmVkRXZlbnRUeXBlIHR5cGU7Ci0gICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRv
blR5cGU7IC8vIEZvciBNb3VzZVVwLgotICAgIFdlYlBvaW50IHBvczsgLy8gRm9yIE1vdXNlTW92
ZS4KLSAgICBpbnQgbWlsbGlzZWNvbmRzOyAvLyBGb3IgTGVhcEZvcndhcmQuCi0KLSAgICBTYXZl
ZEV2ZW50KCkKLSAgICAgICAgOiB0eXBlKFVuc3BlY2lmaWVkKQotICAgICAgICAsIGJ1dHRvblR5
cGUoV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZSkKLSAgICAgICAgLCBtaWxsaXNlY29uZHMoMCkg
eyB9Ci19OwotCi1zdGF0aWMgV2ViRHJhZ0RhdGEgY3VycmVudERyYWdEYXRhOwotc3RhdGljIFdl
YkRyYWdPcGVyYXRpb24gY3VycmVudERyYWdFZmZlY3Q7Ci1zdGF0aWMgV2ViRHJhZ09wZXJhdGlv
bnNNYXNrIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQ7Ci1zdGF0aWMgYm9vbCByZXBsYXlpbmdT
YXZlZEV2ZW50cyA9IGZhbHNlOwotc3RhdGljIERlcXVlPFNhdmVkRXZlbnQ+IG1vdXNlRXZlbnRR
dWV1ZTsKLXN0YXRpYyBpbnQgdG91Y2hNb2RpZmllcnM7Ci1zdGF0aWMgVmVjdG9yPFdlYlRvdWNo
UG9pbnQ+IHRvdWNoUG9pbnRzOwotCi0vLyBUaW1lIGFuZCBwbGFjZSBvZiB0aGUgbGFzdCBtb3Vz
ZSB1cCBldmVudC4KLXN0YXRpYyBkb3VibGUgbGFzdENsaWNrVGltZVNlYyA9IDA7Ci1zdGF0aWMg
V2ViUG9pbnQgbGFzdENsaWNrUG9zOwotc3RhdGljIGludCBjbGlja0NvdW50ID0gMDsKLQotLy8g
bWF4aW11bSBkaXN0YW5jZSAoaW4gc3BhY2UgYW5kIHRpbWUpIGZvciBhIG1vdXNlIGNsaWNrCi0v
LyB0byByZWdpc3RlciBhcyBhIGRvdWJsZSBvciB0cmlwbGUgY2xpY2sKLXN0YXRpYyBjb25zdCBk
b3VibGUgbXVsdGlwbGVDbGlja1RpbWVTZWMgPSAxOwotc3RhdGljIGNvbnN0IGludCBtdWx0aXBs
ZUNsaWNrUmFkaXVzUGl4ZWxzID0gNTsKLQotLy8gSG93IG11Y2ggd2Ugc2hvdWxkIHNjcm9sbCBw
ZXIgZXZlbnQgLSB0aGUgdmFsdWUgaGVyZSBpcyBjaG9zZW4gdG8KLS8vIG1hdGNoIHRoZSBXZWJL
aXQgaW1wbCBhbmQgbGF5b3V0IHRlc3QgcmVzdWx0cy4KLXN0YXRpYyBjb25zdCBmbG9hdCBzY3Jv
bGxiYXJQaXhlbHNQZXJUaWNrID0gNDAuMGY7Ci0KLWlubGluZSBib29sIG91dHNpZGVNdWx0aUNs
aWNrUmFkaXVzKGNvbnN0IFdlYlBvaW50JiBhLCBjb25zdCBXZWJQb2ludCYgYikKLXsKLSAgICBy
ZXR1cm4gKChhLnggLSBiLngpICogKGEueCAtIGIueCkgKyAoYS55IC0gYi55KSAqIChhLnkgLSBi
LnkpKSA+Ci0gICAgICAgIG11bHRpcGxlQ2xpY2tSYWRpdXNQaXhlbHMgKiBtdWx0aXBsZUNsaWNr
UmFkaXVzUGl4ZWxzOwotfQotCi0vLyBVc2VkIHRvIG9mZnNldCB0aGUgdGltZSB0aGUgZXZlbnQg
aGFuZGVyIHRoaW5ncyBhbiBldmVudCBoYXBwZW5lZC4gVGhpcyBpcwotLy8gZG9uZSBzbyB0ZXN0
cyBjYW4gcnVuIHdpdGhvdXQgYSBkZWxheSwgYnV0IGJ5cGFzcyBjaGVja3MgdGhhdCBhcmUgdGlt
ZQotLy8gZGVwZW5kZW50IChlLmcuLCBkcmFnZ2luZyBoYXMgYSB0aW1lb3V0IHZzIHNlbGVjdGlv
bikuCi1zdGF0aWMgdWludDMyIHRpbWVPZmZzZXRNcyA9IDA7Ci0KLXN0YXRpYyBkb3VibGUgZ2V0
Q3VycmVudEV2ZW50VGltZVNlYygpCi17Ci0gICAgcmV0dXJuICh3ZWJraXRfc3VwcG9ydDo6R2V0
Q3VycmVudFRpbWVJbk1pbGxpc2Vjb25kKCkgKyB0aW1lT2Zmc2V0TXMpIC8gMTAwMC4wOwotfQot
Ci1zdGF0aWMgdm9pZCBhZHZhbmNlRXZlbnRUaW1lKGludDMyX3QgZGVsdGFNcykKLXsKLSAgICB0
aW1lT2Zmc2V0TXMgKz0gZGVsdGFNczsKLX0KLQotc3RhdGljIHZvaWQgaW5pdE1vdXNlRXZlbnQo
V2ViSW5wdXRFdmVudDo6VHlwZSB0LCBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBwb3MsIFdlYk1vdXNlRXZlbnQqIGUp
Ci17Ci0gICAgZS0+dHlwZSA9IHQ7Ci0gICAgZS0+YnV0dG9uID0gYjsKLSAgICBlLT5tb2RpZmll
cnMgPSAwOwotICAgIGUtPnggPSBwb3MueDsKLSAgICBlLT55ID0gcG9zLnk7Ci0gICAgZS0+Z2xv
YmFsWCA9IHBvcy54OwotICAgIGUtPmdsb2JhbFkgPSBwb3MueTsKLSAgICBlLT50aW1lU3RhbXBT
ZWNvbmRzID0gZ2V0Q3VycmVudEV2ZW50VGltZVNlYygpOwotICAgIGUtPmNsaWNrQ291bnQgPSBj
bGlja0NvdW50OwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBrZXkgaXMg
dGhlIHN5c3RlbSBrZXkuCi1zdGF0aWMgYm9vbCBhcHBseUtleU1vZGlmaWVyKGNvbnN0IHN0cmlu
ZyYgbW9kaWZpZXJOYW1lLCBXZWJJbnB1dEV2ZW50KiBldmVudCkKLXsKLSAgICBib29sIGlzU3lz
dGVtS2V5ID0gZmFsc2U7Ci0gICAgY29uc3QgY2hhciogY2hhcmFjdGVycyA9IG1vZGlmaWVyTmFt
ZS5jX3N0cigpOwotICAgIGlmICghc3RyY21wKGNoYXJhY3RlcnMsICJjdHJsS2V5IikKLSNpZiAh
T1MoTUFDX09TX1gpCi0gICAgICAgIHx8ICFzdHJjbXAoY2hhcmFjdGVycywgImFkZFNlbGVjdGlv
bktleSIpCi0jZW5kaWYKLSAgICAgICAgKSB7Ci0gICAgICAgIGV2ZW50LT5tb2RpZmllcnMgfD0g
V2ViSW5wdXRFdmVudDo6Q29udHJvbEtleTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY2hhcmFj
dGVycywgInNoaWZ0S2V5IikgfHwgIXN0cmNtcChjaGFyYWN0ZXJzLCAicmFuZ2VTZWxlY3Rpb25L
ZXkiKSkKLSAgICAgICAgZXZlbnQtPm1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtl
eTsKLSAgICBlbHNlIGlmICghc3RyY21wKGNoYXJhY3RlcnMsICJhbHRLZXkiKSkgewotICAgICAg
ICBldmVudC0+bW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OkFsdEtleTsKLSNpZiAhT1MoTUFD
X09TX1gpCi0gICAgICAgIC8vIE9uIFdpbmRvd3MgYWxsIGtleXMgd2l0aCBBbHQgbW9kaWZpZXIg
d2lsbCBiZSBtYXJrZWQgYXMgc3lzdGVtIGtleS4KLSAgICAgICAgLy8gV2Uga2VlcCB0aGUgc2Ft
ZSBiZWhhdmlvciBvbiBMaW51eCBhbmQgZXZlcnl3aGVyZSBub24tTWFjLCBzZWU6Ci0gICAgICAg
IC8vIFdlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAotICAg
ICAgICAvLyBJZiB3ZSB3YW50IHRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yIG9uIExpbnV4LCB0aGlz
IHBpZWNlIG9mIGNvZGUgbXVzdCBiZQotICAgICAgICAvLyBrZXB0IGluIHN5bmMgd2l0aCB0aGUg
cmVsYXRlZCBjb2RlIGluIGFib3ZlIGZpbGUuCi0gICAgICAgIGlzU3lzdGVtS2V5ID0gdHJ1ZTsK
LSNlbmRpZgotI2lmIE9TKE1BQ19PU19YKQotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChjaGFyYWN0
ZXJzLCAibWV0YUtleSIpIHx8ICFzdHJjbXAoY2hhcmFjdGVycywgImFkZFNlbGVjdGlvbktleSIp
KSB7Ci0gICAgICAgIGV2ZW50LT5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6TWV0YUtleTsK
LSAgICAgICAgLy8gT24gTWFjIG9ubHkgY29tbWFuZCBrZXkgcHJlc3NlcyBhcmUgbWFya2VkIGFz
IHN5c3RlbSBrZXkuCi0gICAgICAgIC8vIFNlZSB0aGUgcmVsYXRlZCBjb2RlIGluOiBXZWJLaXQv
Y2hyb21pdW0vc3JjL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHAKLSAgICAgICAgLy8gSXQg
bXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgcmVsYXRlZCBjb2RlIGluIGFib3ZlIGZpbGUu
Ci0gICAgICAgIGlzU3lzdGVtS2V5ID0gdHJ1ZTsKLSNlbHNlCi0gICAgfSBlbHNlIGlmICghc3Ry
Y21wKGNoYXJhY3RlcnMsICJtZXRhS2V5IikpIHsKLSAgICAgICAgZXZlbnQtPm1vZGlmaWVycyB8
PSBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5OwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBpc1N5
c3RlbUtleTsKLX0KLQotc3RhdGljIGJvb2wgYXBwbHlLZXlNb2RpZmllcnMoY29uc3QgQ3BwVmFy
aWFudCogYXJndW1lbnQsIFdlYklucHV0RXZlbnQqIGV2ZW50KQotewotICAgIGJvb2wgaXNTeXN0
ZW1LZXkgPSBmYWxzZTsKLSAgICBpZiAoYXJndW1lbnQtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
VmVjdG9yPHN0cmluZz4gbW9kaWZpZXJzID0gYXJndW1lbnQtPnRvU3RyaW5nVmVjdG9yKCk7Ci0g
ICAgICAgIGZvciAoVmVjdG9yPHN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBtb2RpZmllcnMu
YmVnaW4oKTsgaSAhPSBtb2RpZmllcnMuZW5kKCk7ICsraSkKLSAgICAgICAgICAgIGlzU3lzdGVt
S2V5IHw9IGFwcGx5S2V5TW9kaWZpZXIoKmksIGV2ZW50KTsKLSAgICB9IGVsc2UgaWYgKGFyZ3Vt
ZW50LT5pc1N0cmluZygpKQotICAgICAgICBpc1N5c3RlbUtleSA9IGFwcGx5S2V5TW9kaWZpZXIo
YXJndW1lbnQtPnRvU3RyaW5nKCksIGV2ZW50KTsKLSAgICByZXR1cm4gaXNTeXN0ZW1LZXk7Ci19
Ci0KLS8vIEdldCB0aGUgZWRpdCBjb21tYW5kIGNvcnJlc3BvbmRpbmcgdG8gYSBrZXlib2FyZCBl
dmVudC4KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGV2ZW50IGNvcnJlc3BvbmRz
IHRvIGFuIGVkaXQgY29tbWFuZCwgdGhlIG5hbWUKLS8vIG9mIHRoZSBlZGl0IGNvbW1hbmQgd2ls
bCBiZSBzdG9yZWQgaW4gfCpuYW1lfC4KLWJvb2wgZ2V0RWRpdENvbW1hbmQoY29uc3QgV2ViS2V5
Ym9hcmRFdmVudCYgZXZlbnQsIHN0cmluZyogbmFtZSkKLXsKLSNpZiBPUyhNQUNfT1NfWCkKLSAg
ICAvLyBXZSBvbmx5IGNhcmVzIGFib3V0IExlZnQsUmlnaHQsVXAsRG93biBrZXlzIHdpdGggQ29t
bWFuZCBvciBDb21tYW5kK1NoaWZ0Ci0gICAgLy8gbW9kaWZpZXJzLiBUaGVzZSBrZXkgZXZlbnRz
IGNvcnJlc3BvbmQgdG8gc29tZSBzcGVjaWFsIG1vdmVtZW50IGFuZAotICAgIC8vIHNlbGVjdGlv
biBlZGl0b3IgY29tbWFuZHMsIGFuZCB3YXMgc3VwcG9zZWQgdG8gYmUgaGFuZGxlZCBpbgotICAg
IC8vIFdlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAuIEJ1dCB0aGVzZSBr
ZXlzIHdpbGwgYmUgbWFya2VkCi0gICAgLy8gYXMgc3lzdGVtIGtleSwgd2hpY2ggcHJldmVudHMg
dGhlbSBmcm9tIGJlaW5nIGhhbmRsZWQuIFRodXMgdGhleSBtdXN0IGJlCi0gICAgLy8gaGFuZGxl
ZCBzcGVjaWFsbHkuCi0gICAgaWYgKChldmVudC5tb2RpZmllcnMgJiB+V2ViS2V5Ym9hcmRFdmVu
dDo6U2hpZnRLZXkpICE9IFdlYktleWJvYXJkRXZlbnQ6Ok1ldGFLZXkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHN3aXRjaCAoZXZlbnQud2luZG93c0tleUNvZGUpIHsKLSAgICBjYXNl
IHdlYmtpdF9zdXBwb3J0OjpWS0VZX0xFRlQ6Ci0gICAgICAgICpuYW1lID0gIk1vdmVUb0JlZ2lu
bmluZ09mTGluZSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugd2Via2l0X3N1cHBvcnQ6OlZL
RVlfUklHSFQ6Ci0gICAgICAgICpuYW1lID0gIk1vdmVUb0VuZE9mTGluZSI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2Ugd2Via2l0X3N1cHBvcnQ6OlZLRVlfVVA6Ci0gICAgICAgICpuYW1lID0g
Ik1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIHdl
YmtpdF9zdXBwb3J0OjpWS0VZX0RPV046Ci0gICAgICAgICpuYW1lID0gIk1vdmVUb0VuZE9mRG9j
dW1lbnQiOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50Lm1vZGlmaWVycyAmIFdlYktleWJvYXJkRXZlbnQ6
OlNoaWZ0S2V5KQotICAgICAgICBuYW1lLT5hcHBlbmQoIkFuZE1vZGlmeVNlbGVjdGlvbiIpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQot
Ci0vLyBLZXkgZXZlbnQgbG9jYXRpb24gY29kZSBpbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzLgot
Ly8gU2VlIGFsc286IGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZl
bnRzLWtleWJvYXJkZXZlbnRzCi1lbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAgRE9NS2V5TG9j
YXRpb25TdGFuZGFyZCAgICAgID0gMHgwMCwKLSAgICBET01LZXlMb2NhdGlvbkxlZnQgICAgICAg
ICAgPSAweDAxLAotICAgIERPTUtleUxvY2F0aW9uUmlnaHQgICAgICAgICA9IDB4MDIsCi0gICAg
RE9NS2V5TG9jYXRpb25OdW1wYWQgICAgICAgID0gMHgwMwotfTsKLQotRXZlbnRTZW5kZXI6OkV2
ZW50U2VuZGVyKCkKLSAgICA6IG1fZGVsZWdhdGUoMCkKLXsKLSAgICAvLyBJbml0aWFsaXplIHRo
ZSBtYXAgdGhhdCBhc3NvY2lhdGVzIG1ldGhvZHMgb2YgdGhpcyBjbGFzcyB3aXRoIHRoZSBuYW1l
cwotICAgIC8vIHRoZXkgd2lsbCB1c2Ugd2hlbiBjYWxsZWQgYnkgSmF2YVNjcmlwdC4gVGhlIGFj
dHVhbCBiaW5kaW5nIG9mIHRob3NlCi0gICAgLy8gbmFtZXMgdG8gdGhlaXIgbWV0aG9kcyB3aWxs
IGJlIGRvbmUgYnkgY2FsbGluZyBiaW5kVG9KYXZhU2NyaXB0KCkgKGRlZmluZWQKLSAgICAvLyBi
eSBDcHBCb3VuZENsYXNzLCB0aGUgcGFyZW50IHRvIEV2ZW50U2VuZGVyKS4KLSAgICBiaW5kTWV0
aG9kKCJhZGRUb3VjaFBvaW50IiwgJkV2ZW50U2VuZGVyOjphZGRUb3VjaFBvaW50KTsKLSAgICBi
aW5kTWV0aG9kKCJiZWdpbkRyYWdXaXRoRmlsZXMiLCAmRXZlbnRTZW5kZXI6OmJlZ2luRHJhZ1dp
dGhGaWxlcyk7Ci0gICAgYmluZE1ldGhvZCgiY2FuY2VsVG91Y2hQb2ludCIsICZFdmVudFNlbmRl
cjo6Y2FuY2VsVG91Y2hQb2ludCk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJLaWxsUmluZyIsICZF
dmVudFNlbmRlcjo6Y2xlYXJLaWxsUmluZyk7Ci0gICAgYmluZE1ldGhvZCgiY2xlYXJUb3VjaFBv
aW50cyIsICZFdmVudFNlbmRlcjo6Y2xlYXJUb3VjaFBvaW50cyk7Ci0gICAgYmluZE1ldGhvZCgi
Y29udGV4dENsaWNrIiwgJkV2ZW50U2VuZGVyOjpjb250ZXh0Q2xpY2spOwotICAgIGJpbmRNZXRo
b2QoImNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5IiwgJkV2ZW50U2VuZGVyOjpjb250aW51b3VzTW91
c2VTY3JvbGxCeSk7Ci0gICAgYmluZE1ldGhvZCgiZGlzcGF0Y2hNZXNzYWdlIiwgJkV2ZW50U2Vu
ZGVyOjpkaXNwYXRjaE1lc3NhZ2UpOwotICAgIGJpbmRNZXRob2QoImR1bXBGaWxlbmFtZUJlaW5n
RHJhZ2dlZCIsICZFdmVudFNlbmRlcjo6ZHVtcEZpbGVuYW1lQmVpbmdEcmFnZ2VkKTsKLSAgICBi
aW5kTWV0aG9kKCJlbmFibGVET01VSUV2ZW50TG9nZ2luZyIsICZFdmVudFNlbmRlcjo6ZW5hYmxl
RE9NVUlFdmVudExvZ2dpbmcpOwotICAgIGJpbmRNZXRob2QoImZpcmVLZXlib2FyZEV2ZW50c1Rv
RWxlbWVudCIsICZFdmVudFNlbmRlcjo6ZmlyZUtleWJvYXJkRXZlbnRzVG9FbGVtZW50KTsKLSAg
ICBiaW5kTWV0aG9kKCJrZXlEb3duIiwgJkV2ZW50U2VuZGVyOjprZXlEb3duKTsKLSAgICBiaW5k
TWV0aG9kKCJsZWFwRm9yd2FyZCIsICZFdmVudFNlbmRlcjo6bGVhcEZvcndhcmQpOwotICAgIGJp
bmRNZXRob2QoIm1vdXNlRG93biIsICZFdmVudFNlbmRlcjo6bW91c2VEb3duKTsKLSAgICBiaW5k
TWV0aG9kKCJtb3VzZU1vdmVUbyIsICZFdmVudFNlbmRlcjo6bW91c2VNb3ZlVG8pOwotICAgIGJp
bmRNZXRob2QoIm1vdXNlU2Nyb2xsQnkiLCAmRXZlbnRTZW5kZXI6Om1vdXNlU2Nyb2xsQnkpOwot
ICAgIGJpbmRNZXRob2QoIm1vdXNlVXAiLCAmRXZlbnRTZW5kZXI6Om1vdXNlVXApOwotICAgIGJp
bmRNZXRob2QoInJlbGVhc2VUb3VjaFBvaW50IiwgJkV2ZW50U2VuZGVyOjpyZWxlYXNlVG91Y2hQ
b2ludCk7Ci0gICAgYmluZE1ldGhvZCgic2NoZWR1bGVBc3luY2hyb25vdXNDbGljayIsICZFdmVu
dFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljayk7Ci0gICAgYmluZE1ldGhvZCgic2No
ZWR1bGVBc3luY2hyb25vdXNLZXlEb3duIiwgJkV2ZW50U2VuZGVyOjpzY2hlZHVsZUFzeW5jaHJv
bm91c0tleURvd24pOwotICAgIGJpbmRNZXRob2QoInNldFRvdWNoTW9kaWZpZXIiLCAmRXZlbnRT
ZW5kZXI6OnNldFRvdWNoTW9kaWZpZXIpOwotICAgIGJpbmRNZXRob2QoInRleHRab29tSW4iLCAm
RXZlbnRTZW5kZXI6OnRleHRab29tSW4pOwotICAgIGJpbmRNZXRob2QoInRleHRab29tT3V0Iiwg
JkV2ZW50U2VuZGVyOjp0ZXh0Wm9vbU91dCk7Ci0gICAgYmluZE1ldGhvZCgidG91Y2hDYW5jZWwi
LCAmRXZlbnRTZW5kZXI6OnRvdWNoQ2FuY2VsKTsKLSAgICBiaW5kTWV0aG9kKCJ0b3VjaEVuZCIs
ICZFdmVudFNlbmRlcjo6dG91Y2hFbmQpOwotICAgIGJpbmRNZXRob2QoInRvdWNoTW92ZSIsICZF
dmVudFNlbmRlcjo6dG91Y2hNb3ZlKTsKLSAgICBiaW5kTWV0aG9kKCJ0b3VjaFN0YXJ0IiwgJkV2
ZW50U2VuZGVyOjp0b3VjaFN0YXJ0KTsKLSAgICBiaW5kTWV0aG9kKCJ1cGRhdGVUb3VjaFBvaW50
IiwgJkV2ZW50U2VuZGVyOjp1cGRhdGVUb3VjaFBvaW50KTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0
dXJlRmxpbmdDYW5jZWwiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVGbGluZ0NhbmNlbCk7Ci0gICAg
YmluZE1ldGhvZCgiZ2VzdHVyZUZsaW5nU3RhcnQiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVGbGlu
Z1N0YXJ0KTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlU2Nyb2xsQmVnaW4iLCAmRXZlbnRTZW5k
ZXI6Omdlc3R1cmVTY3JvbGxCZWdpbik7Ci0gICAgYmluZE1ldGhvZCgiZ2VzdHVyZVNjcm9sbEVu
ZCIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbEVuZCk7Ci0gICAgYmluZE1ldGhvZCgiZ2Vz
dHVyZVNjcm9sbEZpcnN0UG9pbnQiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxGaXJzdFBv
aW50KTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlU2Nyb2xsVXBkYXRlIiwgJkV2ZW50U2VuZGVy
OjpnZXN0dXJlU2Nyb2xsVXBkYXRlKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlVGFwIiwgJkV2
ZW50U2VuZGVyOjpnZXN0dXJlVGFwKTsKLSAgICBiaW5kTWV0aG9kKCJnZXN0dXJlVGFwRG93biIs
ICZFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcERvd24pOwotICAgIGJpbmRNZXRob2QoImdlc3R1cmVU
YXBDYW5jZWwiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVUYXBDYW5jZWwpOwotICAgIGJpbmRNZXRo
b2QoImdlc3R1cmVMb25nUHJlc3MiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVMb25nUHJlc3MpOwot
ICAgIGJpbmRNZXRob2QoImdlc3R1cmVUd29GaW5nZXJUYXAiLCAmRXZlbnRTZW5kZXI6Omdlc3R1
cmVUd29GaW5nZXJUYXApOwotICAgIGJpbmRNZXRob2QoInpvb21QYWdlSW4iLCAmRXZlbnRTZW5k
ZXI6Onpvb21QYWdlSW4pOwotICAgIGJpbmRNZXRob2QoInpvb21QYWdlT3V0IiwgJkV2ZW50U2Vu
ZGVyOjp6b29tUGFnZU91dCk7Ci0gICAgYmluZE1ldGhvZCgic2NhbGVQYWdlQnkiLCAmRXZlbnRT
ZW5kZXI6OnNjYWxlUGFnZUJ5KTsKLQotICAgIC8vIFdoZW4gc2V0IHRvIHRydWUgKHRoZSBkZWZh
dWx0IHZhbHVlKSwgd2UgYmF0Y2ggbW91c2UgbW92ZSBhbmQgbW91c2UgdXAKLSAgICAvLyBldmVu
dHMgc28gd2UgY2FuIHNpbXVsYXRlIGRyYWcgJiBkcm9wLgotICAgIGJpbmRQcm9wZXJ0eSgiZHJh
Z01vZGUiLCAmZHJhZ01vZGUpOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgYmluZFByb3BlcnR5KCJX
TV9LRVlET1dOIiwgJndtS2V5RG93bik7Ci0gICAgYmluZFByb3BlcnR5KCJXTV9LRVlVUCIsICZ3
bUtleVVwKTsKLSAgICBiaW5kUHJvcGVydHkoIldNX0NIQVIiLCAmd21DaGFyKTsKLSAgICBiaW5k
UHJvcGVydHkoIldNX0RFQURDSEFSIiwgJndtRGVhZENoYXIpOwotICAgIGJpbmRQcm9wZXJ0eSgi
V01fU1lTS0VZRE9XTiIsICZ3bVN5c0tleURvd24pOwotICAgIGJpbmRQcm9wZXJ0eSgiV01fU1lT
S0VZVVAiLCAmd21TeXNLZXlVcCk7Ci0gICAgYmluZFByb3BlcnR5KCJXTV9TWVNDSEFSIiwgJndt
U3lzQ2hhcik7Ci0gICAgYmluZFByb3BlcnR5KCJXTV9TWVNERUFEQ0hBUiIsICZ3bVN5c0RlYWRD
aGFyKTsKLSNlbmRpZgotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpyZXNldCgpCi17Ci0gICAgLy8g
VGhlIHRlc3Qgc2hvdWxkIGhhdmUgZmluaXNoZWQgYSBkcmFnIGFuZCB0aGUgbW91c2UgYnV0dG9u
IHN0YXRlLgotICAgIEFTU0VSVChjdXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpOwotICAgIGN1cnJl
bnREcmFnRGF0YS5yZXNldCgpOwotICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gV2ViS2l0OjpXZWJE
cmFnT3BlcmF0aW9uTm9uZTsKLSAgICBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkID0gV2ViS2l0
OjpXZWJEcmFnT3BlcmF0aW9uTm9uZTsKLSAgICBwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVu
dDo6QnV0dG9uTm9uZTsKLSAgICBkcmFnTW9kZS5zZXQodHJ1ZSk7Ci0jaWYgT1MoV0lORE9XUykK
LSAgICB3bUtleURvd24uc2V0KFdNX0tFWURPV04pOwotICAgIHdtS2V5VXAuc2V0KFdNX0tFWVVQ
KTsKLSAgICB3bUNoYXIuc2V0KFdNX0NIQVIpOwotICAgIHdtRGVhZENoYXIuc2V0KFdNX0RFQURD
SEFSKTsKLSAgICB3bVN5c0tleURvd24uc2V0KFdNX1NZU0tFWURPV04pOwotICAgIHdtU3lzS2V5
VXAuc2V0KFdNX1NZU0tFWVVQKTsKLSAgICB3bVN5c0NoYXIuc2V0KFdNX1NZU0NIQVIpOwotICAg
IHdtU3lzRGVhZENoYXIuc2V0KFdNX1NZU0RFQURDSEFSKTsKLSNlbmRpZgotICAgIGxhc3RNb3Vz
ZVBvcyA9IFdlYlBvaW50KDAsIDApOwotICAgIGxhc3RDbGlja1RpbWVTZWMgPSAwOwotICAgIGxh
c3RDbGlja1BvcyA9IFdlYlBvaW50KDAsIDApOwotICAgIGNsaWNrQ291bnQgPSAwOwotICAgIGxh
c3RCdXR0b25UeXBlID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKLSAgICB0aW1lT2Zmc2V0
TXMgPSAwOwotICAgIHRvdWNoTW9kaWZpZXJzID0gMDsKLSAgICB0b3VjaFBvaW50cy5jbGVhcigp
OwotICAgIG1fdGFza0xpc3QucmV2b2tlQWxsKCk7Ci0gICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0
aW9uID0gV2ViUG9pbnQoMCwgMCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmRvRHJhZ0Ryb3Ao
Y29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRhLCBXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaykK
LXsKLSAgICBXZWJNb3VzZUV2ZW50IGV2ZW50OwotICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0
RXZlbnQ6Ok1vdXNlRG93biwgcHJlc3NlZEJ1dHRvbiwgbGFzdE1vdXNlUG9zLCAmZXZlbnQpOwot
ICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGV2ZW50LngsIGV2ZW50LnkpOwotICAgIFdlYlBvaW50
IHNjcmVlblBvaW50KGV2ZW50Lmdsb2JhbFgsIGV2ZW50Lmdsb2JhbFkpOwotICAgIGN1cnJlbnRE
cmFnRGF0YSA9IGRyYWdEYXRhOwotICAgIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQgPSBtYXNr
OwotICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ0VudGVy
KGRyYWdEYXRhLCBjbGllbnRQb2ludCwgc2NyZWVuUG9pbnQsIGN1cnJlbnREcmFnRWZmZWN0c0Fs
bG93ZWQsIDApOwotCi0gICAgLy8gRmluaXNoIHByb2Nlc3NpbmcgZXZlbnRzLgotICAgIHJlcGxh
eVNhdmVkRXZlbnRzKCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmR1bXBGaWxlbmFtZUJlaW5n
RHJhZ2dlZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikKLXsKLSAgICBXZWJT
dHJpbmcgZmlsZW5hbWU7Ci0gICAgV2ViVmVjdG9yPFdlYkRyYWdEYXRhOjpJdGVtPiBpdGVtcyA9
IGN1cnJlbnREcmFnRGF0YS5pdGVtcygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLnN0b3JhZ2VUeXBlID09IFdl
YkRyYWdEYXRhOjpJdGVtOjpTdG9yYWdlVHlwZUJpbmFyeURhdGEpIHsKLSAgICAgICAgICAgIGZp
bGVuYW1lID0gaXRlbXNbaV0udGl0bGU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBwcmludGYoIkZpbGVuYW1lIGJlaW5nIGRyYWdnZWQ6ICVzXG4iLCBmaWxlbmFt
ZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotV2ViTW91c2VFdmVudDo6QnV0dG9uIEV2ZW50U2VuZGVy
OjpnZXRCdXR0b25UeXBlRnJvbUJ1dHRvbk51bWJlcihpbnQgYnV0dG9uQ29kZSkKLXsKLSAgICBp
ZiAoIWJ1dHRvbkNvZGUpCi0gICAgICAgIHJldHVybiBXZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0
OwotICAgIGlmIChidXR0b25Db2RlID09IDIpCi0gICAgICAgIHJldHVybiBXZWJNb3VzZUV2ZW50
OjpCdXR0b25SaWdodDsKLSAgICByZXR1cm4gV2ViTW91c2VFdmVudDo6QnV0dG9uTWlkZGxlOwot
fQotCi1pbnQgRXZlbnRTZW5kZXI6OmdldEJ1dHRvbk51bWJlckZyb21TaW5nbGVBcmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW50IGJ1dHRvbkNvZGUgPSAwOwot
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkK
LSAgICAgICAgYnV0dG9uQ29kZSA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7Ci0gICAgcmV0dXJu
IGJ1dHRvbkNvZGU7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnVwZGF0ZUNsaWNrQ291bnRGb3JC
dXR0b24oV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvblR5cGUpCi17Ci0gICAgaWYgKChnZXRD
dXJyZW50RXZlbnRUaW1lU2VjKCkgLSBsYXN0Q2xpY2tUaW1lU2VjIDwgbXVsdGlwbGVDbGlja1Rp
bWVTZWMpCi0gICAgICAgICYmICghb3V0c2lkZU11bHRpQ2xpY2tSYWRpdXMobGFzdE1vdXNlUG9z
LCBsYXN0Q2xpY2tQb3MpKQotICAgICAgICAmJiAoYnV0dG9uVHlwZSA9PSBsYXN0QnV0dG9uVHlw
ZSkpCi0gICAgICAgICsrY2xpY2tDb3VudDsKLSAgICBlbHNlIHsKLSAgICAgICAgY2xpY2tDb3Vu
dCA9IDE7Ci0gICAgICAgIGxhc3RCdXR0b25UeXBlID0gYnV0dG9uVHlwZTsKLSAgICB9Ci19Ci0K
LS8vCi0vLyBJbXBsZW1lbnRlZCBqYXZhc2NyaXB0IG1ldGhvZHMuCi0vLwotCi12b2lkIEV2ZW50
U2VuZGVyOjptb3VzZURvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAocmVzdWx0KSAvLyBDb3VsZCBiZSAwIGlmIGludm9r
ZWQgYXN5bmNocm9ub3VzbHkuCi0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotCi0gICAgd2Vi
dmlldygpLT5sYXlvdXQoKTsKLQotICAgIGludCBidXR0b25OdW1iZXIgPSBnZXRCdXR0b25OdW1i
ZXJGcm9tU2luZ2xlQXJnKGFyZ3VtZW50cyk7Ci0gICAgQVNTRVJUKGJ1dHRvbk51bWJlciAhPSAt
MSk7Ci0KLSAgICBXZWJNb3VzZUV2ZW50OjpCdXR0b24gYnV0dG9uVHlwZSA9IGdldEJ1dHRvblR5
cGVGcm9tQnV0dG9uTnVtYmVyKGJ1dHRvbk51bWJlcik7Ci0KLSAgICB1cGRhdGVDbGlja0NvdW50
Rm9yQnV0dG9uKGJ1dHRvblR5cGUpOwotCi0gICAgV2ViTW91c2VFdmVudCBldmVudDsKLSAgICBw
cmVzc2VkQnV0dG9uID0gYnV0dG9uVHlwZTsKLSAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2
ZW50OjpNb3VzZURvd24sIGJ1dHRvblR5cGUsIGxhc3RNb3VzZVBvcywgJmV2ZW50KTsKLSAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIChhcmd1bWVudHNbMV0uaXNPYmplY3QoKSB8fCBh
cmd1bWVudHNbMV0uaXNTdHJpbmcoKSkpCi0gICAgICAgIGFwcGx5S2V5TW9kaWZpZXJzKCYoYXJn
dW1lbnRzWzFdKSwgJmV2ZW50KTsKLSAgICB3ZWJ2aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZl
bnQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjptb3VzZVVwKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdCkgLy8g
Q291bGQgYmUgMCBpZiBpbnZva2VkIGFzeW5jaHJvbm91c2x5LgotICAgICAgICByZXN1bHQtPnNl
dE51bGwoKTsKLQotICAgIHdlYnZpZXcoKS0+bGF5b3V0KCk7Ci0KLSAgICBpbnQgYnV0dG9uTnVt
YmVyID0gZ2V0QnV0dG9uTnVtYmVyRnJvbVNpbmdsZUFyZyhhcmd1bWVudHMpOwotICAgIEFTU0VS
VChidXR0b25OdW1iZXIgIT0gLTEpOwotCi0gICAgV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRv
blR5cGUgPSBnZXRCdXR0b25UeXBlRnJvbUJ1dHRvbk51bWJlcihidXR0b25OdW1iZXIpOwotCi0g
ICAgaWYgKGlzRHJhZ01vZGUoKSAmJiAhcmVwbGF5aW5nU2F2ZWRFdmVudHMpIHsKLSAgICAgICAg
U2F2ZWRFdmVudCBzYXZlZEV2ZW50OwotICAgICAgICBzYXZlZEV2ZW50LnR5cGUgPSBTYXZlZEV2
ZW50OjpNb3VzZVVwOwotICAgICAgICBzYXZlZEV2ZW50LmJ1dHRvblR5cGUgPSBidXR0b25UeXBl
OwotICAgICAgICBtb3VzZUV2ZW50UXVldWUuYXBwZW5kKHNhdmVkRXZlbnQpOwotICAgICAgICBy
ZXBsYXlTYXZlZEV2ZW50cygpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFdlYk1vdXNlRXZlbnQg
ZXZlbnQ7Ci0gICAgICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlVXAsIGJ1
dHRvblR5cGUsIGxhc3RNb3VzZVBvcywgJmV2ZW50KTsKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPj0gMiAmJiAoYXJndW1lbnRzWzFdLmlzT2JqZWN0KCkgfHwgYXJndW1lbnRzWzFdLmlz
U3RyaW5nKCkpKQotICAgICAgICAgICAgYXBwbHlLZXlNb2RpZmllcnMoJihhcmd1bWVudHNbMV0p
LCAmZXZlbnQpOwotICAgICAgICBkb01vdXNlVXAoZXZlbnQpOwotICAgIH0KLX0KLQotdm9pZCBF
dmVudFNlbmRlcjo6ZG9Nb3VzZVVwKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGUpCi17Ci0gICAgd2Vi
dmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGUpOwotCi0gICAgcHJlc3NlZEJ1dHRvbiA9IFdlYk1v
dXNlRXZlbnQ6OkJ1dHRvbk5vbmU7Ci0gICAgbGFzdENsaWNrVGltZVNlYyA9IGUudGltZVN0YW1w
U2Vjb25kczsKLSAgICBsYXN0Q2xpY2tQb3MgPSBsYXN0TW91c2VQb3M7Ci0KLSAgICAvLyBJZiB3
ZSdyZSBpbiBhIGRyYWcgb3BlcmF0aW9uLCBjb21wbGV0ZSBpdC4KLSAgICBpZiAoY3VycmVudERy
YWdEYXRhLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViUG9pbnQgY2xpZW50UG9p
bnQoZS54LCBlLnkpOwotICAgIFdlYlBvaW50IHNjcmVlblBvaW50KGUuZ2xvYmFsWCwgZS5nbG9i
YWxZKTsKLQotICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0RHJh
Z092ZXIoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2Vk
LCAwKTsKLSAgICBpZiAoY3VycmVudERyYWdFZmZlY3QpCi0gICAgICAgIHdlYnZpZXcoKS0+ZHJh
Z1RhcmdldERyb3AoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCAwKTsKLSAgICBlbHNlCi0gICAg
ICAgIHdlYnZpZXcoKS0+ZHJhZ1RhcmdldERyYWdMZWF2ZSgpOwotICAgIHdlYnZpZXcoKS0+ZHJh
Z1NvdXJjZUVuZGVkQXQoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBjdXJyZW50RHJhZ0VmZmVj
dCk7Ci0gICAgd2VidmlldygpLT5kcmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCk7Ci0KLSAgICBj
dXJyZW50RHJhZ0RhdGEucmVzZXQoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6bW91c2VNb3Zl
VG8oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
LXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwg
MiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigp
KQotICAgICAgICByZXR1cm47Ci0gICAgd2VidmlldygpLT5sYXlvdXQoKTsKLQotICAgIFdlYlBv
aW50IG1vdXNlUG9zKGFyZ3VtZW50c1swXS50b0ludDMyKCksIGFyZ3VtZW50c1sxXS50b0ludDMy
KCkpOwotCi0gICAgaWYgKGlzRHJhZ01vZGUoKSAmJiBwcmVzc2VkQnV0dG9uID09IFdlYk1vdXNl
RXZlbnQ6OkJ1dHRvbkxlZnQgJiYgIXJlcGxheWluZ1NhdmVkRXZlbnRzKSB7Ci0gICAgICAgIFNh
dmVkRXZlbnQgc2F2ZWRFdmVudDsKLSAgICAgICAgc2F2ZWRFdmVudC50eXBlID0gU2F2ZWRFdmVu
dDo6TW91c2VNb3ZlOwotICAgICAgICBzYXZlZEV2ZW50LnBvcyA9IG1vdXNlUG9zOwotICAgICAg
ICBtb3VzZUV2ZW50UXVldWUuYXBwZW5kKHNhdmVkRXZlbnQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0gICAgICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0
RXZlbnQ6Ok1vdXNlTW92ZSwgcHJlc3NlZEJ1dHRvbiwgbW91c2VQb3MsICZldmVudCk7Ci0gICAg
ICAgIGRvTW91c2VNb3ZlKGV2ZW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmRv
TW91c2VNb3ZlKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGUpCi17Ci0gICAgbGFzdE1vdXNlUG9zID0g
V2ViUG9pbnQoZS54LCBlLnkpOwotCi0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGUp
OwotCi0gICAgaWYgKHByZXNzZWRCdXR0b24gPT0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZSB8
fCBjdXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJQb2lu
dCBjbGllbnRQb2ludChlLngsIGUueSk7Ci0gICAgV2ViUG9pbnQgc2NyZWVuUG9pbnQoZS5nbG9i
YWxYLCBlLmdsb2JhbFkpOwotICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gd2VidmlldygpLT5kcmFn
VGFyZ2V0RHJhZ092ZXIoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBjdXJyZW50RHJhZ0VmZmVj
dHNBbGxvd2VkLCAwKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6a2V5RG93bihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChy
ZXN1bHQpCi0gICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBib29sIGdlbmVyYXRlQ2hhciA9IGZhbHNlOwotCi0gICAgLy8gRklYTUU6IEknbSBub3QgZXhh
Y3RseSBzdXJlIGhvdyB3ZSBzaG91bGQgY29udmVydCB0aGUgc3RyaW5nIHRvIGEga2V5Ci0gICAg
Ly8gZXZlbnQuIFRoaXMgc2VlbXMgdG8gd29yayBpbiB0aGUgY2FzZXMgSSB0ZXN0ZWQuCi0gICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBhbHNvIGdlbmVyYXRlIGEgS0VZX1VQPwotICAgIHN0cmluZyBj
b2RlU3RyID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBDb252ZXJ0IFxuIC0+
IFZLX1JFVFVSTi4gU29tZSBsYXlvdXQgdGVzdHMgdXNlIFxuIHRvIG1lYW4gIkVudGVyIiwgd2hl
bgotICAgIC8vIFdpbmRvd3MgdXNlcyBcciBmb3IgIkVudGVyIi4KLSAgICBpbnQgY29kZSA9IDA7
Ci0gICAgaW50IHRleHQgPSAwOwotICAgIGJvb2wgbmVlZHNTaGlmdEtleU1vZGlmaWVyID0gZmFs
c2U7Ci0gICAgaWYgKCJcbiIgPT0gY29kZVN0cikgewotICAgICAgICBnZW5lcmF0ZUNoYXIgPSB0
cnVlOwotICAgICAgICB0ZXh0ID0gY29kZSA9IHdlYmtpdF9zdXBwb3J0OjpWS0VZX1JFVFVSTjsK
LSAgICB9IGVsc2UgaWYgKCJyaWdodEFycm93IiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0g
d2Via2l0X3N1cHBvcnQ6OlZLRVlfUklHSFQ7Ci0gICAgZWxzZSBpZiAoImRvd25BcnJvdyIgPT0g
Y29kZVN0cikKLSAgICAgICAgY29kZSA9IHdlYmtpdF9zdXBwb3J0OjpWS0VZX0RPV047Ci0gICAg
ZWxzZSBpZiAoImxlZnRBcnJvdyIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IHdlYmtpdF9z
dXBwb3J0OjpWS0VZX0xFRlQ7Ci0gICAgZWxzZSBpZiAoInVwQXJyb3ciID09IGNvZGVTdHIpCi0g
ICAgICAgIGNvZGUgPSB3ZWJraXRfc3VwcG9ydDo6VktFWV9VUDsKLSAgICBlbHNlIGlmICgiaW5z
ZXJ0IiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gd2Via2l0X3N1cHBvcnQ6OlZLRVlfSU5T
RVJUOwotICAgIGVsc2UgaWYgKCJkZWxldGUiID09IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSB3
ZWJraXRfc3VwcG9ydDo6VktFWV9ERUxFVEU7Ci0gICAgZWxzZSBpZiAoInBhZ2VVcCIgPT0gY29k
ZVN0cikKLSAgICAgICAgY29kZSA9IHdlYmtpdF9zdXBwb3J0OjpWS0VZX1BSSU9SOwotICAgIGVs
c2UgaWYgKCJwYWdlRG93biIgPT0gY29kZVN0cikKLSAgICAgICAgY29kZSA9IHdlYmtpdF9zdXBw
b3J0OjpWS0VZX05FWFQ7Ci0gICAgZWxzZSBpZiAoImhvbWUiID09IGNvZGVTdHIpCi0gICAgICAg
IGNvZGUgPSB3ZWJraXRfc3VwcG9ydDo6VktFWV9IT01FOwotICAgIGVsc2UgaWYgKCJlbmQiID09
IGNvZGVTdHIpCi0gICAgICAgIGNvZGUgPSB3ZWJraXRfc3VwcG9ydDo6VktFWV9FTkQ7Ci0gICAg
ZWxzZSBpZiAoInByaW50U2NyZWVuIiA9PSBjb2RlU3RyKQotICAgICAgICBjb2RlID0gd2Via2l0
X3N1cHBvcnQ6OlZLRVlfU05BUFNIT1Q7Ci0gICAgZWxzZSBpZiAoIm1lbnUiID09IGNvZGVTdHIp
Ci0gICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byB3ZWJraXRfc3VwcG9ydDo6VktFWV9B
UFBTLgotICAgICAgICBjb2RlID0gMHg1RDsKLSAgICBlbHNlIGlmICgibGVmdENvbnRyb2wiID09
IGNvZGVTdHIpCi0gICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byB3ZWJraXRfc3VwcG9y
dDo6VktFWV9MQ09OVFJPTC4KLSAgICAgICAgY29kZSA9IDB4QTI7Ci0gICAgZWxzZSBpZiAoInJp
Z2h0Q29udHJvbCIgPT0gY29kZVN0cikKLSAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRv
IHdlYmtpdF9zdXBwb3J0OjpWS0VZX1JDT05UUk9MLgotICAgICAgICBjb2RlID0gMHhBMzsKLSAg
ICBlbHNlIGlmICgibGVmdFNoaWZ0IiA9PSBjb2RlU3RyKQotICAgICAgICAvLyBGSVhNRTogQ2hh
bmdlIHRoaXMgdG8gd2Via2l0X3N1cHBvcnQ6OlZLRVlfTFNISUZULgotICAgICAgICBjb2RlID0g
MHhBMDsKLSAgICBlbHNlIGlmICgicmlnaHRTaGlmdCIgPT0gY29kZVN0cikKLSAgICAgICAgLy8g
RklYTUU6IENoYW5nZSB0aGlzIHRvIHdlYmtpdF9zdXBwb3J0OjpWS0VZX1JTSElGVC4KLSAgICAg
ICAgY29kZSA9IDB4QTE7Ci0gICAgZWxzZSBpZiAoImxlZnRBbHQiID09IGNvZGVTdHIpCi0gICAg
ICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byB3ZWJraXRfc3VwcG9ydDo6VktFWV9MTUVOVS4K
LSAgICAgICAgY29kZSA9IDB4QTQ7Ci0gICAgZWxzZSBpZiAoInJpZ2h0QWx0IiA9PSBjb2RlU3Ry
KQotICAgICAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gd2Via2l0X3N1cHBvcnQ6OlZLRVlf
Uk1FTlUuCi0gICAgICAgIGNvZGUgPSAweEE1OwotICAgIGVsc2UgewotICAgICAgICAvLyBDb21w
YXJlIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCB0aGUgZnVuY3Rpb24ta2V5IG5hbWVzIGRlZmluZWQg
YnkgdGhlCi0gICAgICAgIC8vIERPTSBzcGVjIChpLmUuICJGMSIsLi4uLCJGMjQiKS4gSWYgdGhl
IGlucHV0IHN0cmluZyBpcyBhIGZ1bmN0aW9uLWtleQotICAgICAgICAvLyBuYW1lLCBzZXQgaXRz
IGtleSBjb2RlLgotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSAyNDsgKytpKSB7Ci0gICAg
ICAgICAgICBjaGFyIGZ1bmN0aW9uQ2hhcnNbMTBdOwotICAgICAgICAgICAgc25wcmludGYoZnVu
Y3Rpb25DaGFycywgMTAsICJGJWQiLCBpKTsKLSAgICAgICAgICAgIHN0cmluZyBmdW5jdGlvbktl
eU5hbWUoZnVuY3Rpb25DaGFycyk7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb25LZXlOYW1lID09
IGNvZGVTdHIpIHsKLSAgICAgICAgICAgICAgICBjb2RlID0gd2Via2l0X3N1cHBvcnQ6OlZLRVlf
RjEgKyAoaSAtIDEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGlmICghY29kZSkgewotICAgICAgICAgICAgV2ViU3RyaW5nIHdlYkNv
ZGVTdHIgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGNvZGVTdHIuZGF0YSgpLCBjb2RlU3RyLnNpemUo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQod2ViQ29kZVN0ci5sZW5ndGgoKSA9PSAxKTsKLSAgICAg
ICAgICAgIHRleHQgPSBjb2RlID0gd2ViQ29kZVN0ci5kYXRhKClbMF07Ci0gICAgICAgICAgICBu
ZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSBuZWVkc1NoaWZ0TW9kaWZpZXIoY29kZSk7Ci0gICAgICAg
ICAgICBpZiAoKGNvZGUgJiAweEZGKSA+PSAnYScgJiYgKGNvZGUgJiAweEZGKSA8PSAneicpCi0g
ICAgICAgICAgICAgICAgY29kZSAtPSAnYScgLSAnQSc7Ci0gICAgICAgICAgICBnZW5lcmF0ZUNo
YXIgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRm9yIG9uZSBnZW5lcmF0ZWQg
a2V5Ym9hcmQgZXZlbnQsIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYSBrZXlEb3duL2tleVVwCi0gICAg
Ly8gcGFpcjsgcmVmZXIgdG8gRXZlbnRTZW5kZXIuY3BwIGluIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi4KLSAgICAvLyBPbiBXaW5kb3dzLCB3ZSBtaWdodCBhbHNvIG5lZWQgdG8gZ2VuZXJhdGUg
YSBjaGFyIGV2ZW50IHRvIG1pbWljIHRoZQotICAgIC8vIFdpbmRvd3MgZXZlbnQgZmxvdzsgb24g
b3RoZXIgcGxhdGZvcm1zIHdlIGNyZWF0ZSBhIG1lcmdlZCBldmVudCBhbmQgdGVzdAotICAgIC8v
IHRoZSBldmVudCBmbG93IHRoYXQgdGhhdCBwbGF0Zm9ybSBwcm92aWRlcy4KLSAgICBXZWJLZXli
b2FyZEV2ZW50IGV2ZW50RG93biwgZXZlbnRDaGFyLCBldmVudFVwOwotICAgIGV2ZW50RG93bi50
eXBlID0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93bjsKLSAgICBldmVudERvd24ubW9kaWZpZXJz
ID0gMDsKLSAgICBldmVudERvd24ud2luZG93c0tleUNvZGUgPSBjb2RlOwotI2lmIE9TKExJTlVY
KSAmJiBVU0UoR1RLKQotICAgIGV2ZW50RG93bi5uYXRpdmVLZXlDb2RlID0gd2Via2l0X3N1cHBv
cnQ6Ok5hdGl2ZUtleUNvZGVGb3JXaW5kb3dzS2V5Q29kZShjb2RlLCBuZWVkc1NoaWZ0S2V5TW9k
aWZpZXIpOwotI2VuZGlmCi0KLSAgICBpZiAoZ2VuZXJhdGVDaGFyKSB7Ci0gICAgICAgIGV2ZW50
RG93bi50ZXh0WzBdID0gdGV4dDsKLSAgICAgICAgZXZlbnREb3duLnVubW9kaWZpZWRUZXh0WzBd
ID0gdGV4dDsKLSAgICB9Ci0gICAgZXZlbnREb3duLnNldEtleUlkZW50aWZpZXJGcm9tV2luZG93
c0tleUNvZGUoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgKGFyZ3VtZW50
c1sxXS5pc09iamVjdCgpIHx8IGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSkKLSAgICAgICAgZXZl
bnREb3duLmlzU3lzdGVtS2V5ID0gYXBwbHlLZXlNb2RpZmllcnMoJihhcmd1bWVudHNbMV0pLCAm
ZXZlbnREb3duKTsKLQotICAgIGlmIChuZWVkc1NoaWZ0S2V5TW9kaWZpZXIpCi0gICAgICAgIGV2
ZW50RG93bi5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6U2hpZnRLZXk7Ci0KLSAgICAvLyBT
ZWUgaWYgS2V5TG9jYXRpb24gYXJndW1lbnQgaXMgZ2l2ZW4uCi0gICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPj0gMyAmJiBhcmd1bWVudHNbMl0uaXNOdW1iZXIoKSkgewotICAgICAgICBpbnQgbG9j
YXRpb24gPSBhcmd1bWVudHNbMl0udG9JbnQzMigpOwotICAgICAgICBpZiAobG9jYXRpb24gPT0g
RE9NS2V5TG9jYXRpb25OdW1wYWQpCi0gICAgICAgICAgICBldmVudERvd24ubW9kaWZpZXJzIHw9
IFdlYklucHV0RXZlbnQ6OklzS2V5UGFkOwotICAgIH0KLQotICAgIGV2ZW50Q2hhciA9IGV2ZW50
VXAgPSBldmVudERvd247Ci0gICAgZXZlbnRVcC50eXBlID0gV2ViSW5wdXRFdmVudDo6S2V5VXA7
Ci0gICAgLy8gRXZlbnRTZW5kZXIubSBmb3JjZXMgYSBsYXlvdXQgaGVyZSwgd2l0aCBhdCBsZWFz
dCBvbmUKLSAgICAvLyB0ZXN0IChmYXN0L2Zvcm1zL2ZvY3VzLWNvbnRyb2wtdG8tcGFnZS5odG1s
KSByZWx5aW5nIG9uIHRoaXMuCi0gICAgd2VidmlldygpLT5sYXlvdXQoKTsKLQotICAgIC8vIElu
IHRoZSBicm93c2VyLCBpZiBhIGtleWJvYXJkIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGFuIGVkaXRv
ciBjb21tYW5kLAotICAgIC8vIHRoZSBjb21tYW5kIHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB0aGUg
cmVuZGVyZXIganVzdCBiZWZvcmUgZGlzcGF0Y2hpbmcKLSAgICAvLyB0aGUga2V5Ym9hcmQgZXZl
bnQsIGFuZCB0aGVuIGl0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlCi0gICAgLy8gUmVuZGVyVmll
dzo6aGFuZGxlQ3VycmVudEtleWJvYXJkRXZlbnQoKSBtZXRob2QsIHdoaWNoIGlzIGNhbGxlZCBm
cm9tCi0gICAgLy8gdGhpcmRfcGFydHkvV2ViS2l0L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0VkaXRvckNsaWVudEltcGwuY3BwLgotICAgIC8vIFdlIGp1c3Qgc2ltdWxhdGUgdGhlIHNhbWUg
YmVoYXZpb3IgaGVyZS4KLSAgICBzdHJpbmcgZWRpdENvbW1hbmQ7Ci0gICAgaWYgKGdldEVkaXRD
b21tYW5kKGV2ZW50RG93biwgJmVkaXRDb21tYW5kKSkKLSAgICAgICAgbV9kZWxlZ2F0ZS0+c2V0
RWRpdENvbW1hbmQoZWRpdENvbW1hbmQsICIiKTsKLQotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5w
dXRFdmVudChldmVudERvd24pOwotCi0gICAgbV9kZWxlZ2F0ZS0+Y2xlYXJFZGl0Q29tbWFuZCgp
OwotCi0gICAgaWYgKGdlbmVyYXRlQ2hhcikgewotICAgICAgICBldmVudENoYXIudHlwZSA9IFdl
YklucHV0RXZlbnQ6OkNoYXI7Ci0gICAgICAgIGV2ZW50Q2hhci5rZXlJZGVudGlmaWVyWzBdID0g
J1wwJzsKLSAgICAgICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50Q2hhcik7Ci0g
ICAgfQotCi0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50VXApOwotfQotCi12
b2lkIEV2ZW50U2VuZGVyOjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LQotI2lmIE9TKFdJTkRPV1MpCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMykgewotICAg
ICAgICAvLyBHcmFiIHRoZSBtZXNzYWdlIGlkIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGRpc3BhdGNo
IGl0LgotICAgICAgICBpbnQgbXNnID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLQotICAgICAg
ICAvLyBXZWJLaXQncyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gc3R1ZmZzIGEgTVNHIHN0cnVj
dCBhbmQgdXNlcwotICAgICAgICAvLyBUcmFuc2xhdGVNZXNzYWdlIGFuZCBEaXNwYXRjaE1lc3Nh
Z2UuIFdlIHVzZSBhIFdlYktleWJvYXJkRXZlbnQsIHdoaWNoCi0gICAgICAgIC8vIGRvZXNuJ3Qg
bmVlZCB0byByZWNlaXZlIHRoZSBEZWFkQ2hhciBhbmQgU3lzRGVhZENoYXIgbWVzc2FnZXMuCi0g
ICAgICAgIGlmIChtc2cgPT0gV01fREVBRENIQVIgfHwgbXNnID09IFdNX1NZU0RFQURDSEFSKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHdlYnZpZXcoKS0+bGF5b3V0KCk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgbG9uZyBscGFyYW0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihh
cmd1bWVudHNbMl0udG9Eb3VibGUoKSk7Ci0gICAgICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRF
dmVudChXZWJJbnB1dEV2ZW50RmFjdG9yeTo6a2V5Ym9hcmRFdmVudCgwLCBtc2csIGFyZ3VtZW50
c1sxXS50b0ludDMyKCksIGxwYXJhbSkpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1ib29sIEV2ZW50U2VuZGVyOjpuZWVkc1NoaWZ0TW9k
aWZpZXIoaW50IGtleUNvZGUpCi17Ci0gICAgLy8gSWYgY29kZSBpcyBhbiB1cHBlcmNhc2UgbGV0
dGVyLCBhc3NpZ24gYSBTSElGVCBrZXkgdG8KLSAgICAvLyBldmVudERvd24ubW9kaWZpZXIsIHRo
aXMgbG9naWMgY29tZXMgZnJvbQotICAgIC8vIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVu
dFNlbmRlci5jcHAKLSAgICByZXR1cm4gKGtleUNvZGUgJiAweEZGKSA+PSAnQScgJiYgKGtleUNv
ZGUgJiAweEZGKSA8PSAnWic7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmxlYXBGb3J3YXJkKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwg
IWFyZ3VtZW50c1swXS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgbWls
bGlzZWNvbmRzID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBpZiAoaXNEcmFnTW9kZSgp
ICYmIHByZXNzZWRCdXR0b24gPT0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdCAmJiAhcmVwbGF5
aW5nU2F2ZWRFdmVudHMpIHsKLSAgICAgICAgU2F2ZWRFdmVudCBzYXZlZEV2ZW50OwotICAgICAg
ICBzYXZlZEV2ZW50LnR5cGUgPSBTYXZlZEV2ZW50OjpMZWFwRm9yd2FyZDsKLSAgICAgICAgc2F2
ZWRFdmVudC5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7Ci0gICAgICAgIG1vdXNlRXZlbnRR
dWV1ZS5hcHBlbmQoc2F2ZWRFdmVudCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGRvTGVhcEZvcndh
cmQobWlsbGlzZWNvbmRzKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6ZG9MZWFwRm9yd2FyZChp
bnQgbWlsbGlzZWNvbmRzKQotewotICAgIGFkdmFuY2VFdmVudFRpbWUobWlsbGlzZWNvbmRzKTsK
LX0KLQotLy8gQXBwbGUncyBwb3J0IG9mIFdlYktpdCB6b29tcyBieSBhIGZhY3RvciBvZiAxLjIg
KHNlZQotLy8gV2ViS2l0L1dlYlZpZXcvV2ViVmlldy5tbSkKLXZvaWQgRXZlbnRTZW5kZXI6OnRl
eHRab29tSW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKHRydWUsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkg
KyAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6dGV4
dFpvb21PdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKHRydWUsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkg
LSAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6em9v
bVBhZ2VJbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgd2VidmlldygpLT5zZXRab29tTGV2ZWwoZmFsc2UsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkg
KyAxKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6em9v
bVBhZ2VPdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKGZhbHNlLCB3ZWJ2aWV3KCktPnpvb21MZXZlbCgp
IC0gMSk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNj
YWxlUGFnZUJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5p
c051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHN0
YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMF0udG9Eb3VibGUoKSk7Ci0gICAgaW50IHggPSBh
cmd1bWVudHNbMV0udG9JbnQzMigpOwotICAgIGludCB5ID0gYXJndW1lbnRzWzJdLnRvSW50MzIo
KTsKLSAgICB3ZWJ2aWV3KCktPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvciwgV2ViUG9p
bnQoeCwgeSkpOwotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEV2ZW50U2VuZGVy
Ojptb3VzZVNjcm9sbEJ5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJp
YW50KiByZXN1bHQpCi17Ci0gICAgaGFuZGxlTW91c2VXaGVlbChhcmd1bWVudHMsIHJlc3VsdCwg
ZmFsc2UpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGhhbmRsZU1vdXNlV2hlZWwoYXJndW1lbnRzLCByZXN1bHQsIHRydWUpOwotfQotCi12b2lk
IEV2ZW50U2VuZGVyOjpyZXBsYXlTYXZlZEV2ZW50cygpCi17Ci0gICAgcmVwbGF5aW5nU2F2ZWRF
dmVudHMgPSB0cnVlOwotICAgIHdoaWxlICghbW91c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSkgewot
ICAgICAgICBTYXZlZEV2ZW50IGUgPSBtb3VzZUV2ZW50UXVldWUudGFrZUZpcnN0KCk7Ci0KLSAg
ICAgICAgc3dpdGNoIChlLnR5cGUpIHsKLSAgICAgICAgY2FzZSBTYXZlZEV2ZW50OjpNb3VzZU1v
dmU6IHsKLSAgICAgICAgICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7Ci0gICAgICAgICAgICBpbml0
TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZU1vdmUsIHByZXNzZWRCdXR0b24sIGUucG9z
LCAmZXZlbnQpOwotICAgICAgICAgICAgZG9Nb3VzZU1vdmUoZXZlbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTYXZlZEV2ZW50OjpMZWFwRm9yd2FyZDoK
LSAgICAgICAgICAgIGRvTGVhcEZvcndhcmQoZS5taWxsaXNlY29uZHMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgU2F2ZWRFdmVudDo6TW91c2VVcDogewotICAgICAgICAgICAg
V2ViTW91c2VFdmVudCBldmVudDsKLSAgICAgICAgICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0
RXZlbnQ6Ok1vdXNlVXAsIGUuYnV0dG9uVHlwZSwgbGFzdE1vdXNlUG9zLCAmZXZlbnQpOwotICAg
ICAgICAgICAgZG9Nb3VzZVVwKGV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJlcGxheWluZ1NhdmVkRXZlbnRzID0gZmFsc2U7Ci19Ci0K
LS8vIEJlY2F1c2UgYWN0dWFsIGNvbnRleHQgbWVudSBpcyBpbXBsZW1lbnRlZCBieSB0aGUgYnJv
d3NlciBzaWRlLCAKLS8vIHRoaXMgZnVuY3Rpb24gZG9lcyBvbmx5IHdoYXQgTGF5b3V0VGVzdHMg
YXJlIGV4cGVjdGluZzoKLS8vIC0gTWFueSB0ZXN0IGNoZWNrcyB0aGUgY291bnQgb2YgaXRlbXMu
IFNvIHJldHVybmluZyBub24temVybyB2YWx1ZSBtYWtlcyBzZW5zZS4KLS8vIC0gU29tZSB0ZXN0
IGNvbXBhcmVzIHRoZSBjb3VudCBiZWZvcmUgYW5kIGFmdGVyIHNvbWUgYWN0aW9uLiBTbyBjaGFu
Z2luZyB0aGUgY291bnQgYmFzZWQgb24gZmxhZ3MKLS8vICAgYWxzbyBtYWtlcyBzZW5zZS4gVGhp
cyBmdW5jdGlvbiBpcyBkb2luZyBzdWNoIGZvciBzb21lIGZsYWdzLgotLy8gLSBTb21lIHRlc3Qg
ZXZlbiBjaGVja3MgYWN0dWFsIHN0cmluZyBjb250ZW50LiBTbyBwcm92aWRpbmcgaXQgd291bGQg
YmUgYWxzbyBoZWxwZnVsLgotLy8KLXN0YXRpYyBWZWN0b3I8V2ViU3RyaW5nPiBtYWtlTWVudUl0
ZW1TdHJpbmdzRm9yKFdlYkNvbnRleHRNZW51RGF0YSogY29udGV4dE1lbnUsIFRlc3REZWxlZ2F0
ZSogZGVsZWdhdGUpCi17Ci0gICAgLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBiYXNlZCBvbiBTYWZh
cmkncyBjb250ZXh0IG1lbnUgYmVjYXVzZSB0ZXN0cyBhcmUgbWFkZSBmb3IgaXQuCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG5vbkVkaXRhYmxlTWVudVN0cmluZ3NbXSA9IHsgIkJhY2siLCAiUmVs
b2FkIFBhZ2UiLCAiT3BlbiBpbiBEYXNoYmFvcmQiLCAiPHNlcGFyYXRvcj4iLCAiVmlldyBTb3Vy
Y2UiLCAiU2F2ZSBQYWdlIEFzIiwgIlByaW50IFBhZ2UiLCAiSW5zcGVjdCBFbGVtZW50IiwgMCB9
OwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlZGl0YWJsZU1lbnVTdHJpbmdzW10gPSB7ICJDdXQi
LCAiQ29weSIsICI8c2VwYXJhdG9yPiIsICJQYXN0ZSIsICJTcGVsbGluZyBhbmQgR3JhbW1hciIs
ICJTdWJzdGl0dXRpb25zLCBUcmFuc2Zvcm1hdGlvbnMiLCAiRm9udCIsICJTcGVlY2giLCAiUGFy
YWdyYXBoIERpcmVjdGlvbiIsICI8c2VwYXJhdG9yPiIsIDAgfTsKLQotICAgIC8vIFRoaXMgaXMg
cG9zc2libGUgYmVjYXVzZSBtb3VzZSBldmVudHMgYXJlIGNhbmNlbGxlYWJsZS4KLSAgICBpZiAo
IWNvbnRleHRNZW51KQotICAgICAgICByZXR1cm4gVmVjdG9yPFdlYlN0cmluZz4oKTsKLQotICAg
IFZlY3RvcjxXZWJTdHJpbmc+IHN0cmluZ3M7Ci0KLSAgICBpZiAoY29udGV4dE1lbnUtPmlzRWRp
dGFibGUpIHsKLSAgICAgICAgZm9yIChjb25zdCBjaGFyKiogaXRlbSA9IGVkaXRhYmxlTWVudVN0
cmluZ3M7ICppdGVtOyArK2l0ZW0pIAotICAgICAgICAgICAgc3RyaW5ncy5hcHBlbmQoV2ViU3Ry
aW5nOjpmcm9tVVRGOCgqaXRlbSkpOwotICAgICAgICBWZWN0b3I8V2ViU3RyaW5nPiBzdWdnZXN0
aW9uczsKLSAgICAgICAgZGVsZWdhdGUtPmZpbGxTcGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnRl
eHRNZW51LT5taXNzcGVsbGVkV29yZCwgJnN1Z2dlc3Rpb25zKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9ucy5zaXplKCk7ICsraSkgCi0gICAgICAgICAgICBzdHJp
bmdzLmFwcGVuZChzdWdnZXN0aW9uc1tpXSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChj
b25zdCBjaGFyKiogaXRlbSA9IG5vbkVkaXRhYmxlTWVudVN0cmluZ3M7ICppdGVtOyArK2l0ZW0p
IAotICAgICAgICAgICAgc3RyaW5ncy5hcHBlbmQoV2ViU3RyaW5nOjpmcm9tVVRGOCgqaXRlbSkp
OwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmdzOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpj
b250ZXh0Q2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICB3ZWJ2aWV3KCktPmxheW91dCgpOwotCi0gICAgdXBkYXRlQ2xpY2tD
b3VudEZvckJ1dHRvbihXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodCk7Ci0KLSAgICAvLyBDbGVh
cnMgbGFzdCBjb250ZXh0IG1lbnUgZGF0YSBiZWNhdXNlIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUg
Y29udGV4dCBtZW51IGJlIHJlcXVlc3RlZCAKLSAgICAvLyBhZnRlciBmb2xsb3dpbmcgbW91c2Ug
ZXZlbnRzLgotICAgIG1fZGVsZWdhdGUtPmNsZWFyQ29udGV4dE1lbnVEYXRhKCk7Ci0KLSAgICAv
LyBHZW5lcmF0ZSByaWdodCBtb3VzZSBkb3duIGFuZCB1cC4KLSAgICBXZWJNb3VzZUV2ZW50IGV2
ZW50OwotICAgIHByZXNzZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDsKLSAg
ICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZURvd24sIFdlYk1vdXNlRXZlbnQ6
OkJ1dHRvblJpZ2h0LCBsYXN0TW91c2VQb3MsICZldmVudCk7Ci0gICAgd2VidmlldygpLT5oYW5k
bGVJbnB1dEV2ZW50KGV2ZW50KTsKLQotICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6
Ok1vdXNlVXAsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0LCBsYXN0TW91c2VQb3MsICZldmVu
dCk7Ci0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLQotICAgIHByZXNz
ZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwotCi0gICAgV2ViQ29udGV4dE1l
bnVEYXRhKiBsYXN0Q29udGV4dE1lbnUgPSBtX2RlbGVnYXRlLT5sYXN0Q29udGV4dE1lbnVEYXRh
KCk7Ci0gICAgcmVzdWx0LT5zZXQoV2ViQmluZGluZ3M6Om1ha2VTdHJpbmdBcnJheShtYWtlTWVu
dUl0ZW1TdHJpbmdzRm9yKGxhc3RDb250ZXh0TWVudSwgbV9kZWxlZ2F0ZSkpKTsKLX0KLQotY2xh
c3MgTW91c2VEb3duVGFzazogcHVibGljIE1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+IHsKLXB1Ymxp
YzoKLSAgICBNb3VzZURvd25UYXNrKEV2ZW50U2VuZGVyKiBvYmosIGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJnKQotICAgICAgICA6IE1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+KG9iaiksIG1fYXJn
dW1lbnRzKGFyZykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0
LT5tb3VzZURvd24obV9hcmd1bWVudHMsIDApOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3BwQXJndW1l
bnRMaXN0IG1fYXJndW1lbnRzOwotfTsKLQotY2xhc3MgTW91c2VVcFRhc2s6IHB1YmxpYyBNZXRo
b2RUYXNrPEV2ZW50U2VuZGVyPiB7Ci1wdWJsaWM6Ci0gICAgTW91c2VVcFRhc2soRXZlbnRTZW5k
ZXIqIG9iaiwgY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmcpCi0gICAgICAgIDogTWV0aG9kVGFz
azxFdmVudFNlbmRlcj4ob2JqKSwgbV9hcmd1bWVudHMoYXJnKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPm1vdXNlVXAobV9hcmd1bWVudHMsIDApOyB9Ci0K
LXByaXZhdGU6Ci0gICAgQ3BwQXJndW1lbnRMaXN0IG1fYXJndW1lbnRzOwotfTsKLQotdm9pZCBF
dmVudFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNDbGljayhjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotICAgIHBvc3RUYXNrKG5ldyBNb3VzZURvd25UYXNrKHRoaXMsIGFyZ3VtZW50cykpOwot
ICAgIHBvc3RUYXNrKG5ldyBNb3VzZVVwVGFzayh0aGlzLCBhcmd1bWVudHMpKTsKLX0KLQotY2xh
c3MgS2V5RG93blRhc2sgOiBwdWJsaWMgTWV0aG9kVGFzazxFdmVudFNlbmRlcj4gewotcHVibGlj
OgotICAgIEtleURvd25UYXNrKEV2ZW50U2VuZGVyKiBvYmosIGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJnKQotICAgICAgICA6IE1ldGhvZFRhc2s8RXZlbnRTZW5kZXI+KG9iaiksIG1fYXJndW1l
bnRzKGFyZykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5r
ZXlEb3duKG1fYXJndW1lbnRzLCAwKTsgfQotCi1wcml2YXRlOgotICAgIENwcEFyZ3VtZW50TGlz
dCBtX2FyZ3VtZW50czsKLX07Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9u
b3VzS2V5RG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIHBvc3RUYXNrKG5ldyBLZXlE
b3duVGFzayh0aGlzLCBhcmd1bWVudHMpKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6YmVnaW5E
cmFnV2l0aEZpbGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgY3VycmVudERyYWdEYXRhLmluaXRpYWxpemUoKTsKLSAgICBWZWN0
b3I8c3RyaW5nPiBmaWxlcyA9IGFyZ3VtZW50c1swXS50b1N0cmluZ1ZlY3RvcigpOwotICAgIFZl
Y3RvcjxXZWJTdHJpbmc+IGFic29sdXRlRmlsZW5hbWVzOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgV2ViRHJhZ0RhdGE6Okl0ZW0gaXRl
bTsKLSAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9IFdlYkRyYWdEYXRhOjpJdGVtOjpTdG9yYWdl
VHlwZUZpbGVuYW1lOwotICAgICAgICBpdGVtLmZpbGVuYW1lRGF0YSA9IHdlYmtpdF9zdXBwb3J0
OjpHZXRBYnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4UGF0aChmaWxlc1tpXSk7Ci0gICAgICAgIGN1
cnJlbnREcmFnRGF0YS5hZGRJdGVtKGl0ZW0pOwotICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lcy5h
cHBlbmQoaXRlbS5maWxlbmFtZURhdGEpOwotICAgIH0KLSAgICBjdXJyZW50RHJhZ0RhdGEuc2V0
RmlsZXN5c3RlbUlkKHdlYmtpdF9zdXBwb3J0OjpSZWdpc3Rlcklzb2xhdGVkRmlsZVN5c3RlbShh
YnNvbHV0ZUZpbGVuYW1lcykpOwotICAgIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQgPSBXZWJL
aXQ6OldlYkRyYWdPcGVyYXRpb25Db3B5OwotCi0gICAgLy8gUHJvdmlkZSBhIGRyYWcgc291cmNl
LgotICAgIHdlYnZpZXcoKS0+ZHJhZ1RhcmdldERyYWdFbnRlcihjdXJyZW50RHJhZ0RhdGEsIGxh
c3RNb3VzZVBvcywgbGFzdE1vdXNlUG9zLCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkLCAwKTsK
LQotICAgIC8vIGRyYWdNb2RlIHNhdmVzIGV2ZW50cyBhbmQgdGhlbiByZXBsYXlzIHRoZW0gbGF0
ZXIuIFdlIGRvbid0IG5lZWQvd2FudCB0aGF0LgotICAgIGRyYWdNb2RlLnNldChmYWxzZSk7Ci0K
LSAgICAvLyBNYWtlIHRoZSByZXN0IG9mIGV2ZW50U2VuZGVyIHRoaW5rIGEgZHJhZyBpcyBpbiBw
cm9ncmVzcy4KLSAgICBwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdDsK
LQotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjphZGRUb3Vj
aFBvaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJUb3VjaFBvaW50IHRvdWNo
UG9pbnQ7Ci0gICAgdG91Y2hQb2ludC5zdGF0ZSA9IFdlYlRvdWNoUG9pbnQ6OlN0YXRlUHJlc3Nl
ZDsKLSAgICB0b3VjaFBvaW50LnBvc2l0aW9uID0gV2ViUG9pbnQoYXJndW1lbnRzWzBdLnRvSW50
MzIoKSwgYXJndW1lbnRzWzFdLnRvSW50MzIoKSk7Ci0gICAgdG91Y2hQb2ludC5zY3JlZW5Qb3Np
dGlvbiA9IHRvdWNoUG9pbnQucG9zaXRpb247Ci0KLSAgICBpbnQgbG93ZXN0SWQgPSAwOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hQb2ludHMuc2l6ZSgpOyBpKyspIHsKLSAgICAg
ICAgaWYgKHRvdWNoUG9pbnRzW2ldLmlkID09IGxvd2VzdElkKQotICAgICAgICAgICAgbG93ZXN0
SWQrKzsKLSAgICB9Ci0gICAgdG91Y2hQb2ludC5pZCA9IGxvd2VzdElkOwotICAgIHRvdWNoUG9p
bnRzLmFwcGVuZCh0b3VjaFBvaW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Y2xlYXJUb3Vj
aFBvaW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0g
ICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgdG91Y2hQb2ludHMuY2xlYXIoKTsKLX0KLQotdm9p
ZCBFdmVudFNlbmRlcjo6cmVsZWFzZVRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LQotICAgIGNvbnN0IHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAg
ICBBU1NFUlQoaW5kZXggPCB0b3VjaFBvaW50cy5zaXplKCkpOwotCi0gICAgV2ViVG91Y2hQb2lu
dCogdG91Y2hQb2ludCA9ICZ0b3VjaFBvaW50c1tpbmRleF07Ci0gICAgdG91Y2hQb2ludC0+c3Rh
dGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0ZVJlbGVhc2VkOwotfQotCi12b2lkIEV2ZW50U2VuZGVy
OjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBpbnQgbWFz
ayA9IDA7Ci0gICAgY29uc3Qgc3RyaW5nIGtleU5hbWUgPSBhcmd1bWVudHNbMF0udG9TdHJpbmco
KTsKLSAgICBpZiAoa2V5TmFtZSA9PSAic2hpZnQiKQotICAgICAgICBtYXNrID0gV2ViSW5wdXRF
dmVudDo6U2hpZnRLZXk7Ci0gICAgZWxzZSBpZiAoa2V5TmFtZSA9PSAiYWx0IikKLSAgICAgICAg
bWFzayA9IFdlYklucHV0RXZlbnQ6OkFsdEtleTsKLSAgICBlbHNlIGlmIChrZXlOYW1lID09ICJj
dHJsIikKLSAgICAgICAgbWFzayA9IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXk7Ci0gICAgZWxz
ZSBpZiAoa2V5TmFtZSA9PSAibWV0YSIpCi0gICAgICAgIG1hc2sgPSBXZWJJbnB1dEV2ZW50OjpN
ZXRhS2V5OwotCi0gICAgaWYgKGFyZ3VtZW50c1sxXS50b0Jvb2xlYW4oKSkKLSAgICAgICAgdG91
Y2hNb2RpZmllcnMgfD0gbWFzazsKLSAgICBlbHNlCi0gICAgICAgIHRvdWNoTW9kaWZpZXJzICY9
IH5tYXNrOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp1cGRhdGVUb3VjaFBvaW50KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50c1sw
XS50b0ludDMyKCk7Ci0gICAgQVNTRVJUKGluZGV4IDwgdG91Y2hQb2ludHMuc2l6ZSgpKTsKLQot
ICAgIFdlYlBvaW50IHBvc2l0aW9uKGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1sy
XS50b0ludDMyKCkpOwotICAgIFdlYlRvdWNoUG9pbnQqIHRvdWNoUG9pbnQgPSAmdG91Y2hQb2lu
dHNbaW5kZXhdOwotICAgIHRvdWNoUG9pbnQtPnN0YXRlID0gV2ViVG91Y2hQb2ludDo6U3RhdGVN
b3ZlZDsKLSAgICB0b3VjaFBvaW50LT5wb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIHRvdWNoUG9p
bnQtPnNjcmVlblBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OmNh
bmNlbFRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGNvbnN0IHVuc2ln
bmVkIGluZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKLSAgICBBU1NFUlQoaW5kZXggPCB0
b3VjaFBvaW50cy5zaXplKCkpOwotCi0gICAgV2ViVG91Y2hQb2ludCogdG91Y2hQb2ludCA9ICZ0
b3VjaFBvaW50c1tpbmRleF07Ci0gICAgdG91Y2hQb2ludC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50
OjpTdGF0ZUNhbmNlbGxlZDsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6c2VuZEN1cnJlbnRUb3Vj
aEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQ6OlR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KFdlYlRvdWNoRXZlbnQ6OnRvdWNoZXNMZW5ndGhDYXApID4gdG91
Y2hQb2ludHMuc2l6ZSgpKTsKLSAgICB3ZWJ2aWV3KCktPmxheW91dCgpOwotCi0gICAgV2ViVG91
Y2hFdmVudCB0b3VjaEV2ZW50OwotICAgIHRvdWNoRXZlbnQudHlwZSA9IHR5cGU7Ci0gICAgdG91
Y2hFdmVudC5tb2RpZmllcnMgPSB0b3VjaE1vZGlmaWVyczsKLSAgICB0b3VjaEV2ZW50LnRpbWVT
dGFtcFNlY29uZHMgPSBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKCk7Ci0gICAgdG91Y2hFdmVudC50
b3VjaGVzTGVuZ3RoID0gdG91Y2hQb2ludHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3VjaFBvaW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgdG91Y2hFdmVudC50b3Vj
aGVzW2ldID0gdG91Y2hQb2ludHNbaV07Ci0gICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50
KHRvdWNoRXZlbnQpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdWNoUG9pbnRz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYlRvdWNoUG9pbnQqIHRvdWNoUG9pbnQgPSAmdG91
Y2hQb2ludHNbaV07Ci0gICAgICAgIGlmICh0b3VjaFBvaW50LT5zdGF0ZSA9PSBXZWJUb3VjaFBv
aW50OjpTdGF0ZVJlbGVhc2VkKSB7Ci0gICAgICAgICAgICB0b3VjaFBvaW50cy5yZW1vdmUoaSk7
Ci0gICAgICAgICAgICAtLWk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdG91Y2hQb2lu
dC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0ZVN0YXRpb25hcnk7Ci0gICAgfQotfQotCi12
b2lkIEV2ZW50U2VuZGVyOjpoYW5kbGVNb3VzZVdoZWVsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQsIGJvb2wgY29udGludW91cykKLXsKLSAgICBy
ZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJn
dW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBGb3JjZSBhIGxheW91dCBoZXJlIGp1c3QgdG8gbWFrZSBzdXJl
IGV2ZXJ5IHBvc2l0aW9uIGhhcyBiZWVuCi0gICAgLy8gZGV0ZXJtaW5lZCBiZWZvcmUgd2Ugc2Vu
ZCBldmVudHMgKGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBtZXRob2RzCi0gICAgLy8gdGhhdCBz
ZW5kIGFuIGV2ZW50IGRvKS4KLSAgICB3ZWJ2aWV3KCktPmxheW91dCgpOwotCi0gICAgaW50IGhv
cml6b250YWwgPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOwotICAgIGludCB2ZXJ0aWNhbCA9IGFy
Z3VtZW50c1sxXS50b0ludDMyKCk7Ci0gICAgaW50IHBhZ2VkID0gZmFsc2U7Ci0gICAgaW50IGhh
c1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBmYWxzZTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID4gMiAmJiBhcmd1bWVudHNbMl0uaXNCb29sKCkpCi0gICAgICAgIHBhZ2VkID0gYXJndW1l
bnRzWzJdLnRvQm9vbGVhbigpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAzICYmIGFy
Z3VtZW50c1szXS5pc0Jvb2woKSkKLSAgICAgICAgaGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9
IGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKTsKLQotICAgIFdlYk1vdXNlV2hlZWxFdmVudCBldmVu
dDsKLSAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZVdoZWVsLCBwcmVzc2Vk
QnV0dG9uLCBsYXN0TW91c2VQb3MsICZldmVudCk7Ci0gICAgZXZlbnQud2hlZWxUaWNrc1ggPSBz
dGF0aWNfY2FzdDxmbG9hdD4oaG9yaXpvbnRhbCk7Ci0gICAgZXZlbnQud2hlZWxUaWNrc1kgPSBz
dGF0aWNfY2FzdDxmbG9hdD4odmVydGljYWwpOwotICAgIGV2ZW50LmRlbHRhWCA9IGV2ZW50Lndo
ZWVsVGlja3NYOwotICAgIGV2ZW50LmRlbHRhWSA9IGV2ZW50LndoZWVsVGlja3NZOwotICAgIGV2
ZW50LnNjcm9sbEJ5UGFnZSA9IHBhZ2VkOwotICAgIGV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdE
ZWx0YXMgPSBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzOwotCi0gICAgaWYgKGNvbnRpbnVvdXMp
IHsKLSAgICAgICAgZXZlbnQud2hlZWxUaWNrc1ggLz0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsK
LSAgICAgICAgZXZlbnQud2hlZWxUaWNrc1kgLz0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKLSAg
ICB9IGVsc2UgewotICAgICAgICBldmVudC5kZWx0YVggKj0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGlj
azsKLSAgICAgICAgZXZlbnQuZGVsdGFZICo9IHNjcm9sbGJhclBpeGVsc1BlclRpY2s7Ci0gICAg
fQotICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgRXZl
bnRTZW5kZXI6OnRvdWNoRW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBzZW5kQ3VycmVudFRvdWNoRXZl
bnQoV2ViSW5wdXRFdmVudDo6VG91Y2hFbmQpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0b3Vj
aE1vdmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAg
IHJlc3VsdC0+c2V0TnVsbCgpOwotICAgIHNlbmRDdXJyZW50VG91Y2hFdmVudChXZWJJbnB1dEV2
ZW50OjpUb3VjaE1vdmUpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjp0b3VjaFN0YXJ0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLSAgICBzZW5kQ3VycmVudFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hT
dGFydCk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6OnRvdWNoQ2FuY2VsKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsK
LSAgICBzZW5kQ3VycmVudFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hDYW5jZWwpOwot
fQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xsQmVnaW4oY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNl
dE51bGwoKTsKLSAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJl
Z2luLCBhcmd1bWVudHMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xsRW5k
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6
Okdlc3R1cmVTY3JvbGxFbmQsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdl
c3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBnZXN0dXJlRXZl
bnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZSwgYXJndW1lbnRzKTsKLX0KLQot
dm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotICAg
IGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwLCBhcmd1bWVudHMpOwotfQot
Ci12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlVGFwRG93bihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwotICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwRG93biwgYXJndW1l
bnRzKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcENhbmNlbChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFw
Q2FuY2VsLCBhcmd1bWVudHMpOwotfQotCi12b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlTG9uZ1By
ZXNzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZl
bnQ6Okdlc3R1cmVMb25nUHJlc3MsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRXZlbnRTZW5kZXI6
Omdlc3R1cmVUd29GaW5nZXJUYXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLSAgICBnZXN0dXJl
RXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVR3b0ZpbmdlclRhcCwgYXJndW1lbnRzKTsKLX0K
LQotdm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9sbEZpcnN0UG9pbnQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQt
PnNldE51bGwoKTsKLSAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1sw
XS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV2ViUG9pbnQgcG9pbnQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRz
WzFdLnRvSW50MzIoKSk7Ci0gICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uID0gcG9pbnQ7Ci19
Ci0KLXZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpUeXBlIHR5
cGUsIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQotewotICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc051bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJQb2ludCBwb2ludChhcmd1
bWVudHNbMF0udG9JbnQzMigpLCBhcmd1bWVudHNbMV0udG9JbnQzMigpKTsKLQotICAgIFdlYkdl
c3R1cmVFdmVudCBldmVudDsKLSAgICBldmVudC50eXBlID0gdHlwZTsKLQotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbFVwZGF0ZToKLSAg
ICAgICAgZXZlbnQuZGF0YS5zY3JvbGxVcGRhdGUuZGVsdGFYID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKLSAgICAgICAgZXZlbnQuZGF0YS5zY3JvbGxVcGRh
dGUuZGVsdGFZID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsK
LSAgICAgICAgZXZlbnQueCA9IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi54OwotICAgICAgICBl
dmVudC55ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLnk7Ci0gICAgICAgIG1fY3VycmVudEdl
c3R1cmVMb2NhdGlvbi54ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLnggKyBldmVudC5kYXRh
LnNjcm9sbFVwZGF0ZS5kZWx0YVg7Ci0gICAgICAgIG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi55
ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLnkgKyBldmVudC5kYXRhLnNjcm9sbFVwZGF0ZS5k
ZWx0YVk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJl
U2Nyb2xsQmVnaW46Ci0gICAgICAgIG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbiA9IFdlYlBvaW50
KHBvaW50LngsIHBvaW50LnkpOwotICAgICAgICBldmVudC54ID0gbV9jdXJyZW50R2VzdHVyZUxv
Y2F0aW9uLng7Ci0gICAgICAgIGV2ZW50LnkgPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5k
OgotICAgICAgICBldmVudC54ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLng7Ci0gICAgICAg
IGV2ZW50LnkgPSBtX2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwOgotICAgICAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA+PSAzKQotICAgICAgICAgICAgZXZlbnQuZGF0YS50YXAudGFwQ291bnQgPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgZXZlbnQuZGF0YS50YXAudGFwQ291bnQgPSAxOwotICAgICAgICBldmVudC54ID0g
cG9pbnQueDsKLSAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcERvd246Ci0gICAgICAgIGV2ZW50LnggPSBw
b2ludC54OwotICAgICAgICBldmVudC55ID0gcG9pbnQueTsKLSAgICAgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPj0gNCkgewotICAgICAgICAgICAgZXZlbnQuZGF0YS50YXBEb3duLndpZHRoID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1syXS50b0RvdWJsZSgpKTsKLSAgICAgICAgICAg
IGV2ZW50LmRhdGEudGFwRG93bi5oZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRz
WzNdLnRvRG91YmxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZVRhcENhbmNlbDoKLSAgICAgICAgZXZlbnQueCA9IHBvaW50Lng7
Ci0gICAgICAgIGV2ZW50LnkgPSBwb2ludC55OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFdl
YklucHV0RXZlbnQ6Okdlc3R1cmVMb25nUHJlc3M6Ci0gICAgICAgIGV2ZW50LnggPSBwb2ludC54
OwotICAgICAgICBldmVudC55ID0gcG9pbnQueTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJJbnB1dEV2ZW50OjpHZXN0dXJlVHdvRmluZ2VyVGFwOgotICAgICAgICBldmVudC54ID0gcG9p
bnQueDsKLSAgICAgICAgZXZlbnQueSA9IHBvaW50Lnk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGV2ZW50
Lmdsb2JhbFggPSBldmVudC54OwotICAgIGV2ZW50Lmdsb2JhbFkgPSBldmVudC55OwotICAgIGV2
ZW50LnRpbWVTdGFtcFNlY29uZHMgPSBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKCk7Ci0gICAgd2Vi
dmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6
Z2VzdHVyZUZsaW5nQ2FuY2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYgKCFhcmd1
bWVudHMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJHZXN0dXJlRXZlbnQgZXZl
bnQ7Ci0gICAgZXZlbnQudHlwZSA9IFdlYklucHV0RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsK
LSAgICBldmVudC50aW1lU3RhbXBTZWNvbmRzID0gZ2V0Q3VycmVudEV2ZW50VGltZVNlYygpOwot
ICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgRXZlbnRT
ZW5kZXI6Omdlc3R1cmVGbGluZ1N0YXJ0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0gICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCA0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgaWYgKCFhcmd1bWVudHNbaV0uaXNOdW1iZXIoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgIFdlYkdlc3R1cmVFdmVudCBldmVudDsKLSAgICBl
dmVudC50eXBlID0gV2ViSW5wdXRFdmVudDo6R2VzdHVyZUZsaW5nU3RhcnQ7Ci0KLSAgICBldmVu
dC54ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKLSAgICBl
dmVudC55ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsKLSAg
ICBldmVudC5nbG9iYWxYID0gZXZlbnQueDsKLSAgICBldmVudC5nbG9iYWxZID0gZXZlbnQueTsK
LQotICAgIGV2ZW50LmRhdGEuZmxpbmdTdGFydC52ZWxvY2l0eVggPSBzdGF0aWNfY2FzdDxmbG9h
dD4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwotICAgIGV2ZW50LmRhdGEuZmxpbmdTdGFydC52
ZWxvY2l0eVkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzNdLnRvRG91YmxlKCkpOwot
ICAgIGV2ZW50LnRpbWVTdGFtcFNlY29uZHMgPSBnZXRDdXJyZW50RXZlbnRUaW1lU2VjKCk7Ci0g
ICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKLX0KLQotLy8KLS8vIFVuaW1w
bGVtZW50ZWQgc3R1YnMKLS8vCi0KLXZvaWQgRXZlbnRTZW5kZXI6OmVuYWJsZURPTVVJRXZlbnRM
b2dnaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAg
ICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6ZmlyZUtleWJvYXJk
RXZlbnRzVG9FbGVtZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBFdmVudFNlbmRlcjo6Y2xl
YXJLaWxsUmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17
Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0V2ZW50U2VuZGVyLmggYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0V2ZW50U2VuZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGU2Nzk0YTA3NzBiZDg4Zjc0ZmU1MGNhMmY3MTY2MjFkNDE5ODc5Y2MuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9FdmVudFNlbmRlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
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
IERBTUFHRS4KLSAqLwotCi0vKgotICBFdmVudFNlbmRlciBjbGFzczoKLSAgQm91bmQgdG8gYSBK
YXZhU2NyaXB0IHdpbmRvdy5ldmVudFNlbmRlciBvYmplY3QgdXNpbmcKLSAgQ3BwQm91bmRDbGFz
czo6YmluZFRvSmF2YXNjcmlwdCgpLCB0aGlzIGFsbG93cyBsYXlvdXQgdGVzdHMgdG8gZmlyZSBE
T00gZXZlbnRzLgotKi8KLQotI2lmbmRlZiBFdmVudFNlbmRlcl9oCi0jZGVmaW5lIEV2ZW50U2Vu
ZGVyX2gKLQotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLSNpbmNsdWRlICJUYXNrLmgiCi0j
aW5jbHVkZSAiV2ViRHJhZ09wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIK
LSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJQb2ludC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNs
YXNzIFdlYkRyYWdEYXRhOwotY2xhc3MgV2ViVmlldzsKLX0KLQotY2xhc3MgVGVzdERlbGVnYXRl
OwotCi1jbGFzcyBFdmVudFNlbmRlciA6IHB1YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoK
LSAgICBFdmVudFNlbmRlcigpOwotCi0gICAgdm9pZCBzZXREZWxlZ2F0ZShUZXN0RGVsZWdhdGUq
IGRlbGVnYXRlKSB7IG1fZGVsZWdhdGUgPSBkZWxlZ2F0ZTsgfQotICAgIHZvaWQgc2V0V2ViVmll
dyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsgbV93ZWJWaWV3ID0gd2ViVmlldzsgfQotCi0g
ICAgLy8gUmVzZXRzIHNvbWUgc3RhdGljIHZhcmlhYmxlIHN0YXRlLgotICAgIHZvaWQgcmVzZXQo
KTsKLQotICAgIC8vIFNpbXVsYXRlIGRyYWcmZHJvcCBzeXN0ZW0gY2FsbC4KLSAgICB2b2lkIGRv
RHJhZ0Ryb3AoY29uc3QgV2ViS2l0OjpXZWJEcmFnRGF0YSYsIFdlYktpdDo6V2ViRHJhZ09wZXJh
dGlvbnNNYXNrKTsKLQotICAgIC8vIFRlc3QgaGVscGVyIGZvciBkcmFnZ2luZyBvdXQgaW1hZ2Vz
LgotICAgIHZvaWQgZHVtcEZpbGVuYW1lQmVpbmdEcmFnZ2VkKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIEpTIGNhbGxiYWNrIG1ldGhvZHMuCi0gICAgdm9p
ZCBtb3VzZURvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZv
aWQgbW91c2VVcChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCBtb3VzZU1vdmVUbyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBsZWFwRm9yd2FyZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBrZXlEb3duKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGRpc3BhdGNoTWVzc2FnZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7Ci0gICAgLy8gRklYTUU6IFRoZXNlIGFyZW4ndCByZWFsbHkgZXZlbnRzLiBUaGV5IHNob3Vs
ZCBiZSBtb3ZlZCB0byBsYXlvdXQgY29udHJvbGxlci4KLSAgICB2b2lkIHRleHRab29tSW4oY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgdGV4dFpvb21PdXQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgem9vbVBhZ2VJ
bihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCB6b29tUGFn
ZU91dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY2Fs
ZVBhZ2VCeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0KLSAgICB2b2lk
IG1vdXNlU2Nyb2xsQnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAg
IHZvaWQgY29udGludW91c01vdXNlU2Nyb2xsQnkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwotICAgIHZvaWQgc2NoZWR1bGVBc3luY2hyb25vdXNDbGljayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBzY2hlZHVsZUFzeW5jaHJvbm91
c0tleURvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
YmVnaW5EcmFnV2l0aEZpbGVzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICBDcHBWYXJpYW50IGRyYWdNb2RlOwotCi0gICAgdm9pZCBhZGRUb3VjaFBvaW50KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGNhbmNlbFRvdWNoUG9p
bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2xlYXJU
b3VjaFBvaW50cyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCByZWxlYXNlVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
Ci0gICAgdm9pZCBzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIHRvdWNoQ2FuY2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHRvdWNoRW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHRvdWNoTW92ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7Ci0gICAgdm9pZCB0b3VjaFN0YXJ0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHVwZGF0ZVRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgdm9pZCBnZXN0dXJlRmxpbmdDYW5jZWwoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZUZsaW5n
U3RhcnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2Vz
dHVyZVNjcm9sbEJlZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIGdlc3R1cmVTY3JvbGxFbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgZ2VzdHVyZVNjcm9sbEZpcnN0UG9pbnQoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZ2VzdHVyZVNjcm9sbFVwZGF0ZShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBnZXN0dXJlVGFwKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGdlc3R1cmVUYXBEb3du
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGdlc3R1cmVU
YXBDYW5jZWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQg
Z2VzdHVyZUxvbmdQcmVzcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0g
ICAgdm9pZCBnZXN0dXJlVHdvRmluZ2VyVGFwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGdlc3R1cmVFdmVudChXZWJLaXQ6OldlYklucHV0RXZlbnQ6OlR5
cGUsIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYpOwotCi0gICAgLy8gVW5pbXBsZW1lbnRlZCBzdHVi
cwotICAgIHZvaWQgY29udGV4dENsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKLSAgICB2b2lkIGVuYWJsZURPTVVJRXZlbnRMb2dnaW5nKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIGZpcmVLZXlib2FyZEV2ZW50c1RvRWxlbWVu
dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjbGVhcktp
bGxSaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotICAgIC8vIFBy
b3BlcnRpZXMgdXNlZCBpbiBsYXlvdXQgdGVzdHMuCi0jaWYgZGVmaW5lZChPU19XSU4pCi0gICAg
Q3BwVmFyaWFudCB3bUtleURvd247Ci0gICAgQ3BwVmFyaWFudCB3bUtleVVwOwotICAgIENwcFZh
cmlhbnQgd21DaGFyOwotICAgIENwcFZhcmlhbnQgd21EZWFkQ2hhcjsKLSAgICBDcHBWYXJpYW50
IHdtU3lzS2V5RG93bjsKLSAgICBDcHBWYXJpYW50IHdtU3lzS2V5VXA7Ci0gICAgQ3BwVmFyaWFu
dCB3bVN5c0NoYXI7Ci0gICAgQ3BwVmFyaWFudCB3bVN5c0RlYWRDaGFyOwotI2VuZGlmCi0KLSAg
ICBUYXNrTGlzdCogdGFza0xpc3QoKSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQotCi1wcml2YXRl
OgotICAgIFdlYktpdDo6V2ViVmlldyogd2VidmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQot
Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGRyYWdNb2RlIGlzIHRydWUuCi0gICAgYm9vbCBpc0Ry
YWdNb2RlKCkgeyByZXR1cm4gZHJhZ01vZGUuaXNCb29sKCkgJiYgZHJhZ01vZGUudG9Cb29sZWFu
KCk7IH0KLQotICAgIC8vIFNvbWV0aW1lcyB3ZSBxdWV1ZSB1cCBtb3VzZSBtb3ZlIGFuZCBtb3Vz
ZSB1cCBldmVudHMgZm9yIGRyYWcgZHJvcAotICAgIC8vIGhhbmRsaW5nIHB1cnBvc2VzLiBUaGVz
ZSBtZXRob2RzIGRpc3BhdGNoIHRoZSBldmVudC4KLSAgICB2b2lkIGRvTW91c2VNb3ZlKGNvbnN0
IFdlYktpdDo6V2ViTW91c2VFdmVudCYpOwotICAgIHZvaWQgZG9Nb3VzZVVwKGNvbnN0IFdlYktp
dDo6V2ViTW91c2VFdmVudCYpOwotICAgIHN0YXRpYyB2b2lkIGRvTGVhcEZvcndhcmQoaW50IG1p
bGxpc2Vjb25kcyk7Ci0gICAgdm9pZCByZXBsYXlTYXZlZEV2ZW50cygpOwotCi0gICAgLy8gSGVs
cGVyIHRvIHJldHVybiB0aGUgYnV0dG9uIHR5cGUgZ2l2ZW4gYSBidXR0b24gY29kZQotICAgIHN0
YXRpYyBXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBnZXRCdXR0b25UeXBlRnJvbUJ1dHRv
bk51bWJlcihpbnQpOwotCi0gICAgLy8gSGVscGVyIHRvIGV4dHJhY3QgdGhlIGJ1dHRvbiBudW1i
ZXIgZnJvbSB0aGUgb3B0aW9uYWwgYXJndW1lbnQgaW4KLSAgICAvLyBtb3VzZURvd24gYW5kIG1v
dXNlVXAKLSAgICBzdGF0aWMgaW50IGdldEJ1dHRvbk51bWJlckZyb21TaW5nbGVBcmcoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0Jik7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmll
ZCBrZXkgY29kZSBwYXNzZWQgaW4gbmVlZHMgYSBzaGlmdCBrZXkKLSAgICAvLyBtb2RpZmllciB0
byBiZSBwYXNzZWQgaW50byB0aGUgZ2VuZXJhdGVkIGV2ZW50LgotICAgIGJvb2wgbmVlZHNTaGlm
dE1vZGlmaWVyKGludCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oV2Vi
S2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b24pOwotCi0gICAgLy8gQ29tcG9zZSBhIHRvdWNoIGV2
ZW50IGZyb20gdGhlIGN1cnJlbnQgdG91Y2ggcG9pbnRzIGFuZCBzZW5kIGl0LgotICAgIHZvaWQg
c2VuZEN1cnJlbnRUb3VjaEV2ZW50KGNvbnN0IFdlYktpdDo6V2ViSW5wdXRFdmVudDo6VHlwZSk7
Ci0KLSAgICAvLyBIYW5kbGUgYSByZXF1ZXN0IHRvIHNlbmQgYSB3aGVlbCBldmVudC4KLSAgICB2
b2lkIGhhbmRsZU1vdXNlV2hlZWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCos
IGJvb2wgY29udGludW91cyk7Ci0KLSAgICBUYXNrTGlzdCBtX3Rhc2tMaXN0OwotCi0gICAgVGVz
dERlbGVnYXRlKiBtX2RlbGVnYXRlOwotICAgIFdlYktpdDo6V2ViVmlldyogbV93ZWJWaWV3Owot
Ci0gICAgLy8gTG9jYXRpb24gb2YgdGhlIHRvdWNoIHBvaW50IHRoYXQgaW5pdGlhdGVkIGEgZ2Vz
dHVyZS4KLSAgICBXZWJLaXQ6OldlYlBvaW50IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbjsKLQot
ICAgIC8vIExvY2F0aW9uIG9mIGxhc3QgbW91c2VNb3ZlVG8gZXZlbnQuCi0gICAgc3RhdGljIFdl
YktpdDo6V2ViUG9pbnQgbGFzdE1vdXNlUG9zOwotCi0gICAgLy8gQ3VycmVudGx5IHByZXNzZWQg
bW91c2UgYnV0dG9uIChMZWZ0L1JpZ2h0L01pZGRsZSBvciBOb25lKQotICAgIHN0YXRpYyBXZWJL
aXQ6OldlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBwcmVzc2VkQnV0dG9uOwotCi0gICAgLy8gVGhlIGxh
c3QgYnV0dG9uIG51bWJlciBwYXNzZWQgdG8gbW91c2VEb3duIGFuZCBtb3VzZVVwLgotICAgIC8v
IFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsaWNrIGNvdW50IGNvbnRpbnVlcyB0bwot
ICAgIC8vIGluY3JlbWVudCBvciBub3QuCi0gICAgc3RhdGljIFdlYktpdDo6V2ViTW91c2VFdmVu
dDo6QnV0dG9uIGxhc3RCdXR0b25UeXBlOwotfTsKLQotI2VuZGlmIC8vIEV2ZW50U2VuZGVyX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvR2Ft
ZXBhZENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9HYW1lcGFkQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGNiMzZiZmRmYmJiMmUyZTU4OTc5YjZmMzBmM2Q2Y2QxYjVmNWQ3MzguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9HYW1lcGFkQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
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
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1lcGFkQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIlRlc3REZWxlZ2F0ZS5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwotCi1HYW1lcGFkQ29udHJvbGxlcjo6R2FtZXBhZENvbnRyb2xsZXIoKQotewotICAgIGJp
bmRNZXRob2QoImNvbm5lY3QiLCAmR2FtZXBhZENvbnRyb2xsZXI6OmNvbm5lY3QpOwotICAgIGJp
bmRNZXRob2QoImRpc2Nvbm5lY3QiLCAmR2FtZXBhZENvbnRyb2xsZXI6OmRpc2Nvbm5lY3QpOwot
ICAgIGJpbmRNZXRob2QoInNldElkIiwgJkdhbWVwYWRDb250cm9sbGVyOjpzZXRJZCk7Ci0gICAg
YmluZE1ldGhvZCgic2V0QnV0dG9uQ291bnQiLCAmR2FtZXBhZENvbnRyb2xsZXI6OnNldEJ1dHRv
bkNvdW50KTsKLSAgICBiaW5kTWV0aG9kKCJzZXRCdXR0b25EYXRhIiwgJkdhbWVwYWRDb250cm9s
bGVyOjpzZXRCdXR0b25EYXRhKTsKLSAgICBiaW5kTWV0aG9kKCJzZXRBeGlzQ291bnQiLCAmR2Ft
ZXBhZENvbnRyb2xsZXI6OnNldEF4aXNDb3VudCk7Ci0gICAgYmluZE1ldGhvZCgic2V0QXhpc0Rh
dGEiLCAmR2FtZXBhZENvbnRyb2xsZXI6OnNldEF4aXNEYXRhKTsKLQotICAgIGJpbmRGYWxsYmFj
a01ldGhvZCgmR2FtZXBhZENvbnRyb2xsZXI6OmZhbGxiYWNrQ2FsbGJhY2spOwotCi0gICAgcmVz
ZXQoKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6YmluZFRvSmF2YXNjcmlwdChXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgY2xhc3NuYW1lKQotewotICAgIENwcEJvdW5k
Q2xhc3M6OmJpbmRUb0phdmFzY3JpcHQoZnJhbWUsIGNsYXNzbmFtZSk7Ci19Ci0KLXZvaWQgR2Ft
ZXBhZENvbnRyb2xsZXI6OnNldERlbGVnYXRlKFRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCi17Ci0g
ICAgbV9kZWxlZ2F0ZSA9IGRlbGVnYXRlOwotfQotCi12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpy
ZXNldCgpCi17Ci0gICAgbWVtc2V0KCZtX2dhbWVwYWRzLCAwLCBzaXplb2YobV9nYW1lcGFkcykp
OwotfQotCi12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpjb25uZWN0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpIHsKLSAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGFyZ3MiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50MzIoKTsKLSAgICBpZiAoaW5kZXgg
PCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkczo6aXRl
bXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRl
eF0uY29ubmVjdGVkID0gdHJ1ZTsKLSAgICBtX2dhbWVwYWRzLmxlbmd0aCA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2Fw
OyArK2kpCi0gICAgICAgIGlmIChtX2dhbWVwYWRzLml0ZW1zW2ldLmNvbm5lY3RlZCkKLSAgICAg
ICAgICAgIG1fZ2FtZXBhZHMubGVuZ3RoID0gaSArIDE7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2Ft
ZXBhZERhdGEobV9nYW1lcGFkcyk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQg
R2FtZXBhZENvbnRyb2xsZXI6OmRpc2Nvbm5lY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdz
LCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkgewotICAg
ICAgICBwcmludGYoIkludmFsaWQgYXJncyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGludCBpbmRleCA9IGFyZ3NbMF0udG9JbnQzMigpOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5k
ZXggPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENh
cCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5jb25uZWN0
ZWQgPSBmYWxzZTsKLSAgICBtX2dhbWVwYWRzLmxlbmd0aCA9IDA7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwOyArK2kpCi0g
ICAgICAgIGlmIChtX2dhbWVwYWRzLml0ZW1zW2ldLmNvbm5lY3RlZCkKLSAgICAgICAgICAgIG1f
Z2FtZXBhZHMubGVuZ3RoID0gaSArIDE7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2FtZXBhZERhdGEo
bV9nYW1lcGFkcyk7Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgR2FtZXBhZENv
bnRyb2xsZXI6OnNldElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCog
cmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpIHsKLSAgICAgICAgcHJpbnRmKCJJ
bnZhbGlkIGFyZ3MiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgaW5kZXggPSBh
cmdzWzBdLnRvSW50MzIoKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19j
YXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQotICAgICAgICBy
ZXR1cm47Ci0gICAgc3RkOjpzdHJpbmcgc3JjID0gYXJnc1sxXS50b1N0cmluZygpOwotICAgIGNv
bnN0IGNoYXIqIHAgPSBzcmMuY19zdHIoKTsKLSAgICBtZW1zZXQobV9nYW1lcGFkcy5pdGVtc1tp
bmRleF0uaWQsIDAsIHNpemVvZihtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5pZCkpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7ICpwICYmIGkgPCBXZWJLaXQ6OldlYkdhbWVwYWQ6OmlkTGVuZ3Ro
Q2FwIC0gMTsgKytpKQotICAgICAgICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5pZFtpXSA9ICpw
Kys7Ci0gICAgbV9kZWxlZ2F0ZS0+c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7Ci0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldEJ1dHRvbkNv
dW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQotewot
ICAgIGlmIChhcmdzLnNpemUoKSA8IDIpIHsKLSAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGFyZ3Mi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50
MzIoKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2Vi
S2l0OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAg
aW50IGJ1dHRvbnMgPSBhcmdzWzFdLnRvSW50MzIoKTsKLSAgICBpZiAoYnV0dG9ucyA8IDAgfHwg
YnV0dG9ucyA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZDo6YnV0dG9uc0xl
bmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5i
dXR0b25zTGVuZ3RoID0gYnV0dG9uczsKLSAgICBtX2RlbGVnYXRlLT5zZXRHYW1lcGFkRGF0YSht
X2dhbWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29u
dHJvbGxlcjo6c2V0QnV0dG9uRGF0YShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAzKSB7Ci0gICAgICAgIHBy
aW50ZigiSW52YWxpZCBhcmdzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IGlu
ZGV4ID0gYXJnc1swXS50b0ludDMyKCk7Ci0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBz
dGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGludCBidXR0b24gPSBhcmdzWzFdLnRvSW50MzIoKTsKLSAgICBp
ZiAoYnV0dG9uIDwgMCB8fCBidXR0b24gPj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdh
bWVwYWQ6OmJ1dHRvbnNMZW5ndGhDYXApKQotICAgICAgICByZXR1cm47Ci0gICAgZG91YmxlIGRh
dGEgPSBhcmdzWzJdLnRvRG91YmxlKCk7Ci0gICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uYnV0
dG9uc1tidXR0b25dID0gZGF0YTsKLSAgICBtX2RlbGVnYXRlLT5zZXRHYW1lcGFkRGF0YShtX2dh
bWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJv
bGxlcjo6c2V0QXhpc0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFu
dCogcmVzdWx0KQotewotICAgIGlmIChhcmdzLnNpemUoKSA8IDIpIHsKLSAgICAgICAgcHJpbnRm
KCJJbnZhbGlkIGFyZ3MiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQgaW5kZXgg
PSBhcmdzWzBdLnRvSW50MzIoKTsKLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRp
Y19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQotICAgICAg
ICByZXR1cm47Ci0gICAgaW50IGF4ZXMgPSBhcmdzWzFdLnRvSW50MzIoKTsKLSAgICBpZiAoYXhl
cyA8IDAgfHwgYXhlcyA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZDo6YXhl
c0xlbmd0aENhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4
XS5heGVzTGVuZ3RoID0gYXhlczsKLSAgICBtX2RlbGVnYXRlLT5zZXRHYW1lcGFkRGF0YShtX2dh
bWVwYWRzKTsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLX0KLQotdm9pZCBHYW1lcGFkQ29udHJv
bGxlcjo6c2V0QXhpc0RhdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50
KiByZXN1bHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykgewotICAgICAgICBwcmludGYo
IkludmFsaWQgYXJncyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCBpbmRleCA9
IGFyZ3NbMF0udG9JbnQzMigpOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGlj
X2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpbnQgYXhpcyA9IGFyZ3NbMV0udG9JbnQzMigpOwotICAgIGlmIChheGlz
IDwgMCB8fCBheGlzID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkOjpheGVz
TGVuZ3RoQ2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSBkYXRhID0gYXJnc1syXS50
b0RvdWJsZSgpOwotICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmF4ZXNbYXhpc10gPSBkYXRh
OwotICAgIG1fZGVsZWdhdGUtPnNldEdhbWVwYWREYXRhKG1fZ2FtZXBhZHMpOwotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotfQotCi12b2lkIEdhbWVwYWRDb250cm9sbGVyOjpmYWxsYmFja0NhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICBw
cmludGYoIkNPTlNPTEUgTUVTU0FHRTogSmF2YVNjcmlwdCBFUlJPUjogdW5rbm93biBtZXRob2Qg
Y2FsbGVkIG9uICIKLSAgICAgICAgICAgIkdhbWVwYWRDb250cm9sbGVyXG4iKTsKLSAgICByZXN1
bHQtPnNldE51bGwoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RSdW5uZXIvR2FtZXBhZENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvR2FtZXBhZENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGU2NWU5MjJmNDkxNTAwOGRiNTcxNDk3ZmUzOTkzNTcxOWIyMjEzYS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL0dhbWVwYWRDb250cm9sbGVyLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHYW1lcGFkQ29udHJvbGxlcl9oCi0jZGVm
aW5lIEdhbWVwYWRDb250cm9sbGVyX2gKLQotI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLSNp
bmNsdWRlICJwbGF0Zm9ybS9XZWJHYW1lcGFkcy5oIgotCi1jbGFzcyBUZXN0RGVsZWdhdGU7Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViR2FtZXBhZHM7Ci1jbGFzcyBXZWJGcmFtZTsK
LX0KLQotY2xhc3MgR2FtZXBhZENvbnRyb2xsZXIgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7Ci1w
dWJsaWM6Ci0gICAgR2FtZXBhZENvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgYmluZFRvSmF2YXNj
cmlwdChXZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNsYXNzbmFt
ZSk7Ci0gICAgdm9pZCBzZXREZWxlZ2F0ZShUZXN0RGVsZWdhdGUqKTsKLSAgICB2b2lkIHJlc2V0
KCk7Ci0KLXByaXZhdGU6Ci0gICAgLy8gQm91bmQgbWV0aG9kcyBhbmQgcHJvcGVydGllcwotICAg
IHZvaWQgY29ubmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAg
dm9pZCBkaXNjb25uZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAg
ICB2b2lkIHNldElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2
b2lkIHNldEJ1dHRvbkNvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
LSAgICB2b2lkIHNldEJ1dHRvbkRhdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwotICAgIHZvaWQgc2V0QXhpc0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIHNldEF4aXNEYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwotCi0gICAgV2ViS2l0OjpXZWJHYW1lcGFkcyBtX2dhbWVwYWRz
OwotCi0gICAgVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOwotfTsKLQotI2VuZGlmIC8vIEdhbWVw
YWRDb250cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvVGFzay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL1Rhc2suY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODBiZWVmMzQ5
OTM3ZDYzNTQwZGVmYTkwNjUzMWY2MTA4ZDc1YTUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvVGFzay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlRhc2suaCIKLQotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1
ZGUgInBsYXRmb3JtL1dlYktpdFBsYXRmb3JtU3VwcG9ydC5oIgotCi1XZWJUYXNrOjpXZWJUYXNr
KFRhc2tMaXN0KiBsaXN0KQotICAgIDogbV90YXNrTGlzdChsaXN0KQotewotICAgIG1fdGFza0xp
c3QtPnJlZ2lzdGVyVGFzayh0aGlzKTsKLX0KLQotV2ViVGFzazo6fldlYlRhc2soKQotewotICAg
IGlmIChtX3Rhc2tMaXN0KQotICAgICAgICBtX3Rhc2tMaXN0LT51bnJlZ2lzdGVyVGFzayh0aGlz
KTsKLX0KLQotdm9pZCBUYXNrTGlzdDo6dW5yZWdpc3RlclRhc2soV2ViVGFzayogdGFzaykKLXsK
LSAgICBzaXplX3QgaW5kZXggPSBtX3Rhc2tzLmZpbmQodGFzayk7Ci0gICAgaWYgKGluZGV4ICE9
IG5vdEZvdW5kKQotICAgICAgICBtX3Rhc2tzLnJlbW92ZShpbmRleCk7Ci19Ci0KLXZvaWQgVGFz
a0xpc3Q6OnJldm9rZUFsbCgpCi17Ci0gICAgd2hpbGUgKCFtX3Rhc2tzLmlzRW1wdHkoKSkKLSAg
ICAgICAgbV90YXNrc1swXS0+Y2FuY2VsKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludm9rZVRhc2so
dm9pZCogY29udGV4dCkKLXsKLSAgICBXZWJUYXNrKiB0YXNrID0gc3RhdGljX2Nhc3Q8V2ViVGFz
ayo+KGNvbnRleHQpOwotICAgIHRhc2stPnJ1bigpOwotICAgIGRlbGV0ZSB0YXNrOwotfQotCi12
b2lkIHBvc3RUYXNrKFdlYlRhc2sqIHRhc2spCi17Ci0gICAgV2ViS2l0Ojp3ZWJLaXRQbGF0Zm9y
bVN1cHBvcnQoKS0+Y2FsbE9uTWFpblRocmVhZChpbnZva2VUYXNrLCBzdGF0aWNfY2FzdDx2b2lk
Kj4odGFzaykpOwotfQotCi12b2lkIHBvc3REZWxheWVkVGFzayhXZWJUYXNrKiB0YXNrLCBpbnQ2
NF90IG1zKQotewotICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2sodGFzaywgbXMp
OwotfQotCi0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvVGFzay5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9U
YXNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMzJjNDcyYjI3NTA0ZTVmYjYw
OGQ2YmU0MDFmZGE2ODgwYjk3NDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9UYXNr
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
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
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUYXNrX2gKLSNkZWZpbmUg
VGFza19oCi0KLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLWNsYXNzIFRh
c2tMaXN0OwotCi0vLyBXZWJUYXNrIHJlcHJlc2VudHMgYSB0YXNrIHdoaWNoIGNhbiBydW4gYnkg
cG9zdFRhc2soKSBvciBwb3N0RGVsYXllZFRhc2soKS4KLS8vIGl0IGlzIG5hbWVkICJXZWJUYXNr
Iiwgbm90ICJUYXNrIiwgdG8gYXZvaWQgY29uZmxpc3Qgd2l0aCBiYXNlL3Rhc2suaC4KLWNsYXNz
IFdlYlRhc2sgOiBwdWJsaWMgd2Via2l0X3N1cHBvcnQ6OlRhc2tBZGFwdG9yIHsKLXB1YmxpYzoK
LSAgICBXZWJUYXNrKFRhc2tMaXN0Kik7Ci0gICAgLy8gVGhlIG1haW4gY29kZSBvZiB0aGlzIHRh
c2suCi0gICAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgcnVuKCkgc2hvdWxkIHJldHVybiBpbW1l
ZGlhdGVseSBpZiBjYW5jZWwoKSB3YXMgY2FsbGVkLgotICAgIHZpcnR1YWwgdm9pZCBydW4oKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsKLSAgICB2aXJ0dWFsIH5XZWJUYXNr
KCk7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIFJ1bigpIHsgcnVuKCk7IH0KLQotcHJv
dGVjdGVkOgotICAgIFRhc2tMaXN0KiBtX3Rhc2tMaXN0OwotfTsKLQotY2xhc3MgVGFza0xpc3Qg
ewotcHVibGljOgotICAgIFRhc2tMaXN0KCkgeyB9Ci0gICAgflRhc2tMaXN0KCkgeyByZXZva2VB
bGwoKTsgfQotICAgIHZvaWQgcmVnaXN0ZXJUYXNrKFdlYlRhc2sqIHRhc2spIHsgbV90YXNrcy5h
cHBlbmQodGFzayk7IH0KLSAgICB2b2lkIHVucmVnaXN0ZXJUYXNrKFdlYlRhc2sqKTsKLSAgICB2
b2lkIHJldm9rZUFsbCgpOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxXZWJUYXNrKj4gbV90YXNr
czsKLX07Ci0KLS8vIEEgdGFzayBjb250YWluaW5nIGFuIG9iamVjdCBwb2ludGVyIG9mIGNsYXNz
IFQuIElzIGlzIHN1cHBvc2VkIHRoYXQKLS8vIHJ1bmlmVmFsaWQoKSBjYWxscyBhIG1lbWJlciBm
dW5jdGlvbiBvZiB0aGUgb2JqZWN0IHBvaW50ZXIuCi0vLyBDbGFzcyBUIG11c3QgaGF2ZSAiVGFz
a0xpc3QqIHRhc2tMaXN0KCkiLgotdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTWV0aG9kVGFzazog
cHVibGljIFdlYlRhc2sgewotcHVibGljOgotICAgIE1ldGhvZFRhc2soVCogb2JqZWN0KTogV2Vi
VGFzayhvYmplY3QtPnRhc2tMaXN0KCkpLCBtX29iamVjdChvYmplY3QpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBydW4oKQotICAgIHsKLSAgICAgICAgaWYgKG1fb2JqZWN0KQotICAgICAgICAgICAg
cnVuSWZWYWxpZCgpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsKCkKLSAgICB7Ci0g
ICAgICAgIG1fb2JqZWN0ID0gMDsKLSAgICAgICAgbV90YXNrTGlzdC0+dW5yZWdpc3RlclRhc2so
dGhpcyk7Ci0gICAgICAgIG1fdGFza0xpc3QgPSAwOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cnVuSWZWYWxpZCgpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIFQqIG1fb2JqZWN0OwotfTsKLQot
dm9pZCBwb3N0VGFzayhXZWJUYXNrKik7Ci12b2lkIHBvc3REZWxheWVkVGFzayhXZWJUYXNrKiwg
aW50NjRfdCBtcyk7Ci0KLSNlbmRpZiAvLyBUYXNrX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdERlbGVnYXRlLmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3REZWxlZ2F0ZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1OTllMTFkNGM2MTM1OTQ5NDhiNzNjOTA2YzEyMmMzMzZjMTA5
ZGNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdERlbGVnYXRlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXN0RGVsZWdhdGVfaAotI2RlZmluZSBU
ZXN0RGVsZWdhdGVfaAotCi0jaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCi0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLXN0cnVjdCBXZWJDb250ZXh0
TWVudURhdGE7Ci1jbGFzcyBXZWJHYW1lcGFkczsKLX0KLQotY2xhc3MgVGVzdERlbGVnYXRlIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb250ZXh0TWVudURhdGEoKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNsZWFyRWRpdENvbW1hbmQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbGxTcGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB3b3Jk
LCBWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+KiBzdWdnZXN0aW9ucykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRFZGl0Q29tbWFuZChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qgc3Rk
OjpzdHJpbmcmIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OldlYkNvbnRleHRNZW51
RGF0YSogbGFzdENvbnRleHRNZW51RGF0YSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0R2FtZXBhZERhdGEoY29uc3QgV2ViS2l0OjpXZWJHYW1lcGFkcyYpID0gMDsKLX07Ci0KLSNl
bmRpZiAvLyBUZXN0RGVsZWdhdGVfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9UZXN0SW50ZXJmYWNlcy5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTZlNjI1ZmFmZWEzYzgyZTFmNjQ0ZTNhMmZmNjk3OTc1MzIwMDY2
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJbnRlcmZhY2VzLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRlc3RJbnRlcmZhY2VzLmgiCi0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKLSNpbmNsdWRlICJHYW1lcGFkQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJTdHJpbmcuaCIKLQotdXNpbmcgV2ViS2l0OjpXZWJGcmFtZTsKLXVzaW5nIFdl
YktpdDo6V2ViU3RyaW5nOwotdXNpbmcgV2ViS2l0OjpXZWJWaWV3OwotCi1UZXN0SW50ZXJmYWNl
czo6VGVzdEludGVyZmFjZXMoKQotewotICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgPSBh
ZG9wdFB0cihuZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKSk7Ci0gICAgbV9ldmVudFNlbmRl
ciA9IGFkb3B0UHRyKG5ldyBFdmVudFNlbmRlcigpKTsKLSAgICBtX2dhbWVwYWRDb250cm9sbGVy
ID0gYWRvcHRQdHIobmV3IEdhbWVwYWRDb250cm9sbGVyKCkpOwotICAgIG1fdGV4dElucHV0Q29u
dHJvbGxlciA9IGFkb3B0UHRyKG5ldyBUZXh0SW5wdXRDb250cm9sbGVyKCkpOwotfQotCi1UZXN0
SW50ZXJmYWNlczo6flRlc3RJbnRlcmZhY2VzKCkKLXsKLSAgICBtX2FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLT5zZXRXZWJWaWV3KDApOwotICAgIG1fZXZlbnRTZW5kZXItPnNldFdlYlZpZXcoMCk7
Ci0gICAgLy8gbV9nYW1lcGFkQ29udHJvbGxlciBkb2Vzbid0IGRlcGVuZCBvbiBXZWJWaWV3Lgot
ICAgIG1fdGV4dElucHV0Q29udHJvbGxlci0+c2V0V2ViVmlldygwKTsKLQotICAgIC8vIG1fYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIgZG9lc24ndCBkZXBlbmQgb24gVGVzdERlbGVnYXRlLgotICAg
IG1fZXZlbnRTZW5kZXItPnNldERlbGVnYXRlKDApOwotICAgIG1fZ2FtZXBhZENvbnRyb2xsZXIt
PnNldERlbGVnYXRlKDApOwotICAgIC8vIG1fdGV4dElucHV0Q29udHJvbGxlciBkb2Vzbid0IGRl
cGVuZCBvbiBUZXN0RGVsZWdhdGUuCi19Ci0KLXZvaWQgVGVzdEludGVyZmFjZXM6OnNldFdlYlZp
ZXcoV2ViVmlldyogd2ViVmlldykKLXsKLSAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5z
ZXRXZWJWaWV3KHdlYlZpZXcpOwotICAgIG1fZXZlbnRTZW5kZXItPnNldFdlYlZpZXcod2ViVmll
dyk7Ci0gICAgLy8gbV9nYW1lcGFkQ29udHJvbGxlciBkb2Vzbid0IGRlcGVuZCBvbiBXZWJWaWV3
LgotICAgIG1fdGV4dElucHV0Q29udHJvbGxlci0+c2V0V2ViVmlldyh3ZWJWaWV3KTsKLX0KLQot
dm9pZCBUZXN0SW50ZXJmYWNlczo6c2V0RGVsZWdhdGUoVGVzdERlbGVnYXRlKiBkZWxlZ2F0ZSkK
LXsKLSAgICAvLyBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyIGRvZXNuJ3QgZGVwZW5kIG9uIFRl
c3REZWxlZ2F0ZS4KLSAgICBtX2V2ZW50U2VuZGVyLT5zZXREZWxlZ2F0ZShkZWxlZ2F0ZSk7Ci0g
ICAgbV9nYW1lcGFkQ29udHJvbGxlci0+c2V0RGVsZWdhdGUoZGVsZWdhdGUpOwotICAgIC8vIG1f
dGV4dElucHV0Q29udHJvbGxlciBkb2Vzbid0IGRlcGVuZCBvbiBUZXN0RGVsZWdhdGUuCi19Ci0K
LXZvaWQgVGVzdEludGVyZmFjZXM6OmJpbmRUbyhXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgbV9h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiKSk7Ci0gICAgbV9ldmVudFNlbmRl
ci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZXZlbnRTZW5k
ZXIiKSk7Ci0gICAgbV9nYW1lcGFkQ29udHJvbGxlci0+YmluZFRvSmF2YXNjcmlwdChmcmFtZSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiZ2FtZXBhZENvbnRyb2xsZXIiKSk7Ci0gICAgbV90ZXh0SW5w
dXRDb250cm9sbGVyLT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJ0ZXh0SW5wdXRDb250cm9sbGVyIikpOwotfQotCi12b2lkIFRlc3RJbnRlcmZhY2VzOjpyZXNl
dEFsbCgpCi17Ci0gICAgbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlci0+cmVzZXQoKTsKLSAgICBt
X2V2ZW50U2VuZGVyLT5yZXNldCgpOwotICAgIG1fZ2FtZXBhZENvbnRyb2xsZXItPnJlc2V0KCk7
Ci0gICAgLy8gbV90ZXh0SW5wdXRDb250cm9sbGVyIGRvZXNuJ3QgaGF2ZSBhbnkgc3RhdGUgdG8g
cmVzZXQuCi19Ci0KLUFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBUZXN0SW50ZXJmYWNlczo6YWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIoKQotewotICAgIHJldHVybiBtX2FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmdldCgpOwotfQotCi1FdmVudFNlbmRlciogVGVzdEludGVyZmFjZXM6OmV2ZW50U2Vu
ZGVyKCkKLXsKLSAgICByZXR1cm4gbV9ldmVudFNlbmRlci5nZXQoKTsKLX0KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdEludGVyZmFjZXMu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdEludGVyZmFj
ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiOThhZTM0ZjMzZDRjYmFlNjY1
MDViOWNhNjg2MDA3MDJkZGRmMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rlc3RJ
bnRlcmZhY2VzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
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
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXN0SW50
ZXJmYWNlc19oCi0jZGVmaW5lIFRlc3RJbnRlcmZhY2VzX2gKLQotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJGcmFtZTsKLWNsYXNzIFdlYlZp
ZXc7Ci19Ci0KLWNsYXNzIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOwotY2xhc3MgRXZlbnRTZW5k
ZXI7Ci1jbGFzcyBHYW1lcGFkQ29udHJvbGxlcjsKLWNsYXNzIFRlc3REZWxlZ2F0ZTsKLWNsYXNz
IFRleHRJbnB1dENvbnRyb2xsZXI7Ci0KLWNsYXNzIFRlc3RJbnRlcmZhY2VzIHsKLXB1YmxpYzoK
LSAgICBUZXN0SW50ZXJmYWNlcygpOwotICAgIH5UZXN0SW50ZXJmYWNlcygpOwotCi0gICAgdm9p
ZCBzZXRXZWJWaWV3KFdlYktpdDo6V2ViVmlldyopOwotICAgIHZvaWQgc2V0RGVsZWdhdGUoVGVz
dERlbGVnYXRlKik7Ci0gICAgdm9pZCBiaW5kVG8oV2ViS2l0OjpXZWJGcmFtZSopOwotICAgIHZv
aWQgcmVzZXRBbGwoKTsKLQotICAgIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKiBhY2Nlc3NpYmls
aXR5Q29udHJvbGxlcigpOwotICAgIEV2ZW50U2VuZGVyKiBldmVudFNlbmRlcigpOwotCi1wcml2
YXRlOgotICAgIE93blB0cjxBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcj4gbV9hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcjsKLSAgICBPd25QdHI8RXZlbnRTZW5kZXI+IG1fZXZlbnRTZW5kZXI7Ci0gICAg
T3duUHRyPEdhbWVwYWRDb250cm9sbGVyPiBtX2dhbWVwYWRDb250cm9sbGVyOwotICAgIE93blB0
cjxUZXh0SW5wdXRDb250cm9sbGVyPiBtX3RleHRJbnB1dENvbnRyb2xsZXI7Ci19OwotCi0jZW5k
aWYgLy8gVGVzdEludGVyZmFjZXNfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvVGVzdFJ1bm5lci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGU2ZWFkMTU1MTU3YTFiMDM1MWVmOTE1MjRmYjc0ZmFhODRlNWU1YmUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9UZXN0UnVubmVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXdlbCBIYWpkYW4gKHBo
YWpkYW4uanJAY2hyb21pdW0ub3JnKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
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
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UnVu
bmVyLmgiCi0KLSNpbmNsdWRlICJXZWJBbmltYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
V2ViQmluZGluZ3MuaCIKLSNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgotI2luY2x1ZGUg
IldlYkRldmljZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViRGV2aWNlT3JpZW50YXRpb25D
bGllbnRNb2NrLmgiCi0jaW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJXZWJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiV2ViRmluZE9wdGlvbnMuaCIKLSNpbmNsdWRlICJXZWJGcmFtZS5o
IgotI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgotI2luY2x1ZGUgIldlYklE
QkZhY3RvcnkuaCIKLSNpbmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJXZWJJ
bnRlbnQuaCIKLSNpbmNsdWRlICJXZWJJbnRlbnRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0
LmgiCi0jaW5jbHVkZSAiV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCi0jaW5jbHVkZSAiV2Vi
UHJpbnRQYXJhbXMuaCIKLSNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKLSNpbmNsdWRlICJX
ZWJTZWN1cml0eVBvbGljeS5oIgotI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCi0jaW5jbHVkZSAi
V2ViU3Vycm91bmRpbmdUZXh0LmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIldl
YldvcmtlckluZm8uaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCi0jaW5jbHVkZSAi
cGxhdGZvcm0vV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAicGxhdGZvcm0v
V2ViU2l6ZS5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgotI2luY2x1ZGUgInY4L2lu
Y2x1ZGUvdjguaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbG9jYWxlPgotI2luY2x1ZGUgPGNzdGRs
aWI+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8d3Rm
L093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBP
UyhMSU5VWCkgfHwgT1MoQU5EUk9JRCkKLSNpbmNsdWRlICJsaW51eC9XZWJGb250UmVuZGVyaW5n
LmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigp
Ci17Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVu
bmVyL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvVGVzdFJ1bm5lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzA2OTQwMWE4
ZjAwNDNjZjNmMjdiN2MxYTE4NGRmYTk2MGVlY2VjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvVGVzdFJ1bm5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEwIFBhd2VsIEhhamRhbiAocGhhamRhbi5qckBjaHJvbWl1bS5vcmcp
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
bmRlZiBUZXN0UnVubmVyX2gKLSNkZWZpbmUgVGVzdFJ1bm5lcl9oCi0KLSNpbmNsdWRlICJDcHBC
b3VuZENsYXNzLmgiCi0jaW5jbHVkZSAiVGFzay5oIgotI2luY2x1ZGUgIldlYkRlbGl2ZXJlZElu
dGVudENsaWVudC5oIgotI2luY2x1ZGUgIldlYlRleHREaXJlY3Rpb24uaCIKLSNpbmNsdWRlICJw
bGF0Zm9ybS9XZWJBcnJheUJ1ZmZlclZpZXcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJp
bmcuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS9XZWJVUkwuaCIKLSNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3Mg
V2ViR2VvbG9jYXRpb25DbGllbnRNb2NrOwotfQotCi1uYW1lc3BhY2Ugd2Via2l0X3N1cHBvcnQg
ewotY2xhc3MgU2NvcGVkVGVtcERpcmVjdG9yeTsKLX0KLQotY2xhc3MgVGVzdFJ1bm5lciA6IHB1
YmxpYyBDcHBCb3VuZENsYXNzIHsKLXB1YmxpYzoKLSAgICBUZXN0UnVubmVyKCk7Ci19OwotCi0j
ZW5kaWYgLy8gVGVzdFJ1bm5lcl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0UnVubmVyL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcyYTIwODBkMmMwOTc1OGFlMTk0M2ExNGEyMWY5
M2E0MDY3NzdjYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiV2ViQmlu
ZGluZ3MuaCIKLSNpbmNsdWRlICJXZWJDb21wb3NpdGlvblVuZGVybGluZS5oIgotI2luY2x1ZGUg
IldlYkZyYW1lLmgiCi0jaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgotI2luY2x1ZGUgIldlYlJh
bmdlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmlu
Zy5oIgotI2luY2x1ZGUgInBsYXRmb3JtL1dlYlZlY3Rvci5oIgotI2luY2x1ZGUgPHN0cmluZz4K
LSNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
Ci0KLVRleHRJbnB1dENvbnRyb2xsZXI6OlRleHRJbnB1dENvbnRyb2xsZXIoKQotewotICAgIGJp
bmRNZXRob2QoImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UiLCAmVGV4dElucHV0Q29udHJv
bGxlcjo6YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZSk7Ci0gICAgYmluZE1ldGhvZCgiY2hh
cmFjdGVySW5kZXhGb3JQb2ludCIsICZUZXh0SW5wdXRDb250cm9sbGVyOjpjaGFyYWN0ZXJJbmRl
eEZvclBvaW50KTsKLSAgICBiaW5kTWV0aG9kKCJjb252ZXJzYXRpb25JZGVudGlmaWVyIiwgJlRl
eHRJbnB1dENvbnRyb2xsZXI6OmNvbnZlcnNhdGlvbklkZW50aWZpZXIpOwotICAgIGJpbmRNZXRo
b2QoImRvQ29tbWFuZCIsICZUZXh0SW5wdXRDb250cm9sbGVyOjpkb0NvbW1hbmQpOwotICAgIGJp
bmRNZXRob2QoImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlIiwgJlRleHRJbnB1dENvbnRyb2xs
ZXI6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKTsKLSAgICBiaW5kTWV0aG9kKCJoYXNNYXJr
ZWRUZXh0IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6Omhhc01hcmtlZFRleHQpOwotICAgIGJpbmRN
ZXRob2QoImluc2VydFRleHQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dCk7Ci0g
ICAgYmluZE1ldGhvZCgibWFrZUF0dHJpYnV0ZWRTdHJpbmciLCAmVGV4dElucHV0Q29udHJvbGxl
cjo6bWFrZUF0dHJpYnV0ZWRTdHJpbmcpOwotICAgIGJpbmRNZXRob2QoIm1hcmtlZFJhbmdlIiwg
JlRleHRJbnB1dENvbnRyb2xsZXI6Om1hcmtlZFJhbmdlKTsKLSAgICBiaW5kTWV0aG9kKCJzZWxl
Y3RlZFJhbmdlIiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnNlbGVjdGVkUmFuZ2UpOwotICAgIGJp
bmRNZXRob2QoInNldE1hcmtlZFRleHQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6c2V0TWFya2Vk
VGV4dCk7Ci0gICAgYmluZE1ldGhvZCgic3Vic3RyaW5nRnJvbVJhbmdlIiwgJlRleHRJbnB1dENv
bnRyb2xsZXI6OnN1YnN0cmluZ0Zyb21SYW5nZSk7Ci0gICAgYmluZE1ldGhvZCgidW5tYXJrVGV4
dCIsICZUZXh0SW5wdXRDb250cm9sbGVyOjp1bm1hcmtUZXh0KTsKLSAgICBiaW5kTWV0aG9kKCJ2
YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnZhbGlk
QXR0cmlidXRlc0Zvck1hcmtlZFRleHQpOwotICAgIGJpbmRNZXRob2QoInNldENvbXBvc2l0aW9u
IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnNldENvbXBvc2l0aW9uKTsKLX0KLQotdm9pZCBUZXh0
SW5wdXRDb250cm9sbGVyOjppbnNlcnRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dlYlZpZXctPmNvbmZpcm1Db21wb3NpdGlvbihXZWJT
dHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7Ci19Ci0KLXZvaWQgVGV4
dElucHV0Q29udHJvbGxlcjo6ZG9Db21tYW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAg
ICBXZWJGcmFtZSogbWFpbkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKLSAgICBpZiAo
IW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
Pj0gMSAmJiBhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkKLSAgICAgICAgbWFpbkZyYW1lLT5leGVj
dXRlQ29tbWFuZChXZWJTdHJpbmc6OmZyb21VVEY4KGFyZ3VtZW50c1swXS50b1N0cmluZygpKSk7
Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c2V0TWFya2VkVGV4dChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOwotCi0gICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMyAmJiBhcmd1bWVu
dHNbMF0uaXNTdHJpbmcoKQotICAgICAgICAmJiBhcmd1bWVudHNbMV0uaXNOdW1iZXIoKSAmJiBh
cmd1bWVudHNbMl0uaXNOdW1iZXIoKSkgewotICAgICAgICBXZWJWZWN0b3I8V2ViQ29tcG9zaXRp
b25VbmRlcmxpbmU+IHVuZGVybGluZXM7Ci0gICAgICAgIG1fd2ViVmlldy0+c2V0Q29tcG9zaXRp
b24oV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMV0udG9JbnQzMigpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1sxXS50b0ludDMyKCkgKyBhcmd1bWVudHNbMl0u
dG9JbnQzMigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJr
VGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAg
cmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBtX3dlYlZpZXctPmNvbmZpcm1Db21wb3NpdGlvbigp
OwotfQotCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6Omhhc01hcmtlZFRleHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQotewotICAgIHJlc3VsdC0+c2V0TnVs
bCgpOwotCi0gICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7
Ci0gICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VsdC0+c2V0
KG1haW5GcmFtZS0+aGFzTWFya2VkVGV4dCgpKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9s
bGVyOjpjb252ZXJzYXRpb25JZGVudGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVz
dWx0LT5zZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c3Vic3RyaW5n
RnJvbVJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci19
Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5n
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgotICAgIHJlc3VsdC0+c2V0TnVsbCgpOwotfQotCi12b2lk
IFRleHRJbnB1dENvbnRyb2xsZXI6Om1hcmtlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKLXsKLSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIFdl
YkZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgpOwotICAgIGlmICghbWFp
bkZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJSYW5nZSByYW5nZSA9IG1haW5GcmFt
ZS0+bWFya2VkUmFuZ2UoKTsKLSAgICBWZWN0b3I8aW50PiBpbnRBcnJheSgyKTsKLSAgICBpbnRB
cnJheVswXSA9IHJhbmdlLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaW50QXJyYXlbMV0gPSByYW5nZS5l
bmRPZmZzZXQoKTsKLSAgICByZXN1bHQtPnNldChXZWJCaW5kaW5nczo6bWFrZUludEFycmF5KGlu
dEFycmF5KSk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c2VsZWN0ZWRSYW5nZShj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0
LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJGcmFtZSogbWFpbkZyYW1lID0gbV93ZWJWaWV3LT5tYWlu
RnJhbWUoKTsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
UmFuZ2UgcmFuZ2UgPSBtYWluRnJhbWUtPnNlbGVjdGlvblJhbmdlKCk7Ci0gICAgVmVjdG9yPGlu
dD4gaW50QXJyYXkoMik7Ci0gICAgaW50QXJyYXlbMF0gPSByYW5nZS5zdGFydE9mZnNldCgpOwot
ICAgIGludEFycmF5WzFdID0gcmFuZ2UuZW5kT2Zmc2V0KCk7Ci0gICAgcmVzdWx0LT5zZXQoV2Vi
QmluZGluZ3M6Om1ha2VJbnRBcnJheShpbnRBcnJheSkpOwotfQotCi12b2lkIFRleHRJbnB1dENv
bnRyb2xsZXI6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCi17Ci0gICAgcmVzdWx0LT5zZXROdWxs
KCk7Ci0KLSAgICBXZWJGcmFtZSogZnJhbWUgPSBtX3dlYlZpZXctPmZvY3VzZWRGcmFtZSgpOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051
bWJlcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJSZWN0IHJlY3Q7Ci0gICAgaWYgKCFm
cmFtZS0+Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwg
YXJndW1lbnRzWzFdLnRvSW50MzIoKSwgcmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZl
Y3RvcjxpbnQ+IGludEFycmF5KDQpOwotICAgIGludEFycmF5WzBdID0gcmVjdC54OwotICAgIGlu
dEFycmF5WzFdID0gcmVjdC55OwotICAgIGludEFycmF5WzJdID0gcmVjdC53aWR0aDsKLSAgICBp
bnRBcnJheVszXSA9IHJlY3QuaGVpZ2h0OwotICAgIHJlc3VsdC0+c2V0KFdlYkJpbmRpbmdzOjpt
YWtlSW50QXJyYXkoaW50QXJyYXkpKTsKLX0KLQotdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpj
aGFyYWN0ZXJJbmRleEZvclBvaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6dmFsaWRBdHRyaWJ1dGVz
Rm9yTWFya2VkVGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQp
Ci17Ci0gICAgcmVzdWx0LT5zZXROdWxsKCk7Ci0KLSAgICBXZWJGcmFtZSogbWFpbkZyYW1lID0g
bV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKLSAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcmVzdWx0LT5zZXQoIk5TVW5kZXJsaW5lLE5TVW5kZXJsaW5lQ29sb3IsTlNN
YXJrZWRDbGF1c2VTZWdtZW50LCIKLSAgICAgICAgICAgICAgICAiTlNUZXh0SW5wdXRSZXBsYWNl
bWVudFJhbmdlQXR0cmlidXRlTmFtZSIpOwotfQotCi12b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6
Om1ha2VBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCi0gICAgcmVzdWx0LT5z
ZXROdWxsKCk7Ci19Ci0KLXZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6c2V0Q29tcG9zaXRpb24o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKLXsK
LSAgICByZXN1bHQtPnNldE51bGwoKTsKLQotICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU2VuZHMgYSBrZXlkb3duIGV2ZW50IHdpdGgga2V5
IGNvZGUgPSAweEU1IHRvIGVtdWxhdGUgaW5wdXQgbWV0aG9kIGJlaGF2aW9yLgotICAgIFdlYktl
eWJvYXJkRXZlbnQga2V5RG93bjsKLSAgICBrZXlEb3duLnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpS
YXdLZXlEb3duOwotICAgIGtleURvd24ubW9kaWZpZXJzID0gMDsKLSAgICBrZXlEb3duLndpbmRv
d3NLZXlDb2RlID0gMHhFNTsgLy8gVktFWV9QUk9DRVNTS0VZCi0gICAga2V5RG93bi5zZXRLZXlJ
ZGVudGlmaWVyRnJvbVdpbmRvd3NLZXlDb2RlKCk7Ci0gICAgbV93ZWJWaWV3LT5oYW5kbGVJbnB1
dEV2ZW50KGtleURvd24pOwotCi0gICAgV2ViVmVjdG9yPFdlYkNvbXBvc2l0aW9uVW5kZXJsaW5l
PiB1bmRlcmxpbmVzOwotICAgIFdlYlN0cmluZyB0ZXh0KFdlYlN0cmluZzo6ZnJvbVVURjgoYXJn
dW1lbnRzWzBdLnRvU3RyaW5nKCkpKTsKLSAgICBtX3dlYlZpZXctPnNldENvbXBvc2l0aW9uKHRl
eHQsIHVuZGVybGluZXMsIDAsIHRleHQubGVuZ3RoKCkpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9UZXh0SW5wdXRDb250cm9sbGVyLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1RleHRJbnB1dENvbnRy
b2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk1OWFhOGIzNjg0MzcyMWY0
MWNkMzUyZWRmMDNkZjg4MWUzOGQ2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL1Rl
eHRJbnB1dENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0g
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
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vLyBUZXh0
SW5wdXRDb250cm9sbGVyIGlzIGJvdW5kIHRvIHdpbmRvdy50ZXh0SW5wdXRDb250cm9sbGVyIGlu
IEphdmFzY3JpcHQKLS8vIHdoZW4gRFJUIGlzIHJ1bm5pbmcuIExheW91dCB0ZXN0cyB1c2UgaXQg
dG8gZXhlcmNpc2UgdmFyaW91cyBjb3JuZXJzIG9mCi0vLyB0ZXh0IGlucHV0LgotCi0jaWZuZGVm
IFRleHRJbnB1dENvbnRyb2xsZXJfaAotI2RlZmluZSBUZXh0SW5wdXRDb250cm9sbGVyX2gKLQot
I2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBX
ZWJWaWV3OwotfQotCi1jbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyIDogcHVibGljIENwcEJvdW5k
Q2xhc3MgewotcHVibGljOgotICAgIFRleHRJbnB1dENvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQg
c2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsgbV93ZWJWaWV3ID0gd2ViVmll
dzsgfQotCi0gICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIGRvQ29tbWFuZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50Kik7Ci0gICAgdm9pZCBzZXRNYXJrZWRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHVubWFya1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgaGFzTWFya2VkVGV4dChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBjb252ZXJzYXRpb25JZGVudGlmaWVyKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHN1YnN0cmluZ0Zy
b21SYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9pZCBh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKLSAgICB2b2lkIG1hcmtlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIHNlbGVjdGVkUmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwotICAgIHZvaWQgY2hhcmFjdGVySW5k
ZXhGb3JQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Ci0gICAgdm9p
ZCB2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqKTsKLSAgICB2b2lkIG1ha2VBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW9uKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKLQotcHJpdmF0ZToKLSAgICBXZWJLaXQ6Oldl
YlZpZXcqIG1fd2ViVmlldzsKLX07Ci0KLSNlbmRpZiAvLyBUZXh0SW5wdXRDb250cm9sbGVyX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1
bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODlkNWQ1ODc3MGM2MWQxYWFlOTE2MGJhMzRlNDM2NzY1MTZiMDdj
MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEs
MTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNp
bmNsdWRlICJXZWJFbGVtZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJOb2RlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYkNT
dHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCkKKyAgICA6IG1fbG9nQWNjZXNzaWJpbGl0
eUV2ZW50cyhmYWxzZSkKK3sKKworICAgIGJpbmRNZXRob2QoImxvZ0FjY2Vzc2liaWxpdHlFdmVu
dHMiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmxvZ0FjY2Vzc2liaWxpdHlFdmVudHNDYWxs
YmFjayk7CisgICAgYmluZE1ldGhvZCgiYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2spOworICAg
IGJpbmRNZXRob2QoInJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyIiwgJkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKTsKKworICAgIGJp
bmRQcm9wZXJ0eSgiZm9jdXNlZEVsZW1lbnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgicm9vdEVsZW1l
bnQiLCAmQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50R2V0dGVyQ2FsbGJhY2sp
OworCisgICAgYmluZE1ldGhvZCgiYWNjZXNzaWJsZUVsZW1lbnRCeUlkIiwgJkFjY2Vzc2liaWxp
dHlDb250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWRHZXR0ZXJDYWxsYmFjayk7CisKKyAg
ICBiaW5kRmFsbGJhY2tNZXRob2QoJkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmYWxsYmFja0Nh
bGxiYWNrKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YmluZFRvSmF2YXNj
cmlwdChXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgY2xhc3NuYW1lKQoreworICAg
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Q6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKyAgICBDcHBC
b3VuZENsYXNzOjpiaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBjbGFzc25hbWUpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZXNldCgpCit7CisgICAgbV9yb290RWxlbWVudCA9
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QoKTsKKyAgICBtX2ZvY3VzZWRFbGVtZW50ID0gV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdCgpOworICAgIG1fZWxlbWVudHMuY2xlYXIoKTsKKworICAgIG1fbG9n
QWNjZXNzaWJpbGl0eUV2ZW50cyA9IGZhbHNlOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpzZXRGb2N1c2VkRWxlbWVudChjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBm
b2N1c2VkRWxlbWVudCkKK3sKKyAgICBtX2ZvY3VzZWRFbGVtZW50ID0gZm9jdXNlZEVsZW1lbnQ7
Cit9CisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpn
ZXRGb2N1c2VkRWxlbWVudCgpCit7CisgICAgaWYgKG1fZm9jdXNlZEVsZW1lbnQuaXNOdWxsKCkp
CisgICAgICAgIG1fZm9jdXNlZEVsZW1lbnQgPSBtX3dlYlZpZXctPmFjY2Vzc2liaWxpdHlPYmpl
Y3QoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50cy5nZXRPckNyZWF0ZShtX2ZvY3VzZWRFbGVtZW50
KTsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmdldFJvb3RFbGVtZW50KCkKK3sKKyAgICBpZiAobV9yb290RWxlbWVudC5pc051bGwoKSkKKyAg
ICAgICAgbV9yb290RWxlbWVudCA9IG1fd2ViVmlldy0+YWNjZXNzaWJpbGl0eU9iamVjdCgpOwor
ICAgIHJldHVybiBtX2VsZW1lbnRzLmNyZWF0ZVJvb3QobV9yb290RWxlbWVudCk7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmaW5kQWNjZXNz
aWJsZUVsZW1lbnRCeUlkUmVjdXJzaXZlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9i
aiwgY29uc3QgV2ViU3RyaW5nJiBpZCkKK3sKKyAgICBpZiAob2JqLmlzTnVsbCgpIHx8IG9iai5p
c0RldGFjaGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViTm9kZSBub2RlID0gb2Jq
Lm5vZGUoKTsKKyAgICBpZiAoIW5vZGUuaXNOdWxsKCkgJiYgbm9kZS5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgV2ViRWxlbWVudCBlbGVtZW50ID0gbm9kZS50bzxXZWJFbGVtZW50PigpOwor
ICAgICAgICBlbGVtZW50LmdldEF0dHJpYnV0ZSgiaWQiKTsKKyAgICAgICAgaWYgKGVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJpZCIpID09IGlkKSAKKyAgICAgICAgICAgIHJldHVybiBtX2VsZW1lbnRz
LmdldE9yQ3JlYXRlKG9iaik7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hpbGRDb3VudCA9IG9i
ai5jaGlsZENvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7
IGkrKykgeworICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogcmVzdWx0ID0gZmlu
ZEFjY2Vzc2libGVFbGVtZW50QnlJZFJlY3Vyc2l2ZShvYmouY2hpbGRBdChpKSwgaWQpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmdldEFjY2Vzc2li
bGVFbGVtZW50QnlJZChjb25zdCBzdGQ6OnN0cmluZyYgaWQpCit7CisgICAgaWYgKG1fcm9vdEVs
ZW1lbnQuaXNOdWxsKCkpCisgICAgICAgIG1fcm9vdEVsZW1lbnQgPSBtX3dlYlZpZXctPmFjY2Vz
c2liaWxpdHlPYmplY3QoKTsKKworICAgIHJldHVybiBmaW5kQWNjZXNzaWJsZUVsZW1lbnRCeUlk
UmVjdXJzaXZlKG1fcm9vdEVsZW1lbnQsIFdlYlN0cmluZzo6ZnJvbVVURjgoaWQuY19zdHIoKSkp
OworfQorCitib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpzaG91bGRMb2dBY2Nlc3NpYmls
aXR5RXZlbnRzKCkKK3sKKyAgICByZXR1cm4gbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpub3RpZmljYXRpb25SZWNlaXZlZChjb25z
dCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwgY29uc3QgY2hhciogbm90
aWZpY2F0aW9uTmFtZSkKK3sKKyAgICAvLyBDYWxsIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMgb24g
dGhlIGVsZW1lbnQuCisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCA9IG1fZWxl
bWVudHMuZ2V0T3JDcmVhdGUodGFyZ2V0KTsKKyAgICBlbGVtZW50LT5ub3RpZmljYXRpb25SZWNl
aXZlZChub3RpZmljYXRpb25OYW1lKTsKKworICAgIC8vIENhbGwgZ2xvYmFsIG5vdGlmaWNhdGlv
biBsaXN0ZW5lcnMuCisgICAgc2l6ZV90IGNhbGxiYWNrQ291bnQgPSBtX25vdGlmaWNhdGlvbkNh
bGxiYWNrcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja0NvdW50
OyBpKyspIHsKKyAgICAgICAgQ3BwVmFyaWFudCBhcmd1bWVudHNbMl07CisgICAgICAgIGFyZ3Vt
ZW50c1swXS5zZXQoKmVsZW1lbnQtPmdldEFzQ3BwVmFyaWFudCgpKTsKKyAgICAgICAgYXJndW1l
bnRzWzFdLnNldChub3RpZmljYXRpb25OYW1lKTsKKyAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VS
ZXN1bHQ7CisgICAgICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmludm9rZURlZmF1bHQo
YXJndW1lbnRzLCAyLCBpbnZva2VSZXN1bHQpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcjo6bG9nQWNjZXNzaWJpbGl0eUV2ZW50c0NhbGxiYWNrKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX2xvZ0FjY2Vzc2liaWxp
dHlFdmVudHMgPSB0cnVlOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyOjphZGROb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNPYmplY3QoKSkgewor
ICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hfYmFjayhhcmd1bWVudHNbMF0pOworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1v
dmVOb3RpZmljYXRpb25MaXN0ZW5lckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0KCooZ2V0Rm9jdXNlZEVsZW1lbnQoKS0+Z2V0QXNDcHBWYXJpYW50KCkpKTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnRHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoKihnZXRSb290RWxlbWVu
dCgpLT5nZXRBc0NwcFZhcmlhbnQoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWRHZXR0ZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0u
aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjpzdHJpbmcgaWQgPSBhcmd1
bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBmb3VuZEVs
ZW1lbnQgPSBnZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoaWQpOworICAgIGlmICghZm91bmRFbGVt
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICByZXN1bHQtPnNldCgqKGZvdW5kRWxlbWVudC0+
Z2V0QXNDcHBWYXJpYW50KCkpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
ZmFsbGJhY2tDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcHJpbnRmKCJDT05TT0xFIE1FU1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVu
a25vd24gbWV0aG9kIGNhbGxlZCBvbiAiCisgICAgICAgICAgICJBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlclxuIik7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckNocm9taXVtLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBmNWRl
ZTg1NjJkOTU0MWYwMGNmMTAyNGQ4NmNmNjYxYzYzN2QxMAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlckNocm9taXVtX2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJv
bWl1bV9oCisKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uaCIKKyNp
bmNsdWRlICJDcHBCb3VuZENsYXNzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdDsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViVmlldzsKK30K
KworY2xhc3MgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7
CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKKworICAgIC8vIFNoYWRv
dyB0byBpbmNsdWRlIGFjY2Vzc2liaWxpdHkgaW5pdGlhbGl6YXRpb24uCisgICAgdm9pZCBiaW5k
VG9KYXZhc2NyaXB0KFdlYktpdDo6V2ViRnJhbWUqLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYg
Y2xhc3NuYW1lKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICB2b2lkIHNldEZvY3VzZWRFbGVt
ZW50KGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCYpOworICAgIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQqIGdldEZvY3VzZWRFbGVtZW50KCk7CisgICAgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudCogZ2V0Um9vdEVsZW1lbnQoKTsKKyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBn
ZXRBY2Nlc3NpYmxlRWxlbWVudEJ5SWQoY29uc3Qgc3RkOjpzdHJpbmcmIGlkKTsKKworICAgIGJv
b2wgc2hvdWxkTG9nQWNjZXNzaWJpbGl0eUV2ZW50cygpOworCisgICAgdm9pZCBub3RpZmljYXRp
b25SZWNlaXZlZChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmIHRhcmdldCwg
Y29uc3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSk7CisKKyAgICB2b2lkIHNldFdlYlZpZXcoV2Vi
S2l0OjpXZWJWaWV3KiB3ZWJWaWV3KSB7IG1fd2ViVmlldyA9IHdlYlZpZXc7IH0KKworcHJpdmF0
ZToKKyAgICAvLyBJZiB0cnVlLCB3aWxsIGxvZyBhbGwgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRp
b25zLgorICAgIGJvb2wgbV9sb2dBY2Nlc3NpYmlsaXR5RXZlbnRzOworCisgICAgLy8gQm91bmQg
bWV0aG9kcyBhbmQgcHJvcGVydGllcworICAgIHZvaWQgbG9nQWNjZXNzaWJpbGl0eUV2ZW50c0Nh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGZh
bGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgYWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCByZW1vdmVOb3RpZmljYXRpb25MaXN0ZW5lckNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQg
Zm9jdXNlZEVsZW1lbnRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCByb290
RWxlbWVudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGFjY2Vzc2libGVF
bGVtZW50QnlJZEdldHRlckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGZpbmRBY2Nlc3NpYmxlRWxlbWVu
dEJ5SWRSZWN1cnNpdmUoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiwgY29u
c3QgV2ViS2l0OjpXZWJTdHJpbmcmIGlkKTsKKworICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0
eU9iamVjdCBtX2ZvY3VzZWRFbGVtZW50OworICAgIFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9i
amVjdCBtX3Jvb3RFbGVtZW50OworCisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgbV9l
bGVtZW50czsKKworICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZpY2F0aW9uQ2Fs
bGJhY2tzOworCisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7Cit9OworCisjZW5kaWYg
Ly8gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Q2hyb21pdW0uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjA4
MjJiZThmMjNmMTBlM2JjNzZhM2NhZTFkZWRhOGE4OGQ2NjFmCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudENocm9taXVtLmNwcApAQCAtMCwwICsxLDk2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW0uaCIKKworI2luY2x1
ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJDU3Ry
aW5nLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViUG9pbnQuaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJSZWN0LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5nLmgiCisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBNYXAgcm9sZSB2
YWx1ZSB0byBzdHJpbmcsIG1hdGNoaW5nIFNhZmFyaS9NYWMgcGxhdGZvcm0gaW1wbGVtZW50YXRp
b24gdG8KKy8vIGF2b2lkIHJlYmFzZWxpbmluZyBsYXlvdXQgdGVzdHMuCitzdGF0aWMgc3RyaW5n
IHJvbGVUb1N0cmluZyhXZWJBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQoreworICAgIHN0cmluZyBy
ZXN1bHQgPSAiQVhSb2xlOiBBWCI7CisgICAgc3dpdGNoIChyb2xlKSB7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkJ1
dHRvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSYWRpb0J1dHRvbjoKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJhZGlvQnV0dG9uIik7CisgICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZUNoZWNrQm94OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ2hl
Y2tCb3giKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU2xpZGVyOgorICAgICAgICBy
ZXR1cm4gcmVzdWx0LmFwcGVuZCgiU2xpZGVyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVRhYkdyb3VwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFiR3JvdXAiKTsK
KyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVGV4dEZpZWxkOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiVGV4dEZpZWxkIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZVN0YXRpY1RleHQ6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTdGF0aWNUZXh0Iik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVRleHRBcmVhOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiVGV4dEFyZWEiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
U2Nyb2xsQXJlYToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNjcm9sbEFyZWEiKTsK
KyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUG9wVXBCdXR0b246CisgICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJQb3BVcEJ1dHRvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVNZW51QnV0dG9uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUJ1dHRv
biIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJsZToKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIlRhYmxlIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFw
cGxpY2F0aW9uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQXBwbGljYXRpb24iKTsK
KyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlR3JvdXA6CisgICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJHcm91cCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVSYWRpb0dy
b3VwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUmFkaW9Hcm91cCIpOworICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMaXN0OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiTGlzdCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTY3JvbGxCYXI6CisgICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTY3JvbGxCYXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlVmFsdWVJbmRpY2F0b3I6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJWYWx1ZUluZGljYXRvciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZToK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlIik7CisgICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZU1lbnVCYXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNZW51
QmFyIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1lbnU6CisgICAgICAgIHJldHVy
biByZXN1bHQuYXBwZW5kKCJNZW51Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZU1l
bnVJdGVtOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUl0ZW0iKTsKKyAgICBj
YXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiQ29sdW1uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvdzoKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlJvdyIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVUb29sYmFyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9vbGJhciIpOwor
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVCdXN5SW5kaWNhdG9yOgorICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiQnVzeUluZGljYXRvciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJp
bGl0eVJvbGVQcm9ncmVzc0luZGljYXRvcjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IlByb2dyZXNzSW5kaWNhdG9yIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdpbmRv
dzoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIldpbmRvdyIpOworICAgIGNhc2UgV2Vi
QWNjZXNzaWJpbGl0eVJvbGVEcmF3ZXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJE
cmF3ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3lzdGVtV2lkZToKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlN5c3RlbVdpZGUiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlT3V0bGluZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk91dGxp
bmUiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlSW5jcmVtZW50b3I6CisgICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJJbmNyZW1lbnRvciIpOworICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVCcm93c2VyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQnJvd3Nl
ciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVDb21ib0JveDoKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIkNvbWJvQm94Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5
Um9sZVNwbGl0R3JvdXA6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGxpdEdyb3Vw
Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVNwbGl0dGVyOgorICAgICAgICByZXR1
cm4gcmVzdWx0LmFwcGVuZCgiU3BsaXR0ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlQ29sb3JXZWxsOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sb3JXZWxsIik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUdyb3dBcmVhOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiR3Jvd0FyZWEiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xl
U2hlZXQ6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJTaGVldCIpOworICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVIZWxwVGFnOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVu
ZCgiSGVscFRhZyIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNYXR0ZToKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1hdHRlIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZVJ1bGVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiUnVsZXIiKTsKKyAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlUnVsZXJNYXJrZXI6CisgICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJSdWxlck1hcmtlciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVMaW5rOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGluayIpOworICAgIGNhc2Ug
V2ViQWNjZXNzaWJpbGl0eVJvbGVEaXNjbG9zdXJlVHJpYW5nbGU6CisgICAgICAgIHJldHVybiBy
ZXN1bHQuYXBwZW5kKCJEaXNjbG9zdXJlVHJpYW5nbGUiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlR3JpZDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkdyaWQiKTsKKyAg
ICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ2VsbDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIkNlbGwiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlQ29sdW1uSGVhZGVy
OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQ29sdW1uSGVhZGVyIik7CisgICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVJvd0hlYWRlcjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIlJvd0hlYWRlciIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVXZWJDb3Jl
TGluazoKKyAgICAgICAgLy8gTWFwcyB0byBMaW5rIHJvbGUuCisgICAgICAgIHJldHVybiByZXN1
bHQuYXBwZW5kKCJMaW5rIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUltYWdlTWFw
TGluazoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkltYWdlTWFwTGluayIpOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVJbWFnZU1hcDoKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkltYWdlTWFwIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RN
YXJrZXI6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0TWFya2VyIik7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVdlYkFyZWE6CisgICAgICAgIHJldHVybiByZXN1bHQu
YXBwZW5kKCJXZWJBcmVhIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUhlYWRpbmc6
CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJIZWFkaW5nIik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3g6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJM
aXN0Qm94Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxpc3RCb3hPcHRpb246Cisg
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMaXN0Qm94T3B0aW9uIik7CisgICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZVRhYmxlSGVhZGVyQ29udGFpbmVyOgorICAgICAgICByZXR1cm4g
cmVzdWx0LmFwcGVuZCgiVGFibGVIZWFkZXJDb250YWluZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlRGVmaW5pdGlvbkxpc3RUZXJtOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFw
cGVuZCgiRGVmaW5pdGlvbkxpc3RUZXJtIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9s
ZURlZmluaXRpb25MaXN0RGVmaW5pdGlvbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkRlZmluaXRpb25MaXN0RGVmaW5pdGlvbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJv
bGVBbm5vdGF0aW9uOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiQW5ub3RhdGlvbiIp
OworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVTbGlkZXJUaHVtYjoKKyAgICAgICAgcmV0
dXJuIHJlc3VsdC5hcHBlbmQoIlNsaWRlclRodW1iIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUxhbmRtYXJrQXBwbGljYXRpb246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJMYW5kbWFya0FwcGxpY2F0aW9uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxh
bmRtYXJrQmFubmVyOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFuZG1hcmtCYW5u
ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtDb21wbGVtZW50YXJ5
OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTGFuZG1hcmtDb21wbGVtZW50YXJ5Iik7
CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrQ29udGVudEluZm86CisgICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya0NvbnRlbnRJbmZvIik7CisgICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhbmRtYXJrTWFpbjoKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5hcHBlbmQoIkxhbmRtYXJrTWFpbiIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVM
YW5kbWFya05hdmlnYXRpb246CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFy
a05hdmlnYXRpb24iKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGFuZG1hcmtTZWFy
Y2g6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMYW5kbWFya1NlYXJjaCIpOworICAg
IGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvbkxvZzoKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uTG9nIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZUFwcGxpY2F0aW9uTWFycXVlZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkFwcGxpY2F0aW9uTWFycXVlZSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBs
aWNhdGlvblN0YXR1czoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9u
U3RhdHVzIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uVGltZXI6
CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBcHBsaWNhdGlvblRpbWVyIik7CisgICAg
Y2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50OgorICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiRG9jdW1lbnQiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRG9jdW1l
bnRBcnRpY2xlOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRG9jdW1lbnRBcnRpY2xl
Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZURvY3VtZW50Tm90ZToKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkRvY3VtZW50Tm90ZSIpOworICAgIGNhc2UgV2ViQWNjZXNz
aWJpbGl0eVJvbGVEb2N1bWVudFJlZ2lvbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkRvY3VtZW50UmVnaW9uIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVVzZXJJbnRl
cmZhY2VUb29sdGlwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVXNlckludGVyZmFj
ZVRvb2x0aXAiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVG9nZ2xlQnV0dG9uOgor
ICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVG9nZ2xlQnV0dG9uIik7CisgICAgY2FzZSBX
ZWJBY2Nlc3NpYmlsaXR5Um9sZUNhbnZhczoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkNhbnZhcyIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVQYXJhZ3JhcGg6CisgICAg
ICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJQYXJhZ3JhcGgiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlRGl2OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiRGl2Iik7Cisg
ICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUxhYmVsOgorICAgICAgICByZXR1cm4gcmVzdWx0
LmFwcGVuZCgiTGFiZWwiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlRm9ybToKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIkZvcm0iKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2li
aWxpdHlSb2xlSG9yaXpvbnRhbFJ1bGU6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJI
b3Jpem9udGFsUnVsZSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVMZWdlbmQ6Cisg
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJMZWdlbmQiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlQXBwbGljYXRpb25BbGVydDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBl
bmQoIkFsZXJ0Iik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZUFwcGxpY2F0aW9uQWxl
cnREaWFsb2c6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJBbGVydERpYWxvZyIpOwor
ICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVBcHBsaWNhdGlvbkRpYWxvZzoKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIkFwcGxpY2F0aW9uRGlhbG9nIik7CisgICAgY2FzZSBXZWJB
Y2Nlc3NpYmlsaXR5Um9sZURpcmVjdG9yeToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkRpcmVjdG9yeSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVEb2N1bWVudE1hdGg6
CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJNYXRoIik7CisgICAgY2FzZSBXZWJBY2Nl
c3NpYmlsaXR5Um9sZUVkaXRhYmxlVGV4dDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQo
IkVkaXRhYmxlVGV4dCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVGb290ZXI6Cisg
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJGb290ZXIiKTsKKyAgICBjYXNlIFdlYkFjY2Vz
c2liaWxpdHlSb2xlSWdub3JlZDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIklnbm9y
ZWQiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlTGlzdEl0ZW06CisgICAgICAgIHJl
dHVybiByZXN1bHQuYXBwZW5kKCJMaXN0SXRlbSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0
eVJvbGVNZW51TGlzdFBvcHVwOgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiTWVudUxp
c3RQb3B1cCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVNZW51TGlzdE9wdGlvbjoK
KyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIk1lbnVMaXN0T3B0aW9uIik7CisgICAgY2Fz
ZSBXZWJBY2Nlc3NpYmlsaXR5Um9sZVByZXNlbnRhdGlvbmFsOgorICAgICAgICByZXR1cm4gcmVz
dWx0LmFwcGVuZCgiUHJlc2VudGF0aW9uYWwiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlS
b2xlU3BpbkJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlNwaW5CdXR0b24i
KTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlU3BpbkJ1dHRvblBhcnQ6CisgICAgICAg
IHJldHVybiByZXN1bHQuYXBwZW5kKCJTcGluQnV0dG9uUGFydCIpOworICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVUYWJMaXN0OgorICAgICAgICByZXR1cm4gcmVzdWx0LmFwcGVuZCgiVGFi
TGlzdCIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUYWJQYW5lbDoKKyAgICAgICAg
cmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYlBhbmVsIik7CisgICAgY2FzZSBXZWJBY2Nlc3NpYmls
aXR5Um9sZVRhYjoKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hcHBlbmQoIlRhYiIpOworICAgIGNh
c2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVUcmVlUm9sZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5h
cHBlbmQoIlRyZWUiKTsKKyAgICBjYXNlIFdlYkFjY2Vzc2liaWxpdHlSb2xlVHJlZUdyaWQ6Cisg
ICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJUcmVlR3JpZCIpOworICAgIGNhc2UgV2ViQWNj
ZXNzaWJpbGl0eVJvbGVUcmVlSXRlbVJvbGU6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5k
KCJUcmVlSXRlbSIpOworICAgIGNhc2UgV2ViQWNjZXNzaWJpbGl0eVJvbGVVbmtub3duOgorICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiByZXN1bHQuYXBwZW5kKCJVbmtub3duIik7CisgICAg
fQorfQorCitzdHJpbmcgZ2V0RGVzY3JpcHRpb24oY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYgb2JqZWN0KQoreworICAgIHN0cmluZyBkZXNjcmlwdGlvbiA9IG9iamVjdC5hY2Nlc3NpYmls
aXR5RGVzY3JpcHRpb24oKS51dGY4KCk7CisgICAgcmV0dXJuIGRlc2NyaXB0aW9uLmluc2VydCgw
LCAiQVhEZXNjcmlwdGlvbjogIik7Cit9CisKK3N0cmluZyBnZXRIZWxwVGV4dChjb25zdCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCit7CisgICAgc3RyaW5nIGhlbHBUZXh0ID0gb2Jq
ZWN0LmhlbHBUZXh0KCkudXRmOCgpOworICAgIHJldHVybiBoZWxwVGV4dC5pbnNlcnQoMCwgIkFY
SGVscDogIik7Cit9CisKK3N0cmluZyBnZXRTdHJpbmdWYWx1ZShjb25zdCBXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0JiBvYmplY3QpCit7CisgICAgc3RyaW5nIHZhbHVlID0gb2JqZWN0LnN0cmluZ1Zh
bHVlKCkudXRmOCgpOworICAgIHJldHVybiB2YWx1ZS5pbnNlcnQoMCwgIkFYVmFsdWU6ICIpOwor
fQorCitzdHJpbmcgZ2V0Um9sZShjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3Qp
Cit7CisgICAgc3RyaW5nIHJvbGVTdHJpbmcgPSByb2xlVG9TdHJpbmcob2JqZWN0LnJvbGVWYWx1
ZSgpKTsKKworICAgIC8vIFNwZWNpYWwtY2FzZSBjYW52YXMgd2l0aCBmYWxsYmFjayBjb250ZW50
IGJlY2F1c2UgQ2hyb21pdW0gd2FudHMgdG8KKyAgICAvLyB0cmVhdCB0aGlzIGFzIGVzc2VudGlh
bGx5IGEgc2VwYXJhdGUgcm9sZSB0aGF0IGl0IGNhbiBtYXAgZGlmZmVyZW50bHkgZGVwZW5kaW5n
CisgICAgLy8gb24gdGhlIHBsYXRmb3JtLgorICAgIGlmIChvYmplY3Qucm9sZVZhbHVlKCkgPT0g
V2ViQWNjZXNzaWJpbGl0eVJvbGVDYW52YXMgJiYgb2JqZWN0LmNhbnZhc0hhc0ZhbGxiYWNrQ29u
dGVudCgpKQorICAgICAgICByb2xlU3RyaW5nICs9ICJXaXRoRmFsbGJhY2tDb250ZW50IjsKKwor
ICAgIHJldHVybiByb2xlU3RyaW5nOworfQorCitzdHJpbmcgZ2V0VGl0bGUoY29uc3QgV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAgIHN0cmluZyB0aXRsZSA9IG9iamVjdC50
aXRsZSgpLnV0ZjgoKTsKKyAgICByZXR1cm4gdGl0bGUuaW5zZXJ0KDAsICJBWFRpdGxlOiAiKTsK
K30KKworc3RyaW5nIGdldE9yaWVudGF0aW9uKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
IG9iamVjdCkKK3sKKyAgICBpZiAob2JqZWN0LmlzVmVydGljYWwoKSkKKyAgICAgICAgcmV0dXJu
ICJBWE9yaWVudGF0aW9uOiBBWFZlcnRpY2FsT3JpZW50YXRpb24iOworCisgICAgcmV0dXJuICJB
WE9yaWVudGF0aW9uOiBBWEhvcml6b250YWxPcmllbnRhdGlvbiI7Cit9CisKK3N0cmluZyBnZXRW
YWx1ZURlc2NyaXB0aW9uKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKK3sK
KyAgICBzdHJpbmcgdmFsdWVEZXNjcmlwdGlvbiA9IG9iamVjdC52YWx1ZURlc2NyaXB0aW9uKCku
dXRmOCgpOworICAgIHJldHVybiB2YWx1ZURlc2NyaXB0aW9uLmluc2VydCgwLCAiQVhWYWx1ZURl
c2NyaXB0aW9uOiAiKTsKK30KKworc3RyaW5nIGdldEF0dHJpYnV0ZXMoY29uc3QgV2ViQWNjZXNz
aWJpbGl0eU9iamVjdCYgb2JqZWN0KQoreworICAgIC8vIEZJWE1FOiBDb25jYXRlbmF0ZSBhbGwg
YXR0cmlidXRlcyBvZiB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdC4KKyAgICBzdHJpbmcgYXR0cmli
dXRlcyhnZXRUaXRsZShvYmplY3QpKTsKKyAgICBhdHRyaWJ1dGVzLmFwcGVuZCgiXG4iKTsKKyAg
ICBhdHRyaWJ1dGVzLmFwcGVuZChnZXRSb2xlKG9iamVjdCkpOworICAgIGF0dHJpYnV0ZXMuYXBw
ZW5kKCJcbiIpOworICAgIGF0dHJpYnV0ZXMuYXBwZW5kKGdldERlc2NyaXB0aW9uKG9iamVjdCkp
OworICAgIHJldHVybiBhdHRyaWJ1dGVzOworfQorCisKKy8vIENvbGxlY3RzIGF0dHJpYnV0ZXMg
aW50byBhIHN0cmluZywgZGVsaW1pdGVkIGJ5IGRhc2hlcy4gVXNlZCBieSBhbGwgbWV0aG9kcwor
Ly8gdGhhdCBvdXRwdXQgbGlzdHMgb2YgYXR0cmlidXRlczogYXR0cmlidXRlc09mTGlua2VkVUlF
bGVtZW50c0NhbGxiYWNrLAorLy8gQXR0cmlidXRlc09mQ2hpbGRyZW5DYWxsYmFjaywgZXRjLgor
Y2xhc3MgQXR0cmlidXRlc0NvbGxlY3RvciB7CitwdWJsaWM6CisgICAgdm9pZCBjb2xsZWN0QXR0
cmlidXRlcyhjb25zdCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmplY3QpCisgICAgeworICAg
ICAgICBtX2F0dHJpYnV0ZXMuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIG1f
YXR0cmlidXRlcy5hcHBlbmQoZ2V0QXR0cmlidXRlcyhvYmplY3QpKTsKKyAgICB9CisKKyAgICBz
dHJpbmcgYXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlczsgfQorCitwcml2
YXRlOgorICAgIHN0cmluZyBtX2F0dHJpYnV0ZXM7Cit9OworCitBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
IG9iamVjdCwgRmFjdG9yeSogZmFjdG9yeSkKKyAgICA6IG1fYWNjZXNzaWJpbGl0eU9iamVjdChv
YmplY3QpCisgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKK3sKKworICAgIEFTU0VSVChmYWN0b3J5
KTsKKworICAgIC8vCisgICAgLy8gUHJvcGVydGllcworICAgIC8vCisKKyAgICBiaW5kUHJvcGVy
dHkoInJvbGUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZUdldHRlckNhbGxiYWNrKTsK
KyAgICBiaW5kUHJvcGVydHkoInRpdGxlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxl
R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiZGVzY3JpcHRpb24iLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFBy
b3BlcnR5KCJoZWxwVGV4dCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dEdldHRl
ckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoInN0cmluZ1ZhbHVlIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0
eSgieCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4R2V0dGVyQ2FsbGJhY2spOworICAgIGJp
bmRQcm9wZXJ0eSgieSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5R2V0dGVyQ2FsbGJhY2sp
OworICAgIGJpbmRQcm9wZXJ0eSgid2lkdGgiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d2lk
dGhHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJoZWlnaHQiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aGVpZ2h0R2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgi
aW50VmFsdWUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWVHZXR0ZXJDYWxsYmFj
ayk7CisgICAgYmluZFByb3BlcnR5KCJtaW5WYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptaW5WYWx1ZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoIm1heFZhbHVlIiwg
JkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlR2V0dGVyQ2FsbGJhY2spOworICAgIGJp
bmRQcm9wZXJ0eSgidmFsdWVEZXNjcmlwdGlvbiIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2
YWx1ZURlc2NyaXB0aW9uR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiY2hpbGRy
ZW5Db3VudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50R2V0dGVyQ2Fs
bGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyIiwgJkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJlckdldHRlckNhbGxi
YWNrKTsKKyAgICBiaW5kUHJvcGVydHkoInNlbGVjdGVkVGV4dFJhbmdlIiwgJkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQ
cm9wZXJ0eSgiaXNFbmFibGVkIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZEdl
dHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzUmVxdWlyZWQiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZEdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVy
dHkoImlzRm9jdXNlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWRHZXR0ZXJD
YWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpc0ZvY3VzYWJsZSIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0ZvY3VzYWJsZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHko
ImlzU2VsZWN0ZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZEdldHRlckNh
bGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzU2VsZWN0YWJsZSIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5
KCJpc011bHRpU2VsZWN0YWJsZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2Vs
ZWN0YWJsZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzU2VsZWN0ZWRPcHRp
b25BY3RpdmUiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2
ZUdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHkoImlzRXhwYW5kZWQiLCAmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6aXNFeHBhbmRlZEdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJv
cGVydHkoImlzQ2hlY2tlZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWRHZXR0
ZXJDYWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpc1Zpc2libGUiLCAmQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNWaXNpYmxlR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgi
aXNPZmZTY3JlZW4iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW5HZXR0ZXJD
YWxsYmFjayk7CisgICAgYmluZFByb3BlcnR5KCJpc0NvbGxhcHNlZCIsICZBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc0NvbGxhcHNlZEdldHRlckNhbGxiYWNrKTsKKyAgICBiaW5kUHJvcGVydHko
Imhhc1BvcHVwIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhhc1BvcHVwR2V0dGVyQ2FsbGJh
Y2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNWYWxpZCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1ZhbGlkR2V0dGVyQ2FsbGJhY2spOworICAgIGJpbmRQcm9wZXJ0eSgiaXNSZWFkT25seSIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1JlYWRPbmx5R2V0dGVyQ2FsbGJhY2spOworICAg
IGJpbmRQcm9wZXJ0eSgib3JpZW50YXRpb24iLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3Jp
ZW50YXRpb25HZXR0ZXJDYWxsYmFjayk7CisKKyAgICAvLworICAgIC8vIE1ldGhvZHMKKyAgICAv
LworCisgICAgYmluZE1ldGhvZCgiYWxsQXR0cmlidXRlcyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphbGxBdHRyaWJ1dGVzQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNP
ZkxpbmtlZFVJRWxlbWVudHMiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09m
TGlua2VkVUlFbGVtZW50c0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZE
b2N1bWVudExpbmtzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkRvY3Vt
ZW50TGlua3NDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiYXR0cmlidXRlc09mQ2hpbGRyZW4i
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ2hpbGRyZW5DYWxsYmFjayk7
CisgICAgYmluZE1ldGhvZCgibGluZUZvckluZGV4IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmxpbmVGb3JJbmRleENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJib3VuZHNGb3JSYW5nZSIs
ICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZUNhbGxiYWNrKTsKKyAgICBi
aW5kTWV0aG9kKCJzdHJpbmdGb3JSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJp
bmdGb3JSYW5nZUNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJjaGlsZEF0SW5kZXgiLCAmQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4Q2FsbGJhY2spOworICAgIGJpbmRNZXRo
b2QoImVsZW1lbnRBdFBvaW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBv
aW50Q2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnMi
LCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mQ29sdW1uSGVhZGVyc0NhbGxi
YWNrKTsKKyAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd0hlYWRlcnNDYWxsYmFjayk7CisgICAgYmlu
ZE1ldGhvZCgiYXR0cmlidXRlc09mQ29sdW1ucyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2spOworICAgIGJpbmRNZXRob2QoImF0dHJpYnV0ZXNP
ZlJvd3MiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93c0NhbGxiYWNr
KTsKKyAgICBiaW5kTWV0aG9kKCJhdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHMiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzQ2FsbGJhY2spOworICAgIGJp
bmRNZXRob2QoImF0dHJpYnV0ZXNPZkhlYWRlciIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
dHRyaWJ1dGVzT2ZIZWFkZXJDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiaW5kZXhJblRhYmxl
IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZUNhbGxiYWNrKTsKKyAgICBi
aW5kTWV0aG9kKCJyb3dJbmRleFJhbmdlIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0lu
ZGV4UmFuZ2VDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgiY29sdW1uSW5kZXhSYW5nZSIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlQ2FsbGJhY2spOworICAgIGJp
bmRNZXRob2QoImNlbGxGb3JDb2x1bW5BbmRSb3ciLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
Y2VsbEZvckNvbHVtbkFuZFJvd0NhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJ0aXRsZVVJRWxl
bWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZVVJRWxlbWVudENhbGxiYWNrKTsK
KyAgICBiaW5kTWV0aG9kKCJzZXRTZWxlY3RlZFRleHRSYW5nZSIsICZBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzZXRTZWxlY3RlZFRleHRSYW5nZUNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJh
dHRyaWJ1dGVWYWx1ZSIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVWYWx1ZUNh
bGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJpc0F0dHJpYnV0ZVNldHRhYmxlIiwgJkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGVDYWxsYmFjayk7CisgICAgYmluZE1l
dGhvZCgiaXNBY3Rpb25TdXBwb3J0ZWQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBY3Rp
b25TdXBwb3J0ZWRDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgicGFyZW50RWxlbWVudCIsICZB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50Q2FsbGJhY2spOworICAgIGJpbmRN
ZXRob2QoImluY3JlbWVudCIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmNyZW1lbnRDYWxs
YmFjayk7CisgICAgYmluZE1ldGhvZCgiZGVjcmVtZW50IiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmRlY3JlbWVudENhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJzaG93TWVudSIsICZBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpzaG93TWVudUNhbGxiYWNrKTsKKyAgICBiaW5kTWV0aG9kKCJw
cmVzcyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmVzc0NhbGxiYWNrKTsKKyAgICBiaW5k
TWV0aG9kKCJpc0VxdWFsIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWxDYWxsYmFj
ayk7CisgICAgYmluZE1ldGhvZCgiYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7CisgICAgYmlu
ZE1ldGhvZCgicmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIiLCAmQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXJDYWxsYmFjayk7CisgICAgYmluZE1ldGhv
ZCgidGFrZUZvY3VzIiwgJkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRha2VGb2N1c0NhbGxiYWNr
KTsKKyAgICBiaW5kTWV0aG9kKCJzY3JvbGxUb01ha2VWaXNpYmxlIiwgJkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVDYWxsYmFjayk7CisgICAgYmluZE1ldGhvZCgi
c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyIsICZBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzQ2FsbGJhY2spOworICAgIGJpbmRNZXRo
b2QoInNjcm9sbFRvR2xvYmFsUG9pbnQiLCAmQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xs
VG9HbG9iYWxQb2ludENhbGxiYWNrKTsKKworICAgIGJpbmRGYWxsYmFja01ldGhvZCgmQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZmFsbGJhY2tDYWxsYmFjayk7Cit9CisKK0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkQXRJbmRleCh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbV9mYWN0b3J5LT5nZXRPckNyZWF0ZShhY2Nlc3NpYmls
aXR5T2JqZWN0KCkuY2hpbGRBdChpbmRleCkpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRXF1YWwoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvdGhl
cikKK3sKKyAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdCgpLmVxdWFscyhvdGhlcik7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bm90aWZpY2F0aW9uUmVjZWl2ZWQoY29u
c3QgY2hhciogbm90aWZpY2F0aW9uTmFtZSkKK3sKKyAgICBzaXplX3QgY2FsbGJhY2tDb3VudCA9
IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNhbGxiYWNrQ291bnQ7IGkrKykgeworICAgICAgICBDcHBWYXJpYW50IG5vdGlmaWNhdGlv
bk5hbWVBcmd1bWVudDsKKyAgICAgICAgbm90aWZpY2F0aW9uTmFtZUFyZ3VtZW50LnNldChub3Rp
ZmljYXRpb25OYW1lKTsKKyAgICAgICAgQ3BwVmFyaWFudCBpbnZva2VSZXN1bHQ7CisgICAgICAg
IG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzW2ldLmludm9rZURlZmF1bHQoJm5vdGlmaWNhdGlvbk5h
bWVBcmd1bWVudCwgMSwgaW52b2tlUmVzdWx0KTsKKyAgICB9Cit9CisKKy8vCisvLyBQcm9wZXJ0
aWVzCisvLworCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoZ2V0Um9sZShhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRs
ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChn
ZXRUaXRsZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpkZXNjcmlwdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldChnZXREZXNjcmlwdGlvbihhY2Nlc3NpYmlsaXR5T2JqZWN0KCkp
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChnZXRIZWxwVGV4dChh
Y2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzdHJpbmdWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldChnZXRTdHJpbmdWYWx1ZShhY2Nlc3NpYmlsaXR5T2JqZWN0KCkpKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp4R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5ib3VuZGlu
Z0JveFJlY3QoKS54KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5R2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2li
aWxpdHlPYmplY3QoKS5ib3VuZGluZ0JveFJlY3QoKS55KTsKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp3aWR0aEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuYm91bmRpbmdCb3hSZWN0KCku
d2lkdGgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodEdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmls
aXR5T2JqZWN0KCkuYm91bmRpbmdCb3hSZWN0KCkuaGVpZ2h0KTsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjppbnRWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkudmFsdWVGb3JSYW5n
ZSgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptaW5WYWx1ZUdldHRlckNh
bGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmls
aXR5T2JqZWN0KCkubWluVmFsdWVGb3JSYW5nZSgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjptYXhWYWx1ZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkubWF4VmFsdWVGb3JSYW5nZSgp
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2YWx1ZURlc2NyaXB0aW9uR2V0
dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGdldFZh
bHVlRGVzY3JpcHRpb24oYWNjZXNzaWJpbGl0eU9iamVjdCgpKSk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRyZW5Db3VudEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBpbnQgY291bnQgPSAxOyAvLyBSb290IG9iamVjdCBhbHdheXMgaGFz
IG9ubHkgb25lIGNoaWxkLCB0aGUgV2ViVmlldy4KKyAgICBpZiAoIWlzUm9vdCgpKQorICAgICAg
ICBjb3VudCA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGlsZENvdW50KCk7CisgICAgcmVzdWx0
LT5zZXQoY291bnQpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlv
blBvaW50TGluZU51bWJlckdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBpZiAoIWFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0ZvY3VzZWQoKSkgeworICAgICAgICByZXN1
bHQtPnNldCgtMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgbGluZU51bWJl
ciA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5zZWxlY3Rpb25FbmRMaW5lTnVtYmVyKCk7CisgICAg
cmVzdWx0LT5zZXQobGluZU51bWJlcik7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgdW5zaWduZWQgc2VsZWN0aW9uU3RhcnQgPSBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2Vs
ZWN0aW9uU3RhcnQoKTsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25FbmQgPSBhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkuc2VsZWN0aW9uRW5kKCk7CisgICAgY2hhciBidWZmZXJbMTAwXTsKKyAgICBzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAieyVkLCAlZH0iLCBzZWxlY3Rpb25TdGFydCwg
c2VsZWN0aW9uRW5kIC0gc2VsZWN0aW9uU3RhcnQpOworCisgICAgcmVzdWx0LT5zZXQoc3RkOjpz
dHJpbmcoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNFbmFi
bGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0
KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0VuYWJsZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNSZXF1aXJlZEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNSZXF1aXJlZCgp
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzZWRHZXR0ZXJDYWxs
YmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0
eU9iamVjdCgpLmlzRm9jdXNlZCgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0ZvY3VzYWJsZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5
T2JqZWN0KCkuaXNTZWxlY3RlZCgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NlbGVjdGFibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmNhblNldFNlbGVjdGVkQXR0cmlidXRl
KCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxl
R2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5pc011bHRpU2VsZWN0YWJsZSgpKTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlR2V0dGVyQ2FsbGJhY2so
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmpl
Y3QoKS5pc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRXhwYW5kZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXQoIWFjY2Vzc2liaWxpdHlPYmplY3QoKS5pc0NvbGxhcHNlZCgpKTsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NoZWNrZWRHZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNjZXNzaWJpbGl0eU9i
amVjdCgpLmlzQ2hlY2tlZCgpKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1Zpc2libGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXQoYWNjZXNzaWJpbGl0eU9iamVjdCgpLmlzVmlzaWJsZSgpKTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc09mZlNjcmVlbkdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNPZmZT
Y3JlZW4oKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBzZWRH
ZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXQoYWNj
ZXNzaWJpbGl0eU9iamVjdCgpLmlzQ29sbGFwc2VkKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Omhhc1BvcHVwR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIHJlc3VsdC0+c2V0KGFjY2Vzc2liaWxpdHlPYmplY3QoKS5hcmlhSGFzUG9wdXAoKSk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWYWxpZEdldHRlckNhbGxiYWNr
KENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldCghYWNjZXNzaWJpbGl0eU9i
amVjdCgpLmlzRGV0YWNoZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNSZWFkT25seUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuaXNSZWFkT25seSgpKTsKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbkdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChnZXRPcmllbnRhdGlvbihhY2Nlc3NpYmls
aXR5T2JqZWN0KCkpKTsKK30KKworLy8KKy8vIE1ldGhvZHMKKy8vCisKK3ZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldChnZXRBdHRyaWJ1dGVz
KGFjY2Vzc2liaWxpdHlPYmplY3QoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mRG9jdW1lbnRMaW5r
c0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbkNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgQXR0cmlidXRlc0NvbGxlY3RvciBj
b2xsZWN0b3I7CisgICAgdW5zaWduZWQgc2l6ZSA9IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGls
ZENvdW50KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAg
ICAgY29sbGVjdG9yLmNvbGxlY3RBdHRyaWJ1dGVzKGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jaGls
ZEF0KGkpKTsKKyAgICByZXN1bHQtPnNldChjb2xsZWN0b3IuYXR0cmlidXRlcygpKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhbWV0cml6ZWRBdHRyaWJ1dGVOYW1lc0Nh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojps
aW5lRm9ySW5kZXhDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQoreworICAgIGlmICghYXJndW1lbnRzLnNpemUoKSB8fCAhYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgaW5kZXggPSBhcmd1bWVudHNbMF0udG9JbnQzMigp
OworCisgICAgV2ViVmVjdG9yPGludD4gbGluZUJyZWFrczsKKyAgICBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0KCkubGluZUJyZWFrcyhsaW5lQnJlYWtzKTsKKyAgICBpbnQgbGluZSA9IDA7CisgICAgaW50
IHZlY3RvclNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KGxpbmVCcmVha3Muc2l6ZSgpKTsKKyAgICB3
aGlsZSAobGluZSA8IHZlY3RvclNpemUgJiYgbGluZUJyZWFrc1tsaW5lXSA8PSBpbmRleCkKKyAg
ICAgICAgbGluZSsrOworICAgIHJlc3VsdC0+c2V0KGxpbmUpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0ZvclJhbmdlQ2FsbGJhY2soY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkQXRJbmRl
eENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgaWYgKCFhcmd1bWVudHMuc2l6ZSgpIHx8ICFhcmd1bWVudHNbMF0uaXNO
dW1iZXIoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGNoaWxkID0gZ2V0Q2hpbGRBdElu
ZGV4KGFyZ3VtZW50c1swXS50b0ludDMyKCkpOworICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAg
cmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXN1bHQt
PnNldCgqKGNoaWxkLT5nZXRBc0NwcFZhcmlhbnQoKSkpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmVsZW1lbnRBdFBvaW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mUm93SGVhZGVyc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1bW5zQ2FsbGJhY2soY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZlJvd3ND
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkhlYWRlckNhbGxiYWNrKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEluVGFibGVD
YWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cm93SW5kZXhSYW5nZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3dDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVz
dWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGVV
SUVsZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxs
KCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVt
YmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpbnQgc2VsZWN0aW9uU3RhcnQgPSBhcmd1bWVudHNbMF0udG9JbnQzMigpOworICAgIGludCBz
ZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25TdGFydCArIGFyZ3VtZW50c1sxXS50b0ludDMyKCk7Cisg
ICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNldFNlbGVjdGVkVGV4dFJhbmdlKHNlbGVjdGlvblN0
YXJ0LCBzZWxlY3Rpb25FbmQpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0
dHJpYnV0ZVZhbHVlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpIDwgMSAmJiAhYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJpbmcgYXR0
cmlidXRlID0gYXJndW1lbnRzWzBdLnRvU3RyaW5nKCk7CisgICAgYm9vbCBzZXR0YWJsZSA9IGZh
bHNlOworICAgIGlmIChhdHRyaWJ1dGUgPT0gIkFYVmFsdWUiKQorICAgICAgICBzZXR0YWJsZSA9
IGFjY2Vzc2liaWxpdHlPYmplY3QoKS5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpOworICAgIHJlc3Vs
dC0+c2V0KHNldHRhYmxlKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0Fj
dGlvblN1cHBvcnRlZENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICAvLyBUaGlzIG9uZSBtYXkgYmUgcmVhbGx5IGhhcmQgdG8gaW1wbGVt
ZW50LgorICAgIC8vIE5vdCBleHBvc2VkIGJ5IEFjY2Vzc2liaWxpdHlPYmplY3QuCisgICAgcmVz
dWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyZW50
RWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjppbmNyZW1lbnRDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51Q2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXNzQ2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGFjY2Vzc2liaWxp
dHlPYmplY3QoKS5wZXJmb3JtRGVmYXVsdEFjdGlvbigpOworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWxDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICByZXN1bHQtPnNldChhcmd1bWVudHNbMF0uaXNFcXVhbCgqZ2V0QXNDcHBWYXJpYW50KCkpKTsK
K30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphZGROb3RpZmljYXRpb25MaXN0ZW5l
ckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0u
aXNPYmplY3QoKSkgeworICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fbm90aWZpY2F0aW9uQ2FsbGJhY2tzLnB1c2hfYmFjayhhcmd1bWVu
dHNbMF0pOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojp0YWtlRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgYWNjZXNzaWJpbGl0eU9iamVjdCgpLnNldEZvY3VzZWQo
dHJ1ZSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0KCkuc2Ny
b2xsVG9NYWtlVmlzaWJsZSgpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxs
YmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
IT0gNAorICAgICAgICB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkKKyAgICAgICAgfHwgIWFy
Z3VtZW50c1sxXS5pc051bWJlcigpCisgICAgICAgIHx8ICFhcmd1bWVudHNbMl0uaXNOdW1iZXIo
KQorICAgICAgICB8fCAhYXJndW1lbnRzWzNdLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGludCB4ID0gYXJndW1lbnRzWzBdLnRvSW50MzIoKTsKKyAgICBpbnQgeSA9IGFyZ3Vt
ZW50c1sxXS50b0ludDMyKCk7CisgICAgaW50IHdpZHRoID0gYXJndW1lbnRzWzJdLnRvSW50MzIo
KTsKKyAgICBpbnQgaGVpZ2h0ID0gYXJndW1lbnRzWzNdLnRvSW50MzIoKTsKKyAgICBhY2Nlc3Np
YmlsaXR5T2JqZWN0KCkuc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhXZWJSZWN0KHgs
IHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2soY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpICE9IDIKKyAgICAg
ICAgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpCisgICAgICAgIHx8ICFhcmd1bWVudHNbMV0u
aXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHggPSBhcmd1bWVudHNbMF0u
dG9JbnQzMigpOworICAgIGludCB5ID0gYXJndW1lbnRzWzFdLnRvSW50MzIoKTsKKworICAgIGFj
Y2Vzc2liaWxpdHlPYmplY3QoKS5zY3JvbGxUb0dsb2JhbFBvaW50KFdlYlBvaW50KHgsIHkpKTsK
KyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpmYWxsYmFja0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCAmLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCitSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Um9vdEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCAmb2JqZWN0LCBGYWN0b3J5
ICpmYWN0b3J5KQorICAgIDogQWNjZXNzaWJpbGl0eVVJRWxlbWVudChvYmplY3QsIGZhY3Rvcnkp
IHsgfQorCitBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Z2V0Q2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmIChpbmRleCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZmFjdG9yeSgpLT5nZXRPckNyZWF0ZShhY2Nl
c3NpYmlsaXR5T2JqZWN0KCkpOworfQorCisKK0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0IDo6
fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0KCkKK3sKKyAgICBjbGVhcigpOworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRMaXN0OjpjbGVhcigpCit7CisgICAgZm9yIChFbGVtZW50
TGlzdDo6aXRlcmF0b3IgaSA9IG1fZWxlbWVudHMuYmVnaW4oKTsgaSAhPSBtX2VsZW1lbnRzLmVu
ZCgpOyArK2kpCisgICAgICAgIGRlbGV0ZSAoKmkpOworICAgIG1fZWxlbWVudHMuY2xlYXIoKTsK
K30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3Q6
OmdldE9yQ3JlYXRlKGNvbnN0IFdlYkFjY2Vzc2liaWxpdHlPYmplY3QmIG9iamVjdCkKK3sKKyAg
ICBpZiAob2JqZWN0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBl
bGVtZW50Q291bnQgPSBtX2VsZW1lbnRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGVsZW1lbnRDb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChtX2VsZW1lbnRzW2ldLT5pc0Vx
dWFsKG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gbV9lbGVtZW50c1tpXTsKKyAgICB9CisK
KyAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50ID0gbmV3IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQob2JqZWN0LCB0aGlzKTsKKyAgICBtX2VsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsK
KyAgICByZXR1cm4gZWxlbWVudDsKK30KKworQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogQWNjZXNz
aWJpbGl0eVVJRWxlbWVudExpc3Q6OmNyZWF0ZVJvb3QoY29uc3QgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdCYgb2JqZWN0KQoreworICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQgPSBu
ZXcgUm9vdEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQob2JqZWN0LCB0aGlzKTsKKyAgICBtX2VsZW1l
bnRzLmFwcGVuZChlbGVtZW50KTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRDaHJvbWl1bS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudENocm9taXVtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDllNzNlNTdlOWQwMzQwNGQxOGQzMzdmMGRlNTgwYTgwZTk1NTJiMAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRDaHJvbWl1bS5oCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Q2hyb21pdW1faAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Q2hyb21pdW1faAorCisjaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5oIgorI2luY2x1ZGUgIldlYkFj
Y2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCitjbGFzcyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IDogcHVibGljIENwcEJvdW5k
Q2xhc3MgeworcHVibGljOgorICAgIGNsYXNzIEZhY3RvcnkgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCB+RmFjdG9yeSgpIHsgfQorICAgICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQqIGdldE9yQ3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVj
dCYpID0gMDsKKyAgICB9OworCisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJL
aXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3QmLCBGYWN0b3J5Kik7CisKKyAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldENoaWxkQXRJbmRleCh1bnNpZ25lZCk7CisgICAgdmly
dHVhbCBib29sIGlzUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzRXF1YWwoY29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZpY2F0aW9uUmVjZWl2ZWQoY29uc3QgY2hhciAqbm90aWZpY2F0
aW9uTmFtZSk7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxp
dHlPYmplY3QmIGFjY2Vzc2liaWxpdHlPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2FjY2Vzc2li
aWxpdHlPYmplY3Q7IH0KKworICAgIEZhY3RvcnkqIGZhY3RvcnkoKSBjb25zdCB7IHJldHVybiBt
X2ZhY3Rvcnk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBCb3VuZCBwcm9wZXJ0aWVzLgorICAgIHZv
aWQgcm9sZUdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHRpdGxlR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgZGVzY3JpcHRpb25HZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBoZWxwVGV4dEdldHRlckNhbGxiYWNrKENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHN0cmluZ1ZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgeEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHlHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCB3aWR0aEdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIGhlaWdodEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIGludFZhbHVlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgbWlu
VmFsdWVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBtYXhWYWx1ZUdldHRl
ckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHZhbHVlRGVzY3JpcHRpb25HZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjaGlsZHJlbkNvdW50R2V0dGVyQ2FsbGJh
Y2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaW5zZXJ0aW9uUG9pbnRMaW5lTnVtYmVyR2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2VsZWN0ZWRUZXh0UmFuZ2VHZXR0ZXJD
YWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpc0VuYWJsZWRHZXR0ZXJDYWxsYmFjayhD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBpc1JlcXVpcmVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgaXNGb2N1c2VkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAg
IHZvaWQgaXNGb2N1c2FibGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBp
c1NlbGVjdGVkR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNTZWxlY3Rh
YmxlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNNdWx0aVNlbGVjdGFi
bGVHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpc1NlbGVjdGVkT3B0aW9u
QWN0aXZlR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgaXNFeHBhbmRlZEdl
dHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzQ2hlY2tlZEdldHRlckNhbGxi
YWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzVmlzaWJsZUdldHRlckNhbGxiYWNrKENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIGlzT2ZmU2NyZWVuR2V0dGVyQ2FsbGJhY2soQ3BwVmFyaWFudCop
OworICAgIHZvaWQgaXNDb2xsYXBzZWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAg
dm9pZCBoYXNQb3B1cEdldHRlckNhbGxiYWNrKENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzVmFs
aWRHZXR0ZXJDYWxsYmFjayhDcHBWYXJpYW50Kik7CisgICAgdm9pZCBpc1JlYWRPbmx5R2V0dGVy
Q2FsbGJhY2soQ3BwVmFyaWFudCopOworICAgIHZvaWQgb3JpZW50YXRpb25HZXR0ZXJDYWxsYmFj
ayhDcHBWYXJpYW50Kik7CisKKyAgICAvLyBCb3VuZCBtZXRob2RzLgorICAgIHZvaWQgYWxsQXR0
cmlidXRlc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAg
ICB2b2lkIGF0dHJpYnV0ZXNPZkxpbmtlZFVJRWxlbWVudHNDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZEb2N1bWVudExp
bmtzQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgYXR0cmlidXRlc09mQ2hpbGRyZW5DYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBwYXJhbWV0cml6ZWRBdHRyaWJ1dGVOYW1lc0NhbGxiYWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGxpbmVGb3JJ
bmRleENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIGJvdW5kc0ZvclJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOworICAgIHZvaWQgc3RyaW5nRm9yUmFuZ2VDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjaGlsZEF0SW5kZXhDYWxsYmFjayhjb25z
dCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBlbGVtZW50QXRQb2lu
dENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IGF0dHJpYnV0ZXNPZkNvbHVtbkhlYWRlcnNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZSb3dIZWFkZXJzQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRl
c09mQ29sdW1uc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
KyAgICB2b2lkIGF0dHJpYnV0ZXNPZlJvd3NDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1dGVzT2ZWaXNpYmxlQ2VsbHNDYWxsYmFj
ayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhdHRyaWJ1
dGVzT2ZIZWFkZXJDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgdm9pZCBpbmRleEluVGFibGVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCByb3dJbmRleFJhbmdlQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY29sdW1uSW5kZXhSYW5nZUNhbGxi
YWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGNlbGxG
b3JDb2x1bW5BbmRSb3dDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCB0aXRsZVVJRWxlbWVudENhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlQ2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgYXR0cmlidXRl
VmFsdWVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAg
dm9pZCBpc0F0dHJpYnV0ZVNldHRhYmxlQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworICAgIHZvaWQgaXNBY3Rpb25TdXBwb3J0ZWRDYWxsYmFjayhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBwYXJlbnRFbGVtZW50Q2Fs
bGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgaW5j
cmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAg
IHZvaWQgZGVjcmVtZW50Q2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOworICAgIHZvaWQgc2hvd01lbnVDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBwcmVzc0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGlzRXF1YWxDYWxsYmFjayhjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBhZGROb3RpZmljYXRpb25MaXN0ZW5l
ckNhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IHJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgdGFrZUZvY3VzQ2FsbGJhY2soY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZUNh
bGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNj
cm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2so
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgdm9pZCBmYWxsYmFj
a0NhbGxiYWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIFdl
YktpdDo6V2ViQWNjZXNzaWJpbGl0eU9iamVjdCBtX2FjY2Vzc2liaWxpdHlPYmplY3Q7CisgICAg
RmFjdG9yeSogbV9mYWN0b3J5OworICAgIHN0ZDo6dmVjdG9yPENwcFZhcmlhbnQ+IG1fbm90aWZp
Y2F0aW9uQ2FsbGJhY2tzOworfTsKKworCitjbGFzcyBSb290QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBSb290QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmplY3Qm
LCBGYWN0b3J5Kik7CisKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGdldENo
aWxkQXRJbmRleCh1bnNpZ25lZCk7CisgICAgdmlydHVhbCBib29sIGlzUm9vdCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KK307CisKKworLy8gUHJvdmlkZXMgc2ltcGxlIGxpZmV0aW1lIG1hbmFn
ZW1lbnQgb2YgdGhlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgaW5zdGFuY2VzOgorLy8gYWxsIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRzIGV2ZXIgY3JlYXRlZCBmcm9tIHRoZSBjb250cm9sbGVyIGFy
ZSBzdG9yZWQgaW4KKy8vIGEgbGlzdCBhbmQgY2xlYXJlZCBleHBsaWNpdGx5LgorY2xhc3MgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudExpc3QgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
RmFjdG9yeSB7CitwdWJsaWM6CisgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudExpc3QoKSB7IH0K
KyAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TGlzdCgpOworCisgICAgdm9pZCBj
bGVhcigpOworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZ2V0T3JDcmVhdGUo
Y29uc3QgV2ViS2l0OjpXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0Jik7CisgICAgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudCogY3JlYXRlUm9vdChjb25zdCBXZWJLaXQ6OldlYkFjY2Vzc2liaWxpdHlPYmpl
Y3QmKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Kj4gRWxlbWVudExpc3Q7CisgICAgRWxlbWVudExpc3QgbV9lbGVtZW50czsKK307CisKKyNl
bmRpZiAvLyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Q2hyb21pdW1faApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBCb3Vu
ZENsYXNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjI5ZDJiMGY1NWQwMWY3Mzg3MTQ1Nzg3N2Y5ZGJkZjA2
ZjFiNDkxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5jcHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSBQYXdlbCBIYWpkYW4gKHBoYWpkYW4uanJAY2hyb21pdW0ub3Jn
KQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgQ3BwQm91bmRDbGFzcworCisvLyBI
ZXJlJ3MgdGhlIGNvbnRyb2wgZmxvdyBvZiBhIEpTIG1ldGhvZCBnZXR0aW5nIGZvcndhcmRlZCB0
byBhIGNsYXNzLgorLy8gLSBTb21ldGhpbmcgY2FsbHMgb3VyIE5QT2JqZWN0IHdpdGggYSBmdW5j
dGlvbiBsaWtlICJJbnZva2UiLgorLy8gLSBDcHBOUE9iamVjdCdzIHN0YXRpYyBpbnZva2UoKSBm
dW5jdGlvbiBmb3J3YXJkcyBpdCB0byBpdHMgYXR0YWNoZWQKKy8vICAgQ3BwQm91bmRDbGFzcydz
IGludm9rZSgpIG1ldGhvZC4KKy8vIC0gQ3BwQm91bmRDbGFzcyBoYXMgdGhlbiBvdmVycmlkZGVu
IGludm9rZSgpIHRvIGxvb2sgdXAgdGhlIGZ1bmN0aW9uCisvLyAgIG5hbWUgaW4gaXRzIGludGVy
bmFsIG1hcCBvZiBtZXRob2RzLCBhbmQgdGhlbiBjYWxscyB0aGUgYXBwcm9wcmlhdGUKKy8vICAg
bWV0aG9kLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3BwQm91bmRDbGFzcy5o
IgorCisjaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKworY2xhc3MgQ3BwVmFyaWFudFByb3BlcnR5Q2FsbGJhY2sgOiBw
dWJsaWMgQ3BwQm91bmRDbGFzczo6UHJvcGVydHlDYWxsYmFjayB7CitwdWJsaWM6CisgICAgQ3Bw
VmFyaWFudFByb3BlcnR5Q2FsbGJhY2soQ3BwVmFyaWFudCogdmFsdWUpIDogbV92YWx1ZSh2YWx1
ZSkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0VmFsdWUoQ3BwVmFyaWFudCogdmFsdWUpCisg
ICAgeworICAgICAgICB2YWx1ZS0+c2V0KCptX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHNldFZhbHVlKGNvbnN0IENwcFZhcmlhbnQmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS0+c2V0KHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIENwcFZhcmlhbnQqIG1fdmFsdWU7Cit9Owor
CitjbGFzcyBHZXR0ZXJQcm9wZXJ0eUNhbGxiYWNrIDogcHVibGljIENwcEJvdW5kQ2xhc3M6OlBy
b3BlcnR5Q2FsbGJhY2sgeworcHVibGljOgorICAgIEdldHRlclByb3BlcnR5Q2FsbGJhY2soUGFz
c093blB0cjxDcHBCb3VuZENsYXNzOjpHZXR0ZXJDYWxsYmFjaz4gY2FsbGJhY2spCisgICAgICAg
IDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29s
IGdldFZhbHVlKENwcFZhcmlhbnQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9jYWxsYmFjay0+
cnVuKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIHNldFZhbHVlKGNvbnN0IENwcFZhcmlhbnQmIHZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQor
Citwcml2YXRlOgorICAgIE93blB0cjxDcHBCb3VuZENsYXNzOjpHZXR0ZXJDYWxsYmFjaz4gbV9j
YWxsYmFjazsKK307CisKKy8vIE91ciBzcGVjaWFsIE5QT2JqZWN0IHR5cGUuIFdlIGV4dGVuZCBh
biBOUE9iamVjdCB3aXRoIGEgcG9pbnRlciB0byBhCisvLyBDcHBCb3VuZENsYXNzLCB3aGljaCBp
cyBqdXN0IGEgQysrIGludGVyZmFjZSB0aGF0IHdlIGZvcndhcmQgYWxsIE5QT2JqZWN0CisvLyBj
YWxsYmFja3MgdG8uCitzdHJ1Y3QgQ3BwTlBPYmplY3QgeworICAgIE5QT2JqZWN0IHBhcmVudDsg
Ly8gVGhpcyBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgc3RydWN0LgorICAgIENwcEJv
dW5kQ2xhc3MqIGJvdW5kQ2xhc3M7CisKKyAgICAvLworICAgIC8vIEFsbCBmb2xsb3dpbmcgb2Jq
ZWN0cyBhbmQgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIGFuZCBqdXN0IHVzZWQgdG8gaW50ZXJmYWNl
CisgICAgLy8gd2l0aCBOUE9iamVjdC9OUENsYXNzLgorICAgIC8vCisKKyAgICAvLyBBbiBOUENs
YXNzIGFzc29jaWF0ZXMgc3RhdGljIGZ1bmN0aW9ucyBvZiBDcHBOUE9iamVjdCB3aXRoIHRoZQor
ICAgIC8vIGZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCisgICAgc3Rh
dGljIE5QQ2xhc3MgbnBDbGFzczsKKworICAgIC8vIEFsbG9jYXRlIGEgbmV3IE5QT2JqZWN0IHdp
dGggdGhlIHNwZWNpZmllZCBjbGFzcy4KKyAgICBzdGF0aWMgTlBPYmplY3QqIGFsbG9jYXRlKE5Q
UCwgTlBDbGFzcyopOworCisgICAgLy8gRnJlZSBhbiBvYmplY3QuCisgICAgc3RhdGljIHZvaWQg
ZGVhbGxvY2F0ZShOUE9iamVjdCopOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBDKysg
Y2xhc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTlBPYmplY3QgZXhwb3NlcyB0aGUKKyAgICAvLyBn
aXZlbiBwcm9wZXJ0eS4gQ2FsbGVkIGJ5IHRoZSBKUyBydW50aW1lLgorICAgIHN0YXRpYyBib29s
IGhhc1Byb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKTsKKworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgQysrIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIE5QT2JqZWN0IGV4cG9z
ZXMgdGhlCisgICAgLy8gZ2l2ZW4gbWV0aG9kLiBDYWxsZWQgYnkgdGhlIEpTIHJ1bnRpbWUuCisg
ICAgc3RhdGljIGJvb2wgaGFzTWV0aG9kKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyKTsKKworICAg
IC8vIElmIHRoZSBnaXZlbiBtZXRob2QgaXMgZXhwb3NlZCBieSB0aGUgQysrIGNsYXNzIGFzc29j
aWF0ZWQgd2l0aCB0aGlzCisgICAgLy8gTlBPYmplY3QsIGludm9rZXMgaXQgd2l0aCB0aGUgZ2l2
ZW4gYXJndW1lbnRzIGFuZCByZXR1cm5zIGEgcmVzdWx0LiBPdGhlcndpc2UsCisgICAgLy8gcmV0
dXJucyAidW5kZWZpbmVkIiAoaW4gdGhlIEphdmFTY3JpcHQgc2Vuc2UpLiBDYWxsZWQgYnkgdGhl
IEpTIHJ1bnRpbWUuCisgICAgc3RhdGljIGJvb2wgaW52b2tlKE5QT2JqZWN0KiwgTlBJZGVudGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOUFZhcmlhbnQqIGFyZ3VtZW50cywg
dWludDMyX3QgYXJndW1lbnRDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50
KiByZXN1bHQpOworCisgICAgLy8gSWYgdGhlIGdpdmVuIHByb3BlcnR5IGlzIGV4cG9zZWQgYnkg
dGhlIEMrKyBjbGFzcyBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgIC8vIE5QT2JqZWN0LCByZXR1
cm5zIGl0cyB2YWx1ZS4gT3RoZXJ3aXNlLCByZXR1cm5zICJ1bmRlZmluZWQiIChpbiB0aGUKKyAg
ICAvLyBKYXZhU2NyaXB0IHNlbnNlKS4gQ2FsbGVkIGJ5IHRoZSBKUyBydW50aW1lLgorICAgIHN0
YXRpYyBib29sIGdldFByb3BlcnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyLCBOUFZhcmlhbnQq
IHJlc3VsdCk7CisKKyAgICAvLyBJZiB0aGUgZ2l2ZW4gcHJvcGVydHkgaXMgZXhwb3NlZCBieSB0
aGUgQysrIGNsYXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgICAgLy8gTlBPYmplY3QsIHNldHMg
aXRzIHZhbHVlLiBPdGhlcndpc2UsIGRvZXMgbm90aGluZy4gQ2FsbGVkIGJ5IHRoZSBKUworICAg
IC8vIHJ1bnRpbWUuCisgICAgc3RhdGljIGJvb2wgc2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElk
ZW50aWZpZXIsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpOworfTsKKworLy8gQnVpbGQgQ3BwTlBP
YmplY3QncyBzdGF0aWMgZnVuY3Rpb24gcG9pbnRlcnMgaW50byBhbiBOUENsYXNzLCBmb3IgdXNl
CisvLyBpbiBjb25zdHJ1Y3RpbmcgTlBPYmplY3RzIGZvciB0aGUgQysrIGNsYXNzZXMuCitOUENs
YXNzIENwcE5QT2JqZWN0OjpucENsYXNzID0geworICAgIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9O
LAorICAgIENwcE5QT2JqZWN0OjphbGxvY2F0ZSwKKyAgICBDcHBOUE9iamVjdDo6ZGVhbGxvY2F0
ZSwKKyAgICAvKiBOUEludmFsaWRhdGVGdW5jdGlvblB0ciAqLyAwLAorICAgIENwcE5QT2JqZWN0
OjpoYXNNZXRob2QsCisgICAgQ3BwTlBPYmplY3Q6Omludm9rZSwKKyAgICAvKiBOUEludm9rZURl
ZmF1bHRGdW5jdGlvblB0ciAqLyAwLAorICAgIENwcE5QT2JqZWN0OjpoYXNQcm9wZXJ0eSwKKyAg
ICBDcHBOUE9iamVjdDo6Z2V0UHJvcGVydHksCisgICAgQ3BwTlBPYmplY3Q6OnNldFByb3BlcnR5
LAorICAgIC8qIE5QUmVtb3ZlUHJvcGVydHlGdW5jdGlvblB0ciAqLyAwCit9OworCitOUE9iamVj
dCogQ3BwTlBPYmplY3Q6OmFsbG9jYXRlKE5QUCBucHAsIE5QQ2xhc3MqIGFDbGFzcykKK3sKKyAg
ICBDcHBOUE9iamVjdCogb2JqID0gbmV3IENwcE5QT2JqZWN0OworICAgIC8vIG9iai0+cGFyZW50
IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlIE5QT2JqZWN0IGNvZGUgY2FsbGluZyB0aGlzLgor
ICAgIG9iai0+Ym91bmRDbGFzcyA9IDA7CisgICAgcmV0dXJuICZvYmotPnBhcmVudDsKK30KKwor
dm9pZCBDcHBOUE9iamVjdDo6ZGVhbGxvY2F0ZShOUE9iamVjdCogbnBPYmopCit7CisgICAgQ3Bw
TlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q3BwTlBPYmplY3QqPihucE9iaik7Cisg
ICAgZGVsZXRlIG9iajsKK30KKworYm9vbCBDcHBOUE9iamVjdDo6aGFzTWV0aG9kKE5QT2JqZWN0
KiBucE9iaiwgTlBJZGVudGlmaWVyIGlkZW50KQoreworICAgIENwcE5QT2JqZWN0KiBvYmogPSBy
ZWludGVycHJldF9jYXN0PENwcE5QT2JqZWN0Kj4obnBPYmopOworICAgIHJldHVybiBvYmotPmJv
dW5kQ2xhc3MtPmhhc01ldGhvZChpZGVudCk7Cit9CisKK2Jvb2wgQ3BwTlBPYmplY3Q6Omhhc1By
b3BlcnR5KE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVyIGlkZW50KQoreworICAgIENwcE5Q
T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PENwcE5QT2JqZWN0Kj4obnBPYmopOworICAg
IHJldHVybiBvYmotPmJvdW5kQ2xhc3MtPmhhc1Byb3BlcnR5KGlkZW50KTsKK30KKworYm9vbCBD
cHBOUE9iamVjdDo6aW52b2tlKE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVyIGlkZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLCB1aW50
MzJfdCBhcmd1bWVudENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCog
cmVzdWx0KQoreworICAgIENwcE5QT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PENwcE5Q
T2JqZWN0Kj4obnBPYmopOworICAgIHJldHVybiBvYmotPmJvdW5kQ2xhc3MtPmludm9rZShpZGVu
dCwgYXJndW1lbnRzLCBhcmd1bWVudENvdW50LCByZXN1bHQpOworfQorCitib29sIENwcE5QT2Jq
ZWN0OjpnZXRQcm9wZXJ0eShOUE9iamVjdCogbnBPYmosIE5QSWRlbnRpZmllciBpZGVudCwgTlBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q3BwTlBPYmplY3QqPihucE9iaik7CisgICAgcmV0dXJuIG9iai0+Ym91bmRDbGFzcy0+Z2V0
UHJvcGVydHkoaWRlbnQsIHJlc3VsdCk7Cit9CisKK2Jvb2wgQ3BwTlBPYmplY3Q6OnNldFByb3Bl
cnR5KE5QT2JqZWN0KiBucE9iaiwgTlBJZGVudGlmaWVyIGlkZW50LCBjb25zdCBOUFZhcmlhbnQq
IHZhbHVlKQoreworICAgIENwcE5QT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PENwcE5Q
T2JqZWN0Kj4obnBPYmopOworICAgIHJldHVybiBvYmotPmJvdW5kQ2xhc3MtPnNldFByb3BlcnR5
KGlkZW50LCB2YWx1ZSk7Cit9CisKK0NwcEJvdW5kQ2xhc3M6On5DcHBCb3VuZENsYXNzKCkKK3sK
KyAgICBmb3IgKE1ldGhvZExpc3Q6Oml0ZXJhdG9yIGkgPSBtX21ldGhvZHMuYmVnaW4oKTsgaSAh
PSBtX21ldGhvZHMuZW5kKCk7ICsraSkKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOworCisgICAg
Zm9yIChQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9yIGkgPSBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgaSAh
PSBtX3Byb3BlcnRpZXMuZW5kKCk7ICsraSkKKyAgICAgICAgZGVsZXRlIGktPnZhbHVlOworCisg
ICAgLy8gVW5yZWdpc3RlciBvdXJzZWx2ZXMgaWYgd2Ugd2VyZSBib3VuZCB0byBhIGZyYW1lLgor
ICAgIGlmIChtX2JvdW5kVG9GcmFtZSkKKyAgICAgICAgV2ViQmluZGluZ3M6OnVucmVnaXN0ZXJP
YmplY3QoTlBWQVJJQU5UX1RPX09CSkVDVChtX3NlbGZWYXJpYW50KSk7Cit9CisKK2Jvb2wgQ3Bw
Qm91bmRDbGFzczo6aGFzTWV0aG9kKE5QSWRlbnRpZmllciBpZGVudCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9tZXRob2RzLmZpbmQoaWRlbnQpICE9IG1fbWV0aG9kcy5lbmQoKTsKK30KKworYm9v
bCBDcHBCb3VuZENsYXNzOjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZXIgaWRlbnQpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJvcGVydGllcy5maW5kKGlkZW50KSAhPSBtX3Byb3BlcnRpZXMuZW5k
KCk7Cit9CisKK2Jvb2wgQ3BwQm91bmRDbGFzczo6aW52b2tlKE5QSWRlbnRpZmllciBpZGVudCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5QVmFyaWFudCogYXJndW1lbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOUFZhcmlhbnQqIHJlc3VsdCkgeworICAgIE1ldGhvZExpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKKyAgICBNZXRob2RMaXN0Ojpj
b25zdF9pdGVyYXRvciBtZXRob2QgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CisgICAgQ2FsbGJh
Y2sqIGNhbGxiYWNrOworICAgIGlmIChtZXRob2QgPT0gZW5kKSB7CisgICAgICAgIGlmICghbV9m
YWxsYmFja0NhbGxiYWNrLmdldCgpKSB7CisgICAgICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgq
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBj
YWxsYmFjayA9IG1fZmFsbGJhY2tDYWxsYmFjay5nZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Y2FsbGJhY2sgPSAoKm1ldGhvZCkudmFsdWU7CisKKyAgICAvLyBCdWlsZCBhIENwcEFyZ3VtZW50
TGlzdCBhcmd1bWVudCB2ZWN0b3IgZnJvbSB0aGUgTlBWYXJpYW50cyBjb21pbmcgaW4uCisgICAg
Q3BwQXJndW1lbnRMaXN0IGNwcEFyZ3VtZW50cyhhcmd1bWVudENvdW50KTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7IGkrKykKKyAgICAgICAgY3BwQXJndW1lbnRz
W2ldLnNldChhcmd1bWVudHNbaV0pOworCisgICAgQ3BwVmFyaWFudCBjcHBSZXN1bHQ7CisgICAg
Y2FsbGJhY2stPnJ1bihjcHBBcmd1bWVudHMsICZjcHBSZXN1bHQpOworCisgICAgY3BwUmVzdWx0
LmNvcHlUb05QVmFyaWFudChyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENw
cEJvdW5kQ2xhc3M6OmdldFByb3BlcnR5KE5QSWRlbnRpZmllciBpZGVudCwgTlBWYXJpYW50KiBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgUHJvcGVydHlMaXN0Ojpjb25zdF9pdGVyYXRvciBjYWxsYmFj
ayA9IG1fcHJvcGVydGllcy5maW5kKGlkZW50KTsKKyAgICBpZiAoY2FsbGJhY2sgPT0gbV9wcm9w
ZXJ0aWVzLmVuZCgpKSB7CisgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQ3BwVmFyaWFudCBjcHBWYWx1ZTsKKyAg
ICBpZiAoIWNhbGxiYWNrLT52YWx1ZS0+Z2V0VmFsdWUoJmNwcFZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNwcFZhbHVlLmNvcHlUb05QVmFyaWFudChyZXN1bHQpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIENwcEJvdW5kQ2xhc3M6OnNldFByb3BlcnR5KE5QSWRlbnRp
ZmllciBpZGVudCwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSkKK3sKKyAgICBQcm9wZXJ0eUxpc3Q6
Oml0ZXJhdG9yIGNhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOworICAgIGlmIChj
YWxsYmFjayA9PSBtX3Byb3BlcnRpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIENwcFZhcmlhbnQgY3BwVmFsdWU7CisgICAgY3BwVmFsdWUuc2V0KCp2YWx1ZSk7CisgICAg
cmV0dXJuICgqY2FsbGJhY2spLnZhbHVlLT5zZXRWYWx1ZShjcHBWYWx1ZSk7Cit9CisKK3ZvaWQg
Q3BwQm91bmRDbGFzczo6YmluZENhbGxiYWNrKGNvbnN0IHN0cmluZyYgbmFtZSwgQ2FsbGJhY2sq
IGNhbGxiYWNrKQoreworICAgIE5QSWRlbnRpZmllciBpZGVudCA9IFdlYkJpbmRpbmdzOjpnZXRT
dHJpbmdJZGVudGlmaWVyKG5hbWUuY19zdHIoKSk7CisgICAgTWV0aG9kTGlzdDo6aXRlcmF0b3Ig
b2xkQ2FsbGJhY2sgPSBtX21ldGhvZHMuZmluZChpZGVudCk7CisgICAgaWYgKG9sZENhbGxiYWNr
ICE9IG1fbWV0aG9kcy5lbmQoKSkgeworICAgICAgICBkZWxldGUgb2xkQ2FsbGJhY2stPnZhbHVl
OworICAgICAgICBpZiAoIWNhbGxiYWNrKSB7CisgICAgICAgICAgICBtX21ldGhvZHMucmVtb3Zl
KG9sZENhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIG1fbWV0aG9kcy5zZXQoaWRlbnQsIGNhbGxiYWNrKTsKK30KKwordm9pZCBDcHBCb3VuZENs
YXNzOjpiaW5kR2V0dGVyQ2FsbGJhY2soY29uc3Qgc3RyaW5nJiBuYW1lLCBQYXNzT3duUHRyPEdl
dHRlckNhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBQcm9wZXJ0eUNhbGxiYWNrKiBwcm9wZXJ0
eUNhbGxiYWNrID0gY2FsbGJhY2sgPyBuZXcgR2V0dGVyUHJvcGVydHlDYWxsYmFjayhjYWxsYmFj
aykgOiAwOworICAgIGJpbmRQcm9wZXJ0eShuYW1lLCBwcm9wZXJ0eUNhbGxiYWNrKTsKK30KKwor
dm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kUHJvcGVydHkoY29uc3Qgc3RyaW5nJiBuYW1lLCBDcHBW
YXJpYW50KiBwcm9wKQoreworICAgIFByb3BlcnR5Q2FsbGJhY2sqIHByb3BlcnR5Q2FsbGJhY2sg
PSBwcm9wID8gbmV3IENwcFZhcmlhbnRQcm9wZXJ0eUNhbGxiYWNrKHByb3ApIDogMDsKKyAgICBi
aW5kUHJvcGVydHkobmFtZSwgcHJvcGVydHlDYWxsYmFjayk7Cit9CisKK3ZvaWQgQ3BwQm91bmRD
bGFzczo6YmluZFByb3BlcnR5KGNvbnN0IHN0cmluZyYgbmFtZSwgUHJvcGVydHlDYWxsYmFjayog
Y2FsbGJhY2spCit7CisgICAgTlBJZGVudGlmaWVyIGlkZW50ID0gV2ViQmluZGluZ3M6OmdldFN0
cmluZ0lkZW50aWZpZXIobmFtZS5jX3N0cigpKTsKKyAgICBQcm9wZXJ0eUxpc3Q6Oml0ZXJhdG9y
IG9sZENhbGxiYWNrID0gbV9wcm9wZXJ0aWVzLmZpbmQoaWRlbnQpOworICAgIGlmIChvbGRDYWxs
YmFjayAhPSBtX3Byb3BlcnRpZXMuZW5kKCkpIHsKKyAgICAgICAgZGVsZXRlIG9sZENhbGxiYWNr
LT52YWx1ZTsKKyAgICAgICAgaWYgKCFjYWxsYmFjaykgeworICAgICAgICAgICAgbV9wcm9wZXJ0
aWVzLnJlbW92ZShvbGRDYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX3Byb3BlcnRpZXMuc2V0KGlkZW50LCBjYWxsYmFjayk7Cit9CisKK2Jv
b2wgQ3BwQm91bmRDbGFzczo6aXNNZXRob2RSZWdpc3RlcmVkKGNvbnN0IHN0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICBOUElkZW50aWZpZXIgaWRlbnQgPSBXZWJCaW5kaW5nczo6Z2V0U3RyaW5n
SWRlbnRpZmllcihuYW1lLmNfc3RyKCkpOworICAgIE1ldGhvZExpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGNhbGxiYWNrID0gbV9tZXRob2RzLmZpbmQoaWRlbnQpOworICAgIHJldHVybiBjYWxsYmFjayAh
PSBtX21ldGhvZHMuZW5kKCk7Cit9CisKK0NwcFZhcmlhbnQqIENwcEJvdW5kQ2xhc3M6OmdldEFz
Q3BwVmFyaWFudCgpCit7CisgICAgaWYgKCFtX3NlbGZWYXJpYW50LmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgLy8gQ3JlYXRlIGFuIE5QT2JqZWN0IHVzaW5nIG91ciBzdGF0aWMgTlBDbGFzcy4gVGhl
IGZpcnN0IGFyZ3VtZW50IChhCisgICAgICAgIC8vIHBsdWdpbidzIGluc3RhbmNlIGhhbmRsZSkg
aXMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIGFsbG9jYXRlIGZ1bmN0aW9uCisgICAgICAgIC8vIGRp
cmVjdGx5LCBhbmQgd2UgZG9uJ3QgdXNlIGl0LCBzbyBpdCdzIG9rIHRvIGJlIDAuCisgICAgICAg
IE5QT2JqZWN0KiBucE9iaiA9IFdlYkJpbmRpbmdzOjpjcmVhdGVPYmplY3QoMCwgJkNwcE5QT2Jq
ZWN0OjpucENsYXNzKTsKKyAgICAgICAgQ3BwTlBPYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q3BwTlBPYmplY3QqPihucE9iaik7CisgICAgICAgIG9iai0+Ym91bmRDbGFzcyA9IHRoaXM7
CisgICAgICAgIG1fc2VsZlZhcmlhbnQuc2V0KG5wT2JqKTsKKyAgICAgICAgV2ViQmluZGluZ3M6
OnJlbGVhc2VPYmplY3QobnBPYmopOyAvLyBDcHBWYXJpYW50IHRha2VzIHRoZSByZWZlcmVuY2Uu
CisgICAgfQorICAgIEFTU0VSVChtX3NlbGZWYXJpYW50LmlzT2JqZWN0KCkpOworICAgIHJldHVy
biAmbV9zZWxmVmFyaWFudDsKK30KKwordm9pZCBDcHBCb3VuZENsYXNzOjpiaW5kVG9KYXZhc2Ny
aXB0KFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViU3RyaW5nJiBjbGFzc25hbWUpCit7CisgICAg
Ly8gQmluZFRvV2luZG93T2JqZWN0IHdpbGwgdGFrZSBpdHMgb3duIHJlZmVyZW5jZSB0byB0aGUg
TlBPYmplY3QsIGFuZCBjbGVhbgorICAgIC8vIHVwIGFmdGVyIGl0c2VsZi4gSXQgd2lsbCBhbHNv
IChpbmRpcmVjdGx5KSByZWdpc3RlciB0aGUgb2JqZWN0IHdpdGggVjgsCisgICAgLy8gc28gd2Ug
bXVzdCByZW1lbWJlciB0aGlzIHNvIHdlIGNhbiB1bnJlZ2lzdGVyIGl0IHdoZW4gd2UncmUgZGVz
dHJveWVkLgorICAgIGZyYW1lLT5iaW5kVG9XaW5kb3dPYmplY3QoY2xhc3NuYW1lLCBOUFZBUklB
TlRfVE9fT0JKRUNUKCpnZXRBc0NwcFZhcmlhbnQoKSkpOworICAgIG1fYm91bmRUb0ZyYW1lID0g
dHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL0NwcEJvdW5kQ2xhc3MuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL0NwcEJvdW5kQ2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZmI1MzYxZTFiYzgz
ZGEwYzYzNWQ0N2ExM2YzYTRhNDNmNmI5NDViCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwQm91bmRDbGFzcy5oCkBAIC0w
LDAgKzEsMjQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUGF3ZWwgSGFqZGFuIChwaGFq
ZGFuLmpyQGNocm9taXVtLm9yZykKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvKgorICBDcHBCb3VuZENsYXNzIGNsYXNzOgorICBUaGlzIGJhc2Ug
Y2xhc3Mgc2VydmVzIGFzIGEgcGFyZW50IGZvciBDKysgY2xhc3NlcyBkZXNpZ25lZCB0byBiZSBi
b3VuZCB0bworICBKYXZhU2NyaXB0IG9iamVjdHMuCisKKyAgU3ViY2xhc3NlcyBzaG91bGQgZGVm
aW5lIHRoZSBjb25zdHJ1Y3RvciB0byBidWlsZCB0aGUgcHJvcGVydHkgYW5kIG1ldGhvZAorICBs
aXN0cyBuZWVkZWQgdG8gYmluZCB0aGlzIGNsYXNzIHRvIGEgSlMgb2JqZWN0LiAgVGhleSBzaG91
bGQgYWxzbyBkZWNsYXJlCisgIGFuZCBkZWZpbmUgbWVtYmVyIHZhcmlhYmxlcyBhbmQgbWV0aG9k
cyB0byBiZSBleHBvc2VkIHRvIEpTIHRocm91Z2gKKyAgdGhhdCBvYmplY3QuCisqLworCisjaWZu
ZGVmIENwcEJvdW5kQ2xhc3NfaAorI2RlZmluZSBDcHBCb3VuZENsYXNzX2gKKworI2luY2x1ZGUg
IkNwcFZhcmlhbnQuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJGcmFtZTsKK2NsYXNzIFdlYlN0cmluZzsKK30KKwordHlwZWRlZiBWZWN0b3I8
Q3BwVmFyaWFudD4gQ3BwQXJndW1lbnRMaXN0OworCisvLyBDcHBCb3VuZENsYXNzIGxldHMgeW91
IG1hcCBKYXZhc2NyaXB0IG1ldGhvZCBjYWxscyBhbmQgcHJvcGVydHkgYWNjZXNzZXMKKy8vIGRp
cmVjdGx5IHRvIEMrKyBtZXRob2QgY2FsbHMgYW5kIENwcFZhcmlhbnQqIHZhcmlhYmxlIGFjY2Vz
cy4KK2NsYXNzIENwcEJvdW5kQ2xhc3MgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENwcEJv
dW5kQ2xhc3MpOworcHVibGljOgorICAgIGNsYXNzIFByb3BlcnR5Q2FsbGJhY2sgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UHJvcGVydHlDYWxsYmFjaygpIHsgfQorCisgICAgICAg
IC8vIFNldHMgfHZhbHVlfCB0byB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LiBSZXR1cm5zIGZh
bHNlIGluIGNhc2Ugb2YKKyAgICAgICAgLy8gZmFpbHVyZS4gfHZhbHVlfCBpcyBhbHdheXMgbm9u
LTAuCisgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRWYWx1ZShDcHBWYXJpYW50KiByZXN1bHQpID0g
MDsKKworICAgICAgICAvLyBzZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSB0byB8dmFsdWV8LiBSZXR1
cm5zIGZhbHNlIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAgICAgICAgdmlydHVhbCBib29sIHNldFZh
bHVlKGNvbnN0IENwcFZhcmlhbnQmKSA9IDA7CisgICAgfTsKKworICAgIC8vIENhbGxiYWNrIGNs
YXNzIGZvciAidm9pZCBmdW5jdGlvbihDcHBWYXJpYW50KikiCisgICAgY2xhc3MgR2V0dGVyQ2Fs
bGJhY2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+R2V0dGVyQ2FsbGJhY2soKSB7
IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bihDcHBWYXJpYW50KikgPSAwOworICAgIH07CisK
KyAgICAvLyBUaGUgY29uc3RydWN0b3Igc2hvdWxkIGNhbGwgQmluZE1ldGhvZCwgQmluZFByb3Bl
cnR5LCBhbmQKKyAgICAvLyBTZXRGYWxsYmFja01ldGhvZCBhcyBuZWVkZWQgdG8gc2V0IHVwIHRo
ZSBtZXRob2RzLCBwcm9wZXJ0aWVzLCBhbmQKKyAgICAvLyBmYWxsYmFjayBtZXRob2QuCisgICAg
Q3BwQm91bmRDbGFzcygpIDogbV9ib3VuZFRvRnJhbWUoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwg
fkNwcEJvdW5kQ2xhc3MoKTsKKworICAgIC8vIFJldHVybiBhIENwcFZhcmlhbnQgcmVwcmVzZW50
aW5nIHRoaXMgY2xhc3MsIGZvciB1c2Ugd2l0aCBCaW5kUHJvcGVydHkoKS4KKyAgICAvLyBUaGUg
dmFyaWFudCB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgTlBWYXJpYW50VHlwZV9PYmplY3QuCisg
ICAgQ3BwVmFyaWFudCogZ2V0QXNDcHBWYXJpYW50KCk7CisKKyAgICAvLyBHaXZlbiBhIFdlYkZy
YW1lLCBCaW5kVG9KYXZhc2NyaXB0IGJ1aWxkcyB0aGUgTlBPYmplY3QgdGhhdCB3aWxsIHJlcHJl
c2VudAorICAgIC8vIHRoZSBjbGFzcyBhbmQgYmluZHMgaXQgdG8gdGhlIGZyYW1lJ3Mgd2luZG93
IHVuZGVyIHRoZSBnaXZlbiBuYW1lLiBUaGlzCisgICAgLy8gc2hvdWxkIGdlbmVyYWxseSBiZSBj
YWxsZWQgZnJvbSB0aGUgV2ViVmlldyBkZWxlZ2F0ZSdzCisgICAgLy8gV2luZG93T2JqZWN0Q2xl
YXJlZCgpLiBBIGNsYXNzIHNvIGJvdW5kIHdpbGwgYmUgYWNjZXNzaWJsZSB0byBKYXZhU2NyaXB0
CisgICAgLy8gYXMgd2luZG93LjxjbGFzc25hbWU+LiBUaGUgb3duZXIgb2YgdGhlIENwcEJvdW5k
T2JqZWN0IGlzIHJlc3BvbnNpYmxlIGZvcgorICAgIC8vIGtlZXBpbmcgdGhlIG9iamVjdCBhcm91
bmQgd2hpbGUgdGhlIGZyYW1lIGlzIGFsaXZlLCBhbmQgZm9yIGRlc3Ryb3lpbmcgaXQKKyAgICAv
LyBhZnRlcndhcmRzLgorICAgIHZvaWQgYmluZFRvSmF2YXNjcmlwdChXZWJLaXQ6OldlYkZyYW1l
KiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNsYXNzbmFtZSk7CisKKyAgICAvLyBVc2VkIGJ5
IGEgdGVzdC4gUmV0dXJucyB0cnVlIGlmIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1l
IGV4aXN0cywKKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBmYWxsYmFjayBpcyByZWdp
c3RlcmVkLgorICAgIGJvb2wgaXNNZXRob2RSZWdpc3RlcmVkKGNvbnN0IHN0ZDo6c3RyaW5nJikg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDYWxsYmFjayBmb3IgInZvaWQgZnVuY3Rpb24o
Y29uc3QgQ3BwQXJndWVtbnRMaXN0JiwgQ3BwVmFyaWFudCopIgorICAgIGNsYXNzIENhbGxiYWNr
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNhbGxiYWNrKCkgeyB9CisgICAgICAg
IHZpcnR1YWwgdm9pZCBydW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopID0g
MDsKKyAgICB9OworCisgICAgLy8gQ2FsbGJhY2sgZm9yICJ2b2lkIFQ6Om1ldGhvZChjb25zdCBD
cHBBcmd1ZW1udExpc3QmLCBDcHBWYXJpYW50KikiCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+IGNs
YXNzIE1lbWJlckNhbGxiYWNrIDogcHVibGljIENhbGxiYWNrIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZFR5cGUpKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKKyAgICAgICAgTWVtYmVyQ2FsbGJhY2soVCogb2JqZWN0LCBNZXRob2RU
eXBlIG1ldGhvZCkKKyAgICAgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAgICAg
LCBtX21ldGhvZChtZXRob2QpIHsgfQorICAgICAgICB2aXJ0dWFsIH5NZW1iZXJDYWxsYmFjaygp
IHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBydW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBh
cmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgKG1f
b2JqZWN0LT4qbV9tZXRob2QpKGFyZ3VtZW50cywgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgVCogbV9vYmplY3Q7CisgICAgICAgIE1ldGhvZFR5cGUgbV9tZXRo
b2Q7CisgICAgfTsKKworICAgIC8vIENhbGxiYWNrIGNsYXNzIGZvciAidm9pZCBUOjptZXRob2Qo
Q3BwVmFyaWFudCopIgorICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBNZW1iZXJHZXR0ZXJD
YWxsYmFjayA6IHB1YmxpYyBHZXR0ZXJDYWxsYmFjayB7CisgICAgcHVibGljOgorICAgICAgICB0
eXBlZGVmIHZvaWQgKFQ6OipNZXRob2RUeXBlKShDcHBWYXJpYW50Kik7CisgICAgICAgIE1lbWJl
ckdldHRlckNhbGxiYWNrKFQqIG9iamVjdCwgTWV0aG9kVHlwZSBtZXRob2QpCisgICAgICAgICAg
ICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgICAgICwgbV9tZXRob2QobWV0aG9kKSB7IH0K
KyAgICAgICAgdmlydHVhbCB+TWVtYmVyR2V0dGVyQ2FsbGJhY2soKSB7IH0KKworICAgICAgICB2
aXJ0dWFsIHZvaWQgcnVuKENwcFZhcmlhbnQqIHJlc3VsdCkgeyAobV9vYmplY3QtPiptX21ldGhv
ZCkocmVzdWx0KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVCogbV9vYmplY3Q7CisgICAg
ICAgIE1ldGhvZFR5cGUgbV9tZXRob2Q7CisgICAgfTsKKworICAgIC8vIEJpbmQgdGhlIEphdmFz
Y3JpcHQgbWV0aG9kIGNhbGxlZCB0aGUgc3RyaW5nIHBhcmFtZXRlciB0byB0aGUgQysrIG1ldGhv
ZC4KKyAgICB2b2lkIGJpbmRDYWxsYmFjayhjb25zdCBzdGQ6OnN0cmluZyYsIENhbGxiYWNrKik7
CisKKyAgICAvLyBBIHdyYXBwZXIgZm9yIGJpbmRDYWxsYmFjaywgdG8gc2ltcGxpZnkgdGhlIGNv
bW1vbiBjYXNlIG9mIGJpbmRpbmcgYQorICAgIC8vIG1ldGhvZCBvbiB0aGUgY3VycmVudCBvYmpl
Y3QuIFRob3VnaCBub3QgdmVyaWZpZWQgaGVyZSwgdGhlIG1ldGhvZCBwYXJhbWV0ZXIKKyAgICAv
LyBtdXN0IGJlIGEgbWV0aG9kIG9mIHRoaXMgQ3BwQm91bmRDbGFzcyBzdWJjbGFzcy4KKyAgICB0
ZW1wbGF0ZTxjbGFzcyBUPgorICAgIHZvaWQgYmluZE1ldGhvZChjb25zdCBzdGQ6OnN0cmluZyYg
bmFtZSwgdm9pZCAoVDo6Km1ldGhvZCkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopKQorICAgIHsKKyAgICAgICAgQ2FsbGJhY2sqIGNhbGxiYWNrID0gbmV3IE1lbWJlckNhbGxi
YWNrPFQ+KHN0YXRpY19jYXN0PFQqPih0aGlzKSwgbWV0aG9kKTsKKyAgICAgICAgYmluZENhbGxi
YWNrKG5hbWUsIGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICAvLyBCaW5kIEphdmFzY3JpcHQgcHJv
cGVydHkgfG5hbWV8IHRvIHRoZSBDKysgZ2V0dGVyIGNhbGxiYWNrIHxjYWxsYmFja3wuCisgICAg
Ly8gVGhpcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgcmVhZC1vbmx5IHByb3BlcnRpZXMuCisgICAg
dm9pZCBiaW5kR2V0dGVyQ2FsbGJhY2soY29uc3Qgc3RkOjpzdHJpbmcmLCBQYXNzT3duUHRyPEdl
dHRlckNhbGxiYWNrPik7CisKKyAgICAvLyBBIHdyYXBwZXIgZm9yIEJpbmRHZXR0ZXJDYWxsYmFj
aywgdG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBjYXNlIG9mIGJpbmRpbmcgYQorICAgIC8vIHByb3Bl
cnR5IG9uIHRoZSBjdXJyZW50IG9iamVjdC4gVGhvdWdoIG5vdCB2ZXJpZmllZCBoZXJlLCB0aGUg
bWV0aG9kIHBhcmFtZXRlcgorICAgIC8vIG11c3QgYmUgYSBtZXRob2Qgb2YgdGhpcyBDcHBCb3Vu
ZENsYXNzIHN1YmNsYXNzLgorICAgIHRlbXBsYXRlPGNsYXNzIFQ+CisgICAgdm9pZCBiaW5kUHJv
cGVydHkoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUsIHZvaWQgKFQ6OiptZXRob2QpKENwcFZhcmlh
bnQqKSkKKyAgICB7CisgICAgICAgIE93blB0cjxHZXR0ZXJDYWxsYmFjaz4gY2FsbGJhY2sgPSBh
ZG9wdFB0cihuZXcgTWVtYmVyR2V0dGVyQ2FsbGJhY2s8VD4oc3RhdGljX2Nhc3Q8VCo+KHRoaXMp
LCBtZXRob2QpKTsKKyAgICAgICAgYmluZEdldHRlckNhbGxiYWNrKG5hbWUsIGNhbGxiYWNrLnJl
bGVhc2UoKSk7CisgICAgfQorCisgICAgLy8gQmluZCB0aGUgSmF2YXNjcmlwdCBwcm9wZXJ0eSBj
YWxsZWQgfG5hbWV8IHRvIGEgQ3BwVmFyaWFudC4KKyAgICB2b2lkIGJpbmRQcm9wZXJ0eShjb25z
dCBzdGQ6OnN0cmluZyYsIENwcFZhcmlhbnQqKTsKKworICAgIC8vIEJpbmQgSmF2YXNjcmlwdCBw
cm9wZXJ0eSBjYWxsZWQgfG5hbWV8IHRvIGEgUHJvcGVydHlDYWxsYmFjay4KKyAgICAvLyBDcHBC
b3VuZENsYXNzIGFzc3VtZXMgY29udHJvbCBvdmVyIHRoZSBsaWZlIHRpbWUgb2YgdGhlIGNhbGxi
YWNrLgorICAgIHZvaWQgYmluZFByb3BlcnR5KGNvbnN0IHN0ZDo6c3RyaW5nJiwgUHJvcGVydHlD
YWxsYmFjayopOworCisgICAgLy8gU2V0IHRoZSBmYWxsYmFjayBjYWxsYmFjaywgd2hpY2ggaXMg
Y2FsbGVkIHdoZW4gd2hlbiBhIGNhbGxiYWNrIGlzCisgICAgLy8gaW52b2tlZCB0aGF0IGlzbid0
IGJvdW5kLgorICAgIC8vIElmIGl0IGlzIDAgKGl0cyBkZWZhdWx0IHZhbHVlKSwgYSBKYXZhU2Ny
aXB0IGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4KKyAgICAvLyB0aGF0IGNhc2UgKGFzIG5vcm1hbGx5
IGV4cGVjdGVkKS4gSWYgbm9uIDAsIHRoZSBmYWxsYmFjayBtZXRob2QgaXMKKyAgICAvLyBpbnZv
a2VkIGFuZCB0aGUgc2NyaXB0IGNvbnRpbnVlcyBpdHMgZXhlY3V0aW9uLgorICAgIC8vIFBhc3Np
bmcgMCBjbGVhcnMgb3V0IGFueSBleGlzdGluZyBiaW5kaW5nLgorICAgIC8vIEl0IGlzIHVzZWQg
Zm9yIHRlc3RzIGFuZCBzaG91bGQgcHJvYmFibHkgb25seSBiZSB1c2VkIGluIHN1Y2ggY2FzZXMK
KyAgICAvLyBhcyBpdCBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMgKGEgSmF2YVNjcmlw
dCBvYmplY3Qgd2l0aCBhCisgICAgLy8gZmFsbGJhY2sgYWx3YXlzIHJldHVybnMgdHJ1ZSB3aGVu
IGNoZWNrZWQgZm9yIGEgbWV0aG9kJ3MKKyAgICAvLyBleGlzdGVuY2UpLgorICAgIHZvaWQgYmlu
ZEZhbGxiYWNrQ2FsbGJhY2soUGFzc093blB0cjxDYWxsYmFjaz4gZmFsbGJhY2tDYWxsYmFjaykK
KyAgICB7CisgICAgICAgIG1fZmFsbGJhY2tDYWxsYmFjayA9IGZhbGxiYWNrQ2FsbGJhY2s7Cisg
ICAgfQorCisgICAgLy8gQSB3cmFwcGVyIGZvciBCaW5kRmFsbGJhY2tDYWxsYmFjaywgdG8gc2lt
cGxpZnkgdGhlIGNvbW1vbiBjYXNlIG9mCisgICAgLy8gYmluZGluZyBhIG1ldGhvZCBvbiB0aGUg
Y3VycmVudCBvYmplY3QuIFRob3VnaCBub3QgdmVyaWZpZWQgaGVyZSwKKyAgICAvLyB8bWV0aG9k
fCBtdXN0IGJlIGEgbWV0aG9kIG9mIHRoaXMgQ3BwQm91bmRDbGFzcyBzdWJjbGFzcy4KKyAgICAv
LyBQYXNzaW5nIDAgZm9yIHxtZXRob2R8IGNsZWFycyBvdXQgYW55IGV4aXN0aW5nIGJpbmRpbmcu
CisgICAgdGVtcGxhdGU8Y2xhc3MgVD4KKyAgICB2b2lkIGJpbmRGYWxsYmFja01ldGhvZCh2b2lk
IChUOjoqbWV0aG9kKShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KikpCisgICAg
eworICAgICAgICBpZiAobWV0aG9kKSB7CisgICAgICAgICAgICBPd25QdHI8Q2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRQdHIobmV3IE1lbWJlckNhbGxiYWNrPFQ+KHN0YXRpY19jYXN0PFQqPih0
aGlzKSwgbWV0aG9kKSk7CisgICAgICAgICAgICBiaW5kRmFsbGJhY2tDYWxsYmFjayhjYWxsYmFj
ay5yZWxlYXNlKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJpbmRGYWxsYmFja0Nh
bGxiYWNrKG51bGxwdHIpOworICAgIH0KKworICAgIC8vIFNvbWUgZmllbGRzIGFyZSBwcm90ZWN0
ZWQgYmVjYXVzZSBzb21lIHRlc3RzIGRlcGVuZCBvbiBhY2Nlc3NpbmcgdGhlbSwKKyAgICAvLyBi
dXQgb3RoZXJ3aXNlIHRoZXkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4KKworICAgIHR5
cGVkZWYgSGFzaE1hcDxOUElkZW50aWZpZXIsIFByb3BlcnR5Q2FsbGJhY2sqPiBQcm9wZXJ0eUxp
c3Q7CisgICAgdHlwZWRlZiBIYXNoTWFwPE5QSWRlbnRpZmllciwgQ2FsbGJhY2sqPiBNZXRob2RM
aXN0OworICAgIC8vIFRoZXNlIG1hcHMgYXNzb2NpYXRlIG5hbWVzIHdpdGggcHJvcGVydHkgYW5k
IG1ldGhvZCBwb2ludGVycyB0byBiZQorICAgIC8vIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KKyAg
ICBQcm9wZXJ0eUxpc3QgbV9wcm9wZXJ0aWVzOworICAgIE1ldGhvZExpc3QgbV9tZXRob2RzOwor
CisgICAgLy8gVGhlIGNhbGxiYWNrIGdldHMgaW52b2tlZCB3aGVuIGEgY2FsbCBpcyBtYWRlIHRv
IGFuIG5vbmV4aXN0ZW50IG1ldGhvZC4KKyAgICBPd25QdHI8Q2FsbGJhY2s+IG1fZmFsbGJhY2tD
YWxsYmFjazsKKworcHJpdmF0ZToKKyAgICAvLyBOUE9iamVjdCBjYWxsYmFja3MuCisgICAgZnJp
ZW5kIHN0cnVjdCBDcHBOUE9iamVjdDsKKyAgICBib29sIGhhc01ldGhvZChOUElkZW50aWZpZXIp
IGNvbnN0OworICAgIGJvb2wgaW52b2tlKE5QSWRlbnRpZmllciwgY29uc3QgTlBWYXJpYW50KiBh
cmdzLCBzaXplX3QgYXJnQ291bnQsCisgICAgICAgICAgICAgICAgTlBWYXJpYW50KiByZXN1bHQp
OworICAgIGJvb2wgaGFzUHJvcGVydHkoTlBJZGVudGlmaWVyKSBjb25zdDsKKyAgICBib29sIGdl
dFByb3BlcnR5KE5QSWRlbnRpZmllciwgTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0OworICAgIGJv
b2wgc2V0UHJvcGVydHkoTlBJZGVudGlmaWVyLCBjb25zdCBOUFZhcmlhbnQqKTsKKworICAgIC8v
IEEgbGF6aWx5LWluaXRpYWxpemVkIENwcFZhcmlhbnQgcmVwcmVzZW50aW5nIHRoaXMgY2xhc3Mu
IFdlIHJldGFpbiAxCisgICAgLy8gcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LCBhbmQgaXQgaXMg
cmVsZWFzZWQgb24gZGVsZXRpb24uCisgICAgQ3BwVmFyaWFudCBtX3NlbGZWYXJpYW50OworCisg
ICAgLy8gVHJ1ZSBpZiBvdXIgbnBfb2JqZWN0IGhhcyBiZWVuIGJvdW5kIHRvIGEgV2ViRnJhbWUs
IGluIHdoaWNoIGNhc2UgaXQgbXVzdAorICAgIC8vIGJlIHVucmVnaXN0ZXJlZCB3aXRoIFY4IHdo
ZW4gd2UgZGVsZXRlIGl0LgorICAgIGJvb2wgbV9ib3VuZFRvRnJhbWU7Cit9OworCisjZW5kaWYg
Ly8gQ3BwQm91bmRDbGFzc19oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9DcHBWYXJpYW50LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0NwcFZhcmlhbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ODdk
NzVhYWM1MThkZDkxODBlMWU0YTdlYzY2YTU0NTFhZGE2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9DcHBWYXJpYW50LmNw
cApAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcHBWYXJp
YW50LmgiCisKKyNpbmNsdWRlICJXZWJCaW5kaW5ncy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK0NwcFZh
cmlhbnQ6OkNwcFZhcmlhbnQoKQoreworICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBlX051bGw7Cit9
CisKKy8vIE5vdGUgdGhhdCBTZXQoKSBwZXJmb3JtcyBhIGRlZXAgY29weSwgd2hpY2ggaXMgbmVj
ZXNzYXJ5IHRvIHNhZmVseQorLy8gY2FsbCBGcmVlRGF0YSgpIG9uIHRoZSB2YWx1ZSBpbiB0aGUg
ZGVzdHJ1Y3Rvci4KK0NwcFZhcmlhbnQ6OkNwcFZhcmlhbnQoY29uc3QgQ3BwVmFyaWFudCYgb3Jp
Z2luYWwpCit7CisgICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfTnVsbDsKKyAgICBzZXQob3JpZ2lu
YWwpOworfQorCisvLyBTZWUgY29tbWVudCBmb3IgY29weSBjb25zdHJ1Y3RvciwgYWJvdmUuCitD
cHBWYXJpYW50JiBDcHBWYXJpYW50OjpvcGVyYXRvcj0oY29uc3QgQ3BwVmFyaWFudCYgb3JpZ2lu
YWwpCit7CisgICAgaWYgKCZvcmlnaW5hbCAhPSB0aGlzKQorICAgICAgICBzZXQob3JpZ2luYWwp
OworICAgIHJldHVybiAqdGhpczsKK30KKworQ3BwVmFyaWFudDo6fkNwcFZhcmlhbnQoKQorewor
ICAgIGZyZWVEYXRhKCk7Cit9CisKK3ZvaWQgQ3BwVmFyaWFudDo6ZnJlZURhdGEoKQoreworICAg
IFdlYkJpbmRpbmdzOjpyZWxlYXNlVmFyaWFudFZhbHVlKHRoaXMpOworfQorCitib29sIENwcFZh
cmlhbnQ6OmlzRXF1YWwoY29uc3QgQ3BwVmFyaWFudCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KHR5cGUgIT0gb3RoZXIudHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIHJldHVybiAo
dmFsdWUuYm9vbFZhbHVlID09IG90aGVyLnZhbHVlLmJvb2xWYWx1ZSk7CisgICAgY2FzZSBOUFZh
cmlhbnRUeXBlX0ludDMyOgorICAgICAgICByZXR1cm4gKHZhbHVlLmludFZhbHVlID09IG90aGVy
LnZhbHVlLmludFZhbHVlKTsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfRG91YmxlOgorICAgICAg
ICByZXR1cm4gKHZhbHVlLmRvdWJsZVZhbHVlID09IG90aGVyLnZhbHVlLmRvdWJsZVZhbHVlKTsK
KyAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOiB7CisgICAgICAgIGNvbnN0IE5QU3RyaW5n
ICp0aGlzX3ZhbHVlID0gJnZhbHVlLnN0cmluZ1ZhbHVlOworICAgICAgICBjb25zdCBOUFN0cmlu
ZyAqb3RoZXJfdmFsdWUgPSAmb3RoZXIudmFsdWUuc3RyaW5nVmFsdWU7CisgICAgICAgIHVpbnQz
Ml90IGxlbiA9IHRoaXNfdmFsdWUtPlVURjhMZW5ndGg7CisgICAgICAgIHJldHVybiBsZW4gPT0g
b3RoZXJfdmFsdWUtPlVURjhMZW5ndGgKKyAgICAgICAgICAgICYmICFzdHJuY21wKHRoaXNfdmFs
dWUtPlVURjhDaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJfdmFsdWUt
PlVURjhDaGFyYWN0ZXJzLCBsZW4pOworICAgIH0KKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVs
bDoKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBOUFZhcmlhbnRUeXBlX09iamVjdDogeworICAgICAgICBOUE9iamVjdCogdGhpc1Zh
bHVlID0gdmFsdWUub2JqZWN0VmFsdWU7CisgICAgICAgIE5QT2JqZWN0KiBvdGhlclZhbHVlID0g
b3RoZXIudmFsdWUub2JqZWN0VmFsdWU7CisgICAgICAgIHJldHVybiB0aGlzVmFsdWUtPl9jbGFz
cyA9PSBvdGhlclZhbHVlLT5fY2xhc3MKKyAgICAgICAgICAgICYmIHRoaXNWYWx1ZS0+cmVmZXJl
bmNlQ291bnQgPT0gb3RoZXJWYWx1ZS0+cmVmZXJlbmNlQ291bnQ7CisgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ3BwVmFyaWFudDo6Y29weVRvTlBWYXJpYW50KE5Q
VmFyaWFudCogcmVzdWx0KSBjb25zdAoreworICAgIHJlc3VsdC0+dHlwZSA9IHR5cGU7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIHJl
c3VsdC0+dmFsdWUuYm9vbFZhbHVlID0gdmFsdWUuYm9vbFZhbHVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6CisgICAgICAgIHJlc3VsdC0+dmFsdWUuaW50
VmFsdWUgPSB2YWx1ZS5pbnRWYWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlh
bnRUeXBlX0RvdWJsZToKKyAgICAgICAgcmVzdWx0LT52YWx1ZS5kb3VibGVWYWx1ZSA9IHZhbHVl
LmRvdWJsZVZhbHVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfU3Ry
aW5nOgorICAgICAgICBXZWJCaW5kaW5nczo6aW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29w
eShyZXN1bHQsICZ2YWx1ZS5zdHJpbmdWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TlBWYXJpYW50VHlwZV9OdWxsOgorICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgorICAgICAg
ICAvLyBOb3RoaW5nIHRvIHNldC4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRU
eXBlX09iamVjdDoKKyAgICAgICAgcmVzdWx0LT50eXBlID0gTlBWYXJpYW50VHlwZV9PYmplY3Q7
CisgICAgICAgIHJlc3VsdC0+dmFsdWUub2JqZWN0VmFsdWUgPSBXZWJCaW5kaW5nczo6cmV0YWlu
T2JqZWN0KHZhbHVlLm9iamVjdFZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2
b2lkIENwcFZhcmlhbnQ6OnNldChjb25zdCBOUFZhcmlhbnQmIG5ld1ZhbHVlKQoreworICAgIGZy
ZWVEYXRhKCk7CisgICAgc3dpdGNoIChuZXdWYWx1ZS50eXBlKSB7CisgICAgY2FzZSBOUFZhcmlh
bnRUeXBlX0Jvb2w6CisgICAgICAgIHNldChuZXdWYWx1ZS52YWx1ZS5ib29sVmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6CisgICAgICAgIHNldChu
ZXdWYWx1ZS52YWx1ZS5pbnRWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJp
YW50VHlwZV9Eb3VibGU6CisgICAgICAgIHNldChuZXdWYWx1ZS52YWx1ZS5kb3VibGVWYWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6CisgICAgICAg
IHNldChuZXdWYWx1ZS52YWx1ZS5zdHJpbmdWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTlBWYXJpYW50VHlwZV9OdWxsOgorICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgorICAg
ICAgICB0eXBlID0gbmV3VmFsdWUudHlwZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZh
cmlhbnRUeXBlX09iamVjdDoKKyAgICAgICAgc2V0KG5ld1ZhbHVlLnZhbHVlLm9iamVjdFZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIENwcFZhcmlhbnQ6OnNldE51bGwo
KQoreworICAgIGZyZWVEYXRhKCk7CisgICAgdHlwZSA9IE5QVmFyaWFudFR5cGVfTnVsbDsKK30K
Kwordm9pZCBDcHBWYXJpYW50OjpzZXQoYm9vbCBuZXdWYWx1ZSkKK3sKKyAgICBmcmVlRGF0YSgp
OworICAgIHR5cGUgPSBOUFZhcmlhbnRUeXBlX0Jvb2w7CisgICAgdmFsdWUuYm9vbFZhbHVlID0g
bmV3VmFsdWU7Cit9CisKK3ZvaWQgQ3BwVmFyaWFudDo6c2V0KGludDMyX3QgbmV3VmFsdWUpCit7
CisgICAgZnJlZURhdGEoKTsKKyAgICB0eXBlID0gTlBWYXJpYW50VHlwZV9JbnQzMjsKKyAgICB2
YWx1ZS5pbnRWYWx1ZSA9IG5ld1ZhbHVlOworfQorCit2b2lkIENwcFZhcmlhbnQ6OnNldChkb3Vi
bGUgbmV3VmFsdWUpCit7CisgICAgZnJlZURhdGEoKTsKKyAgICB0eXBlID0gTlBWYXJpYW50VHlw
ZV9Eb3VibGU7CisgICAgdmFsdWUuZG91YmxlVmFsdWUgPSBuZXdWYWx1ZTsKK30KKworLy8gVGhl
IG5ld1ZhbHVlIG11c3QgYmUgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgordm9pZCBDcHBWYXJp
YW50OjpzZXQoY29uc3QgY2hhciogbmV3VmFsdWUpCit7CisgICAgZnJlZURhdGEoKTsKKyAgICB0
eXBlID0gTlBWYXJpYW50VHlwZV9TdHJpbmc7CisgICAgTlBTdHJpbmcgbmV3U3RyaW5nID0ge25l
d1ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
c3RybGVuKG5ld1ZhbHVlKSl9OworICAgIFdlYkJpbmRpbmdzOjppbml0aWFsaXplVmFyaWFudFdp
dGhTdHJpbmdDb3B5KHRoaXMsICZuZXdTdHJpbmcpOworfQorCit2b2lkIENwcFZhcmlhbnQ6OnNl
dChjb25zdCBzdHJpbmcmIG5ld1ZhbHVlKQoreworICAgIGZyZWVEYXRhKCk7CisgICAgdHlwZSA9
IE5QVmFyaWFudFR5cGVfU3RyaW5nOworICAgIE5QU3RyaW5nIG5ld1N0cmluZyA9IHtuZXdWYWx1
ZS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQzMl90
PihuZXdWYWx1ZS5zaXplKCkpfTsKKyAgICBXZWJCaW5kaW5nczo6aW5pdGlhbGl6ZVZhcmlhbnRX
aXRoU3RyaW5nQ29weSh0aGlzLCAmbmV3U3RyaW5nKTsKK30KKwordm9pZCBDcHBWYXJpYW50Ojpz
ZXQoY29uc3QgTlBTdHJpbmcmIG5ld1ZhbHVlKQoreworICAgIGZyZWVEYXRhKCk7CisgICAgdHlw
ZSA9IE5QVmFyaWFudFR5cGVfU3RyaW5nOworICAgIFdlYkJpbmRpbmdzOjppbml0aWFsaXplVmFy
aWFudFdpdGhTdHJpbmdDb3B5KHRoaXMsICZuZXdWYWx1ZSk7Cit9CisKK3ZvaWQgQ3BwVmFyaWFu
dDo6c2V0KE5QT2JqZWN0KiBuZXdWYWx1ZSkKK3sKKyAgICBmcmVlRGF0YSgpOworICAgIHR5cGUg
PSBOUFZhcmlhbnRUeXBlX09iamVjdDsKKyAgICB2YWx1ZS5vYmplY3RWYWx1ZSA9IFdlYkJpbmRp
bmdzOjpyZXRhaW5PYmplY3QobmV3VmFsdWUpOworfQorCitzdHJpbmcgQ3BwVmFyaWFudDo6dG9T
dHJpbmcoKSBjb25zdAoreworICAgIEFTU0VSVChpc1N0cmluZygpKTsKKyAgICByZXR1cm4gc3Ry
aW5nKHZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0ZXJzLAorICAgICAgICAgICAgICAgICAg
dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCk7Cit9CisKK2ludDMyX3QgQ3BwVmFyaWFudDo6
dG9JbnQzMigpIGNvbnN0Cit7CisgICAgaWYgKGlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmludFZhbHVlOworICAgIGlmIChpc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4odmFsdWUuZG91YmxlVmFsdWUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitkb3VibGUgQ3BwVmFyaWFudDo6dG9Eb3VibGUoKSBj
b25zdAoreworICAgIGlmIChpc0ludDMyKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KHZhbHVlLmludFZhbHVlKTsKKyAgICBpZiAoaXNEb3VibGUoKSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlLmRvdWJsZVZhbHVlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCitib29sIENwcFZhcmlhbnQ6OnRvQm9vbGVhbigpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzQm9vbCgpKTsKKyAgICByZXR1cm4gdmFsdWUuYm9vbFZhbHVlOworfQorCitWZWN0
b3I8c3RyaW5nPiBDcHBWYXJpYW50Ojp0b1N0cmluZ1ZlY3RvcigpIGNvbnN0Cit7CisKKyAgICBB
U1NFUlQoaXNPYmplY3QoKSk7CisgICAgVmVjdG9yPHN0cmluZz4gc3RyaW5nVmVjdG9yOworICAg
IE5QT2JqZWN0KiBucFZhbHVlID0gdmFsdWUub2JqZWN0VmFsdWU7CisgICAgTlBJZGVudGlmaWVy
IGxlbmd0aElkID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lkZW50aWZpZXIoImxlbmd0aCIpOwor
CisgICAgaWYgKCFXZWJCaW5kaW5nczo6aGFzUHJvcGVydHkoMCwgbnBWYWx1ZSwgbGVuZ3RoSWQp
KQorICAgICAgICByZXR1cm4gc3RyaW5nVmVjdG9yOworCisgICAgTlBWYXJpYW50IGxlbmd0aFZh
bHVlOworICAgIGlmICghV2ViQmluZGluZ3M6OmdldFByb3BlcnR5KDAsIG5wVmFsdWUsIGxlbmd0
aElkLCAmbGVuZ3RoVmFsdWUpKQorICAgICAgICByZXR1cm4gc3RyaW5nVmVjdG9yOworCisgICAg
aW50IGxlbmd0aCA9IDA7CisgICAgLy8gVGhlIGxlbmd0aCBpcyBhIGRvdWJsZSBpbiBzb21lIGNh
c2VzLgorICAgIGlmIChOUFZBUklBTlRfSVNfRE9VQkxFKGxlbmd0aFZhbHVlKSkKKyAgICAgICAg
bGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihOUFZBUklBTlRfVE9fRE9VQkxFKGxlbmd0aFZhbHVl
KSk7CisgICAgZWxzZSBpZiAoTlBWQVJJQU5UX0lTX0lOVDMyKGxlbmd0aFZhbHVlKSkKKyAgICAg
ICAgbGVuZ3RoID0gTlBWQVJJQU5UX1RPX0lOVDMyKGxlbmd0aFZhbHVlKTsKKyAgICBXZWJCaW5k
aW5nczo6cmVsZWFzZVZhcmlhbnRWYWx1ZSgmbGVuZ3RoVmFsdWUpOworCisgICAgLy8gRm9yIHNh
bml0eSwgb25seSBhbGxvdyAxMDAgaXRlbXMuCisgICAgbGVuZ3RoID0gbWluKDEwMCwgbGVuZ3Ro
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIC8vIEdl
dCBlYWNoIG9mIHRoZSBpdGVtcy4KKyAgICAgICAgY2hhciBpbmRleEluQ2hhclsyMF07IC8vIEVu
b3VnaCBzaXplIHRvIHN0b3JlIDMyLWJpdCBpbnRlZ2VyCisgICAgICAgIHNucHJpbnRmKGluZGV4
SW5DaGFyLCAyMCwgIiVkIiwgaSk7CisgICAgICAgIHN0cmluZyBpbmRleChpbmRleEluQ2hhcik7
CisgICAgICAgIE5QSWRlbnRpZmllciBpbmRleElkID0gV2ViQmluZGluZ3M6OmdldFN0cmluZ0lk
ZW50aWZpZXIoaW5kZXguY19zdHIoKSk7CisgICAgICAgIGlmICghV2ViQmluZGluZ3M6Omhhc1By
b3BlcnR5KDAsIG5wVmFsdWUsIGluZGV4SWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIE5QVmFyaWFudCBpbmRleFZhbHVlOworICAgICAgICBpZiAoIVdlYkJpbmRpbmdzOjpnZXRQ
cm9wZXJ0eSgwLCBucFZhbHVlLCBpbmRleElkLCAmaW5kZXhWYWx1ZSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKE5QVkFSSUFOVF9JU19TVFJJTkcoaW5kZXhWYWx1ZSkpIHsK
KyAgICAgICAgICAgIHN0cmluZyBpdGVtKE5QVkFSSUFOVF9UT19TVFJJTkcoaW5kZXhWYWx1ZSku
VVRGOENoYXJhY3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBOUFZBUklBTlRfVE9fU1RS
SU5HKGluZGV4VmFsdWUpLlVURjhMZW5ndGgpOworICAgICAgICAgICAgc3RyaW5nVmVjdG9yLmFw
cGVuZChpdGVtKTsKKyAgICAgICAgfQorICAgICAgICBXZWJCaW5kaW5nczo6cmVsZWFzZVZhcmlh
bnRWYWx1ZSgmaW5kZXhWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiBzdHJpbmdWZWN0b3I7Cit9
CisKK2Jvb2wgQ3BwVmFyaWFudDo6aW52b2tlKGNvbnN0IHN0cmluZyYgbWV0aG9kLCBjb25zdCBD
cHBWYXJpYW50KiBhcmd1bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBh
cmd1bWVudENvdW50LCBDcHBWYXJpYW50JiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
T2JqZWN0KCkpOworICAgIE5QSWRlbnRpZmllciBtZXRob2ROYW1lID0gV2ViQmluZGluZ3M6Omdl
dFN0cmluZ0lkZW50aWZpZXIobWV0aG9kLmNfc3RyKCkpOworICAgIE5QT2JqZWN0KiBucE9iamVj
dCA9IHZhbHVlLm9iamVjdFZhbHVlOworICAgIGlmICghV2ViQmluZGluZ3M6Omhhc01ldGhvZCgw
LCBucE9iamVjdCwgbWV0aG9kTmFtZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBOUFZh
cmlhbnQgcjsKKyAgICBib29sIHN0YXR1cyA9IFdlYkJpbmRpbmdzOjppbnZva2UoMCwgbnBPYmpl
Y3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnRDb3VudCwgJnIpOworICAgIHJlc3Vs
dC5zZXQocik7CisgICAgcmV0dXJuIHN0YXR1czsKK30KKworYm9vbCBDcHBWYXJpYW50OjppbnZv
a2VEZWZhdWx0KGNvbnN0IENwcFZhcmlhbnQqIGFyZ3VtZW50cywgdWludDMyX3QgYXJndW1lbnRD
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcHBWYXJpYW50JiByZXN1bHQp
IGNvbnN0Cit7CisgICAgQVNTRVJUKGlzT2JqZWN0KCkpOworICAgIE5QT2JqZWN0KiBucE9iamVj
dCA9IHZhbHVlLm9iamVjdFZhbHVlOworICAgIE5QVmFyaWFudCByOworICAgIGJvb2wgc3RhdHVz
ID0gV2ViQmluZGluZ3M6Omludm9rZURlZmF1bHQoMCwgbnBPYmplY3QsIGFyZ3VtZW50cywgYXJn
dW1lbnRDb3VudCwgJnIpOworICAgIHJlc3VsdC5zZXQocik7CisgICAgcmV0dXJuIHN0YXR1czsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIv
c3JjL0NwcFZhcmlhbnQuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5u
ZXIvc3JjL0NwcFZhcmlhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MGNjNjI3MWVjZmFkOWVkNjhiZGU0Mjg4
NTE1Mzg0MjZkNmI4NDAzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvQ3BwVmFyaWFudC5oCkBAIC0wLDAgKzEsMTQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoK
KyAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbiBmb3IgQ3BwVmFyaWFudCwgYSB0
eXBlIHVzZWQgYnkgQysrIGNsYXNzZXMKKyAgdGhhdCBhcmUgdG8gYmUgYm91bmQgdG8gSmF2YVNj
cmlwdCBvYmplY3RzLgorCisgIENwcFZhcmlhbnQgZXhpc3RzIHByaW1hcmlseSBhcyBhbiBpbnRl
cmZhY2UgYmV0d2VlbiBDKysgY2FsbGVycyBhbmQgdGhlCisgIGNvcnJlc3BvbmRpbmcgTlBWYXJp
YW50IHR5cGUuICBDcHBWYXJpYW50IGFsc28gcHJvdmlkZXMgYSBudW1iZXIgb2YKKyAgY29udmVu
aWVuY2UgY29uc3RydWN0b3JzIGFuZCBhY2Nlc3NvcnMsIHNvIHRoYXQgdGhlIE5QVmFyaWFudFR5
cGUgdmFsdWVzCisgIGRvbid0IG5lZWQgdG8gYmUgZXhwb3NlZCwgYW5kIGEgZGVzdHJ1Y3RvciB0
byBmcmVlIGFueSBtZW1vcnkgYWxsb2NhdGVkIGZvcgorICBzdHJpbmcgdmFsdWVzLgorKi8KKwor
I2lmbmRlZiBDcHBWYXJpYW50X2gKKyNkZWZpbmUgQ3BwVmFyaWFudF9oCisKKyNpbmNsdWRlICJX
ZWJCaW5kaW5ncy5oIgorI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmgi
CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworY2xhc3MgQ3Bw
VmFyaWFudCA6IHB1YmxpYyBOUFZhcmlhbnQgeworcHVibGljOgorICAgIENwcFZhcmlhbnQoKTsK
KyAgICB+Q3BwVmFyaWFudCgpOworICAgIHZvaWQgc2V0TnVsbCgpOworICAgIHZvaWQgc2V0KGJv
b2wpOworICAgIHZvaWQgc2V0KGludDMyX3QpOworICAgIHZvaWQgc2V0KGRvdWJsZSk7CisKKyAg
ICAvLyBOb3RlIHRoYXQgc2V0dGluZyBhIENwcFZhcmlhbnQgdG8gYSBzdHJpbmcgdmFsdWUgaW52
b2x2ZXMgY29weWluZyB0aGUKKyAgICAvLyBzdHJpbmcgZGF0YSwgd2hpY2ggbXVzdCBiZSBmcmVl
ZCB3aXRoIGEgY2FsbCB0byBmcmVlRGF0YSgpIHdoZW4gdGhlCisgICAgLy8gQ3BwVmFyaWFudCBp
cyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgb3IgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gTm9ybWFs
bHkKKyAgICAvLyB0aGlzIGlzIGhhbmRsZWQgYnkgdGhlIG90aGVyIHNldCgpIG1ldGhvZHMgYW5k
IGJ5IHRoZSBkZXN0cnVjdG9yLgorICAgIHZvaWQgc2V0KGNvbnN0IGNoYXIqKTsgLy8gTXVzdCBi
ZSBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgdm9pZCBzZXQoY29uc3Qgc3RkOjpzdHJp
bmcmKTsKKyAgICB2b2lkIHNldChjb25zdCBOUFN0cmluZyYpOworICAgIHZvaWQgc2V0KGNvbnN0
IE5QVmFyaWFudCYpOworCisgICAgLy8gTm90ZSB0aGF0IHNldHRpbmcgYSBDcHBWYXJpYW50IHRv
IGFuIE5QT2JqZWN0IGludm9sdmVzIHJlZi1jb3VudGluZworICAgIC8vIHRoZSBhY3R1YWwgb2Jq
ZWN0LiBmcmVlRGF0YSgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgQ3BwVmFyaWFudAor
ICAgIC8vIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSBvdGhlciBzZXQoKSBtZXRob2RzIGhhbmRs
ZSB0aGlzIGludGVybmFsbHkuCisgICAgLy8gQWxzbywgdGhlIG9iamVjdCdzIE5QQ2xhc3MgaXMg
ZXhwZWN0ZWQgdG8gYmUgYSBzdGF0aWMgb2JqZWN0OiBuZWl0aGVyCisgICAgLy8gdGhlIE5QIHJ1
bnRpbWUgbm9yIENwcFZhcmlhbnQgd2lsbCBldmVyIGZyZWUgaXQuCisgICAgdm9pZCBzZXQoTlBP
YmplY3QqX3ZhbHVlKTsKKworICAgIC8vIFRoZXNlIHRocmVlIG1ldGhvZHMgYWxsIHBlcmZvcm0g
ZGVlcCBjb3BpZXMgb2YgYW55IHN0cmluZyBkYXRhLiBUaGlzCisgICAgLy8gYWxsb3dzIGxvY2Fs
IENwcFZhcmlhbnRzIHRvIGJlIHJlbGVhc2VkIGJ5IHRoZSBkZXN0cnVjdG9yIHdpdGhvdXQKKyAg
ICAvLyBjb3JydXB0aW5nIHRoZWlyIHNvdXJjZXMuIEluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNv
ZGUsIG9yIHdoZW4gc3RyaW5ncworICAgIC8vIGFyZSB2ZXJ5IGxvbmcsIGF2b2lkIGNyZWF0aW5n
IG5ldyBDcHBWYXJpYW50cy4KKyAgICAvLyBJbiBjYXNlIG9mIE5QT2JqZWN0IGFzIHRoZSBkYXRh
LCB0aGUgY29weWluZyBpbnZvbHZlcyByZWYtY291bnRpbmcKKyAgICAvLyBhcyBvcHBvc2VkIHRv
IGRlZXAtY29weWluZy4gVGhlIHJlZi1jb3VudGluZyBlbnN1cmVzIHRoYXQgc291cmNlcyBkb24n
dAorICAgIC8vIGdldCBjb3JydXB0ZWQgd2hlbiB0aGUgY29waWVzIGdldCBkZXN0cm95ZWQuCisg
ICAgdm9pZCBjb3B5VG9OUFZhcmlhbnQoTlBWYXJpYW50KiByZXN1bHQpIGNvbnN0OworICAgIENw
cFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBDcHBWYXJpYW50JiBvcmlnaW5hbCk7CisgICAgQ3Bw
VmFyaWFudChjb25zdCBDcHBWYXJpYW50JiBvcmlnaW5hbCk7CisKKyAgICAvLyBDYWxscyBOUE5f
UmVsZWFzZVZhcmlhbnRWYWx1ZSwgd2hpY2ggZnJlZXMgYW55IHN0cmluZyBkYXRhCisgICAgLy8g
aGVsZCBieSB0aGUgb2JqZWN0IGFuZCBzZXRzIGl0cyB0eXBlIHRvIG51bGwuCisgICAgLy8gSW4g
Y2FzZSBvZiBOUE9iamVjdCwgdGhlIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlIGRlY3JlbWVudHMK
KyAgICAvLyB0aGUgcmVmLWNvdW50IChyZWxlYXNlcyB3aGVuIHJlZi1jb3VudCBiZWNvbWVzIDAp
CisgICAgdm9pZCBmcmVlRGF0YSgpOworCisgICAgLy8gQ29tcGFyZXMgdGhpcyBDcHBWYXJpYW50
J3MgdHlwZSBhbmQgdmFsdWUgdG8gYW5vdGhlcidzLiBUaGV5IG11c3QgYmUKKyAgICAvLyBpZGVu
dGljYWwgaW4gYm90aCB0eXBlIGFuZCB2YWx1ZSB0byBiZSBjb25zaWRlcmVkIGVxdWFsLiBGb3Ig
c3RyaW5nIGFuZAorICAgIC8vIG9iamVjdCB0eXBlcywgYSBkZWVwIGNvbXBhcmlzb24gaXMgcGVy
Zm9ybWVkOyB0aGF0IGlzLCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgLy8gc3RyaW5ncywgb3Ig
dGhlIGNsYXNzZXMgYW5kIHJlZmNvdW50cyBvZiB0aGUgb2JqZWN0cywgbXVzdCBiZSB0aGUgc2Ft
ZSwKKyAgICAvLyBidXQgdGhleSBuZWVkIG5vdCBiZSB0aGUgc2FtZSBwb2ludGVycy4KKyAgICBi
b29sIGlzRXF1YWwoY29uc3QgQ3BwVmFyaWFudCYpIGNvbnN0OworCisgICAgLy8gVGhlIHZhbHVl
IG9mIGEgQ3BwVmFyaWFudCBtYXkgYmUgcmVhZCBkaXJlY3RseSBmcm9tIGl0cyBOUFZhcmlhbnQg
KGJ1dAorICAgIC8vIHNob3VsZCBvbmx5IGJlIHNldCB1c2luZyBvbmUgb2YgdGhlIHNldCgpIG1l
dGhvZHMgYWJvdmUpLiBBbHRob3VnaCB0aGUKKyAgICAvLyB0eXBlIG9mIGEgQ3BwVmFyaWFudCBp
cyBsaWtld2lzZSBwdWJsaWMsIGl0IGNhbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZXNlCisgICAg
Ly8gZnVuY3Rpb25zIHJhdGhlciB0aGFuIGRpcmVjdGx5IGlmIGEgY2FsbGVyIHdpc2hlcyB0byBh
dm9pZCBkZXBlbmRlbmNlIG9uCisgICAgLy8gdGhlIE5QVmFyaWFudFR5cGUgdmFsdWVzLgorICAg
IGJvb2wgaXNCb29sKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9Cb29s
KTsgfQorICAgIGJvb2wgaXNJbnQzMigpIGNvbnN0IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFu
dFR5cGVfSW50MzIpOyB9CisgICAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0IHsgcmV0dXJuICh0eXBl
ID09IE5QVmFyaWFudFR5cGVfRG91YmxlKTsgfQorICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdCB7
IHJldHVybiAoaXNJbnQzMigpIHx8IGlzRG91YmxlKCkpOyB9CisgICAgYm9vbCBpc1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuICh0eXBlID09IE5QVmFyaWFudFR5cGVfU3RyaW5nKTsgfQorICAgIGJv
b2wgaXNWb2lkKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlwZV9Wb2lkKTsg
fQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gKHR5cGUgPT0gTlBWYXJpYW50VHlw
ZV9OdWxsKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIChpc1ZvaWQoKSB8
fCBpc051bGwoKSk7IH0KKyAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUg
PT0gTlBWYXJpYW50VHlwZV9PYmplY3QpOyB9CisKKyAgICAvLyBDb252ZXJ0ZXJzLiBUaGUgQ3Bw
VmFyaWFudCBtdXN0IGJlIG9mIGEgdHlwZSBjb252ZXJ0aWJsZSB0byB0aGVzZSB2YWx1ZXMuCisg
ICAgLy8gRm9yIGV4YW1wbGUsIHRvSW50MzIoKSB3b3JrcyBvbmx5IGlmIGlzTnVtYmVyKCkgaXMg
dHJ1ZS4KKyAgICBzdGQ6OnN0cmluZyB0b1N0cmluZygpIGNvbnN0OworICAgIGludDMyX3QgdG9J
bnQzMigpIGNvbnN0OworICAgIGRvdWJsZSB0b0RvdWJsZSgpIGNvbnN0OworICAgIGJvb2wgdG9C
b29sZWFuKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyBhIHZlY3RvciBvZiBzdHJpbmdzIGZvciB0
aGUgc3BlY2lmaWVkIGFyZ3VtZW50LiBUaGlzIGlzIHVzZWZ1bAorICAgIC8vIGZvciBjb252ZXJ0
aW5nIGEgSmF2YVNjcmlwdCBhcnJheSBvZiBzdHJpbmdzIGludG8gYSB2ZWN0b3Igb2Ygc3RyaW5n
cy4KKyAgICBWZWN0b3I8c3RkOjpzdHJpbmc+IHRvU3RyaW5nVmVjdG9yKCkgY29uc3Q7CisKKyAg
ICAvLyBJbnZva2UgbWV0aG9kIG9mIHRoZSBnaXZlbiBuYW1lIG9uIGFuIG9iamVjdCB3aXRoIHRo
ZSBzdXBwbGllZCBhcmd1bWVudHMuCisgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBi
ZSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2QgaXMgdG8gYmUKKyAgICAvLyBpbnZva2Vk
LiBSZXR1cm5zIHdoZXRoZXIgdGhlIG1ldGhvZCB3YXMgc3VjY2Vzc2Z1bGx5IGludm9rZWQuIElm
IHRoZQorICAgIC8vIG1ldGhvZCB3YXMgaW52b2tlZCBzdWNjZXNzZnVsbHksIGFueSByZXR1cm4g
dmFsdWUgaXMgc3RvcmVkIGluIHRoZQorICAgIC8vIENwcFZhcmlhbnQgc3BlY2lmaWVkIGJ5IHJl
c3VsdC4KKyAgICBib29sIGludm9rZShjb25zdCBzdGQ6OnN0cmluZyYsIGNvbnN0IENwcFZhcmlh
bnQqIGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBhcmd1bWVudENvdW50LCBD
cHBWYXJpYW50JiByZXN1bHQpIGNvbnN0OworCisgICAgLy8gSW52b2tlIGFuIG9iamVjdCdzIGRl
ZmF1bHQgbWV0aG9kIHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KKyAgICAvLyBUaGUgZmly
c3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZCBpcyB0
byBiZQorICAgIC8vIGludm9rZWQuIFJldHVybnMgd2hldGhlciB0aGUgbWV0aG9kIHdhcyBzdWNj
ZXNzZnVsbHkgaW52b2tlZC4gSWYgdGhlCisgICAgLy8gbWV0aG9kIHdhcyBpbnZva2VkIHN1Y2Nl
c3NmdWxseSwgYW55IHJldHVybiB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlCisgICAgLy8gQ3BwVmFy
aWFudCBzcGVjaWZpZWQgYnkgcmVzdWx0LgorICAgIGJvb2wgaW52b2tlRGVmYXVsdChjb25zdCBD
cHBWYXJpYW50KiBhcmd1bWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFy
Z3VtZW50Q291bnQsIENwcFZhcmlhbnQmIHJlc3VsdCkgY29uc3Q7Cit9OworCisjZW5kaWYgLy8g
Q3BwVmFyaWFudF9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9FdmVudFNlbmRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjNiNjVkMDcx
N2I1ZjNlNTkzMzZlMmZjOGQwYTVlZmIwNTk1MWUzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL0V2ZW50U2VuZGVyLmNwcApA
QCAtMCwwICsxLDEyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gZm9y
IEV2ZW50U2VuZGVyLgorLy8KKy8vIFNvbWUgbm90ZXMgYWJvdXQgZHJhZyBhbmQgZHJvcCBoYW5k
bGluZzoKKy8vIFdpbmRvd3MgZHJhZyBhbmQgZHJvcCBnb2VzIHRocm91Z2ggYSBzeXN0ZW0gY2Fs
bCB0byBkb0RyYWdEcm9wLiBBdCB0aGF0CisvLyBwb2ludCwgcHJvZ3JhbSBjb250cm9sIGlzIGdp
dmVuIHRvIFdpbmRvd3Mgd2hpY2ggdGhlbiBwZXJpb2RpY2FsbHkgbWFrZXMKKy8vIGNhbGxiYWNr
cyBpbnRvIHRoZSB3ZWJ2aWV3LiBUaGlzIHdvbid0IHdvcmsgZm9yIGxheW91dCB0ZXN0cywgc28g
aW5zdGVhZCwKKy8vIHdlIHF1ZXVlIHVwIGFsbCB0aGUgbW91c2UgbW92ZSBhbmQgbW91c2UgdXAg
ZXZlbnRzLiBXaGVuIHRoZSB0ZXN0IHRyaWVzIHRvCisvLyBzdGFydCBhIGRyYWcgKGJ5IGNhbGxp
bmcgRXZlblNlbmRpbmdDb250cm9sbGVyOjpkb0RyYWdEcm9wKSwgd2UgdGFrZSB0aGUKKy8vIGV2
ZW50cyBpbiB0aGUgcXVldWUgYW5kIHJlcGxheSB0aGVtLgorLy8gVGhlIGJlaGF2aW9yIG9mIHF1
ZXVpbmcgZXZlbnRzIGFuZCByZXBsYXlpbmcgdGhlbSBjYW4gYmUgZGlzYWJsZWQgYnkgYQorLy8g
bGF5b3V0IHRlc3QgYnkgc2V0dGluZyBldmVudFNlbmRlci5kcmFnTW9kZSB0byBmYWxzZS4KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCisKKyNpbmNsdWRl
ICJUZXN0RGVsZWdhdGUuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0TWVudURhdGEuaCIKKyNpbmNs
dWRlICJXZWJEcmFnT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiV2ViVG91Y2hQb2ludC5oIgorI2lu
Y2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEcmFnRGF0YS5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlBvaW50LmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU3RyaW5n
LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKKyNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisKKyNpZiBPUyhX
SU5ET1dTKQorI2luY2x1ZGUgIndpbi9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oIgorI2VuZGlmCisK
Ky8vIEZJWE1FOiBsYXlvdXQgYmVmb3JlIGVhY2ggZXZlbnQ/CisKK3VzaW5nIG5hbWVzcGFjZSBz
dGQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitXZWJQb2ludCBFdmVudFNlbmRlcjo6bGFz
dE1vdXNlUG9zOworV2ViTW91c2VFdmVudDo6QnV0dG9uIEV2ZW50U2VuZGVyOjpwcmVzc2VkQnV0
dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKK1dlYk1vdXNlRXZlbnQ6OkJ1dHRvbiBF
dmVudFNlbmRlcjo6bGFzdEJ1dHRvblR5cGUgPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwor
CitzdHJ1Y3QgU2F2ZWRFdmVudCB7CisgICAgZW51bSBTYXZlZEV2ZW50VHlwZSB7CisgICAgICAg
IFVuc3BlY2lmaWVkLAorICAgICAgICBNb3VzZVVwLAorICAgICAgICBNb3VzZU1vdmUsCisgICAg
ICAgIExlYXBGb3J3YXJkCisgICAgfTsKKworICAgIFNhdmVkRXZlbnRUeXBlIHR5cGU7CisgICAg
V2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvblR5cGU7IC8vIEZvciBNb3VzZVVwLgorICAgIFdl
YlBvaW50IHBvczsgLy8gRm9yIE1vdXNlTW92ZS4KKyAgICBpbnQgbWlsbGlzZWNvbmRzOyAvLyBG
b3IgTGVhcEZvcndhcmQuCisKKyAgICBTYXZlZEV2ZW50KCkKKyAgICAgICAgOiB0eXBlKFVuc3Bl
Y2lmaWVkKQorICAgICAgICAsIGJ1dHRvblR5cGUoV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZSkK
KyAgICAgICAgLCBtaWxsaXNlY29uZHMoMCkgeyB9Cit9OworCitzdGF0aWMgV2ViRHJhZ0RhdGEg
Y3VycmVudERyYWdEYXRhOworc3RhdGljIFdlYkRyYWdPcGVyYXRpb24gY3VycmVudERyYWdFZmZl
Y3Q7CitzdGF0aWMgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93
ZWQ7CitzdGF0aWMgYm9vbCByZXBsYXlpbmdTYXZlZEV2ZW50cyA9IGZhbHNlOworc3RhdGljIERl
cXVlPFNhdmVkRXZlbnQ+IG1vdXNlRXZlbnRRdWV1ZTsKK3N0YXRpYyBpbnQgdG91Y2hNb2RpZmll
cnM7CitzdGF0aWMgVmVjdG9yPFdlYlRvdWNoUG9pbnQ+IHRvdWNoUG9pbnRzOworCisvLyBUaW1l
IGFuZCBwbGFjZSBvZiB0aGUgbGFzdCBtb3VzZSB1cCBldmVudC4KK3N0YXRpYyBkb3VibGUgbGFz
dENsaWNrVGltZVNlYyA9IDA7CitzdGF0aWMgV2ViUG9pbnQgbGFzdENsaWNrUG9zOworc3RhdGlj
IGludCBjbGlja0NvdW50ID0gMDsKKworLy8gbWF4aW11bSBkaXN0YW5jZSAoaW4gc3BhY2UgYW5k
IHRpbWUpIGZvciBhIG1vdXNlIGNsaWNrCisvLyB0byByZWdpc3RlciBhcyBhIGRvdWJsZSBvciB0
cmlwbGUgY2xpY2sKK3N0YXRpYyBjb25zdCBkb3VibGUgbXVsdGlwbGVDbGlja1RpbWVTZWMgPSAx
Oworc3RhdGljIGNvbnN0IGludCBtdWx0aXBsZUNsaWNrUmFkaXVzUGl4ZWxzID0gNTsKKworLy8g
SG93IG11Y2ggd2Ugc2hvdWxkIHNjcm9sbCBwZXIgZXZlbnQgLSB0aGUgdmFsdWUgaGVyZSBpcyBj
aG9zZW4gdG8KKy8vIG1hdGNoIHRoZSBXZWJLaXQgaW1wbCBhbmQgbGF5b3V0IHRlc3QgcmVzdWx0
cy4KK3N0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxiYXJQaXhlbHNQZXJUaWNrID0gNDAuMGY7CisK
K2lubGluZSBib29sIG91dHNpZGVNdWx0aUNsaWNrUmFkaXVzKGNvbnN0IFdlYlBvaW50JiBhLCBj
b25zdCBXZWJQb2ludCYgYikKK3sKKyAgICByZXR1cm4gKChhLnggLSBiLngpICogKGEueCAtIGIu
eCkgKyAoYS55IC0gYi55KSAqIChhLnkgLSBiLnkpKSA+CisgICAgICAgIG11bHRpcGxlQ2xpY2tS
YWRpdXNQaXhlbHMgKiBtdWx0aXBsZUNsaWNrUmFkaXVzUGl4ZWxzOworfQorCisvLyBVc2VkIHRv
IG9mZnNldCB0aGUgdGltZSB0aGUgZXZlbnQgaGFuZGVyIHRoaW5ncyBhbiBldmVudCBoYXBwZW5l
ZC4gVGhpcyBpcworLy8gZG9uZSBzbyB0ZXN0cyBjYW4gcnVuIHdpdGhvdXQgYSBkZWxheSwgYnV0
IGJ5cGFzcyBjaGVja3MgdGhhdCBhcmUgdGltZQorLy8gZGVwZW5kZW50IChlLmcuLCBkcmFnZ2lu
ZyBoYXMgYSB0aW1lb3V0IHZzIHNlbGVjdGlvbikuCitzdGF0aWMgdWludDMyIHRpbWVPZmZzZXRN
cyA9IDA7CisKK3N0YXRpYyBkb3VibGUgZ2V0Q3VycmVudEV2ZW50VGltZVNlYygpCit7CisgICAg
cmV0dXJuICh3ZWJraXRfc3VwcG9ydDo6R2V0Q3VycmVudFRpbWVJbk1pbGxpc2Vjb25kKCkgKyB0
aW1lT2Zmc2V0TXMpIC8gMTAwMC4wOworfQorCitzdGF0aWMgdm9pZCBhZHZhbmNlRXZlbnRUaW1l
KGludDMyX3QgZGVsdGFNcykKK3sKKyAgICB0aW1lT2Zmc2V0TXMgKz0gZGVsdGFNczsKK30KKwor
c3RhdGljIHZvaWQgaW5pdE1vdXNlRXZlbnQoV2ViSW5wdXRFdmVudDo6VHlwZSB0LCBXZWJNb3Vz
ZUV2ZW50OjpCdXR0b24gYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBv
aW50JiBwb3MsIFdlYk1vdXNlRXZlbnQqIGUpCit7CisgICAgZS0+dHlwZSA9IHQ7CisgICAgZS0+
YnV0dG9uID0gYjsKKyAgICBlLT5tb2RpZmllcnMgPSAwOworICAgIGUtPnggPSBwb3MueDsKKyAg
ICBlLT55ID0gcG9zLnk7CisgICAgZS0+Z2xvYmFsWCA9IHBvcy54OworICAgIGUtPmdsb2JhbFkg
PSBwb3MueTsKKyAgICBlLT50aW1lU3RhbXBTZWNvbmRzID0gZ2V0Q3VycmVudEV2ZW50VGltZVNl
YygpOworICAgIGUtPmNsaWNrQ291bnQgPSBjbGlja0NvdW50OworfQorCisvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHNwZWNpZmllZCBrZXkgaXMgdGhlIHN5c3RlbSBrZXkuCitzdGF0aWMgYm9vbCBh
cHBseUtleU1vZGlmaWVyKGNvbnN0IHN0cmluZyYgbW9kaWZpZXJOYW1lLCBXZWJJbnB1dEV2ZW50
KiBldmVudCkKK3sKKyAgICBib29sIGlzU3lzdGVtS2V5ID0gZmFsc2U7CisgICAgY29uc3QgY2hh
ciogY2hhcmFjdGVycyA9IG1vZGlmaWVyTmFtZS5jX3N0cigpOworICAgIGlmICghc3RyY21wKGNo
YXJhY3RlcnMsICJjdHJsS2V5IikKKyNpZiAhT1MoTUFDX09TX1gpCisgICAgICAgIHx8ICFzdHJj
bXAoY2hhcmFjdGVycywgImFkZFNlbGVjdGlvbktleSIpCisjZW5kaWYKKyAgICAgICAgKSB7Cisg
ICAgICAgIGV2ZW50LT5tb2RpZmllcnMgfD0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleTsKKyAg
ICB9IGVsc2UgaWYgKCFzdHJjbXAoY2hhcmFjdGVycywgInNoaWZ0S2V5IikgfHwgIXN0cmNtcChj
aGFyYWN0ZXJzLCAicmFuZ2VTZWxlY3Rpb25LZXkiKSkKKyAgICAgICAgZXZlbnQtPm1vZGlmaWVy
cyB8PSBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleTsKKyAgICBlbHNlIGlmICghc3RyY21wKGNoYXJh
Y3RlcnMsICJhbHRLZXkiKSkgeworICAgICAgICBldmVudC0+bW9kaWZpZXJzIHw9IFdlYklucHV0
RXZlbnQ6OkFsdEtleTsKKyNpZiAhT1MoTUFDX09TX1gpCisgICAgICAgIC8vIE9uIFdpbmRvd3Mg
YWxsIGtleXMgd2l0aCBBbHQgbW9kaWZpZXIgd2lsbCBiZSBtYXJrZWQgYXMgc3lzdGVtIGtleS4K
KyAgICAgICAgLy8gV2Uga2VlcCB0aGUgc2FtZSBiZWhhdmlvciBvbiBMaW51eCBhbmQgZXZlcnl3
aGVyZSBub24tTWFjLCBzZWU6CisgICAgICAgIC8vIFdlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dl
YklucHV0RXZlbnRGYWN0b3J5LmNwcAorICAgICAgICAvLyBJZiB3ZSB3YW50IHRvIGNoYW5nZSB0
aGlzIGJlaGF2aW9yIG9uIExpbnV4LCB0aGlzIHBpZWNlIG9mIGNvZGUgbXVzdCBiZQorICAgICAg
ICAvLyBrZXB0IGluIHN5bmMgd2l0aCB0aGUgcmVsYXRlZCBjb2RlIGluIGFib3ZlIGZpbGUuCisg
ICAgICAgIGlzU3lzdGVtS2V5ID0gdHJ1ZTsKKyNlbmRpZgorI2lmIE9TKE1BQ19PU19YKQorICAg
IH0gZWxzZSBpZiAoIXN0cmNtcChjaGFyYWN0ZXJzLCAibWV0YUtleSIpIHx8ICFzdHJjbXAoY2hh
cmFjdGVycywgImFkZFNlbGVjdGlvbktleSIpKSB7CisgICAgICAgIGV2ZW50LT5tb2RpZmllcnMg
fD0gV2ViSW5wdXRFdmVudDo6TWV0YUtleTsKKyAgICAgICAgLy8gT24gTWFjIG9ubHkgY29tbWFu
ZCBrZXkgcHJlc3NlcyBhcmUgbWFya2VkIGFzIHN5c3RlbSBrZXkuCisgICAgICAgIC8vIFNlZSB0
aGUgcmVsYXRlZCBjb2RlIGluOiBXZWJLaXQvY2hyb21pdW0vc3JjL21hYy9XZWJJbnB1dEV2ZW50
RmFjdG9yeS5jcHAKKyAgICAgICAgLy8gSXQgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUg
cmVsYXRlZCBjb2RlIGluIGFib3ZlIGZpbGUuCisgICAgICAgIGlzU3lzdGVtS2V5ID0gdHJ1ZTsK
KyNlbHNlCisgICAgfSBlbHNlIGlmICghc3RyY21wKGNoYXJhY3RlcnMsICJtZXRhS2V5IikpIHsK
KyAgICAgICAgZXZlbnQtPm1vZGlmaWVycyB8PSBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5OworI2Vu
ZGlmCisgICAgfQorICAgIHJldHVybiBpc1N5c3RlbUtleTsKK30KKworc3RhdGljIGJvb2wgYXBw
bHlLZXlNb2RpZmllcnMoY29uc3QgQ3BwVmFyaWFudCogYXJndW1lbnQsIFdlYklucHV0RXZlbnQq
IGV2ZW50KQoreworICAgIGJvb2wgaXNTeXN0ZW1LZXkgPSBmYWxzZTsKKyAgICBpZiAoYXJndW1l
bnQtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgVmVjdG9yPHN0cmluZz4gbW9kaWZpZXJzID0gYXJn
dW1lbnQtPnRvU3RyaW5nVmVjdG9yKCk7CisgICAgICAgIGZvciAoVmVjdG9yPHN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGkgPSBtb2RpZmllcnMuYmVnaW4oKTsgaSAhPSBtb2RpZmllcnMuZW5kKCk7
ICsraSkKKyAgICAgICAgICAgIGlzU3lzdGVtS2V5IHw9IGFwcGx5S2V5TW9kaWZpZXIoKmksIGV2
ZW50KTsKKyAgICB9IGVsc2UgaWYgKGFyZ3VtZW50LT5pc1N0cmluZygpKQorICAgICAgICBpc1N5
c3RlbUtleSA9IGFwcGx5S2V5TW9kaWZpZXIoYXJndW1lbnQtPnRvU3RyaW5nKCksIGV2ZW50KTsK
KyAgICByZXR1cm4gaXNTeXN0ZW1LZXk7Cit9CisKKy8vIEdldCB0aGUgZWRpdCBjb21tYW5kIGNv
cnJlc3BvbmRpbmcgdG8gYSBrZXlib2FyZCBldmVudC4KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c3BlY2lmaWVkIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGFuIGVkaXQgY29tbWFuZCwgdGhlIG5hbWUK
Ky8vIG9mIHRoZSBlZGl0IGNvbW1hbmQgd2lsbCBiZSBzdG9yZWQgaW4gfCpuYW1lfC4KK2Jvb2wg
Z2V0RWRpdENvbW1hbmQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIHN0cmluZyogbmFt
ZSkKK3sKKyNpZiBPUyhNQUNfT1NfWCkKKyAgICAvLyBXZSBvbmx5IGNhcmVzIGFib3V0IExlZnQs
UmlnaHQsVXAsRG93biBrZXlzIHdpdGggQ29tbWFuZCBvciBDb21tYW5kK1NoaWZ0CisgICAgLy8g
bW9kaWZpZXJzLiBUaGVzZSBrZXkgZXZlbnRzIGNvcnJlc3BvbmQgdG8gc29tZSBzcGVjaWFsIG1v
dmVtZW50IGFuZAorICAgIC8vIHNlbGVjdGlvbiBlZGl0b3IgY29tbWFuZHMsIGFuZCB3YXMgc3Vw
cG9zZWQgdG8gYmUgaGFuZGxlZCBpbgorICAgIC8vIFdlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9y
Q2xpZW50SW1wbC5jcHAuIEJ1dCB0aGVzZSBrZXlzIHdpbGwgYmUgbWFya2VkCisgICAgLy8gYXMg
c3lzdGVtIGtleSwgd2hpY2ggcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGhhbmRsZWQuIFRodXMg
dGhleSBtdXN0IGJlCisgICAgLy8gaGFuZGxlZCBzcGVjaWFsbHkuCisgICAgaWYgKChldmVudC5t
b2RpZmllcnMgJiB+V2ViS2V5Ym9hcmRFdmVudDo6U2hpZnRLZXkpICE9IFdlYktleWJvYXJkRXZl
bnQ6Ok1ldGFLZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoZXZlbnQu
d2luZG93c0tleUNvZGUpIHsKKyAgICBjYXNlIHdlYmtpdF9zdXBwb3J0OjpWS0VZX0xFRlQ6Cisg
ICAgICAgICpuYW1lID0gIk1vdmVUb0JlZ2lubmluZ09mTGluZSI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2Ugd2Via2l0X3N1cHBvcnQ6OlZLRVlfUklHSFQ6CisgICAgICAgICpuYW1lID0gIk1v
dmVUb0VuZE9mTGluZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ugd2Via2l0X3N1cHBvcnQ6
OlZLRVlfVVA6CisgICAgICAgICpuYW1lID0gIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQiOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIHdlYmtpdF9zdXBwb3J0OjpWS0VZX0RPV046CisgICAg
ICAgICpuYW1lID0gIk1vdmVUb0VuZE9mRG9jdW1lbnQiOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGV2ZW50Lm1v
ZGlmaWVycyAmIFdlYktleWJvYXJkRXZlbnQ6OlNoaWZ0S2V5KQorICAgICAgICBuYW1lLT5hcHBl
bmQoIkFuZE1vZGlmeVNlbGVjdGlvbiIpOworCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisvLyBLZXkgZXZlbnQgbG9jYXRpb24gY29kZSBp
bnRyb2R1Y2VkIGluIERPTSBMZXZlbCAzLgorLy8gU2VlIGFsc286IGh0dHA6Ly93d3cudzMub3Jn
L1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWtleWJvYXJkZXZlbnRzCitlbnVtIEtleUxv
Y2F0aW9uQ29kZSB7CisgICAgRE9NS2V5TG9jYXRpb25TdGFuZGFyZCAgICAgID0gMHgwMCwKKyAg
ICBET01LZXlMb2NhdGlvbkxlZnQgICAgICAgICAgPSAweDAxLAorICAgIERPTUtleUxvY2F0aW9u
UmlnaHQgICAgICAgICA9IDB4MDIsCisgICAgRE9NS2V5TG9jYXRpb25OdW1wYWQgICAgICAgID0g
MHgwMworfTsKKworRXZlbnRTZW5kZXI6OkV2ZW50U2VuZGVyKCkKKyAgICA6IG1fZGVsZWdhdGUo
MCkKK3sKKyAgICAvLyBJbml0aWFsaXplIHRoZSBtYXAgdGhhdCBhc3NvY2lhdGVzIG1ldGhvZHMg
b2YgdGhpcyBjbGFzcyB3aXRoIHRoZSBuYW1lcworICAgIC8vIHRoZXkgd2lsbCB1c2Ugd2hlbiBj
YWxsZWQgYnkgSmF2YVNjcmlwdC4gVGhlIGFjdHVhbCBiaW5kaW5nIG9mIHRob3NlCisgICAgLy8g
bmFtZXMgdG8gdGhlaXIgbWV0aG9kcyB3aWxsIGJlIGRvbmUgYnkgY2FsbGluZyBiaW5kVG9KYXZh
U2NyaXB0KCkgKGRlZmluZWQKKyAgICAvLyBieSBDcHBCb3VuZENsYXNzLCB0aGUgcGFyZW50IHRv
IEV2ZW50U2VuZGVyKS4KKyAgICBiaW5kTWV0aG9kKCJhZGRUb3VjaFBvaW50IiwgJkV2ZW50U2Vu
ZGVyOjphZGRUb3VjaFBvaW50KTsKKyAgICBiaW5kTWV0aG9kKCJiZWdpbkRyYWdXaXRoRmlsZXMi
LCAmRXZlbnRTZW5kZXI6OmJlZ2luRHJhZ1dpdGhGaWxlcyk7CisgICAgYmluZE1ldGhvZCgiY2Fu
Y2VsVG91Y2hQb2ludCIsICZFdmVudFNlbmRlcjo6Y2FuY2VsVG91Y2hQb2ludCk7CisgICAgYmlu
ZE1ldGhvZCgiY2xlYXJLaWxsUmluZyIsICZFdmVudFNlbmRlcjo6Y2xlYXJLaWxsUmluZyk7Cisg
ICAgYmluZE1ldGhvZCgiY2xlYXJUb3VjaFBvaW50cyIsICZFdmVudFNlbmRlcjo6Y2xlYXJUb3Vj
aFBvaW50cyk7CisgICAgYmluZE1ldGhvZCgiY29udGV4dENsaWNrIiwgJkV2ZW50U2VuZGVyOjpj
b250ZXh0Q2xpY2spOworICAgIGJpbmRNZXRob2QoImNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5Iiwg
JkV2ZW50U2VuZGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeSk7CisgICAgYmluZE1ldGhvZCgi
ZGlzcGF0Y2hNZXNzYWdlIiwgJkV2ZW50U2VuZGVyOjpkaXNwYXRjaE1lc3NhZ2UpOworICAgIGJp
bmRNZXRob2QoImR1bXBGaWxlbmFtZUJlaW5nRHJhZ2dlZCIsICZFdmVudFNlbmRlcjo6ZHVtcEZp
bGVuYW1lQmVpbmdEcmFnZ2VkKTsKKyAgICBiaW5kTWV0aG9kKCJlbmFibGVET01VSUV2ZW50TG9n
Z2luZyIsICZFdmVudFNlbmRlcjo6ZW5hYmxlRE9NVUlFdmVudExvZ2dpbmcpOworICAgIGJpbmRN
ZXRob2QoImZpcmVLZXlib2FyZEV2ZW50c1RvRWxlbWVudCIsICZFdmVudFNlbmRlcjo6ZmlyZUtl
eWJvYXJkRXZlbnRzVG9FbGVtZW50KTsKKyAgICBiaW5kTWV0aG9kKCJrZXlEb3duIiwgJkV2ZW50
U2VuZGVyOjprZXlEb3duKTsKKyAgICBiaW5kTWV0aG9kKCJsZWFwRm9yd2FyZCIsICZFdmVudFNl
bmRlcjo6bGVhcEZvcndhcmQpOworICAgIGJpbmRNZXRob2QoIm1vdXNlRG93biIsICZFdmVudFNl
bmRlcjo6bW91c2VEb3duKTsKKyAgICBiaW5kTWV0aG9kKCJtb3VzZU1vdmVUbyIsICZFdmVudFNl
bmRlcjo6bW91c2VNb3ZlVG8pOworICAgIGJpbmRNZXRob2QoIm1vdXNlU2Nyb2xsQnkiLCAmRXZl
bnRTZW5kZXI6Om1vdXNlU2Nyb2xsQnkpOworICAgIGJpbmRNZXRob2QoIm1vdXNlVXAiLCAmRXZl
bnRTZW5kZXI6Om1vdXNlVXApOworICAgIGJpbmRNZXRob2QoInJlbGVhc2VUb3VjaFBvaW50Iiwg
JkV2ZW50U2VuZGVyOjpyZWxlYXNlVG91Y2hQb2ludCk7CisgICAgYmluZE1ldGhvZCgic2NoZWR1
bGVBc3luY2hyb25vdXNDbGljayIsICZFdmVudFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25vdXND
bGljayk7CisgICAgYmluZE1ldGhvZCgic2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duIiwgJkV2
ZW50U2VuZGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24pOworICAgIGJpbmRNZXRob2Qo
InNldFRvdWNoTW9kaWZpZXIiLCAmRXZlbnRTZW5kZXI6OnNldFRvdWNoTW9kaWZpZXIpOworICAg
IGJpbmRNZXRob2QoInRleHRab29tSW4iLCAmRXZlbnRTZW5kZXI6OnRleHRab29tSW4pOworICAg
IGJpbmRNZXRob2QoInRleHRab29tT3V0IiwgJkV2ZW50U2VuZGVyOjp0ZXh0Wm9vbU91dCk7Cisg
ICAgYmluZE1ldGhvZCgidG91Y2hDYW5jZWwiLCAmRXZlbnRTZW5kZXI6OnRvdWNoQ2FuY2VsKTsK
KyAgICBiaW5kTWV0aG9kKCJ0b3VjaEVuZCIsICZFdmVudFNlbmRlcjo6dG91Y2hFbmQpOworICAg
IGJpbmRNZXRob2QoInRvdWNoTW92ZSIsICZFdmVudFNlbmRlcjo6dG91Y2hNb3ZlKTsKKyAgICBi
aW5kTWV0aG9kKCJ0b3VjaFN0YXJ0IiwgJkV2ZW50U2VuZGVyOjp0b3VjaFN0YXJ0KTsKKyAgICBi
aW5kTWV0aG9kKCJ1cGRhdGVUb3VjaFBvaW50IiwgJkV2ZW50U2VuZGVyOjp1cGRhdGVUb3VjaFBv
aW50KTsKKyAgICBiaW5kTWV0aG9kKCJnZXN0dXJlRmxpbmdDYW5jZWwiLCAmRXZlbnRTZW5kZXI6
Omdlc3R1cmVGbGluZ0NhbmNlbCk7CisgICAgYmluZE1ldGhvZCgiZ2VzdHVyZUZsaW5nU3RhcnQi
LCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVGbGluZ1N0YXJ0KTsKKyAgICBiaW5kTWV0aG9kKCJnZXN0
dXJlU2Nyb2xsQmVnaW4iLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxCZWdpbik7CisgICAg
YmluZE1ldGhvZCgiZ2VzdHVyZVNjcm9sbEVuZCIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVNjcm9s
bEVuZCk7CisgICAgYmluZE1ldGhvZCgiZ2VzdHVyZVNjcm9sbEZpcnN0UG9pbnQiLCAmRXZlbnRT
ZW5kZXI6Omdlc3R1cmVTY3JvbGxGaXJzdFBvaW50KTsKKyAgICBiaW5kTWV0aG9kKCJnZXN0dXJl
U2Nyb2xsVXBkYXRlIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xsVXBkYXRlKTsKKyAgICBi
aW5kTWV0aG9kKCJnZXN0dXJlVGFwIiwgJkV2ZW50U2VuZGVyOjpnZXN0dXJlVGFwKTsKKyAgICBi
aW5kTWV0aG9kKCJnZXN0dXJlVGFwRG93biIsICZFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcERvd24p
OworICAgIGJpbmRNZXRob2QoImdlc3R1cmVUYXBDYW5jZWwiLCAmRXZlbnRTZW5kZXI6Omdlc3R1
cmVUYXBDYW5jZWwpOworICAgIGJpbmRNZXRob2QoImdlc3R1cmVMb25nUHJlc3MiLCAmRXZlbnRT
ZW5kZXI6Omdlc3R1cmVMb25nUHJlc3MpOworICAgIGJpbmRNZXRob2QoImdlc3R1cmVUd29GaW5n
ZXJUYXAiLCAmRXZlbnRTZW5kZXI6Omdlc3R1cmVUd29GaW5nZXJUYXApOworICAgIGJpbmRNZXRo
b2QoInpvb21QYWdlSW4iLCAmRXZlbnRTZW5kZXI6Onpvb21QYWdlSW4pOworICAgIGJpbmRNZXRo
b2QoInpvb21QYWdlT3V0IiwgJkV2ZW50U2VuZGVyOjp6b29tUGFnZU91dCk7CisgICAgYmluZE1l
dGhvZCgic2NhbGVQYWdlQnkiLCAmRXZlbnRTZW5kZXI6OnNjYWxlUGFnZUJ5KTsKKworICAgIC8v
IFdoZW4gc2V0IHRvIHRydWUgKHRoZSBkZWZhdWx0IHZhbHVlKSwgd2UgYmF0Y2ggbW91c2UgbW92
ZSBhbmQgbW91c2UgdXAKKyAgICAvLyBldmVudHMgc28gd2UgY2FuIHNpbXVsYXRlIGRyYWcgJiBk
cm9wLgorICAgIGJpbmRQcm9wZXJ0eSgiZHJhZ01vZGUiLCAmZHJhZ01vZGUpOworI2lmIE9TKFdJ
TkRPV1MpCisgICAgYmluZFByb3BlcnR5KCJXTV9LRVlET1dOIiwgJndtS2V5RG93bik7CisgICAg
YmluZFByb3BlcnR5KCJXTV9LRVlVUCIsICZ3bUtleVVwKTsKKyAgICBiaW5kUHJvcGVydHkoIldN
X0NIQVIiLCAmd21DaGFyKTsKKyAgICBiaW5kUHJvcGVydHkoIldNX0RFQURDSEFSIiwgJndtRGVh
ZENoYXIpOworICAgIGJpbmRQcm9wZXJ0eSgiV01fU1lTS0VZRE9XTiIsICZ3bVN5c0tleURvd24p
OworICAgIGJpbmRQcm9wZXJ0eSgiV01fU1lTS0VZVVAiLCAmd21TeXNLZXlVcCk7CisgICAgYmlu
ZFByb3BlcnR5KCJXTV9TWVNDSEFSIiwgJndtU3lzQ2hhcik7CisgICAgYmluZFByb3BlcnR5KCJX
TV9TWVNERUFEQ0hBUiIsICZ3bVN5c0RlYWRDaGFyKTsKKyNlbmRpZgorfQorCit2b2lkIEV2ZW50
U2VuZGVyOjpyZXNldCgpCit7CisgICAgLy8gVGhlIHRlc3Qgc2hvdWxkIGhhdmUgZmluaXNoZWQg
YSBkcmFnIGFuZCB0aGUgbW91c2UgYnV0dG9uIHN0YXRlLgorICAgIEFTU0VSVChjdXJyZW50RHJh
Z0RhdGEuaXNOdWxsKCkpOworICAgIGN1cnJlbnREcmFnRGF0YS5yZXNldCgpOworICAgIGN1cnJl
bnREcmFnRWZmZWN0ID0gV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICBjdXJyZW50
RHJhZ0VmZmVjdHNBbGxvd2VkID0gV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICBw
cmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZTsKKyAgICBkcmFnTW9kZS5z
ZXQodHJ1ZSk7CisjaWYgT1MoV0lORE9XUykKKyAgICB3bUtleURvd24uc2V0KFdNX0tFWURPV04p
OworICAgIHdtS2V5VXAuc2V0KFdNX0tFWVVQKTsKKyAgICB3bUNoYXIuc2V0KFdNX0NIQVIpOwor
ICAgIHdtRGVhZENoYXIuc2V0KFdNX0RFQURDSEFSKTsKKyAgICB3bVN5c0tleURvd24uc2V0KFdN
X1NZU0tFWURPV04pOworICAgIHdtU3lzS2V5VXAuc2V0KFdNX1NZU0tFWVVQKTsKKyAgICB3bVN5
c0NoYXIuc2V0KFdNX1NZU0NIQVIpOworICAgIHdtU3lzRGVhZENoYXIuc2V0KFdNX1NZU0RFQURD
SEFSKTsKKyNlbmRpZgorICAgIGxhc3RNb3VzZVBvcyA9IFdlYlBvaW50KDAsIDApOworICAgIGxh
c3RDbGlja1RpbWVTZWMgPSAwOworICAgIGxhc3RDbGlja1BvcyA9IFdlYlBvaW50KDAsIDApOwor
ICAgIGNsaWNrQ291bnQgPSAwOworICAgIGxhc3RCdXR0b25UeXBlID0gV2ViTW91c2VFdmVudDo6
QnV0dG9uTm9uZTsKKyAgICB0aW1lT2Zmc2V0TXMgPSAwOworICAgIHRvdWNoTW9kaWZpZXJzID0g
MDsKKyAgICB0b3VjaFBvaW50cy5jbGVhcigpOworICAgIG1fdGFza0xpc3QucmV2b2tlQWxsKCk7
CisgICAgbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uID0gV2ViUG9pbnQoMCwgMCk7Cit9CisKK3Zv
aWQgRXZlbnRTZW5kZXI6OmRvRHJhZ0Ryb3AoY29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRhLCBX
ZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaykKK3sKKyAgICBXZWJNb3VzZUV2ZW50IGV2ZW50Owor
ICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93biwgcHJlc3NlZEJ1dHRv
biwgbGFzdE1vdXNlUG9zLCAmZXZlbnQpOworICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGV2ZW50
LngsIGV2ZW50LnkpOworICAgIFdlYlBvaW50IHNjcmVlblBvaW50KGV2ZW50Lmdsb2JhbFgsIGV2
ZW50Lmdsb2JhbFkpOworICAgIGN1cnJlbnREcmFnRGF0YSA9IGRyYWdEYXRhOworICAgIGN1cnJl
bnREcmFnRWZmZWN0c0FsbG93ZWQgPSBtYXNrOworICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gd2Vi
dmlldygpLT5kcmFnVGFyZ2V0RHJhZ0VudGVyKGRyYWdEYXRhLCBjbGllbnRQb2ludCwgc2NyZWVu
UG9pbnQsIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQsIDApOworCisgICAgLy8gRmluaXNoIHBy
b2Nlc3NpbmcgZXZlbnRzLgorICAgIHJlcGxheVNhdmVkRXZlbnRzKCk7Cit9CisKK3ZvaWQgRXZl
bnRTZW5kZXI6OmR1bXBGaWxlbmFtZUJlaW5nRHJhZ2dlZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KikKK3sKKyAgICBXZWJTdHJpbmcgZmlsZW5hbWU7CisgICAgV2ViVmVjdG9y
PFdlYkRyYWdEYXRhOjpJdGVtPiBpdGVtcyA9IGN1cnJlbnREcmFnRGF0YS5pdGVtcygpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGl0ZW1zW2ldLnN0b3JhZ2VUeXBlID09IFdlYkRyYWdEYXRhOjpJdGVtOjpTdG9yYWdlVHlwZUJp
bmFyeURhdGEpIHsKKyAgICAgICAgICAgIGZpbGVuYW1lID0gaXRlbXNbaV0udGl0bGU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoIkZpbGVuYW1lIGJl
aW5nIGRyYWdnZWQ6ICVzXG4iLCBmaWxlbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworV2ViTW91
c2VFdmVudDo6QnV0dG9uIEV2ZW50U2VuZGVyOjpnZXRCdXR0b25UeXBlRnJvbUJ1dHRvbk51bWJl
cihpbnQgYnV0dG9uQ29kZSkKK3sKKyAgICBpZiAoIWJ1dHRvbkNvZGUpCisgICAgICAgIHJldHVy
biBXZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0OworICAgIGlmIChidXR0b25Db2RlID09IDIpCisg
ICAgICAgIHJldHVybiBXZWJNb3VzZUV2ZW50OjpCdXR0b25SaWdodDsKKyAgICByZXR1cm4gV2Vi
TW91c2VFdmVudDo6QnV0dG9uTWlkZGxlOworfQorCitpbnQgRXZlbnRTZW5kZXI6OmdldEJ1dHRv
bk51bWJlckZyb21TaW5nbGVBcmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMpCit7
CisgICAgaW50IGJ1dHRvbkNvZGUgPSAwOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAm
JiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSkKKyAgICAgICAgYnV0dG9uQ29kZSA9IGFyZ3VtZW50
c1swXS50b0ludDMyKCk7CisgICAgcmV0dXJuIGJ1dHRvbkNvZGU7Cit9CisKK3ZvaWQgRXZlbnRT
ZW5kZXI6OnVwZGF0ZUNsaWNrQ291bnRGb3JCdXR0b24oV2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1
dHRvblR5cGUpCit7CisgICAgaWYgKChnZXRDdXJyZW50RXZlbnRUaW1lU2VjKCkgLSBsYXN0Q2xp
Y2tUaW1lU2VjIDwgbXVsdGlwbGVDbGlja1RpbWVTZWMpCisgICAgICAgICYmICghb3V0c2lkZU11
bHRpQ2xpY2tSYWRpdXMobGFzdE1vdXNlUG9zLCBsYXN0Q2xpY2tQb3MpKQorICAgICAgICAmJiAo
YnV0dG9uVHlwZSA9PSBsYXN0QnV0dG9uVHlwZSkpCisgICAgICAgICsrY2xpY2tDb3VudDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgY2xpY2tDb3VudCA9IDE7CisgICAgICAgIGxhc3RCdXR0b25UeXBl
ID0gYnV0dG9uVHlwZTsKKyAgICB9Cit9CisKKy8vCisvLyBJbXBsZW1lbnRlZCBqYXZhc2NyaXB0
IG1ldGhvZHMuCisvLworCit2b2lkIEV2ZW50U2VuZGVyOjptb3VzZURvd24oY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAocmVz
dWx0KSAvLyBDb3VsZCBiZSAwIGlmIGludm9rZWQgYXN5bmNocm9ub3VzbHkuCisgICAgICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworCisgICAgd2VidmlldygpLT5sYXlvdXQoKTsKKworICAgIGludCBi
dXR0b25OdW1iZXIgPSBnZXRCdXR0b25OdW1iZXJGcm9tU2luZ2xlQXJnKGFyZ3VtZW50cyk7Cisg
ICAgQVNTRVJUKGJ1dHRvbk51bWJlciAhPSAtMSk7CisKKyAgICBXZWJNb3VzZUV2ZW50OjpCdXR0
b24gYnV0dG9uVHlwZSA9IGdldEJ1dHRvblR5cGVGcm9tQnV0dG9uTnVtYmVyKGJ1dHRvbk51bWJl
cik7CisKKyAgICB1cGRhdGVDbGlja0NvdW50Rm9yQnV0dG9uKGJ1dHRvblR5cGUpOworCisgICAg
V2ViTW91c2VFdmVudCBldmVudDsKKyAgICBwcmVzc2VkQnV0dG9uID0gYnV0dG9uVHlwZTsKKyAg
ICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3VzZURvd24sIGJ1dHRvblR5cGUsIGxh
c3RNb3VzZVBvcywgJmV2ZW50KTsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIChh
cmd1bWVudHNbMV0uaXNPYmplY3QoKSB8fCBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkpCisgICAg
ICAgIGFwcGx5S2V5TW9kaWZpZXJzKCYoYXJndW1lbnRzWzFdKSwgJmV2ZW50KTsKKyAgICB3ZWJ2
aWV3KCktPmhhbmRsZUlucHV0RXZlbnQoZXZlbnQpOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpt
b3VzZVVwKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgaWYgKHJlc3VsdCkgLy8gQ291bGQgYmUgMCBpZiBpbnZva2VkIGFzeW5jaHJv
bm91c2x5LgorICAgICAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIHdlYnZpZXcoKS0+bGF5
b3V0KCk7CisKKyAgICBpbnQgYnV0dG9uTnVtYmVyID0gZ2V0QnV0dG9uTnVtYmVyRnJvbVNpbmds
ZUFyZyhhcmd1bWVudHMpOworICAgIEFTU0VSVChidXR0b25OdW1iZXIgIT0gLTEpOworCisgICAg
V2ViTW91c2VFdmVudDo6QnV0dG9uIGJ1dHRvblR5cGUgPSBnZXRCdXR0b25UeXBlRnJvbUJ1dHRv
bk51bWJlcihidXR0b25OdW1iZXIpOworCisgICAgaWYgKGlzRHJhZ01vZGUoKSAmJiAhcmVwbGF5
aW5nU2F2ZWRFdmVudHMpIHsKKyAgICAgICAgU2F2ZWRFdmVudCBzYXZlZEV2ZW50OworICAgICAg
ICBzYXZlZEV2ZW50LnR5cGUgPSBTYXZlZEV2ZW50OjpNb3VzZVVwOworICAgICAgICBzYXZlZEV2
ZW50LmJ1dHRvblR5cGUgPSBidXR0b25UeXBlOworICAgICAgICBtb3VzZUV2ZW50UXVldWUuYXBw
ZW5kKHNhdmVkRXZlbnQpOworICAgICAgICByZXBsYXlTYXZlZEV2ZW50cygpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7CisgICAgICAgIGluaXRNb3VzZUV2ZW50
KFdlYklucHV0RXZlbnQ6Ok1vdXNlVXAsIGJ1dHRvblR5cGUsIGxhc3RNb3VzZVBvcywgJmV2ZW50
KTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiAoYXJndW1lbnRzWzFdLmlz
T2JqZWN0KCkgfHwgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpKQorICAgICAgICAgICAgYXBwbHlL
ZXlNb2RpZmllcnMoJihhcmd1bWVudHNbMV0pLCAmZXZlbnQpOworICAgICAgICBkb01vdXNlVXAo
ZXZlbnQpOworICAgIH0KK30KKwordm9pZCBFdmVudFNlbmRlcjo6ZG9Nb3VzZVVwKGNvbnN0IFdl
Yk1vdXNlRXZlbnQmIGUpCit7CisgICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGUpOwor
CisgICAgcHJlc3NlZEJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmU7CisgICAgbGFz
dENsaWNrVGltZVNlYyA9IGUudGltZVN0YW1wU2Vjb25kczsKKyAgICBsYXN0Q2xpY2tQb3MgPSBs
YXN0TW91c2VQb3M7CisKKyAgICAvLyBJZiB3ZSdyZSBpbiBhIGRyYWcgb3BlcmF0aW9uLCBjb21w
bGV0ZSBpdC4KKyAgICBpZiAoY3VycmVudERyYWdEYXRhLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZS54LCBlLnkpOworICAgIFdlYlBvaW50IHNj
cmVlblBvaW50KGUuZ2xvYmFsWCwgZS5nbG9iYWxZKTsKKworICAgIGN1cnJlbnREcmFnRWZmZWN0
ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ092ZXIoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50
LCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkLCAwKTsKKyAgICBpZiAoY3VycmVudERyYWdFZmZl
Y3QpCisgICAgICAgIHdlYnZpZXcoKS0+ZHJhZ1RhcmdldERyb3AoY2xpZW50UG9pbnQsIHNjcmVl
blBvaW50LCAwKTsKKyAgICBlbHNlCisgICAgICAgIHdlYnZpZXcoKS0+ZHJhZ1RhcmdldERyYWdM
ZWF2ZSgpOworICAgIHdlYnZpZXcoKS0+ZHJhZ1NvdXJjZUVuZGVkQXQoY2xpZW50UG9pbnQsIHNj
cmVlblBvaW50LCBjdXJyZW50RHJhZ0VmZmVjdCk7CisgICAgd2VidmlldygpLT5kcmFnU291cmNl
U3lzdGVtRHJhZ0VuZGVkKCk7CisKKyAgICBjdXJyZW50RHJhZ0RhdGEucmVzZXQoKTsKK30KKwor
dm9pZCBFdmVudFNlbmRlcjo6bW91c2VNb3ZlVG8oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKwor
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkg
fHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisgICAgd2Vidmll
dygpLT5sYXlvdXQoKTsKKworICAgIFdlYlBvaW50IG1vdXNlUG9zKGFyZ3VtZW50c1swXS50b0lu
dDMyKCksIGFyZ3VtZW50c1sxXS50b0ludDMyKCkpOworCisgICAgaWYgKGlzRHJhZ01vZGUoKSAm
JiBwcmVzc2VkQnV0dG9uID09IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQgJiYgIXJlcGxheWlu
Z1NhdmVkRXZlbnRzKSB7CisgICAgICAgIFNhdmVkRXZlbnQgc2F2ZWRFdmVudDsKKyAgICAgICAg
c2F2ZWRFdmVudC50eXBlID0gU2F2ZWRFdmVudDo6TW91c2VNb3ZlOworICAgICAgICBzYXZlZEV2
ZW50LnBvcyA9IG1vdXNlUG9zOworICAgICAgICBtb3VzZUV2ZW50UXVldWUuYXBwZW5kKHNhdmVk
RXZlbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7CisgICAg
ICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlTW92ZSwgcHJlc3NlZEJ1dHRv
biwgbW91c2VQb3MsICZldmVudCk7CisgICAgICAgIGRvTW91c2VNb3ZlKGV2ZW50KTsKKyAgICB9
Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6OmRvTW91c2VNb3ZlKGNvbnN0IFdlYk1vdXNlRXZlbnQm
IGUpCit7CisgICAgbGFzdE1vdXNlUG9zID0gV2ViUG9pbnQoZS54LCBlLnkpOworCisgICAgd2Vi
dmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGUpOworCisgICAgaWYgKHByZXNzZWRCdXR0b24gPT0g
V2ViTW91c2VFdmVudDo6QnV0dG9uTm9uZSB8fCBjdXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJQb2ludCBjbGllbnRQb2ludChlLngsIGUueSk7CisgICAg
V2ViUG9pbnQgc2NyZWVuUG9pbnQoZS5nbG9iYWxYLCBlLmdsb2JhbFkpOworICAgIGN1cnJlbnRE
cmFnRWZmZWN0ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ092ZXIoY2xpZW50UG9pbnQsIHNj
cmVlblBvaW50LCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkLCAwKTsKK30KKwordm9pZCBFdmVu
dFNlbmRlcjo6a2V5RG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzU3Ry
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIGdlbmVyYXRlQ2hhciA9IGZhbHNlOwor
CisgICAgLy8gRklYTUU6IEknbSBub3QgZXhhY3RseSBzdXJlIGhvdyB3ZSBzaG91bGQgY29udmVy
dCB0aGUgc3RyaW5nIHRvIGEga2V5CisgICAgLy8gZXZlbnQuIFRoaXMgc2VlbXMgdG8gd29yayBp
biB0aGUgY2FzZXMgSSB0ZXN0ZWQuCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHNvIGdlbmVy
YXRlIGEgS0VZX1VQPworICAgIHN0cmluZyBjb2RlU3RyID0gYXJndW1lbnRzWzBdLnRvU3RyaW5n
KCk7CisKKyAgICAvLyBDb252ZXJ0IFxuIC0+IFZLX1JFVFVSTi4gU29tZSBsYXlvdXQgdGVzdHMg
dXNlIFxuIHRvIG1lYW4gIkVudGVyIiwgd2hlbgorICAgIC8vIFdpbmRvd3MgdXNlcyBcciBmb3Ig
IkVudGVyIi4KKyAgICBpbnQgY29kZSA9IDA7CisgICAgaW50IHRleHQgPSAwOworICAgIGJvb2wg
bmVlZHNTaGlmdEtleU1vZGlmaWVyID0gZmFsc2U7CisgICAgaWYgKCJcbiIgPT0gY29kZVN0cikg
eworICAgICAgICBnZW5lcmF0ZUNoYXIgPSB0cnVlOworICAgICAgICB0ZXh0ID0gY29kZSA9IHdl
YmtpdF9zdXBwb3J0OjpWS0VZX1JFVFVSTjsKKyAgICB9IGVsc2UgaWYgKCJyaWdodEFycm93IiA9
PSBjb2RlU3RyKQorICAgICAgICBjb2RlID0gd2Via2l0X3N1cHBvcnQ6OlZLRVlfUklHSFQ7Cisg
ICAgZWxzZSBpZiAoImRvd25BcnJvdyIgPT0gY29kZVN0cikKKyAgICAgICAgY29kZSA9IHdlYmtp
dF9zdXBwb3J0OjpWS0VZX0RPV047CisgICAgZWxzZSBpZiAoImxlZnRBcnJvdyIgPT0gY29kZVN0
cikKKyAgICAgICAgY29kZSA9IHdlYmtpdF9zdXBwb3J0OjpWS0VZX0xFRlQ7CisgICAgZWxzZSBp
ZiAoInVwQXJyb3ciID09IGNvZGVTdHIpCisgICAgICAgIGNvZGUgPSB3ZWJraXRfc3VwcG9ydDo6
VktFWV9VUDsKKyAgICBlbHNlIGlmICgiaW5zZXJ0IiA9PSBjb2RlU3RyKQorICAgICAgICBjb2Rl
ID0gd2Via2l0X3N1cHBvcnQ6OlZLRVlfSU5TRVJUOworICAgIGVsc2UgaWYgKCJkZWxldGUiID09
IGNvZGVTdHIpCisgICAgICAgIGNvZGUgPSB3ZWJraXRfc3VwcG9ydDo6VktFWV9ERUxFVEU7Cisg
ICAgZWxzZSBpZiAoInBhZ2VVcCIgPT0gY29kZVN0cikKKyAgICAgICAgY29kZSA9IHdlYmtpdF9z
dXBwb3J0OjpWS0VZX1BSSU9SOworICAgIGVsc2UgaWYgKCJwYWdlRG93biIgPT0gY29kZVN0cikK
KyAgICAgICAgY29kZSA9IHdlYmtpdF9zdXBwb3J0OjpWS0VZX05FWFQ7CisgICAgZWxzZSBpZiAo
ImhvbWUiID09IGNvZGVTdHIpCisgICAgICAgIGNvZGUgPSB3ZWJraXRfc3VwcG9ydDo6VktFWV9I
T01FOworICAgIGVsc2UgaWYgKCJlbmQiID09IGNvZGVTdHIpCisgICAgICAgIGNvZGUgPSB3ZWJr
aXRfc3VwcG9ydDo6VktFWV9FTkQ7CisgICAgZWxzZSBpZiAoInByaW50U2NyZWVuIiA9PSBjb2Rl
U3RyKQorICAgICAgICBjb2RlID0gd2Via2l0X3N1cHBvcnQ6OlZLRVlfU05BUFNIT1Q7CisgICAg
ZWxzZSBpZiAoIm1lbnUiID09IGNvZGVTdHIpCisgICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhp
cyB0byB3ZWJraXRfc3VwcG9ydDo6VktFWV9BUFBTLgorICAgICAgICBjb2RlID0gMHg1RDsKKyAg
ICBlbHNlIGlmICgibGVmdENvbnRyb2wiID09IGNvZGVTdHIpCisgICAgICAgIC8vIEZJWE1FOiBD
aGFuZ2UgdGhpcyB0byB3ZWJraXRfc3VwcG9ydDo6VktFWV9MQ09OVFJPTC4KKyAgICAgICAgY29k
ZSA9IDB4QTI7CisgICAgZWxzZSBpZiAoInJpZ2h0Q29udHJvbCIgPT0gY29kZVN0cikKKyAgICAg
ICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIHdlYmtpdF9zdXBwb3J0OjpWS0VZX1JDT05UUk9M
LgorICAgICAgICBjb2RlID0gMHhBMzsKKyAgICBlbHNlIGlmICgibGVmdFNoaWZ0IiA9PSBjb2Rl
U3RyKQorICAgICAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gd2Via2l0X3N1cHBvcnQ6OlZL
RVlfTFNISUZULgorICAgICAgICBjb2RlID0gMHhBMDsKKyAgICBlbHNlIGlmICgicmlnaHRTaGlm
dCIgPT0gY29kZVN0cikKKyAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIHdlYmtpdF9z
dXBwb3J0OjpWS0VZX1JTSElGVC4KKyAgICAgICAgY29kZSA9IDB4QTE7CisgICAgZWxzZSBpZiAo
ImxlZnRBbHQiID09IGNvZGVTdHIpCisgICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byB3
ZWJraXRfc3VwcG9ydDo6VktFWV9MTUVOVS4KKyAgICAgICAgY29kZSA9IDB4QTQ7CisgICAgZWxz
ZSBpZiAoInJpZ2h0QWx0IiA9PSBjb2RlU3RyKQorICAgICAgICAvLyBGSVhNRTogQ2hhbmdlIHRo
aXMgdG8gd2Via2l0X3N1cHBvcnQ6OlZLRVlfUk1FTlUuCisgICAgICAgIGNvZGUgPSAweEE1Owor
ICAgIGVsc2UgeworICAgICAgICAvLyBDb21wYXJlIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCB0aGUg
ZnVuY3Rpb24ta2V5IG5hbWVzIGRlZmluZWQgYnkgdGhlCisgICAgICAgIC8vIERPTSBzcGVjIChp
LmUuICJGMSIsLi4uLCJGMjQiKS4gSWYgdGhlIGlucHV0IHN0cmluZyBpcyBhIGZ1bmN0aW9uLWtl
eQorICAgICAgICAvLyBuYW1lLCBzZXQgaXRzIGtleSBjb2RlLgorICAgICAgICBmb3IgKGludCBp
ID0gMTsgaSA8PSAyNDsgKytpKSB7CisgICAgICAgICAgICBjaGFyIGZ1bmN0aW9uQ2hhcnNbMTBd
OworICAgICAgICAgICAgc25wcmludGYoZnVuY3Rpb25DaGFycywgMTAsICJGJWQiLCBpKTsKKyAg
ICAgICAgICAgIHN0cmluZyBmdW5jdGlvbktleU5hbWUoZnVuY3Rpb25DaGFycyk7CisgICAgICAg
ICAgICBpZiAoZnVuY3Rpb25LZXlOYW1lID09IGNvZGVTdHIpIHsKKyAgICAgICAgICAgICAgICBj
b2RlID0gd2Via2l0X3N1cHBvcnQ6OlZLRVlfRjEgKyAoaSAtIDEpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghY29kZSkgewor
ICAgICAgICAgICAgV2ViU3RyaW5nIHdlYkNvZGVTdHIgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGNv
ZGVTdHIuZGF0YSgpLCBjb2RlU3RyLnNpemUoKSk7CisgICAgICAgICAgICBBU1NFUlQod2ViQ29k
ZVN0ci5sZW5ndGgoKSA9PSAxKTsKKyAgICAgICAgICAgIHRleHQgPSBjb2RlID0gd2ViQ29kZVN0
ci5kYXRhKClbMF07CisgICAgICAgICAgICBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIgPSBuZWVkc1No
aWZ0TW9kaWZpZXIoY29kZSk7CisgICAgICAgICAgICBpZiAoKGNvZGUgJiAweEZGKSA+PSAnYScg
JiYgKGNvZGUgJiAweEZGKSA8PSAneicpCisgICAgICAgICAgICAgICAgY29kZSAtPSAnYScgLSAn
QSc7CisgICAgICAgICAgICBnZW5lcmF0ZUNoYXIgPSB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gRm9yIG9uZSBnZW5lcmF0ZWQga2V5Ym9hcmQgZXZlbnQsIHdlIG5lZWQgdG8gZ2Vu
ZXJhdGUgYSBrZXlEb3duL2tleVVwCisgICAgLy8gcGFpcjsgcmVmZXIgdG8gRXZlbnRTZW5kZXIu
Y3BwIGluIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi4KKyAgICAvLyBPbiBXaW5kb3dzLCB3ZSBt
aWdodCBhbHNvIG5lZWQgdG8gZ2VuZXJhdGUgYSBjaGFyIGV2ZW50IHRvIG1pbWljIHRoZQorICAg
IC8vIFdpbmRvd3MgZXZlbnQgZmxvdzsgb24gb3RoZXIgcGxhdGZvcm1zIHdlIGNyZWF0ZSBhIG1l
cmdlZCBldmVudCBhbmQgdGVzdAorICAgIC8vIHRoZSBldmVudCBmbG93IHRoYXQgdGhhdCBwbGF0
Zm9ybSBwcm92aWRlcy4KKyAgICBXZWJLZXlib2FyZEV2ZW50IGV2ZW50RG93biwgZXZlbnRDaGFy
LCBldmVudFVwOworICAgIGV2ZW50RG93bi50eXBlID0gV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93
bjsKKyAgICBldmVudERvd24ubW9kaWZpZXJzID0gMDsKKyAgICBldmVudERvd24ud2luZG93c0tl
eUNvZGUgPSBjb2RlOworI2lmIE9TKExJTlVYKSAmJiBVU0UoR1RLKQorICAgIGV2ZW50RG93bi5u
YXRpdmVLZXlDb2RlID0gd2Via2l0X3N1cHBvcnQ6Ok5hdGl2ZUtleUNvZGVGb3JXaW5kb3dzS2V5
Q29kZShjb2RlLCBuZWVkc1NoaWZ0S2V5TW9kaWZpZXIpOworI2VuZGlmCisKKyAgICBpZiAoZ2Vu
ZXJhdGVDaGFyKSB7CisgICAgICAgIGV2ZW50RG93bi50ZXh0WzBdID0gdGV4dDsKKyAgICAgICAg
ZXZlbnREb3duLnVubW9kaWZpZWRUZXh0WzBdID0gdGV4dDsKKyAgICB9CisgICAgZXZlbnREb3du
LnNldEtleUlkZW50aWZpZXJGcm9tV2luZG93c0tleUNvZGUoKTsKKworICAgIGlmIChhcmd1bWVu
dHMuc2l6ZSgpID49IDIgJiYgKGFyZ3VtZW50c1sxXS5pc09iamVjdCgpIHx8IGFyZ3VtZW50c1sx
XS5pc1N0cmluZygpKSkKKyAgICAgICAgZXZlbnREb3duLmlzU3lzdGVtS2V5ID0gYXBwbHlLZXlN
b2RpZmllcnMoJihhcmd1bWVudHNbMV0pLCAmZXZlbnREb3duKTsKKworICAgIGlmIChuZWVkc1No
aWZ0S2V5TW9kaWZpZXIpCisgICAgICAgIGV2ZW50RG93bi5tb2RpZmllcnMgfD0gV2ViSW5wdXRF
dmVudDo6U2hpZnRLZXk7CisKKyAgICAvLyBTZWUgaWYgS2V5TG9jYXRpb24gYXJndW1lbnQgaXMg
Z2l2ZW4uCisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMyAmJiBhcmd1bWVudHNbMl0uaXNO
dW1iZXIoKSkgeworICAgICAgICBpbnQgbG9jYXRpb24gPSBhcmd1bWVudHNbMl0udG9JbnQzMigp
OworICAgICAgICBpZiAobG9jYXRpb24gPT0gRE9NS2V5TG9jYXRpb25OdW1wYWQpCisgICAgICAg
ICAgICBldmVudERvd24ubW9kaWZpZXJzIHw9IFdlYklucHV0RXZlbnQ6OklzS2V5UGFkOworICAg
IH0KKworICAgIGV2ZW50Q2hhciA9IGV2ZW50VXAgPSBldmVudERvd247CisgICAgZXZlbnRVcC50
eXBlID0gV2ViSW5wdXRFdmVudDo6S2V5VXA7CisgICAgLy8gRXZlbnRTZW5kZXIubSBmb3JjZXMg
YSBsYXlvdXQgaGVyZSwgd2l0aCBhdCBsZWFzdCBvbmUKKyAgICAvLyB0ZXN0IChmYXN0L2Zvcm1z
L2ZvY3VzLWNvbnRyb2wtdG8tcGFnZS5odG1sKSByZWx5aW5nIG9uIHRoaXMuCisgICAgd2Vidmll
dygpLT5sYXlvdXQoKTsKKworICAgIC8vIEluIHRoZSBicm93c2VyLCBpZiBhIGtleWJvYXJkIGV2
ZW50IGNvcnJlc3BvbmRzIHRvIGFuIGVkaXRvciBjb21tYW5kLAorICAgIC8vIHRoZSBjb21tYW5k
IHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB0aGUgcmVuZGVyZXIganVzdCBiZWZvcmUgZGlzcGF0Y2hp
bmcKKyAgICAvLyB0aGUga2V5Ym9hcmQgZXZlbnQsIGFuZCB0aGVuIGl0IHdpbGwgYmUgZXhlY3V0
ZWQgaW4gdGhlCisgICAgLy8gUmVuZGVyVmlldzo6aGFuZGxlQ3VycmVudEtleWJvYXJkRXZlbnQo
KSBtZXRob2QsIHdoaWNoIGlzIGNhbGxlZCBmcm9tCisgICAgLy8gdGhpcmRfcGFydHkvV2ViS2l0
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3BwLgorICAgIC8v
IFdlIGp1c3Qgc2ltdWxhdGUgdGhlIHNhbWUgYmVoYXZpb3IgaGVyZS4KKyAgICBzdHJpbmcgZWRp
dENvbW1hbmQ7CisgICAgaWYgKGdldEVkaXRDb21tYW5kKGV2ZW50RG93biwgJmVkaXRDb21tYW5k
KSkKKyAgICAgICAgbV9kZWxlZ2F0ZS0+c2V0RWRpdENvbW1hbmQoZWRpdENvbW1hbmQsICIiKTsK
KworICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChldmVudERvd24pOworCisgICAgbV9k
ZWxlZ2F0ZS0+Y2xlYXJFZGl0Q29tbWFuZCgpOworCisgICAgaWYgKGdlbmVyYXRlQ2hhcikgewor
ICAgICAgICBldmVudENoYXIudHlwZSA9IFdlYklucHV0RXZlbnQ6OkNoYXI7CisgICAgICAgIGV2
ZW50Q2hhci5rZXlJZGVudGlmaWVyWzBdID0gJ1wwJzsKKyAgICAgICAgd2VidmlldygpLT5oYW5k
bGVJbnB1dEV2ZW50KGV2ZW50Q2hhcik7CisgICAgfQorCisgICAgd2VidmlldygpLT5oYW5kbGVJ
bnB1dEV2ZW50KGV2ZW50VXApOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpkaXNwYXRjaE1lc3Nh
Z2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgaWYgKGFy
Z3VtZW50cy5zaXplKCkgPT0gMykgeworICAgICAgICAvLyBHcmFiIHRoZSBtZXNzYWdlIGlkIHRv
IHNlZSBpZiB3ZSBuZWVkIHRvIGRpc3BhdGNoIGl0LgorICAgICAgICBpbnQgbXNnID0gYXJndW1l
bnRzWzBdLnRvSW50MzIoKTsKKworICAgICAgICAvLyBXZWJLaXQncyB2ZXJzaW9uIG9mIHRoaXMg
ZnVuY3Rpb24gc3R1ZmZzIGEgTVNHIHN0cnVjdCBhbmQgdXNlcworICAgICAgICAvLyBUcmFuc2xh
dGVNZXNzYWdlIGFuZCBEaXNwYXRjaE1lc3NhZ2UuIFdlIHVzZSBhIFdlYktleWJvYXJkRXZlbnQs
IHdoaWNoCisgICAgICAgIC8vIGRvZXNuJ3QgbmVlZCB0byByZWNlaXZlIHRoZSBEZWFkQ2hhciBh
bmQgU3lzRGVhZENoYXIgbWVzc2FnZXMuCisgICAgICAgIGlmIChtc2cgPT0gV01fREVBRENIQVIg
fHwgbXNnID09IFdNX1NZU0RFQURDSEFSKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHdlYnZpZXcoKS0+bGF5b3V0KCk7CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBscGFyYW0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihhcmd1bWVudHNbMl0udG9Eb3VibGUoKSk7CisgICAg
ICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChXZWJJbnB1dEV2ZW50RmFjdG9yeTo6a2V5
Ym9hcmRFdmVudCgwLCBtc2csIGFyZ3VtZW50c1sxXS50b0ludDMyKCksIGxwYXJhbSkpOworICAg
IH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCitib29s
IEV2ZW50U2VuZGVyOjpuZWVkc1NoaWZ0TW9kaWZpZXIoaW50IGtleUNvZGUpCit7CisgICAgLy8g
SWYgY29kZSBpcyBhbiB1cHBlcmNhc2UgbGV0dGVyLCBhc3NpZ24gYSBTSElGVCBrZXkgdG8KKyAg
ICAvLyBldmVudERvd24ubW9kaWZpZXIsIHRoaXMgbG9naWMgY29tZXMgZnJvbQorICAgIC8vIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9FdmVudFNlbmRlci5jcHAKKyAgICByZXR1cm4gKGtleUNv
ZGUgJiAweEZGKSA+PSAnQScgJiYgKGtleUNvZGUgJiAweEZGKSA8PSAnWic7Cit9CisKK3ZvaWQg
RXZlbnRTZW5kZXI6OmxlYXBGb3J3YXJkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBp
ZiAoYXJndW1lbnRzLnNpemUoKSA8IDEgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnQgbWlsbGlzZWNvbmRzID0gYXJndW1lbnRzWzBdLnRvSW50
MzIoKTsKKyAgICBpZiAoaXNEcmFnTW9kZSgpICYmIHByZXNzZWRCdXR0b24gPT0gV2ViTW91c2VF
dmVudDo6QnV0dG9uTGVmdCAmJiAhcmVwbGF5aW5nU2F2ZWRFdmVudHMpIHsKKyAgICAgICAgU2F2
ZWRFdmVudCBzYXZlZEV2ZW50OworICAgICAgICBzYXZlZEV2ZW50LnR5cGUgPSBTYXZlZEV2ZW50
OjpMZWFwRm9yd2FyZDsKKyAgICAgICAgc2F2ZWRFdmVudC5taWxsaXNlY29uZHMgPSBtaWxsaXNl
Y29uZHM7CisgICAgICAgIG1vdXNlRXZlbnRRdWV1ZS5hcHBlbmQoc2F2ZWRFdmVudCk7CisgICAg
fSBlbHNlCisgICAgICAgIGRvTGVhcEZvcndhcmQobWlsbGlzZWNvbmRzKTsKK30KKwordm9pZCBF
dmVudFNlbmRlcjo6ZG9MZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKQoreworICAgIGFkdmFu
Y2VFdmVudFRpbWUobWlsbGlzZWNvbmRzKTsKK30KKworLy8gQXBwbGUncyBwb3J0IG9mIFdlYktp
dCB6b29tcyBieSBhIGZhY3RvciBvZiAxLjIgKHNlZQorLy8gV2ViS2l0L1dlYlZpZXcvV2ViVmll
dy5tbSkKK3ZvaWQgRXZlbnRTZW5kZXI6OnRleHRab29tSW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKHRy
dWUsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkgKyAxKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBFdmVudFNlbmRlcjo6dGV4dFpvb21PdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKHRy
dWUsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkgLSAxKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBFdmVudFNlbmRlcjo6em9vbVBhZ2VJbihjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgd2VidmlldygpLT5zZXRab29tTGV2ZWwoZmFs
c2UsIHdlYnZpZXcoKS0+em9vbUxldmVsKCkgKyAxKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBFdmVudFNlbmRlcjo6em9vbVBhZ2VPdXQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHdlYnZpZXcoKS0+c2V0Wm9vbUxldmVsKGZh
bHNlLCB3ZWJ2aWV3KCktPnpvb21MZXZlbCgpIC0gMSk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6OnNjYWxlUGFnZUJ5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCAzIHx8ICFhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSB8fCAhYXJndW1lbnRzWzFdLmlz
TnVtYmVyKCkgfHwgIWFyZ3VtZW50c1syXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHN0YXRpY19jYXN0PGZsb2F0Pihhcmd1bWVudHNbMF0u
dG9Eb3VibGUoKSk7CisgICAgaW50IHggPSBhcmd1bWVudHNbMV0udG9JbnQzMigpOworICAgIGlu
dCB5ID0gYXJndW1lbnRzWzJdLnRvSW50MzIoKTsKKyAgICB3ZWJ2aWV3KCktPnNldFBhZ2VTY2Fs
ZUZhY3RvcihzY2FsZUZhY3RvciwgV2ViUG9pbnQoeCwgeSkpOworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjptb3VzZVNjcm9sbEJ5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaGFuZGxlTW91
c2VXaGVlbChhcmd1bWVudHMsIHJlc3VsdCwgZmFsc2UpOworfQorCit2b2lkIEV2ZW50U2VuZGVy
Ojpjb250aW51b3VzTW91c2VTY3JvbGxCeShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIGhhbmRsZU1vdXNlV2hlZWwoYXJndW1lbnRz
LCByZXN1bHQsIHRydWUpOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpyZXBsYXlTYXZlZEV2ZW50
cygpCit7CisgICAgcmVwbGF5aW5nU2F2ZWRFdmVudHMgPSB0cnVlOworICAgIHdoaWxlICghbW91
c2VFdmVudFF1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICBTYXZlZEV2ZW50IGUgPSBtb3VzZUV2
ZW50UXVldWUudGFrZUZpcnN0KCk7CisKKyAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKKyAgICAg
ICAgY2FzZSBTYXZlZEV2ZW50OjpNb3VzZU1vdmU6IHsKKyAgICAgICAgICAgIFdlYk1vdXNlRXZl
bnQgZXZlbnQ7CisgICAgICAgICAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpNb3Vz
ZU1vdmUsIHByZXNzZWRCdXR0b24sIGUucG9zLCAmZXZlbnQpOworICAgICAgICAgICAgZG9Nb3Vz
ZU1vdmUoZXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBTYXZlZEV2ZW50OjpMZWFwRm9yd2FyZDoKKyAgICAgICAgICAgIGRvTGVhcEZvcndhcmQoZS5t
aWxsaXNlY29uZHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2F2ZWRFdmVu
dDo6TW91c2VVcDogeworICAgICAgICAgICAgV2ViTW91c2VFdmVudCBldmVudDsKKyAgICAgICAg
ICAgIGluaXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlVXAsIGUuYnV0dG9uVHlwZSwg
bGFzdE1vdXNlUG9zLCAmZXZlbnQpOworICAgICAgICAgICAgZG9Nb3VzZVVwKGV2ZW50KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlcGxheWlu
Z1NhdmVkRXZlbnRzID0gZmFsc2U7Cit9CisKKy8vIEJlY2F1c2UgYWN0dWFsIGNvbnRleHQgbWVu
dSBpcyBpbXBsZW1lbnRlZCBieSB0aGUgYnJvd3NlciBzaWRlLCAKKy8vIHRoaXMgZnVuY3Rpb24g
ZG9lcyBvbmx5IHdoYXQgTGF5b3V0VGVzdHMgYXJlIGV4cGVjdGluZzoKKy8vIC0gTWFueSB0ZXN0
IGNoZWNrcyB0aGUgY291bnQgb2YgaXRlbXMuIFNvIHJldHVybmluZyBub24temVybyB2YWx1ZSBt
YWtlcyBzZW5zZS4KKy8vIC0gU29tZSB0ZXN0IGNvbXBhcmVzIHRoZSBjb3VudCBiZWZvcmUgYW5k
IGFmdGVyIHNvbWUgYWN0aW9uLiBTbyBjaGFuZ2luZyB0aGUgY291bnQgYmFzZWQgb24gZmxhZ3MK
Ky8vICAgYWxzbyBtYWtlcyBzZW5zZS4gVGhpcyBmdW5jdGlvbiBpcyBkb2luZyBzdWNoIGZvciBz
b21lIGZsYWdzLgorLy8gLSBTb21lIHRlc3QgZXZlbiBjaGVja3MgYWN0dWFsIHN0cmluZyBjb250
ZW50LiBTbyBwcm92aWRpbmcgaXQgd291bGQgYmUgYWxzbyBoZWxwZnVsLgorLy8KK3N0YXRpYyBW
ZWN0b3I8V2ViU3RyaW5nPiBtYWtlTWVudUl0ZW1TdHJpbmdzRm9yKFdlYkNvbnRleHRNZW51RGF0
YSogY29udGV4dE1lbnUsIFRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpCit7CisgICAgLy8gVGhlc2Ug
Y29uc3RhbnRzIGFyZSBiYXNlZCBvbiBTYWZhcmkncyBjb250ZXh0IG1lbnUgYmVjYXVzZSB0ZXN0
cyBhcmUgbWFkZSBmb3IgaXQuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5vbkVkaXRhYmxlTWVu
dVN0cmluZ3NbXSA9IHsgIkJhY2siLCAiUmVsb2FkIFBhZ2UiLCAiT3BlbiBpbiBEYXNoYmFvcmQi
LCAiPHNlcGFyYXRvcj4iLCAiVmlldyBTb3VyY2UiLCAiU2F2ZSBQYWdlIEFzIiwgIlByaW50IFBh
Z2UiLCAiSW5zcGVjdCBFbGVtZW50IiwgMCB9OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBlZGl0
YWJsZU1lbnVTdHJpbmdzW10gPSB7ICJDdXQiLCAiQ29weSIsICI8c2VwYXJhdG9yPiIsICJQYXN0
ZSIsICJTcGVsbGluZyBhbmQgR3JhbW1hciIsICJTdWJzdGl0dXRpb25zLCBUcmFuc2Zvcm1hdGlv
bnMiLCAiRm9udCIsICJTcGVlY2giLCAiUGFyYWdyYXBoIERpcmVjdGlvbiIsICI8c2VwYXJhdG9y
PiIsIDAgfTsKKworICAgIC8vIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtb3VzZSBldmVudHMg
YXJlIGNhbmNlbGxlYWJsZS4KKyAgICBpZiAoIWNvbnRleHRNZW51KQorICAgICAgICByZXR1cm4g
VmVjdG9yPFdlYlN0cmluZz4oKTsKKworICAgIFZlY3RvcjxXZWJTdHJpbmc+IHN0cmluZ3M7CisK
KyAgICBpZiAoY29udGV4dE1lbnUtPmlzRWRpdGFibGUpIHsKKyAgICAgICAgZm9yIChjb25zdCBj
aGFyKiogaXRlbSA9IGVkaXRhYmxlTWVudVN0cmluZ3M7ICppdGVtOyArK2l0ZW0pIAorICAgICAg
ICAgICAgc3RyaW5ncy5hcHBlbmQoV2ViU3RyaW5nOjpmcm9tVVRGOCgqaXRlbSkpOworICAgICAg
ICBWZWN0b3I8V2ViU3RyaW5nPiBzdWdnZXN0aW9uczsKKyAgICAgICAgZGVsZWdhdGUtPmZpbGxT
cGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnRleHRNZW51LT5taXNzcGVsbGVkV29yZCwgJnN1Z2dl
c3Rpb25zKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWdnZXN0aW9ucy5zaXpl
KCk7ICsraSkgCisgICAgICAgICAgICBzdHJpbmdzLmFwcGVuZChzdWdnZXN0aW9uc1tpXSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChjb25zdCBjaGFyKiogaXRlbSA9IG5vbkVkaXRhYmxl
TWVudVN0cmluZ3M7ICppdGVtOyArK2l0ZW0pIAorICAgICAgICAgICAgc3RyaW5ncy5hcHBlbmQo
V2ViU3RyaW5nOjpmcm9tVVRGOCgqaXRlbSkpOworICAgIH0KKworICAgIHJldHVybiBzdHJpbmdz
OworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpjb250ZXh0Q2xpY2soY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICB3ZWJ2aWV3KCktPmxh
eW91dCgpOworCisgICAgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihXZWJNb3VzZUV2ZW50OjpC
dXR0b25SaWdodCk7CisKKyAgICAvLyBDbGVhcnMgbGFzdCBjb250ZXh0IG1lbnUgZGF0YSBiZWNh
dXNlIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgY29udGV4dCBtZW51IGJlIHJlcXVlc3RlZCAKKyAg
ICAvLyBhZnRlciBmb2xsb3dpbmcgbW91c2UgZXZlbnRzLgorICAgIG1fZGVsZWdhdGUtPmNsZWFy
Q29udGV4dE1lbnVEYXRhKCk7CisKKyAgICAvLyBHZW5lcmF0ZSByaWdodCBtb3VzZSBkb3duIGFu
ZCB1cC4KKyAgICBXZWJNb3VzZUV2ZW50IGV2ZW50OworICAgIHByZXNzZWRCdXR0b24gPSBXZWJN
b3VzZUV2ZW50OjpCdXR0b25SaWdodDsKKyAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50
OjpNb3VzZURvd24sIFdlYk1vdXNlRXZlbnQ6OkJ1dHRvblJpZ2h0LCBsYXN0TW91c2VQb3MsICZl
dmVudCk7CisgICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50KTsKKworICAgIGlu
aXRNb3VzZUV2ZW50KFdlYklucHV0RXZlbnQ6Ok1vdXNlVXAsIFdlYk1vdXNlRXZlbnQ6OkJ1dHRv
blJpZ2h0LCBsYXN0TW91c2VQb3MsICZldmVudCk7CisgICAgd2VidmlldygpLT5oYW5kbGVJbnB1
dEV2ZW50KGV2ZW50KTsKKworICAgIHByZXNzZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0
b25Ob25lOworCisgICAgV2ViQ29udGV4dE1lbnVEYXRhKiBsYXN0Q29udGV4dE1lbnUgPSBtX2Rl
bGVnYXRlLT5sYXN0Q29udGV4dE1lbnVEYXRhKCk7CisgICAgcmVzdWx0LT5zZXQoV2ViQmluZGlu
Z3M6Om1ha2VTdHJpbmdBcnJheShtYWtlTWVudUl0ZW1TdHJpbmdzRm9yKGxhc3RDb250ZXh0TWVu
dSwgbV9kZWxlZ2F0ZSkpKTsKK30KKworY2xhc3MgTW91c2VEb3duVGFzazogcHVibGljIE1ldGhv
ZFRhc2s8RXZlbnRTZW5kZXI+IHsKK3B1YmxpYzoKKyAgICBNb3VzZURvd25UYXNrKEV2ZW50U2Vu
ZGVyKiBvYmosIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJnKQorICAgICAgICA6IE1ldGhvZFRh
c2s8RXZlbnRTZW5kZXI+KG9iaiksIG1fYXJndW1lbnRzKGFyZykgeyB9CisgICAgdmlydHVhbCB2
b2lkIHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5tb3VzZURvd24obV9hcmd1bWVudHMsIDApOyB9
CisKK3ByaXZhdGU6CisgICAgQ3BwQXJndW1lbnRMaXN0IG1fYXJndW1lbnRzOworfTsKKworY2xh
c3MgTW91c2VVcFRhc2s6IHB1YmxpYyBNZXRob2RUYXNrPEV2ZW50U2VuZGVyPiB7CitwdWJsaWM6
CisgICAgTW91c2VVcFRhc2soRXZlbnRTZW5kZXIqIG9iaiwgY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmcpCisgICAgICAgIDogTWV0aG9kVGFzazxFdmVudFNlbmRlcj4ob2JqKSwgbV9hcmd1bWVu
dHMoYXJnKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIHsgbV9vYmplY3QtPm1v
dXNlVXAobV9hcmd1bWVudHMsIDApOyB9CisKK3ByaXZhdGU6CisgICAgQ3BwQXJndW1lbnRMaXN0
IG1fYXJndW1lbnRzOworfTsKKwordm9pZCBFdmVudFNlbmRlcjo6c2NoZWR1bGVBc3luY2hyb25v
dXNDbGljayhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIHBvc3RUYXNrKG5ldyBNb3VzZURv
d25UYXNrKHRoaXMsIGFyZ3VtZW50cykpOworICAgIHBvc3RUYXNrKG5ldyBNb3VzZVVwVGFzayh0
aGlzLCBhcmd1bWVudHMpKTsKK30KKworY2xhc3MgS2V5RG93blRhc2sgOiBwdWJsaWMgTWV0aG9k
VGFzazxFdmVudFNlbmRlcj4geworcHVibGljOgorICAgIEtleURvd25UYXNrKEV2ZW50U2VuZGVy
KiBvYmosIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJnKQorICAgICAgICA6IE1ldGhvZFRhc2s8
RXZlbnRTZW5kZXI+KG9iaiksIG1fYXJndW1lbnRzKGFyZykgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJ1bklmVmFsaWQoKSB7IG1fb2JqZWN0LT5rZXlEb3duKG1fYXJndW1lbnRzLCAwKTsgfQorCitw
cml2YXRlOgorICAgIENwcEFyZ3VtZW50TGlzdCBtX2FyZ3VtZW50czsKK307CisKK3ZvaWQgRXZl
bnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworICAgIHBvc3RUYXNrKG5ldyBLZXlEb3duVGFzayh0aGlzLCBhcmd1bWVudHMpKTsKK30K
Kwordm9pZCBFdmVudFNlbmRlcjo6YmVnaW5EcmFnV2l0aEZpbGVzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgY3VycmVudERyYWdE
YXRhLmluaXRpYWxpemUoKTsKKyAgICBWZWN0b3I8c3RyaW5nPiBmaWxlcyA9IGFyZ3VtZW50c1sw
XS50b1N0cmluZ1ZlY3RvcigpOworICAgIFZlY3RvcjxXZWJTdHJpbmc+IGFic29sdXRlRmlsZW5h
bWVzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgV2ViRHJhZ0RhdGE6Okl0ZW0gaXRlbTsKKyAgICAgICAgaXRlbS5zdG9yYWdlVHlwZSA9
IFdlYkRyYWdEYXRhOjpJdGVtOjpTdG9yYWdlVHlwZUZpbGVuYW1lOworICAgICAgICBpdGVtLmZp
bGVuYW1lRGF0YSA9IHdlYmtpdF9zdXBwb3J0OjpHZXRBYnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4
UGF0aChmaWxlc1tpXSk7CisgICAgICAgIGN1cnJlbnREcmFnRGF0YS5hZGRJdGVtKGl0ZW0pOwor
ICAgICAgICBhYnNvbHV0ZUZpbGVuYW1lcy5hcHBlbmQoaXRlbS5maWxlbmFtZURhdGEpOworICAg
IH0KKyAgICBjdXJyZW50RHJhZ0RhdGEuc2V0RmlsZXN5c3RlbUlkKHdlYmtpdF9zdXBwb3J0OjpS
ZWdpc3Rlcklzb2xhdGVkRmlsZVN5c3RlbShhYnNvbHV0ZUZpbGVuYW1lcykpOworICAgIGN1cnJl
bnREcmFnRWZmZWN0c0FsbG93ZWQgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Db3B5OworCisg
ICAgLy8gUHJvdmlkZSBhIGRyYWcgc291cmNlLgorICAgIHdlYnZpZXcoKS0+ZHJhZ1RhcmdldERy
YWdFbnRlcihjdXJyZW50RHJhZ0RhdGEsIGxhc3RNb3VzZVBvcywgbGFzdE1vdXNlUG9zLCBjdXJy
ZW50RHJhZ0VmZmVjdHNBbGxvd2VkLCAwKTsKKworICAgIC8vIGRyYWdNb2RlIHNhdmVzIGV2ZW50
cyBhbmQgdGhlbiByZXBsYXlzIHRoZW0gbGF0ZXIuIFdlIGRvbid0IG5lZWQvd2FudCB0aGF0Lgor
ICAgIGRyYWdNb2RlLnNldChmYWxzZSk7CisKKyAgICAvLyBNYWtlIHRoZSByZXN0IG9mIGV2ZW50
U2VuZGVyIHRoaW5rIGEgZHJhZyBpcyBpbiBwcm9ncmVzcy4KKyAgICBwcmVzc2VkQnV0dG9uID0g
V2ViTW91c2VFdmVudDo6QnV0dG9uTGVmdDsKKworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
Cit2b2lkIEV2ZW50U2VuZGVyOjphZGRUb3VjaFBvaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisKKyAgICBXZWJUb3VjaFBvaW50IHRvdWNoUG9pbnQ7CisgICAgdG91Y2hQb2ludC5zdGF0ZSA9
IFdlYlRvdWNoUG9pbnQ6OlN0YXRlUHJlc3NlZDsKKyAgICB0b3VjaFBvaW50LnBvc2l0aW9uID0g
V2ViUG9pbnQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvSW50MzIoKSk7
CisgICAgdG91Y2hQb2ludC5zY3JlZW5Qb3NpdGlvbiA9IHRvdWNoUG9pbnQucG9zaXRpb247CisK
KyAgICBpbnQgbG93ZXN0SWQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdG91Y2hQ
b2ludHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKHRvdWNoUG9pbnRzW2ldLmlkID09IGxv
d2VzdElkKQorICAgICAgICAgICAgbG93ZXN0SWQrKzsKKyAgICB9CisgICAgdG91Y2hQb2ludC5p
ZCA9IGxvd2VzdElkOworICAgIHRvdWNoUG9pbnRzLmFwcGVuZCh0b3VjaFBvaW50KTsKK30KKwor
dm9pZCBFdmVudFNlbmRlcjo6Y2xlYXJUb3VjaFBvaW50cyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgdG91
Y2hQb2ludHMuY2xlYXIoKTsKK30KKwordm9pZCBFdmVudFNlbmRlcjo6cmVsZWFzZVRvdWNoUG9p
bnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGluZGV4ID0g
YXJndW1lbnRzWzBdLnRvSW50MzIoKTsKKyAgICBBU1NFUlQoaW5kZXggPCB0b3VjaFBvaW50cy5z
aXplKCkpOworCisgICAgV2ViVG91Y2hQb2ludCogdG91Y2hQb2ludCA9ICZ0b3VjaFBvaW50c1tp
bmRleF07CisgICAgdG91Y2hQb2ludC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0ZVJlbGVh
c2VkOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisKKyAgICBpbnQgbWFzayA9IDA7CisgICAgY29uc3Qgc3RyaW5nIGtleU5h
bWUgPSBhcmd1bWVudHNbMF0udG9TdHJpbmcoKTsKKyAgICBpZiAoa2V5TmFtZSA9PSAic2hpZnQi
KQorICAgICAgICBtYXNrID0gV2ViSW5wdXRFdmVudDo6U2hpZnRLZXk7CisgICAgZWxzZSBpZiAo
a2V5TmFtZSA9PSAiYWx0IikKKyAgICAgICAgbWFzayA9IFdlYklucHV0RXZlbnQ6OkFsdEtleTsK
KyAgICBlbHNlIGlmIChrZXlOYW1lID09ICJjdHJsIikKKyAgICAgICAgbWFzayA9IFdlYklucHV0
RXZlbnQ6OkNvbnRyb2xLZXk7CisgICAgZWxzZSBpZiAoa2V5TmFtZSA9PSAibWV0YSIpCisgICAg
ICAgIG1hc2sgPSBXZWJJbnB1dEV2ZW50OjpNZXRhS2V5OworCisgICAgaWYgKGFyZ3VtZW50c1sx
XS50b0Jvb2xlYW4oKSkKKyAgICAgICAgdG91Y2hNb2RpZmllcnMgfD0gbWFzazsKKyAgICBlbHNl
CisgICAgICAgIHRvdWNoTW9kaWZpZXJzICY9IH5tYXNrOworfQorCit2b2lkIEV2ZW50U2VuZGVy
Ojp1cGRhdGVUb3VjaFBvaW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBpbmRleCA9IGFyZ3VtZW50c1swXS50b0ludDMyKCk7CisgICAgQVNTRVJUKGluZGV4
IDwgdG91Y2hQb2ludHMuc2l6ZSgpKTsKKworICAgIFdlYlBvaW50IHBvc2l0aW9uKGFyZ3VtZW50
c1sxXS50b0ludDMyKCksIGFyZ3VtZW50c1syXS50b0ludDMyKCkpOworICAgIFdlYlRvdWNoUG9p
bnQqIHRvdWNoUG9pbnQgPSAmdG91Y2hQb2ludHNbaW5kZXhdOworICAgIHRvdWNoUG9pbnQtPnN0
YXRlID0gV2ViVG91Y2hQb2ludDo6U3RhdGVNb3ZlZDsKKyAgICB0b3VjaFBvaW50LT5wb3NpdGlv
biA9IHBvc2l0aW9uOworICAgIHRvdWNoUG9pbnQtPnNjcmVlblBvc2l0aW9uID0gcG9zaXRpb247
Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6OmNhbmNlbFRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNl
dE51bGwoKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGluZGV4ID0gYXJndW1lbnRzWzBdLnRvSW50
MzIoKTsKKyAgICBBU1NFUlQoaW5kZXggPCB0b3VjaFBvaW50cy5zaXplKCkpOworCisgICAgV2Vi
VG91Y2hQb2ludCogdG91Y2hQb2ludCA9ICZ0b3VjaFBvaW50c1tpbmRleF07CisgICAgdG91Y2hQ
b2ludC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0ZUNhbmNlbGxlZDsKK30KKwordm9pZCBF
dmVudFNlbmRlcjo6c2VuZEN1cnJlbnRUb3VjaEV2ZW50KGNvbnN0IFdlYklucHV0RXZlbnQ6OlR5
cGUgdHlwZSkKK3sKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdlYlRvdWNoRXZl
bnQ6OnRvdWNoZXNMZW5ndGhDYXApID4gdG91Y2hQb2ludHMuc2l6ZSgpKTsKKyAgICB3ZWJ2aWV3
KCktPmxheW91dCgpOworCisgICAgV2ViVG91Y2hFdmVudCB0b3VjaEV2ZW50OworICAgIHRvdWNo
RXZlbnQudHlwZSA9IHR5cGU7CisgICAgdG91Y2hFdmVudC5tb2RpZmllcnMgPSB0b3VjaE1vZGlm
aWVyczsKKyAgICB0b3VjaEV2ZW50LnRpbWVTdGFtcFNlY29uZHMgPSBnZXRDdXJyZW50RXZlbnRU
aW1lU2VjKCk7CisgICAgdG91Y2hFdmVudC50b3VjaGVzTGVuZ3RoID0gdG91Y2hQb2ludHMuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3VjaFBvaW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgdG91Y2hFdmVudC50b3VjaGVzW2ldID0gdG91Y2hQb2ludHNbaV07CisgICAg
d2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KHRvdWNoRXZlbnQpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdWNoUG9pbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYlRv
dWNoUG9pbnQqIHRvdWNoUG9pbnQgPSAmdG91Y2hQb2ludHNbaV07CisgICAgICAgIGlmICh0b3Vj
aFBvaW50LT5zdGF0ZSA9PSBXZWJUb3VjaFBvaW50OjpTdGF0ZVJlbGVhc2VkKSB7CisgICAgICAg
ICAgICB0b3VjaFBvaW50cy5yZW1vdmUoaSk7CisgICAgICAgICAgICAtLWk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgdG91Y2hQb2ludC0+c3RhdGUgPSBXZWJUb3VjaFBvaW50OjpTdGF0
ZVN0YXRpb25hcnk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U2VuZGVyOjpoYW5kbGVNb3VzZVdo
ZWVsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQs
IGJvb2wgY29udGludW91cykKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKworICAgIGlmIChh
cmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgfHwgIWFyZ3Vt
ZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGb3JjZSBhIGxh
eW91dCBoZXJlIGp1c3QgdG8gbWFrZSBzdXJlIGV2ZXJ5IHBvc2l0aW9uIGhhcyBiZWVuCisgICAg
Ly8gZGV0ZXJtaW5lZCBiZWZvcmUgd2Ugc2VuZCBldmVudHMgKGFzIHdlbGwgYXMgYWxsIHRoZSBv
dGhlciBtZXRob2RzCisgICAgLy8gdGhhdCBzZW5kIGFuIGV2ZW50IGRvKS4KKyAgICB3ZWJ2aWV3
KCktPmxheW91dCgpOworCisgICAgaW50IGhvcml6b250YWwgPSBhcmd1bWVudHNbMF0udG9JbnQz
MigpOworICAgIGludCB2ZXJ0aWNhbCA9IGFyZ3VtZW50c1sxXS50b0ludDMyKCk7CisgICAgaW50
IHBhZ2VkID0gZmFsc2U7CisgICAgaW50IGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBmYWxz
ZTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMiAmJiBhcmd1bWVudHNbMl0uaXNCb29s
KCkpCisgICAgICAgIHBhZ2VkID0gYXJndW1lbnRzWzJdLnRvQm9vbGVhbigpOworCisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPiAzICYmIGFyZ3VtZW50c1szXS5pc0Jvb2woKSkKKyAgICAgICAg
aGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9IGFyZ3VtZW50c1szXS50b0Jvb2xlYW4oKTsKKwor
ICAgIFdlYk1vdXNlV2hlZWxFdmVudCBldmVudDsKKyAgICBpbml0TW91c2VFdmVudChXZWJJbnB1
dEV2ZW50OjpNb3VzZVdoZWVsLCBwcmVzc2VkQnV0dG9uLCBsYXN0TW91c2VQb3MsICZldmVudCk7
CisgICAgZXZlbnQud2hlZWxUaWNrc1ggPSBzdGF0aWNfY2FzdDxmbG9hdD4oaG9yaXpvbnRhbCk7
CisgICAgZXZlbnQud2hlZWxUaWNrc1kgPSBzdGF0aWNfY2FzdDxmbG9hdD4odmVydGljYWwpOwor
ICAgIGV2ZW50LmRlbHRhWCA9IGV2ZW50LndoZWVsVGlja3NYOworICAgIGV2ZW50LmRlbHRhWSA9
IGV2ZW50LndoZWVsVGlja3NZOworICAgIGV2ZW50LnNjcm9sbEJ5UGFnZSA9IHBhZ2VkOworICAg
IGV2ZW50Lmhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVs
dGFzOworCisgICAgaWYgKGNvbnRpbnVvdXMpIHsKKyAgICAgICAgZXZlbnQud2hlZWxUaWNrc1gg
Lz0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKKyAgICAgICAgZXZlbnQud2hlZWxUaWNrc1kgLz0g
c2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudC5kZWx0
YVggKj0gc2Nyb2xsYmFyUGl4ZWxzUGVyVGljazsKKyAgICAgICAgZXZlbnQuZGVsdGFZICo9IHNj
cm9sbGJhclBpeGVsc1BlclRpY2s7CisgICAgfQorICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRF
dmVudChldmVudCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6OnRvdWNoRW5kKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwo
KTsKKyAgICBzZW5kQ3VycmVudFRvdWNoRXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hFbmQpOwor
fQorCit2b2lkIEV2ZW50U2VuZGVyOjp0b3VjaE1vdmUoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIHNlbmRD
dXJyZW50VG91Y2hFdmVudChXZWJJbnB1dEV2ZW50OjpUb3VjaE1vdmUpOworfQorCit2b2lkIEV2
ZW50U2VuZGVyOjp0b3VjaFN0YXJ0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBzZW5kQ3VycmVudFRvdWNo
RXZlbnQoV2ViSW5wdXRFdmVudDo6VG91Y2hTdGFydCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6
OnRvdWNoQ2FuY2VsKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkK
K3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBzZW5kQ3VycmVudFRvdWNoRXZlbnQoV2Vi
SW5wdXRFdmVudDo6VG91Y2hDYW5jZWwpOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJl
U2Nyb2xsQmVnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBnZXN0dXJlRXZlbnQoV2Vi
SW5wdXRFdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luLCBhcmd1bWVudHMpOworfQorCit2b2lkIEV2
ZW50U2VuZGVyOjpnZXN0dXJlU2Nyb2xsRW5kKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAg
Z2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQsIGFyZ3VtZW50cyk7
Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQt
PnNldE51bGwoKTsKKyAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVNjcm9s
bFVwZGF0ZSwgYXJndW1lbnRzKTsKK30KKwordm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVRhcChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2ZW50OjpH
ZXN0dXJlVGFwLCBhcmd1bWVudHMpOworfQorCit2b2lkIEV2ZW50U2VuZGVyOjpnZXN0dXJlVGFw
RG93bihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGdlc3R1cmVFdmVudChXZWJJbnB1dEV2
ZW50OjpHZXN0dXJlVGFwRG93biwgYXJndW1lbnRzKTsKK30KKwordm9pZCBFdmVudFNlbmRlcjo6
Z2VzdHVyZVRhcENhbmNlbChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIGdlc3R1cmVFdmVu
dChXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVGFwQ2FuY2VsLCBhcmd1bWVudHMpOworfQorCit2b2lk
IEV2ZW50U2VuZGVyOjpnZXN0dXJlTG9uZ1ByZXNzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cisg
ICAgZ2VzdHVyZUV2ZW50KFdlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nUHJlc3MsIGFyZ3VtZW50
cyk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVUd29GaW5nZXJUYXAoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKKyAgICBnZXN0dXJlRXZlbnQoV2ViSW5wdXRFdmVudDo6R2VzdHVyZVR3
b0ZpbmdlclRhcCwgYXJndW1lbnRzKTsKK30KKwordm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZVNj
cm9sbEZpcnN0UG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICBpZiAoYXJndW1lbnRz
LnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0u
aXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUG9pbnQgcG9pbnQoYXJndW1l
bnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvSW50MzIoKSk7CisgICAgbV9jdXJyZW50
R2VzdHVyZUxvY2F0aW9uID0gcG9pbnQ7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVF
dmVudChXZWJJbnB1dEV2ZW50OjpUeXBlIHR5cGUsIGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzKQoreworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1lbnRzWzBd
LmlzTnVtYmVyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJQb2ludCBwb2ludChhcmd1bWVudHNbMF0udG9JbnQzMigpLCBhcmd1bWVudHNb
MV0udG9JbnQzMigpKTsKKworICAgIFdlYkdlc3R1cmVFdmVudCBldmVudDsKKyAgICBldmVudC50
eXBlID0gdHlwZTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgV2ViSW5wdXRFdmVu
dDo6R2VzdHVyZVNjcm9sbFVwZGF0ZToKKyAgICAgICAgZXZlbnQuZGF0YS5zY3JvbGxVcGRhdGUu
ZGVsdGFYID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1swXS50b0RvdWJsZSgpKTsKKyAg
ICAgICAgZXZlbnQuZGF0YS5zY3JvbGxVcGRhdGUuZGVsdGFZID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgZXZlbnQueCA9IG1fY3VycmVudEdl
c3R1cmVMb2NhdGlvbi54OworICAgICAgICBldmVudC55ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0
aW9uLnk7CisgICAgICAgIG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi54ID0gbV9jdXJyZW50R2Vz
dHVyZUxvY2F0aW9uLnggKyBldmVudC5kYXRhLnNjcm9sbFVwZGF0ZS5kZWx0YVg7CisgICAgICAg
IG1fY3VycmVudEdlc3R1cmVMb2NhdGlvbi55ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLnkg
KyBldmVudC5kYXRhLnNjcm9sbFVwZGF0ZS5kZWx0YVk7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW46CisgICAgICAgIG1fY3VycmVu
dEdlc3R1cmVMb2NhdGlvbiA9IFdlYlBvaW50KHBvaW50LngsIHBvaW50LnkpOworICAgICAgICBl
dmVudC54ID0gbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uLng7CisgICAgICAgIGV2ZW50LnkgPSBt
X2N1cnJlbnRHZXN0dXJlTG9jYXRpb24ueTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJJ
bnB1dEV2ZW50OjpHZXN0dXJlU2Nyb2xsRW5kOgorICAgICAgICBldmVudC54ID0gbV9jdXJyZW50
R2VzdHVyZUxvY2F0aW9uLng7CisgICAgICAgIGV2ZW50LnkgPSBtX2N1cnJlbnRHZXN0dXJlTG9j
YXRpb24ueTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJl
VGFwOgorICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAzKQorICAgICAgICAgICAgZXZl
bnQuZGF0YS50YXAudGFwQ291bnQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzJdLnRv
RG91YmxlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgZXZlbnQuZGF0YS50YXAudGFwQ291
bnQgPSAxOworICAgICAgICBldmVudC54ID0gcG9pbnQueDsKKyAgICAgICAgZXZlbnQueSA9IHBv
aW50Lnk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRh
cERvd246CisgICAgICAgIGV2ZW50LnggPSBwb2ludC54OworICAgICAgICBldmVudC55ID0gcG9p
bnQueTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gNCkgeworICAgICAgICAgICAg
ZXZlbnQuZGF0YS50YXBEb3duLndpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3VtZW50c1sy
XS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIGV2ZW50LmRhdGEudGFwRG93bi5oZWlnaHQgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzNdLnRvRG91YmxlKCkpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViSW5wdXRFdmVudDo6R2VzdHVyZVRhcENhbmNlbDoK
KyAgICAgICAgZXZlbnQueCA9IHBvaW50Lng7CisgICAgICAgIGV2ZW50LnkgPSBwb2ludC55Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYklucHV0RXZlbnQ6Okdlc3R1cmVMb25nUHJlc3M6
CisgICAgICAgIGV2ZW50LnggPSBwb2ludC54OworICAgICAgICBldmVudC55ID0gcG9pbnQueTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlVHdvRmluZ2Vy
VGFwOgorICAgICAgICBldmVudC54ID0gcG9pbnQueDsKKyAgICAgICAgZXZlbnQueSA9IHBvaW50
Lnk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKworICAgIGV2ZW50Lmdsb2JhbFggPSBldmVudC54OworICAgIGV2ZW50
Lmdsb2JhbFkgPSBldmVudC55OworICAgIGV2ZW50LnRpbWVTdGFtcFNlY29uZHMgPSBnZXRDdXJy
ZW50RXZlbnRUaW1lU2VjKCk7CisgICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50KGV2ZW50
KTsKK30KKwordm9pZCBFdmVudFNlbmRlcjo6Z2VzdHVyZUZsaW5nQ2FuY2VsKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisgICAgaWYgKCFhcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJHZXN0dXJlRXZlbnQgZXZlbnQ7CisgICAgZXZlbnQudHlwZSA9IFdlYklucHV0
RXZlbnQ6Okdlc3R1cmVGbGluZ0NhbmNlbDsKKyAgICBldmVudC50aW1lU3RhbXBTZWNvbmRzID0g
Z2V0Q3VycmVudEV2ZW50VGltZVNlYygpOworICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVu
dChldmVudCk7Cit9CisKK3ZvaWQgRXZlbnRTZW5kZXI6Omdlc3R1cmVGbGluZ1N0YXJ0KGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCA0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAgaWYg
KCFhcmd1bWVudHNbaV0uaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgIFdl
Ykdlc3R1cmVFdmVudCBldmVudDsKKyAgICBldmVudC50eXBlID0gV2ViSW5wdXRFdmVudDo6R2Vz
dHVyZUZsaW5nU3RhcnQ7CisKKyAgICBldmVudC54ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFyZ3Vt
ZW50c1swXS50b0RvdWJsZSgpKTsKKyAgICBldmVudC55ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFy
Z3VtZW50c1sxXS50b0RvdWJsZSgpKTsKKyAgICBldmVudC5nbG9iYWxYID0gZXZlbnQueDsKKyAg
ICBldmVudC5nbG9iYWxZID0gZXZlbnQueTsKKworICAgIGV2ZW50LmRhdGEuZmxpbmdTdGFydC52
ZWxvY2l0eVggPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJndW1lbnRzWzJdLnRvRG91YmxlKCkpOwor
ICAgIGV2ZW50LmRhdGEuZmxpbmdTdGFydC52ZWxvY2l0eVkgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
YXJndW1lbnRzWzNdLnRvRG91YmxlKCkpOworICAgIGV2ZW50LnRpbWVTdGFtcFNlY29uZHMgPSBn
ZXRDdXJyZW50RXZlbnRUaW1lU2VjKCk7CisgICAgd2VidmlldygpLT5oYW5kbGVJbnB1dEV2ZW50
KGV2ZW50KTsKK30KKworLy8KKy8vIFVuaW1wbGVtZW50ZWQgc3R1YnMKKy8vCisKK3ZvaWQgRXZl
bnRTZW5kZXI6OmVuYWJsZURPTVVJRXZlbnRMb2dnaW5nKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBFdmVudFNlbmRlcjo6ZmlyZUtleWJvYXJkRXZlbnRzVG9FbGVtZW50KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBFdmVudFNlbmRlcjo6Y2xlYXJLaWxsUmluZyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9F
dmVudFNlbmRlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9z
cmMvRXZlbnRTZW5kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjc5NGEwNzcwYmQ4OGY3NGZlNTBjYTJmNzE2
NjIxZDQxOTg3OWNjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvRXZlbnRTZW5kZXIuaApAQCAtMCwwICsxLDE4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisg
IEV2ZW50U2VuZGVyIGNsYXNzOgorICBCb3VuZCB0byBhIEphdmFTY3JpcHQgd2luZG93LmV2ZW50
U2VuZGVyIG9iamVjdCB1c2luZworICBDcHBCb3VuZENsYXNzOjpiaW5kVG9KYXZhc2NyaXB0KCks
IHRoaXMgYWxsb3dzIGxheW91dCB0ZXN0cyB0byBmaXJlIERPTSBldmVudHMuCisqLworCisjaWZu
ZGVmIEV2ZW50U2VuZGVyX2gKKyNkZWZpbmUgRXZlbnRTZW5kZXJfaAorCisjaW5jbHVkZSAiQ3Bw
Qm91bmRDbGFzcy5oIgorI2luY2x1ZGUgIlRhc2suaCIKKyNpbmNsdWRlICJXZWJEcmFnT3BlcmF0
aW9uLmgiCisjaW5jbHVkZSAiV2ViSW5wdXRFdmVudC5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlBvaW50LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRHJhZ0RhdGE7CitjbGFz
cyBXZWJWaWV3OworfQorCitjbGFzcyBUZXN0RGVsZWdhdGU7CisKK2NsYXNzIEV2ZW50U2VuZGVy
IDogcHVibGljIENwcEJvdW5kQ2xhc3MgeworcHVibGljOgorICAgIEV2ZW50U2VuZGVyKCk7CisK
KyAgICB2b2lkIHNldERlbGVnYXRlKFRlc3REZWxlZ2F0ZSogZGVsZWdhdGUpIHsgbV9kZWxlZ2F0
ZSA9IGRlbGVnYXRlOyB9CisgICAgdm9pZCBzZXRXZWJWaWV3KFdlYktpdDo6V2ViVmlldyogd2Vi
VmlldykgeyBtX3dlYlZpZXcgPSB3ZWJWaWV3OyB9CisKKyAgICAvLyBSZXNldHMgc29tZSBzdGF0
aWMgdmFyaWFibGUgc3RhdGUuCisgICAgdm9pZCByZXNldCgpOworCisgICAgLy8gU2ltdWxhdGUg
ZHJhZyZkcm9wIHN5c3RlbSBjYWxsLgorICAgIHZvaWQgZG9EcmFnRHJvcChjb25zdCBXZWJLaXQ6
OldlYkRyYWdEYXRhJiwgV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uc01hc2spOworCisgICAgLy8g
VGVzdCBoZWxwZXIgZm9yIGRyYWdnaW5nIG91dCBpbWFnZXMuCisgICAgdm9pZCBkdW1wRmlsZW5h
bWVCZWluZ0RyYWdnZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisg
ICAgLy8gSlMgY2FsbGJhY2sgbWV0aG9kcy4KKyAgICB2b2lkIG1vdXNlRG93bihjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBtb3VzZVVwKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG1vdXNlTW92ZVRvKGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGxlYXBGb3J3YXJkKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGtleURvd24oY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdl
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICAvLyBGSVhNRTogVGhl
c2UgYXJlbid0IHJlYWxseSBldmVudHMuIFRoZXkgc2hvdWxkIGJlIG1vdmVkIHRvIGxheW91dCBj
b250cm9sbGVyLgorICAgIHZvaWQgdGV4dFpvb21Jbihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCB0ZXh0Wm9vbU91dChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCB6b29tUGFnZUluKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHpvb21QYWdlT3V0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNjYWxlUGFnZUJ5KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworICAgIHZvaWQgbW91c2VTY3JvbGxCeShjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjb250aW51b3VzTW91c2VT
Y3JvbGxCeShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBz
Y2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIHNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBiZWdpbkRyYWdXaXRoRmlsZXMoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIENwcFZhcmlhbnQgZHJhZ01v
ZGU7CisKKyAgICB2b2lkIGFkZFRvdWNoUG9pbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworICAgIHZvaWQgY2FuY2VsVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjbGVhclRvdWNoUG9pbnRzKGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHJlbGVhc2VUb3VjaFBvaW50KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldFRvdWNoTW9k
aWZpZXIoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgdG91
Y2hDYW5jZWwoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
dG91Y2hFbmQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQg
dG91Y2hNb3ZlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IHRvdWNoU3RhcnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZv
aWQgdXBkYXRlVG91Y2hQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisKKyAgICB2b2lkIGdlc3R1cmVGbGluZ0NhbmNlbChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisgICAgdm9pZCBnZXN0dXJlRmxpbmdTdGFydChjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBnZXN0dXJlU2Nyb2xsQmVnaW4oY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZ2VzdHVyZVNjcm9sbEVu
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBnZXN0dXJl
U2Nyb2xsRmlyc3RQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBnZXN0dXJlU2Nyb2xsVXBkYXRlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKKyAgICB2b2lkIGdlc3R1cmVUYXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOworICAgIHZvaWQgZ2VzdHVyZVRhcERvd24oY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZ2VzdHVyZVRhcENhbmNlbChjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBnZXN0dXJlTG9uZ1ByZXNzKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGdlc3R1cmVUd29GaW5n
ZXJUYXAoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZ2Vz
dHVyZUV2ZW50KFdlYktpdDo6V2ViSW5wdXRFdmVudDo6VHlwZSwgY29uc3QgQ3BwQXJndW1lbnRM
aXN0Jik7CisKKyAgICAvLyBVbmltcGxlbWVudGVkIHN0dWJzCisgICAgdm9pZCBjb250ZXh0Q2xp
Y2soY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZW5hYmxl
RE9NVUlFdmVudExvZ2dpbmcoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgZmlyZUtleWJvYXJkRXZlbnRzVG9FbGVtZW50KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGNsZWFyS2lsbFJpbmcoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOworCisgICAgLy8gUHJvcGVydGllcyB1c2VkIGluIGxheW91
dCB0ZXN0cy4KKyNpZiBkZWZpbmVkKE9TX1dJTikKKyAgICBDcHBWYXJpYW50IHdtS2V5RG93bjsK
KyAgICBDcHBWYXJpYW50IHdtS2V5VXA7CisgICAgQ3BwVmFyaWFudCB3bUNoYXI7CisgICAgQ3Bw
VmFyaWFudCB3bURlYWRDaGFyOworICAgIENwcFZhcmlhbnQgd21TeXNLZXlEb3duOworICAgIENw
cFZhcmlhbnQgd21TeXNLZXlVcDsKKyAgICBDcHBWYXJpYW50IHdtU3lzQ2hhcjsKKyAgICBDcHBW
YXJpYW50IHdtU3lzRGVhZENoYXI7CisjZW5kaWYKKworICAgIFRhc2tMaXN0KiB0YXNrTGlzdCgp
IHsgcmV0dXJuICZtX3Rhc2tMaXN0OyB9CisKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpXZWJWaWV3
KiB3ZWJ2aWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUg
aWYgZHJhZ01vZGUgaXMgdHJ1ZS4KKyAgICBib29sIGlzRHJhZ01vZGUoKSB7IHJldHVybiBkcmFn
TW9kZS5pc0Jvb2woKSAmJiBkcmFnTW9kZS50b0Jvb2xlYW4oKTsgfQorCisgICAgLy8gU29tZXRp
bWVzIHdlIHF1ZXVlIHVwIG1vdXNlIG1vdmUgYW5kIG1vdXNlIHVwIGV2ZW50cyBmb3IgZHJhZyBk
cm9wCisgICAgLy8gaGFuZGxpbmcgcHVycG9zZXMuIFRoZXNlIG1ldGhvZHMgZGlzcGF0Y2ggdGhl
IGV2ZW50LgorICAgIHZvaWQgZG9Nb3VzZU1vdmUoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50
Jik7CisgICAgdm9pZCBkb01vdXNlVXAoY29uc3QgV2ViS2l0OjpXZWJNb3VzZUV2ZW50Jik7Cisg
ICAgc3RhdGljIHZvaWQgZG9MZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRzKTsKKyAgICB2b2lk
IHJlcGxheVNhdmVkRXZlbnRzKCk7CisKKyAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBidXR0
b24gdHlwZSBnaXZlbiBhIGJ1dHRvbiBjb2RlCisgICAgc3RhdGljIFdlYktpdDo6V2ViTW91c2VF
dmVudDo6QnV0dG9uIGdldEJ1dHRvblR5cGVGcm9tQnV0dG9uTnVtYmVyKGludCk7CisKKyAgICAv
LyBIZWxwZXIgdG8gZXh0cmFjdCB0aGUgYnV0dG9uIG51bWJlciBmcm9tIHRoZSBvcHRpb25hbCBh
cmd1bWVudCBpbgorICAgIC8vIG1vdXNlRG93biBhbmQgbW91c2VVcAorICAgIHN0YXRpYyBpbnQg
Z2V0QnV0dG9uTnVtYmVyRnJvbVNpbmdsZUFyZyhjb25zdCBDcHBBcmd1bWVudExpc3QmKTsKKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGtleSBjb2RlIHBhc3NlZCBpbiBu
ZWVkcyBhIHNoaWZ0IGtleQorICAgIC8vIG1vZGlmaWVyIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBn
ZW5lcmF0ZWQgZXZlbnQuCisgICAgYm9vbCBuZWVkc1NoaWZ0TW9kaWZpZXIoaW50KTsKKworICAg
IHZvaWQgdXBkYXRlQ2xpY2tDb3VudEZvckJ1dHRvbihXZWJLaXQ6OldlYk1vdXNlRXZlbnQ6OkJ1
dHRvbik7CisKKyAgICAvLyBDb21wb3NlIGEgdG91Y2ggZXZlbnQgZnJvbSB0aGUgY3VycmVudCB0
b3VjaCBwb2ludHMgYW5kIHNlbmQgaXQuCisgICAgdm9pZCBzZW5kQ3VycmVudFRvdWNoRXZlbnQo
Y29uc3QgV2ViS2l0OjpXZWJJbnB1dEV2ZW50OjpUeXBlKTsKKworICAgIC8vIEhhbmRsZSBhIHJl
cXVlc3QgdG8gc2VuZCBhIHdoZWVsIGV2ZW50LgorICAgIHZvaWQgaGFuZGxlTW91c2VXaGVlbChj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiwgYm9vbCBjb250aW51b3VzKTsKKwor
ICAgIFRhc2tMaXN0IG1fdGFza0xpc3Q7CisKKyAgICBUZXN0RGVsZWdhdGUqIG1fZGVsZWdhdGU7
CisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CisKKyAgICAvLyBMb2NhdGlvbiBvZiB0
aGUgdG91Y2ggcG9pbnQgdGhhdCBpbml0aWF0ZWQgYSBnZXN0dXJlLgorICAgIFdlYktpdDo6V2Vi
UG9pbnQgbV9jdXJyZW50R2VzdHVyZUxvY2F0aW9uOworCisgICAgLy8gTG9jYXRpb24gb2YgbGFz
dCBtb3VzZU1vdmVUbyBldmVudC4KKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJQb2ludCBsYXN0TW91
c2VQb3M7CisKKyAgICAvLyBDdXJyZW50bHkgcHJlc3NlZCBtb3VzZSBidXR0b24gKExlZnQvUmln
aHQvTWlkZGxlIG9yIE5vbmUpCisgICAgc3RhdGljIFdlYktpdDo6V2ViTW91c2VFdmVudDo6QnV0
dG9uIHByZXNzZWRCdXR0b247CisKKyAgICAvLyBUaGUgbGFzdCBidXR0b24gbnVtYmVyIHBhc3Nl
ZCB0byBtb3VzZURvd24gYW5kIG1vdXNlVXAuCisgICAgLy8gVXNlZCB0byBkZXRlcm1pbmUgd2hl
dGhlciB0aGUgY2xpY2sgY291bnQgY29udGludWVzIHRvCisgICAgLy8gaW5jcmVtZW50IG9yIG5v
dC4KKyAgICBzdGF0aWMgV2ViS2l0OjpXZWJNb3VzZUV2ZW50OjpCdXR0b24gbGFzdEJ1dHRvblR5
cGU7Cit9OworCisjZW5kaWYgLy8gRXZlbnRTZW5kZXJfaApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiMzZiZmRmYmJiMmUyZTU4OTc5YjZmMzBmM2Q2Y2Qx
YjVmNWQ3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9HYW1lcGFkQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxOTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2FtZXBhZENvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJUZXN0RGVsZWdhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworR2FtZXBh
ZENvbnRyb2xsZXI6OkdhbWVwYWRDb250cm9sbGVyKCkKK3sKKyAgICBiaW5kTWV0aG9kKCJjb25u
ZWN0IiwgJkdhbWVwYWRDb250cm9sbGVyOjpjb25uZWN0KTsKKyAgICBiaW5kTWV0aG9kKCJkaXNj
b25uZWN0IiwgJkdhbWVwYWRDb250cm9sbGVyOjpkaXNjb25uZWN0KTsKKyAgICBiaW5kTWV0aG9k
KCJzZXRJZCIsICZHYW1lcGFkQ29udHJvbGxlcjo6c2V0SWQpOworICAgIGJpbmRNZXRob2QoInNl
dEJ1dHRvbkNvdW50IiwgJkdhbWVwYWRDb250cm9sbGVyOjpzZXRCdXR0b25Db3VudCk7CisgICAg
YmluZE1ldGhvZCgic2V0QnV0dG9uRGF0YSIsICZHYW1lcGFkQ29udHJvbGxlcjo6c2V0QnV0dG9u
RGF0YSk7CisgICAgYmluZE1ldGhvZCgic2V0QXhpc0NvdW50IiwgJkdhbWVwYWRDb250cm9sbGVy
OjpzZXRBeGlzQ291bnQpOworICAgIGJpbmRNZXRob2QoInNldEF4aXNEYXRhIiwgJkdhbWVwYWRD
b250cm9sbGVyOjpzZXRBeGlzRGF0YSk7CisKKyAgICBiaW5kRmFsbGJhY2tNZXRob2QoJkdhbWVw
YWRDb250cm9sbGVyOjpmYWxsYmFja0NhbGxiYWNrKTsKKworICAgIHJlc2V0KCk7Cit9CisKK3Zv
aWQgR2FtZXBhZENvbnRyb2xsZXI6OmJpbmRUb0phdmFzY3JpcHQoV2ViRnJhbWUqIGZyYW1lLCBj
b25zdCBXZWJTdHJpbmcmIGNsYXNzbmFtZSkKK3sKKyAgICBDcHBCb3VuZENsYXNzOjpiaW5kVG9K
YXZhc2NyaXB0KGZyYW1lLCBjbGFzc25hbWUpOworfQorCit2b2lkIEdhbWVwYWRDb250cm9sbGVy
OjpzZXREZWxlZ2F0ZShUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIG1fZGVsZWdhdGUg
PSBkZWxlZ2F0ZTsKK30KKwordm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6cmVzZXQoKQoreworICAg
IG1lbXNldCgmbV9nYW1lcGFkcywgMCwgc2l6ZW9mKG1fZ2FtZXBhZHMpKTsKK30KKwordm9pZCBH
YW1lcGFkQ29udHJvbGxlcjo6Y29ubmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENw
cFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKSB7CisgICAgICAg
IHByaW50ZigiSW52YWxpZCBhcmdzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50
IGluZGV4ID0gYXJnc1swXS50b0ludDMyKCk7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+
PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmNvbm5lY3RlZCA9
IHRydWU7CisgICAgbV9nYW1lcGFkcy5sZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBXZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcDsgKytpKQorICAgICAg
ICBpZiAobV9nYW1lcGFkcy5pdGVtc1tpXS5jb25uZWN0ZWQpCisgICAgICAgICAgICBtX2dhbWVw
YWRzLmxlbmd0aCA9IGkgKyAxOworICAgIG1fZGVsZWdhdGUtPnNldEdhbWVwYWREYXRhKG1fZ2Ft
ZXBhZHMpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEdhbWVwYWRDb250cm9s
bGVyOjpkaXNjb25uZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpIHsKKyAgICAgICAgcHJpbnRmKCJJ
bnZhbGlkIGFyZ3MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgaW5kZXggPSBh
cmdzWzBdLnRvSW50MzIoKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19j
YXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uY29ubmVjdGVkID0gZmFsc2U7Cisg
ICAgbV9nYW1lcGFkcy5sZW5ndGggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
ZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcDsgKytpKQorICAgICAgICBpZiAobV9n
YW1lcGFkcy5pdGVtc1tpXS5jb25uZWN0ZWQpCisgICAgICAgICAgICBtX2dhbWVwYWRzLmxlbmd0
aCA9IGkgKyAxOworICAgIG1fZGVsZWdhdGUtPnNldEdhbWVwYWREYXRhKG1fZ2FtZXBhZHMpOwor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIEdhbWVwYWRDb250cm9sbGVyOjpzZXRJ
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBpZiAoYXJncy5zaXplKCkgPCAyKSB7CisgICAgICAgIHByaW50ZigiSW52YWxpZCBhcmdzIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMy
KCk7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktp
dDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0
ZDo6c3RyaW5nIHNyYyA9IGFyZ3NbMV0udG9TdHJpbmcoKTsKKyAgICBjb25zdCBjaGFyKiBwID0g
c3JjLmNfc3RyKCk7CisgICAgbWVtc2V0KG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmlkLCAwLCBz
aXplb2YobV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uaWQpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAqcCAmJiBpIDwgV2ViS2l0OjpXZWJHYW1lcGFkOjppZExlbmd0aENhcCAtIDE7ICsraSkK
KyAgICAgICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uaWRbaV0gPSAqcCsrOworICAgIG1fZGVs
ZWdhdGUtPnNldEdhbWVwYWREYXRhKG1fZ2FtZXBhZHMpOworICAgIHJlc3VsdC0+c2V0TnVsbCgp
OworfQorCit2b2lkIEdhbWVwYWRDb250cm9sbGVyOjpzZXRCdXR0b25Db3VudChjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJncy5z
aXplKCkgPCAyKSB7CisgICAgICAgIHByaW50ZigiSW52YWxpZCBhcmdzIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaW50IGluZGV4ID0gYXJnc1swXS50b0ludDMyKCk7CisgICAgaWYg
KGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBh
ZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBidXR0b25zID0g
YXJnc1sxXS50b0ludDMyKCk7CisgICAgaWYgKGJ1dHRvbnMgPCAwIHx8IGJ1dHRvbnMgPj0gc3Rh
dGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVwYWQ6OmJ1dHRvbnNMZW5ndGhDYXApKQorICAg
ICAgICByZXR1cm47CisgICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uYnV0dG9uc0xlbmd0aCA9
IGJ1dHRvbnM7CisgICAgbV9kZWxlZ2F0ZS0+c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7Cisg
ICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldEJ1
dHRvbkRhdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykgeworICAgICAgICBwcmludGYoIkludmFsaWQg
YXJncyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBpbmRleCA9IGFyZ3NbMF0u
dG9JbnQzMigpOworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50
PihXZWJLaXQ6OldlYkdhbWVwYWRzOjppdGVtc0xlbmd0aENhcCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpbnQgYnV0dG9uID0gYXJnc1sxXS50b0ludDMyKCk7CisgICAgaWYgKGJ1dHRvbiA8IDAg
fHwgYnV0dG9uID49IHN0YXRpY19jYXN0PGludD4oV2ViS2l0OjpXZWJHYW1lcGFkOjpidXR0b25z
TGVuZ3RoQ2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRvdWJsZSBkYXRhID0gYXJnc1syXS50
b0RvdWJsZSgpOworICAgIG1fZ2FtZXBhZHMuaXRlbXNbaW5kZXhdLmJ1dHRvbnNbYnV0dG9uXSA9
IGRhdGE7CisgICAgbV9kZWxlZ2F0ZS0+c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldEF4aXND
b3VudChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICBpZiAoYXJncy5zaXplKCkgPCAyKSB7CisgICAgICAgIHByaW50ZigiSW52YWxpZCBhcmdz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGluZGV4ID0gYXJnc1swXS50b0lu
dDMyKCk7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KFdl
YktpdDo6V2ViR2FtZXBhZHM6Oml0ZW1zTGVuZ3RoQ2FwKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGludCBheGVzID0gYXJnc1sxXS50b0ludDMyKCk7CisgICAgaWYgKGF4ZXMgPCAwIHx8IGF4ZXMg
Pj0gc3RhdGljX2Nhc3Q8aW50PihXZWJLaXQ6OldlYkdhbWVwYWQ6OmF4ZXNMZW5ndGhDYXApKQor
ICAgICAgICByZXR1cm47CisgICAgbV9nYW1lcGFkcy5pdGVtc1tpbmRleF0uYXhlc0xlbmd0aCA9
IGF4ZXM7CisgICAgbV9kZWxlZ2F0ZS0+c2V0R2FtZXBhZERhdGEobV9nYW1lcGFkcyk7CisgICAg
cmVzdWx0LT5zZXROdWxsKCk7Cit9CisKK3ZvaWQgR2FtZXBhZENvbnRyb2xsZXI6OnNldEF4aXNE
YXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KQorewor
ICAgIGlmIChhcmdzLnNpemUoKSA8IDMpIHsKKyAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGFyZ3Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgaW5kZXggPSBhcmdzWzBdLnRvSW50
MzIoKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4oV2Vi
S2l0OjpXZWJHYW1lcGFkczo6aXRlbXNMZW5ndGhDYXApKQorICAgICAgICByZXR1cm47CisgICAg
aW50IGF4aXMgPSBhcmdzWzFdLnRvSW50MzIoKTsKKyAgICBpZiAoYXhpcyA8IDAgfHwgYXhpcyA+
PSBzdGF0aWNfY2FzdDxpbnQ+KFdlYktpdDo6V2ViR2FtZXBhZDo6YXhlc0xlbmd0aENhcCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBkb3VibGUgZGF0YSA9IGFyZ3NbMl0udG9Eb3VibGUoKTsKKyAg
ICBtX2dhbWVwYWRzLml0ZW1zW2luZGV4XS5heGVzW2F4aXNdID0gZGF0YTsKKyAgICBtX2RlbGVn
YXRlLT5zZXRHYW1lcGFkRGF0YShtX2dhbWVwYWRzKTsKKyAgICByZXN1bHQtPnNldE51bGwoKTsK
K30KKwordm9pZCBHYW1lcGFkQ29udHJvbGxlcjo6ZmFsbGJhY2tDYWxsYmFjayhjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcHJpbnRmKCJDT05TT0xF
IE1FU1NBR0U6IEphdmFTY3JpcHQgRVJST1I6IHVua25vd24gbWV0aG9kIGNhbGxlZCBvbiAiCisg
ICAgICAgICAgICJHYW1lcGFkQ29udHJvbGxlclxuIik7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVy
L3NyYy9HYW1lcGFkQ29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTY1ZTkyMmY0
OTE1MDA4ZGI1NzE0OTdmZTM5OTM1NzE5YjIyMTNhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvR2FtZXBhZENvbnRyb2xsZXIu
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkQ29udHJvbGxlcl9oCisjZGVmaW5lIEdh
bWVwYWRDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKKyNpbmNsdWRl
ICJwbGF0Zm9ybS9XZWJHYW1lcGFkcy5oIgorCitjbGFzcyBUZXN0RGVsZWdhdGU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgV2ViR2FtZXBhZHM7CitjbGFzcyBXZWJGcmFtZTsKK30KKwor
Y2xhc3MgR2FtZXBhZENvbnRyb2xsZXIgOiBwdWJsaWMgQ3BwQm91bmRDbGFzcyB7CitwdWJsaWM6
CisgICAgR2FtZXBhZENvbnRyb2xsZXIoKTsKKworICAgIHZvaWQgYmluZFRvSmF2YXNjcmlwdChX
ZWJLaXQ6OldlYkZyYW1lKiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNsYXNzbmFtZSk7Cisg
ICAgdm9pZCBzZXREZWxlZ2F0ZShUZXN0RGVsZWdhdGUqKTsKKyAgICB2b2lkIHJlc2V0KCk7CisK
K3ByaXZhdGU6CisgICAgLy8gQm91bmQgbWV0aG9kcyBhbmQgcHJvcGVydGllcworICAgIHZvaWQg
Y29ubmVjdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBk
aXNjb25uZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lk
IHNldElkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNl
dEJ1dHRvbkNvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2
b2lkIHNldEJ1dHRvbkRhdGEoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgc2V0QXhpc0NvdW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQq
KTsKKyAgICB2b2lkIHNldEF4aXNEYXRhKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKKyAgICB2b2lkIGZhbGxiYWNrQ2FsbGJhY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOworCisgICAgV2ViS2l0OjpXZWJHYW1lcGFkcyBtX2dhbWVwYWRzOworCisg
ICAgVGVzdERlbGVnYXRlKiBtX2RlbGVnYXRlOworfTsKKworI2VuZGlmIC8vIEdhbWVwYWRDb250
cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RS
dW5uZXIvc3JjL1Rhc2suY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvVGFzay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgwYmVlZjM0OTkzN2Q2MzU0MGRlZmE5MDY1
MzFmNjEwOGQ3NWE1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rhc2suY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGFzay5oIgorCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5j
bHVkZSAicGxhdGZvcm0vV2ViS2l0UGxhdGZvcm1TdXBwb3J0LmgiCisKK1dlYlRhc2s6OldlYlRh
c2soVGFza0xpc3QqIGxpc3QpCisgICAgOiBtX3Rhc2tMaXN0KGxpc3QpCit7CisgICAgbV90YXNr
TGlzdC0+cmVnaXN0ZXJUYXNrKHRoaXMpOworfQorCitXZWJUYXNrOjp+V2ViVGFzaygpCit7Cisg
ICAgaWYgKG1fdGFza0xpc3QpCisgICAgICAgIG1fdGFza0xpc3QtPnVucmVnaXN0ZXJUYXNrKHRo
aXMpOworfQorCit2b2lkIFRhc2tMaXN0Ojp1bnJlZ2lzdGVyVGFzayhXZWJUYXNrKiB0YXNrKQor
eworICAgIHNpemVfdCBpbmRleCA9IG1fdGFza3MuZmluZCh0YXNrKTsKKyAgICBpZiAoaW5kZXgg
IT0gbm90Rm91bmQpCisgICAgICAgIG1fdGFza3MucmVtb3ZlKGluZGV4KTsKK30KKwordm9pZCBU
YXNrTGlzdDo6cmV2b2tlQWxsKCkKK3sKKyAgICB3aGlsZSAoIW1fdGFza3MuaXNFbXB0eSgpKQor
ICAgICAgICBtX3Rhc2tzWzBdLT5jYW5jZWwoKTsKK30KKworc3RhdGljIHZvaWQgaW52b2tlVGFz
ayh2b2lkKiBjb250ZXh0KQoreworICAgIFdlYlRhc2sqIHRhc2sgPSBzdGF0aWNfY2FzdDxXZWJU
YXNrKj4oY29udGV4dCk7CisgICAgdGFzay0+cnVuKCk7CisgICAgZGVsZXRlIHRhc2s7Cit9CisK
K3ZvaWQgcG9zdFRhc2soV2ViVGFzayogdGFzaykKK3sKKyAgICBXZWJLaXQ6OndlYktpdFBsYXRm
b3JtU3VwcG9ydCgpLT5jYWxsT25NYWluVGhyZWFkKGludm9rZVRhc2ssIHN0YXRpY19jYXN0PHZv
aWQqPih0YXNrKSk7Cit9CisKK3ZvaWQgcG9zdERlbGF5ZWRUYXNrKFdlYlRhc2sqIHRhc2ssIGlu
dDY0X3QgbXMpCit7CisgICAgd2Via2l0X3N1cHBvcnQ6OlBvc3REZWxheWVkVGFzayh0YXNrLCBt
cyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFJ1bm5lci9zcmMvVGFzay5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1
bm5lci9zcmMvVGFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMzJjNDcyYjI3NTA0ZTVmYjYwOGQ2YmU0MDFm
ZGE2ODgwYjk3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0UnVubmVyL3NyYy9UYXNrLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGFza19o
CisjZGVmaW5lIFRhc2tfaAorCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBv
cnQuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CitjbGFzcyBUYXNrTGlzdDsKKworLy8gV2ViVGFzayByZXByZXNlbnRzIGEgdGFzayB3aGljaCBj
YW4gcnVuIGJ5IHBvc3RUYXNrKCkgb3IgcG9zdERlbGF5ZWRUYXNrKCkuCisvLyBpdCBpcyBuYW1l
ZCAiV2ViVGFzayIsIG5vdCAiVGFzayIsIHRvIGF2b2lkIGNvbmZsaXN0IHdpdGggYmFzZS90YXNr
LmguCitjbGFzcyBXZWJUYXNrIDogcHVibGljIHdlYmtpdF9zdXBwb3J0OjpUYXNrQWRhcHRvciB7
CitwdWJsaWM6CisgICAgV2ViVGFzayhUYXNrTGlzdCopOworICAgIC8vIFRoZSBtYWluIGNvZGUg
b2YgdGhpcyB0YXNrLgorICAgIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHJ1bigpIHNob3VsZCBy
ZXR1cm4gaW1tZWRpYXRlbHkgaWYgY2FuY2VsKCkgd2FzIGNhbGxlZC4KKyAgICB2aXJ0dWFsIHZv
aWQgcnVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9IDA7CisgICAgdmlydHVh
bCB+V2ViVGFzaygpOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBSdW4oKSB7IHJ1bigp
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBUYXNrTGlzdCogbV90YXNrTGlzdDsKK307CisKK2NsYXNz
IFRhc2tMaXN0IHsKK3B1YmxpYzoKKyAgICBUYXNrTGlzdCgpIHsgfQorICAgIH5UYXNrTGlzdCgp
IHsgcmV2b2tlQWxsKCk7IH0KKyAgICB2b2lkIHJlZ2lzdGVyVGFzayhXZWJUYXNrKiB0YXNrKSB7
IG1fdGFza3MuYXBwZW5kKHRhc2spOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyVGFzayhXZWJUYXNr
Kik7CisgICAgdm9pZCByZXZva2VBbGwoKTsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8V2ViVGFz
ayo+IG1fdGFza3M7Cit9OworCisvLyBBIHRhc2sgY29udGFpbmluZyBhbiBvYmplY3QgcG9pbnRl
ciBvZiBjbGFzcyBULiBJcyBpcyBzdXBwb3NlZCB0aGF0CisvLyBydW5pZlZhbGlkKCkgY2FsbHMg
YSBtZW1iZXIgZnVuY3Rpb24gb2YgdGhlIG9iamVjdCBwb2ludGVyLgorLy8gQ2xhc3MgVCBtdXN0
IGhhdmUgIlRhc2tMaXN0KiB0YXNrTGlzdCgpIi4KK3RlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIE1l
dGhvZFRhc2s6IHB1YmxpYyBXZWJUYXNrIHsKK3B1YmxpYzoKKyAgICBNZXRob2RUYXNrKFQqIG9i
amVjdCk6IFdlYlRhc2sob2JqZWN0LT50YXNrTGlzdCgpKSwgbV9vYmplY3Qob2JqZWN0KSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGlmIChtX29iamVjdCkKKyAg
ICAgICAgICAgIHJ1bklmVmFsaWQoKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgp
CisgICAgeworICAgICAgICBtX29iamVjdCA9IDA7CisgICAgICAgIG1fdGFza0xpc3QtPnVucmVn
aXN0ZXJUYXNrKHRoaXMpOworICAgICAgICBtX3Rhc2tMaXN0ID0gMDsKKyAgICB9CisgICAgdmly
dHVhbCB2b2lkIHJ1bklmVmFsaWQoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBUKiBtX29iamVj
dDsKK307CisKK3ZvaWQgcG9zdFRhc2soV2ViVGFzayopOwordm9pZCBwb3N0RGVsYXllZFRhc2so
V2ViVGFzayosIGludDY0X3QgbXMpOworCisjZW5kaWYgLy8gVGFza19oCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0RGVsZWdhdGUu
aCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3REZWxl
Z2F0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU5OWUxMWQ0YzYxMzU5NDk0OGI3M2M5MDZjMTIyYzMzNmMxMDlk
Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
UnVubmVyL3NyYy9UZXN0RGVsZWdhdGUuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXN0RGVs
ZWdhdGVfaAorI2RlZmluZSBUZXN0RGVsZWdhdGVfaAorCisjaW5jbHVkZSAicGxhdGZvcm0vV2Vi
U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3N0cnVjdCBXZWJDb250ZXh0TWVudURhdGE7CitjbGFzcyBXZWJHYW1lcGFkczsKK30KKworY2xh
c3MgVGVzdERlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb250ZXh0
TWVudURhdGEoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRWRpdENvbW1hbmQoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGZpbGxTcGVsbGluZ1N1Z2dlc3Rpb25MaXN0KGNvbnN0IFdlYktp
dDo6V2ViU3RyaW5nJiB3b3JkLCBWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+KiBzdWdnZXN0aW9u
cykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZChjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSwgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYkNvbnRleHRNZW51RGF0YSogbGFzdENvbnRleHRNZW51RGF0YSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0R2FtZXBhZERhdGEoY29uc3QgV2ViS2l0OjpXZWJHYW1lcGFk
cyYpID0gMDsKK307CisKKyNlbmRpZiAvLyBUZXN0RGVsZWdhdGVfaApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGVzdElu
dGVyZmFjZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2ZTYyNWZhZmVhM2M4MmUxZjY0NGUzYTJmZjY5Nzk3
NTMyMDA2NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0UnVubmVyL3NyYy9UZXN0SW50ZXJmYWNlcy5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdEludGVyZmFjZXMuaCIKKworI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlDb250cm9sbGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJFdmVudFNlbmRl
ci5oIgorI2luY2x1ZGUgIkdhbWVwYWRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVGV4dElucHV0
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgorCit1c2luZyBX
ZWJLaXQ6OldlYkZyYW1lOwordXNpbmcgV2ViS2l0OjpXZWJTdHJpbmc7Cit1c2luZyBXZWJLaXQ6
OldlYlZpZXc7CisKK1Rlc3RJbnRlcmZhY2VzOjpUZXN0SW50ZXJmYWNlcygpCit7CisgICAgbV9h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBBY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcigpKTsKKyAgICBtX2V2ZW50U2VuZGVyID0gYWRvcHRQdHIobmV3IEV2ZW50U2VuZGVyKCkp
OworICAgIG1fZ2FtZXBhZENvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgR2FtZXBhZENvbnRyb2xs
ZXIoKSk7CisgICAgbV90ZXh0SW5wdXRDb250cm9sbGVyID0gYWRvcHRQdHIobmV3IFRleHRJbnB1
dENvbnRyb2xsZXIoKSk7Cit9CisKK1Rlc3RJbnRlcmZhY2VzOjp+VGVzdEludGVyZmFjZXMoKQor
eworICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnNldFdlYlZpZXcoMCk7CisgICAgbV9l
dmVudFNlbmRlci0+c2V0V2ViVmlldygwKTsKKyAgICAvLyBtX2dhbWVwYWRDb250cm9sbGVyIGRv
ZXNuJ3QgZGVwZW5kIG9uIFdlYlZpZXcuCisgICAgbV90ZXh0SW5wdXRDb250cm9sbGVyLT5zZXRX
ZWJWaWV3KDApOworCisgICAgLy8gbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlciBkb2Vzbid0IGRl
cGVuZCBvbiBUZXN0RGVsZWdhdGUuCisgICAgbV9ldmVudFNlbmRlci0+c2V0RGVsZWdhdGUoMCk7
CisgICAgbV9nYW1lcGFkQ29udHJvbGxlci0+c2V0RGVsZWdhdGUoMCk7CisgICAgLy8gbV90ZXh0
SW5wdXRDb250cm9sbGVyIGRvZXNuJ3QgZGVwZW5kIG9uIFRlc3REZWxlZ2F0ZS4KK30KKwordm9p
ZCBUZXN0SW50ZXJmYWNlczo6c2V0V2ViVmlldyhXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIG1f
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXItPnNldFdlYlZpZXcod2ViVmlldyk7CisgICAgbV9ldmVu
dFNlbmRlci0+c2V0V2ViVmlldyh3ZWJWaWV3KTsKKyAgICAvLyBtX2dhbWVwYWRDb250cm9sbGVy
IGRvZXNuJ3QgZGVwZW5kIG9uIFdlYlZpZXcuCisgICAgbV90ZXh0SW5wdXRDb250cm9sbGVyLT5z
ZXRXZWJWaWV3KHdlYlZpZXcpOworfQorCit2b2lkIFRlc3RJbnRlcmZhY2VzOjpzZXREZWxlZ2F0
ZShUZXN0RGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIC8vIG1fYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIgZG9lc24ndCBkZXBlbmQgb24gVGVzdERlbGVnYXRlLgorICAgIG1fZXZlbnRTZW5kZXIt
PnNldERlbGVnYXRlKGRlbGVnYXRlKTsKKyAgICBtX2dhbWVwYWRDb250cm9sbGVyLT5zZXREZWxl
Z2F0ZShkZWxlZ2F0ZSk7CisgICAgLy8gbV90ZXh0SW5wdXRDb250cm9sbGVyIGRvZXNuJ3QgZGVw
ZW5kIG9uIFRlc3REZWxlZ2F0ZS4KK30KKwordm9pZCBUZXN0SW50ZXJmYWNlczo6YmluZFRvKFdl
YkZyYW1lKiBmcmFtZSkKK3sKKyAgICBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLT5iaW5kVG9K
YXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJhY2Nlc3NpYmlsaXR5Q29udHJv
bGxlciIpKTsKKyAgICBtX2V2ZW50U2VuZGVyLT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJldmVudFNlbmRlciIpKTsKKyAgICBtX2dhbWVwYWRDb250cm9sbGVy
LT5iaW5kVG9KYXZhc2NyaXB0KGZyYW1lLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJnYW1lcGFkQ29u
dHJvbGxlciIpKTsKKyAgICBtX3RleHRJbnB1dENvbnRyb2xsZXItPmJpbmRUb0phdmFzY3JpcHQo
ZnJhbWUsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRleHRJbnB1dENvbnRyb2xsZXIiKSk7Cit9CisK
K3ZvaWQgVGVzdEludGVyZmFjZXM6OnJlc2V0QWxsKCkKK3sKKyAgICBtX2FjY2Vzc2liaWxpdHlD
b250cm9sbGVyLT5yZXNldCgpOworICAgIG1fZXZlbnRTZW5kZXItPnJlc2V0KCk7CisgICAgbV9n
YW1lcGFkQ29udHJvbGxlci0+cmVzZXQoKTsKKyAgICAvLyBtX3RleHRJbnB1dENvbnRyb2xsZXIg
ZG9lc24ndCBoYXZlIGFueSBzdGF0ZSB0byByZXNldC4KK30KKworQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIqIFRlc3RJbnRlcmZhY2VzOjphY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpCit7CisgICAg
cmV0dXJuIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK0V2ZW50U2VuZGVy
KiBUZXN0SW50ZXJmYWNlczo6ZXZlbnRTZW5kZXIoKQoreworICAgIHJldHVybiBtX2V2ZW50U2Vu
ZGVyLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFJ1bm5lci9zcmMvVGVzdEludGVyZmFjZXMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZiOThh
ZTM0ZjMzZDRjYmFlNjY1MDViOWNhNjg2MDA3MDJkZGRmMwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RJbnRlcmZhY2Vz
LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGVzdEludGVyZmFjZXNfaAorI2RlZmluZSBUZXN0
SW50ZXJmYWNlc19oCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworY2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJWaWV3OworfQorCitjbGFzcyBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjsKK2NsYXNzIEV2ZW50U2VuZGVyOworY2xhc3MgR2FtZXBhZENvbnRy
b2xsZXI7CitjbGFzcyBUZXN0RGVsZWdhdGU7CitjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyOwor
CitjbGFzcyBUZXN0SW50ZXJmYWNlcyB7CitwdWJsaWM6CisgICAgVGVzdEludGVyZmFjZXMoKTsK
KyAgICB+VGVzdEludGVyZmFjZXMoKTsKKworICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6Oldl
YlZpZXcqKTsKKyAgICB2b2lkIHNldERlbGVnYXRlKFRlc3REZWxlZ2F0ZSopOworICAgIHZvaWQg
YmluZFRvKFdlYktpdDo6V2ViRnJhbWUqKTsKKyAgICB2b2lkIHJlc2V0QWxsKCk7CisKKyAgICBB
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKTsKKyAgICBF
dmVudFNlbmRlciogZXZlbnRTZW5kZXIoKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8QWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CisgICAgT3duUHRy
PEV2ZW50U2VuZGVyPiBtX2V2ZW50U2VuZGVyOworICAgIE93blB0cjxHYW1lcGFkQ29udHJvbGxl
cj4gbV9nYW1lcGFkQ29udHJvbGxlcjsKKyAgICBPd25QdHI8VGV4dElucHV0Q29udHJvbGxlcj4g
bV90ZXh0SW5wdXRDb250cm9sbGVyOworfTsKKworI2VuZGlmIC8vIFRlc3RJbnRlcmZhY2VzX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFJ1bm5l
ci9zcmMvVGVzdFJ1bm5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZlYWQxNTUxNTdhMWIwMzUxZWY5MTUy
NGZiNzRmYWE4NGU1ZTViZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuY3BwCkBAIC0wLDAgKzEsODIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXdlbCBIYWpkYW4gKHBoYWpkYW4uanJAY2hyb21p
dW0ub3JnKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0UnVubmVyLmgiCisKKyNpbmNs
dWRlICJXZWJBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiV2ViQmluZGluZ3MuaCIK
KyNpbmNsdWRlICJXZWJDb25zb2xlTWVzc2FnZS5oIgorI2luY2x1ZGUgIldlYkRldmljZU9yaWVu
dGF0aW9uLmgiCisjaW5jbHVkZSAiV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmgiCisj
aW5jbHVkZSAiV2ViRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXZWJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV2ViRmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldl
Ykdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIgorI2luY2x1ZGUgIldlYklEQkZhY3RvcnkuaCIKKyNp
bmNsdWRlICJXZWJJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXZWJJbnRlbnQuaCIKKyNpbmNs
dWRlICJXZWJJbnRlbnRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAi
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyLmgiCisjaW5jbHVkZSAiV2ViUHJpbnRQYXJhbXMuaCIK
KyNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJTZWN1cml0eVBvbGlj
eS5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3Vycm91bmRpbmdU
ZXh0LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYldvcmtlckluZm8uaCIK
KyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJEYXRhLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSAicGxhdGZvcm0vV2ViU2l6ZS5oIgorI2lu
Y2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCIKKyNp
bmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxjbG9jYWxlPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8
bGltaXRzPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBPUyhMSU5VWCkgfHwgT1Mo
QU5EUk9JRCkKKyNpbmNsdWRlICJsaW51eC9XZWJGb250UmVuZGVyaW5nLmgiCisjZW5kaWYKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKworVGVzdFJ1bm5lcjo6VGVzdFJ1bm5lcigpCit7Cit9CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0UnVu
bmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0UnVubmVyL3NyYy9UZXN0
UnVubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjcwNjk0MDFhOGYwMDQzY2YzZjI3YjdjMWExODRkZmE5NjBl
ZWNlYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RSdW5uZXIvc3JjL1Rlc3RSdW5uZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgUGF3ZWwgSGFqZGFuIChwaGFqZGFuLmpyQGNocm9taXVtLm9yZykKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRl
c3RSdW5uZXJfaAorI2RlZmluZSBUZXN0UnVubmVyX2gKKworI2luY2x1ZGUgIkNwcEJvdW5kQ2xh
c3MuaCIKKyNpbmNsdWRlICJUYXNrLmgiCisjaW5jbHVkZSAiV2ViRGVsaXZlcmVkSW50ZW50Q2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgInBsYXRmb3Jt
L1dlYkFycmF5QnVmZmVyVmlldy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlN0cmluZy5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJHZW9s
b2NhdGlvbkNsaWVudE1vY2s7Cit9CisKK25hbWVzcGFjZSB3ZWJraXRfc3VwcG9ydCB7CitjbGFz
cyBTY29wZWRUZW1wRGlyZWN0b3J5OworfQorCitjbGFzcyBUZXN0UnVubmVyIDogcHVibGljIENw
cEJvdW5kQ2xhc3MgeworcHVibGljOgorICAgIFRlc3RSdW5uZXIoKTsKK307CisKKyNlbmRpZiAv
LyBUZXN0UnVubmVyX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJvbGxlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjcyYTIwODBkMmMwOTc1OGFlMTk0M2ExNGEyMWY5M2E0MDY3NzdjYgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3Jj
L1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIldlYkJp
bmRpbmdzLmgiCisjaW5jbHVkZSAiV2ViQ29tcG9zaXRpb25VbmRlcmxpbmUuaCIKKyNpbmNsdWRl
ICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYklucHV0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJS
YW5nZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJTdHJp
bmcuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJWZWN0b3IuaCIKKyNpbmNsdWRlIDxzdHJpbmc+
CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitUZXh0SW5wdXRDb250cm9sbGVyOjpUZXh0SW5wdXRDb250cm9sbGVyKCkKK3sKKyAgICBi
aW5kTWV0aG9kKCJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlIiwgJlRleHRJbnB1dENvbnRy
b2xsZXI6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOworICAgIGJpbmRNZXRob2QoImNo
YXJhY3RlckluZGV4Rm9yUG9pbnQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6Y2hhcmFjdGVySW5k
ZXhGb3JQb2ludCk7CisgICAgYmluZE1ldGhvZCgiY29udmVyc2F0aW9uSWRlbnRpZmllciIsICZU
ZXh0SW5wdXRDb250cm9sbGVyOjpjb252ZXJzYXRpb25JZGVudGlmaWVyKTsKKyAgICBiaW5kTWV0
aG9kKCJkb0NvbW1hbmQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6ZG9Db21tYW5kKTsKKyAgICBi
aW5kTWV0aG9kKCJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSIsICZUZXh0SW5wdXRDb250cm9s
bGVyOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk7CisgICAgYmluZE1ldGhvZCgiaGFzTWFy
a2VkVGV4dCIsICZUZXh0SW5wdXRDb250cm9sbGVyOjpoYXNNYXJrZWRUZXh0KTsKKyAgICBiaW5k
TWV0aG9kKCJpbnNlcnRUZXh0IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6Omluc2VydFRleHQpOwor
ICAgIGJpbmRNZXRob2QoIm1ha2VBdHRyaWJ1dGVkU3RyaW5nIiwgJlRleHRJbnB1dENvbnRyb2xs
ZXI6Om1ha2VBdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICBiaW5kTWV0aG9kKCJtYXJrZWRSYW5nZSIs
ICZUZXh0SW5wdXRDb250cm9sbGVyOjptYXJrZWRSYW5nZSk7CisgICAgYmluZE1ldGhvZCgic2Vs
ZWN0ZWRSYW5nZSIsICZUZXh0SW5wdXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKTsKKyAgICBi
aW5kTWV0aG9kKCJzZXRNYXJrZWRUZXh0IiwgJlRleHRJbnB1dENvbnRyb2xsZXI6OnNldE1hcmtl
ZFRleHQpOworICAgIGJpbmRNZXRob2QoInN1YnN0cmluZ0Zyb21SYW5nZSIsICZUZXh0SW5wdXRD
b250cm9sbGVyOjpzdWJzdHJpbmdGcm9tUmFuZ2UpOworICAgIGJpbmRNZXRob2QoInVubWFya1Rl
eHQiLCAmVGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJrVGV4dCk7CisgICAgYmluZE1ldGhvZCgi
dmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCIsICZUZXh0SW5wdXRDb250cm9sbGVyOjp2YWxp
ZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KTsKKyAgICBiaW5kTWV0aG9kKCJzZXRDb21wb3NpdGlv
biIsICZUZXh0SW5wdXRDb250cm9sbGVyOjpzZXRDb21wb3NpdGlvbik7Cit9CisKK3ZvaWQgVGV4
dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV93ZWJWaWV3LT5jb25maXJtQ29tcG9zaXRpb24oV2Vi
U3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkpOworfQorCit2b2lkIFRl
eHRJbnB1dENvbnRyb2xsZXI6OmRvQ29tbWFuZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisg
ICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYg
KCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgp
ID49IDEgJiYgYXJndW1lbnRzWzBdLmlzU3RyaW5nKCkpCisgICAgICAgIG1haW5GcmFtZS0+ZXhl
Y3V0ZUNvbW1hbmQoV2ViU3RyaW5nOjpmcm9tVVRGOChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkp
OworfQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnNldE1hcmtlZFRleHQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1
bHQtPnNldE51bGwoKTsKKworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDMgJiYgYXJndW1l
bnRzWzBdLmlzU3RyaW5nKCkKKyAgICAgICAgJiYgYXJndW1lbnRzWzFdLmlzTnVtYmVyKCkgJiYg
YXJndW1lbnRzWzJdLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgV2ViVmVjdG9yPFdlYkNvbXBvc2l0
aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgICAgICBtX3dlYlZpZXctPnNldENvbXBvc2l0
aW9uKFdlYlN0cmluZzo6ZnJvbVVURjgoYXJndW1lbnRzWzBdLnRvU3RyaW5nKCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVybGluZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzWzFdLnRvSW50MzIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMV0udG9JbnQzMigpICsgYXJndW1lbnRzWzJd
LnRvSW50MzIoKSk7CisgICAgfQorfQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnVubWFy
a1RleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgbV93ZWJWaWV3LT5jb25maXJtQ29tcG9zaXRpb24o
KTsKK30KKwordm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpoYXNNYXJrZWRUZXh0KGNvbnN0IENw
cEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICByZXN1bHQtPnNldE51
bGwoKTsKKworICAgIFdlYkZyYW1lKiBtYWluRnJhbWUgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgp
OworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICByZXN1bHQtPnNl
dChtYWluRnJhbWUtPmhhc01hcmtlZFRleHQoKSk7Cit9CisKK3ZvaWQgVGV4dElucHV0Q29udHJv
bGxlcjo6Y29udmVyc2F0aW9uSWRlbnRpZmllcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBW
YXJpYW50KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworfQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnN1YnN0cmlu
Z0Zyb21SYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+c2V0TnVsbCgpOwor
fQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFu
Z2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXN1bHQtPnNldE51bGwoKTsKK30KKwordm9p
ZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYXJrZWRSYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50KiByZXN1bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBX
ZWJGcmFtZSogbWFpbkZyYW1lID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoKTsKKyAgICBpZiAoIW1h
aW5GcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUmFuZ2UgcmFuZ2UgPSBtYWluRnJh
bWUtPm1hcmtlZFJhbmdlKCk7CisgICAgVmVjdG9yPGludD4gaW50QXJyYXkoMik7CisgICAgaW50
QXJyYXlbMF0gPSByYW5nZS5zdGFydE9mZnNldCgpOworICAgIGludEFycmF5WzFdID0gcmFuZ2Uu
ZW5kT2Zmc2V0KCk7CisgICAgcmVzdWx0LT5zZXQoV2ViQmluZGluZ3M6Om1ha2VJbnRBcnJheShp
bnRBcnJheSkpOworfQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnNlbGVjdGVkUmFuZ2Uo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3Vs
dC0+c2V0TnVsbCgpOworCisgICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9IG1fd2ViVmlldy0+bWFp
bkZyYW1lKCk7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdl
YlJhbmdlIHJhbmdlID0gbWFpbkZyYW1lLT5zZWxlY3Rpb25SYW5nZSgpOworICAgIFZlY3Rvcjxp
bnQ+IGludEFycmF5KDIpOworICAgIGludEFycmF5WzBdID0gcmFuZ2Uuc3RhcnRPZmZzZXQoKTsK
KyAgICBpbnRBcnJheVsxXSA9IHJhbmdlLmVuZE9mZnNldCgpOworICAgIHJlc3VsdC0+c2V0KFdl
YkJpbmRpbmdzOjptYWtlSW50QXJyYXkoaW50QXJyYXkpKTsKK30KKwordm9pZCBUZXh0SW5wdXRD
b250cm9sbGVyOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworCisgICAgV2ViRnJhbWUqIGZyYW1lID0gbV93ZWJWaWV3LT5mb2N1c2VkRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXJndW1lbnRzLnNp
emUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc051bWJlcigpIHx8ICFhcmd1bWVudHNbMV0uaXNO
dW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViUmVjdCByZWN0OworICAgIGlmICgh
ZnJhbWUtPmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKGFyZ3VtZW50c1swXS50b0ludDMyKCks
IGFyZ3VtZW50c1sxXS50b0ludDMyKCksIHJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBW
ZWN0b3I8aW50PiBpbnRBcnJheSg0KTsKKyAgICBpbnRBcnJheVswXSA9IHJlY3QueDsKKyAgICBp
bnRBcnJheVsxXSA9IHJlY3QueTsKKyAgICBpbnRBcnJheVsyXSA9IHJlY3Qud2lkdGg7CisgICAg
aW50QXJyYXlbM10gPSByZWN0LmhlaWdodDsKKyAgICByZXN1bHQtPnNldChXZWJCaW5kaW5nczo6
bWFrZUludEFycmF5KGludEFycmF5KSk7Cit9CisKK3ZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6
Y2hhcmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnZhbGlkQXR0cmlidXRl
c0Zvck1hcmtlZFRleHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworCisgICAgV2ViRnJhbWUqIG1haW5GcmFtZSA9
IG1fd2ViVmlldy0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlc3VsdC0+c2V0KCJOU1VuZGVybGluZSxOU1VuZGVybGluZUNvbG9yLE5T
TWFya2VkQ2xhdXNlU2VnbWVudCwiCisgICAgICAgICAgICAgICAgIk5TVGV4dElucHV0UmVwbGFj
ZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUiKTsKK30KKwordm9pZCBUZXh0SW5wdXRDb250cm9sbGVy
OjptYWtlQXR0cmlidXRlZFN0cmluZyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworfQorCit2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnNldENvbXBvc2l0aW9u
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7
CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDEp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNlbmRzIGEga2V5ZG93biBldmVudCB3aXRoIGtl
eSBjb2RlID0gMHhFNSB0byBlbXVsYXRlIGlucHV0IG1ldGhvZCBiZWhhdmlvci4KKyAgICBXZWJL
ZXlib2FyZEV2ZW50IGtleURvd247CisgICAga2V5RG93bi50eXBlID0gV2ViSW5wdXRFdmVudDo6
UmF3S2V5RG93bjsKKyAgICBrZXlEb3duLm1vZGlmaWVycyA9IDA7CisgICAga2V5RG93bi53aW5k
b3dzS2V5Q29kZSA9IDB4RTU7IC8vIFZLRVlfUFJPQ0VTU0tFWQorICAgIGtleURvd24uc2V0S2V5
SWRlbnRpZmllckZyb21XaW5kb3dzS2V5Q29kZSgpOworICAgIG1fd2ViVmlldy0+aGFuZGxlSW5w
dXRFdmVudChrZXlEb3duKTsKKworICAgIFdlYlZlY3RvcjxXZWJDb21wb3NpdGlvblVuZGVybGlu
ZT4gdW5kZXJsaW5lczsKKyAgICBXZWJTdHJpbmcgdGV4dChXZWJTdHJpbmc6OmZyb21VVEY4KGFy
Z3VtZW50c1swXS50b1N0cmluZygpKSk7CisgICAgbV93ZWJWaWV3LT5zZXRDb21wb3NpdGlvbih0
ZXh0LCB1bmRlcmxpbmVzLCAwLCB0ZXh0Lmxlbmd0aCgpKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJbnB1dENvbnRyb2xs
ZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RSdW5uZXIvc3JjL1RleHRJ
bnB1dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTU5YWE4YjM2ODQzNzIxZjQxY2QzNTJlZGYw
M2RmODgxZTM4ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFJ1bm5lci9zcmMvVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsNzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBUZXh0SW5wdXRDb250cm9sbGVyIGlzIGJvdW5kIHRvIHdpbmRvdy50ZXh0SW5wdXRDb250
cm9sbGVyIGluIEphdmFzY3JpcHQKKy8vIHdoZW4gRFJUIGlzIHJ1bm5pbmcuIExheW91dCB0ZXN0
cyB1c2UgaXQgdG8gZXhlcmNpc2UgdmFyaW91cyBjb3JuZXJzIG9mCisvLyB0ZXh0IGlucHV0Lgor
CisjaWZuZGVmIFRleHRJbnB1dENvbnRyb2xsZXJfaAorI2RlZmluZSBUZXh0SW5wdXRDb250cm9s
bGVyX2gKKworI2luY2x1ZGUgIkNwcEJvdW5kQ2xhc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CitjbGFzcyBXZWJWaWV3OworfQorCitjbGFzcyBUZXh0SW5wdXRDb250cm9sbGVyIDogcHVibGlj
IENwcEJvdW5kQ2xhc3MgeworcHVibGljOgorICAgIFRleHRJbnB1dENvbnRyb2xsZXIoKTsKKwor
ICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpIHsgbV93ZWJWaWV3
ID0gd2ViVmlldzsgfQorCisgICAgdm9pZCBpbnNlcnRUZXh0KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIGRvQ29tbWFuZChjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBzZXRNYXJrZWRUZXh0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHVubWFya1RleHQoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgaGFzTWFya2VkVGV4dChjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjb252ZXJzYXRpb25JZGVu
dGlmaWVyKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHN1
YnN0cmluZ0Zyb21SYW5nZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7Cisg
ICAgdm9pZCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlKGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG1hcmtlZFJhbmdlKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNlbGVjdGVkUmFuZ2UoY29uc3QgQ3BwQXJn
dW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2UoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2hh
cmFjdGVySW5kZXhGb3JQb2ludChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7
CisgICAgdm9pZCB2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0KGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIG1ha2VBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0
IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW9u
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKKworcHJpdmF0ZToKKyAgICBX
ZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKK307CisKKyNlbmRpZiAvLyBUZXh0SW5wdXRDb250
cm9sbGVyX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>