<?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>131373</bug_id>
          
          <creation_ts>2014-04-08 10:45:12 -0700</creation_ts>
          <short_desc>[GTK] Remove DumpRenderTree and GtkLauncher</short_desc>
          <delta_ts>2014-05-04 13:53:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>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>
          
          <blocked>130899</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>jarekczek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>998644</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 10:45:12 -0700</bug_when>
    <thetext>We no longer need these tools now that WebKit1 is being removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998655</commentid>
    <comment_count>1</comment_count>
      <attachid>228857</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 11:02:58 -0700</bug_when>
    <thetext>Created attachment 228857
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998845</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 15:52:54 -0700</bug_when>
    <thetext>Committed r166973: &lt;http://trac.webkit.org/changeset/166973&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006497</commentid>
    <comment_count>3</comment_count>
    <who name="Jarek Czekalski">jarekczek</who>
    <bug_when>2014-05-04 13:47:24 -0700</bug_when>
    <thetext>Tools/Scripts/run-webkit-tests complains about missing DumpRenderTree. And I thought it&apos;s just useful to dump arbitrary html using this bin.

    DumpRenderTree was not found at /mnt/m/usr/src/webkit-trunk/WebKitBuild/Release/bin/DumpRenderTree
    Build check failed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1006500</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-05-04 13:53:47 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Tools/Scripts/run-webkit-tests complains about missing DumpRenderTree. And I thought it&apos;s just useful to dump arbitrary html using this bin.

Since it linked against WebKit1, it wouldn&apos;t have compiled anyhow. One thing we can do is add GTK+ support for Scripts/run-test-runner.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228857</attachid>
            <date>2014-04-08 11:02:58 -0700</date>
            <delta_ts>2014-04-08 11:07:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131373-20140408110235.patch</filename>
            <type>text/plain</type>
            <size>262896</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2OTI2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNTQ0N2E4NGM2OGUzNTEzNmViMmM5NDRlMjkyMzU5OTFm
M2RkN2U2ZS4uMjYxMWMwZThjZTVlMGE1YTc5YmE4YTczYzM4MmFhMGJhZmRjMGNlZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQz
IEBACiAyMDE0LTA0LTA4ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4K
IAorICAgICAgICBbR1RLXSBSZW1vdmUgRHVtcFJlbmRlclRyZWUgYW5kIEd0a0xhdW5jaGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEzNzMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhl
IEdUSysgcG9ydCBvZiBEdW1wUmVuZGVyVHJlZSBhbmQgR3RrTGF1bmNoZXIuIFRoZXNlIHRvb2xz
IGFyZQorICAgICAgICBubyBsb25nZXIgbmVjZXNzYXJ5IG5vdyB0aGF0IFdlYktpdDEgR1RLKyB3
aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9QbGF0Zm9ybUdUSy5jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0R1bXBSZW5kZXJUcmVlR3RrLmg6IFJlbW92
ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0VkaXRpbmdDYWxsYmFja3MuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmg6
IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0V2ZW50U2VuZGVyLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvRXZlbnRTZW5kZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvR0NDb250cm9sbGVyR3RrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvUGl4ZWxEdW1wU3VwcG9ydEd0
ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxp
bmdXZWJLaXRXZWJWaWV3LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9n
dGsvU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9sbGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwOiBSZW1vdmVk
LgorICAgICAgICAqIEd0a0xhdW5jaGVyL0NNYWtlTGlzdHMudHh0OiBSZW1vdmVkLgorICAgICAg
ICAqIEd0a0xhdW5jaGVyL0xhdW5jaGVySW5zcGVjdG9yV2luZG93LmM6IFJlbW92ZWQuCisgICAg
ICAgICogR3RrTGF1bmNoZXIvTGF1bmNoZXJJbnNwZWN0b3JXaW5kb3cuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBHdGtMYXVuY2hlci9tYWluLmM6IFJlbW92ZWQuCisgICAgICAgICogR3RrTGF1bmNo
ZXIvc2ltcGxlLnN2ZzogUmVtb3ZlZC4KKyAgICAgICAgKiBHdGtMYXVuY2hlci90ZXh0Lmh0bWw6
IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUdUSy5jbWFrZToK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2d0ay9mb250cy9BSEVNX19fXy5UVEY6IFJlbmFt
ZWQgZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvZm9udHMvQUhFTV9fX18uVFRGLgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZ3RrL2ZvbnRzL0ZvbnRXaXRoTm9WYWxpZEVuY29kaW5n
LmZvbjogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9mb250cy9Gb250V2l0
aE5vVmFsaWRFbmNvZGluZy5mb24uCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9ndGsvZm9u
dHMvZm9udHMuY29uZjogUmVuYW1lZCBmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9mb250
cy9mb250cy5jb25mLgorCisyMDE0LTA0LTA4ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25A
aWdhbGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBSZW1vdmUgV2ViS2l0MSB1bml0IHRlc3RzCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzEzNTkKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9DTWFrZUxpc3RzLnR4dApp
bmRleCBlNzUwOTNmMzhmZDQ1ZTFlNTIyZDNmODVjOWI1ZTIzNmU2OTVkYjE3Li4zNTJiMWI4MDY2
ZGEwZTA3N2EyZDJlZjVmOTA3YmMxMTg0NDVmOGE5IDEwMDY0NAotLS0gYS9Ub29scy9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9DTWFrZUxpc3RzLnR4dApAQCAtMjEsMTAgKzIxLDYgQEAgZWxz
ZWlmICgiJHtQT1JUfSIgU1RSRVFVQUwgIkdUSyIpCiAgICAgICAgIGFkZF9zdWJkaXJlY3Rvcnko
TWluaUJyb3dzZXIvZ3RrKQogICAgICAgICBhZGRfc3ViZGlyZWN0b3J5KFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0aykKICAgICBlbmRpZiAoKQotICAgIGlmIChFTkFCTEVfV0VCS0lUKQot
ICAgICAgICBhZGRfc3ViZGlyZWN0b3J5KEd0a0xhdW5jaGVyKQotICAgICAgICBhZGRfc3ViZGly
ZWN0b3J5KER1bXBSZW5kZXJUcmVlKQotICAgIGVuZGlmICgpCiAgICAgYWRkX3N1YmRpcmVjdG9y
eShEdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4pCiBlbHNlaWYgKCIke1BPUlR9IiBT
VFJFUVVBTCAiV2luQ0UiKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoV2luQ0VMYXVuY2hlcikKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvUGxhdGZvcm1HVEsuY21ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJlY2RjMjVjN2ZiYzQxYmU0Y2E2NzYzMzEzMmI2Y2FjMDM2MTQ2OTguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvUGxhdGZvcm1HVEsuY21ha2UKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi1saXN0
KEFQUEVORCBEdW1wUmVuZGVyVHJlZV9TT1VSQ0VTCi0gICAgYXRrL0FjY2Vzc2liaWxpdHlDYWxs
YmFja3NBdGsuY3BwCi0gICAgYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcAotICAg
IGF0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKLSAgICBhdGsvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKLQotICAgIGNhaXJvL1BpeGVsRHVtcFN1cHBvcnRD
YWlyby5jcHAKLQotICAgIGd0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckd0ay5jcHAKLSAgICBn
dGsvRHVtcFJlbmRlclRyZWUuY3BwCi0gICAgZ3RrL0VkaXRpbmdDYWxsYmFja3MuY3BwCi0gICAg
Z3RrL0V2ZW50U2VuZGVyLmNwcAotICAgIGd0ay9HQ0NvbnRyb2xsZXJHdGsuY3BwCi0gICAgZ3Rr
L1BpeGVsRHVtcFN1cHBvcnRHdGsuY3BwCi0gICAgZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJW
aWV3LmNwcAotICAgIGd0ay9UZXN0UnVubmVyR3RrLmNwcAotICAgIGd0ay9UZXh0SW5wdXRDb250
cm9sbGVyLmNwcAotICAgIGd0ay9Xb3JrUXVldWVJdGVtR3RrLmNwcAotKQotCi1saXN0KEFQUEVO
RCBEdW1wUmVuZGVyVHJlZV9MSUJSQVJJRVMKLSAgICBXZWJDb3JlUGxhdGZvcm1HVEsKLSAgICAk
e0FUS19MSUJSQVJJRVN9Ci0gICAgJHtDQUlST19MSUJSQVJJRVN9Ci0gICAgJHtGT05UQ09ORklH
X0xJQlJBUklFU30KLSAgICAke0dMSUJfTElCUkFSSUVTfQotICAgICR7R1RLX0xJQlJBUklFU30K
LSAgICAke0xJQlNPVVBfTElCUkFSSUVTfQotKQotCi1saXN0KEFQUEVORCBEdW1wUmVuZGVyVHJl
ZV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfRElSfQotICAgICR7
REVSSVZFRF9TT1VSQ0VTX1dFQktJVEdUS19ESVJ9Ci0gICAgJHtXRUJLSVRfRElSfS9ndGsKLSAg
ICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsKLSAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRl
clRyZWUvYXRrCi0gICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2NhaXJvCi0gICAgJHtU
T09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2d0awotICAgICR7QVRLX0lOQ0xVREVfRElSU30KLSAg
ICAke0NBSVJPX0lOQ0xVREVfRElSU30KLSAgICAke0ZPTlRDT05GSUdfSU5DTFVERV9ESVJ9Ci0g
ICAgJHtHTElCX0lOQ0xVREVfRElSU30KLSAgICAke0dUS19JTkNMVURFX0RJUlN9Ci0gICAgJHtM
SUJTT1VQX0lOQ0xVREVfRElSU30KLSkKLQotYWRkX2RlZmluaXRpb25zKAotICAgIC1EVEVTVF9Q
TFVHSU5fRElSPSIke0NNQUtFX0xJQlJBUllfT1VUUFVUX0RJUkVDVE9SWX0iCi0gICAgLURGT05U
U19DT05GX0RJUj0iJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2d0ay9mb250cyIKLSAgICAt
RFRPUF9MRVZFTF9ESVI9IiR7Q01BS0VfU09VUkNFX0RJUn0iCi0pCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyR3RrLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlMWQ5NDYwNGNmMGMwYzZhNGUxZDcyOGQ3ZTMx
ZTk2NmM3ZTVhZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEhBVkUoQUNDRVNT
SUJJTElUWSkKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgiCi0KLSNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCi0KLSNpbmNsdWRlIDxhdGsvYXRr
Lmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLSNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKLXsKLSAgICBBdGtP
YmplY3QqIGFjY2Vzc2libGUgPSAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGb2N1c2Vk
QWNjZXNzaWJsZUVsZW1lbnQobWFpbkZyYW1lKTsKLSAgICBpZiAoIWFjY2Vzc2libGUpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoYWNjZXNz
aWJsZSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJvb3RFbGVtZW50KCkKLXsKLSAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OmdldFJvb3RBY2Nlc3NpYmxlRWxlbWVudChtYWluRnJhbWUpOwot
ICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKLX0KLQotQWNjZXNzaWJpbGl0eVVJRWxl
bWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3Ry
aW5nUmVmIGlkKQotewotICAgIEF0a09iamVjdCogcm9vdCA9IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6Z2V0Um9vdEFjY2Vzc2libGVFbGVtZW50KG1haW5GcmFtZSk7Ci0gICAgaWYgKCFyb290
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGlkKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBpZEJ1
ZmZlcihzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhpZCwgaWRCdWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotCi0g
ICAgQXRrT2JqZWN0KiByZXN1bHQgPSBjaGlsZEVsZW1lbnRCeUlkKHJvb3QsIGlkQnVmZmVyLmdl
dCgpKTsKLSAgICBpZiAoQVRLX0lTX09CSkVDVChyZXN1bHQpKQotICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChyZXN1bHQpOwotCi0gICAgcmV0dXJuIDA7Ci0KLX0KLQotI2Vu
ZGlmIC8vIEhBVkUoQUNDRVNTSUJJTElUWSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVt
cFJlbmRlclRyZWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWUzNjczNjAy
ZWQ3MGU5Y2VlZTAwNGQ1N2IwNGI1MWE1YzUzY2MwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVy
VHJlZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBbHAgVG9rZXIgPGFscEBudWFudGkuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEphbiBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0K
LSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkVkaXRpbmdD
YWxsYmFja3MuaCIKLSNpbmNsdWRlICJFdmVudFNlbmRlci5oIgotI2luY2x1ZGUgIkdDQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRlICJTZWxmU2Ny
b2xsaW5nV2ViS2l0V2ViVmlldy5oIgotI2luY2x1ZGUgIlRlc3RSdW5uZXIuaCIKLSNpbmNsdWRl
ICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVRlc3RTdXBwb3J0LmgiCi0j
aW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9HVW5pcXVlUHRyU291cC5oPgotI2luY2x1ZGUgPGNhc3NlcnQ+Ci0j
aW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGdldG9wdC5o
PgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsb2NhbGUuaD4KLSNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HbGliVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBQTEFURk9STShYMTEpCi0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmln
Lmg+Ci0jZW5kaWYKLQotCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1leHRlcm4gIkMiIHsKLS8v
IFRoaXMgQVBJIGlzIG5vdCB5ZXQgcHVibGljLgotZXh0ZXJuIGdjaGFyKiB3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9nZXRfdGFyZ2V0KFdlYktpdFdlYkhpc3RvcnlJdGVtKik7Ci1leHRlcm4gZ2Jv
b2xlYW4gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1faXNfdGFyZ2V0X2l0ZW0oV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qKTsKLWV4dGVybiBHTGlzdCogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2No
aWxkcmVuKFdlYktpdFdlYkhpc3RvcnlJdGVtKik7Ci1leHRlcm4gdm9pZCB3ZWJraXRfd2ViX3Nl
dHRpbmdzX2FkZF9leHRyYV9wbHVnaW5fZGlyZWN0b3J5KFdlYktpdFdlYlZpZXcqIHZpZXcsIGNv
bnN0IGdjaGFyKiBkaXJlY3RvcnkpOwotZXh0ZXJuIGdjaGFyKiB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF9yZXNwb25zZV9taW1lX3R5cGUoV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKLX0KLQotdm9sYXRp
bGUgYm9vbCBkb25lOwotc3RhdGljIGJvb2wgcHJpbnRTZXBhcmF0b3JzOwotc3RhdGljIGludCBk
dW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSBmYWxzZTsKLXN0YXRpYyBib29sIGR1bXBQaXhlbHNGb3JD
dXJyZW50VGVzdDsKLXN0YXRpYyBpbnQgZHVtcFRyZWUgPSAxOwotc3RhdGljIGludCB1c2VUaW1l
b3V0V2F0Y2hkb2cgPSAxOwotCi0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotQWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIqIGF4Q29udHJvbGxlciA9IDA7Ci0jZW5kaWYKLVJlZlB0cjxUZXN0UnVubmVy
PiBnVGVzdFJ1bm5lcjsKLXN0YXRpYyBHQ0NvbnRyb2xsZXIqIGdjQ29udHJvbGxlciA9IDA7Ci1z
dGF0aWMgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKLXN0YXRpYyBHdGtXaWRnZXQqIHdpbmRvdzsK
LXN0YXRpYyBHdGtXaWRnZXQqIGNvbnRhaW5lcjsKLXN0YXRpYyBHdGtXaWRnZXQqIHdlYkluc3Bl
Y3RvcldpbmRvdzsKLVdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWUgPSAwOwotV2ViS2l0V2ViRnJh
bWUqIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci1ndWludCB3YWl0VG9EdW1wV2F0Y2hkb2cgPSAwOwot
Ym9vbCB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci0KLS8vIFRoaXMgaXMgYSBsaXN0IG9mIG9wZW5l
ZCB3ZWJ2aWV3cwotR1NMaXN0KiB3ZWJWaWV3TGlzdCA9IDA7Ci0KLS8vIGN1cnJlbnQgYi9mIGl0
ZW0gYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgdGVzdAotc3RhdGljIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBwcmV2VGVzdEJGSXRlbSA9IE5VTEw7Ci0KLWNvbnN0IHVuc2lnbmVkIGhpc3RvcnlJ
dGVtSW5kZW50ID0gODsKLQotc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0
TGluZSk7Ci0KLXN0YXRpYyB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVudChXZWJLaXRXZWJGcmFt
ZSosIFdlYktpdFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgY2hhciogdXJsKTsKLQotc3RhdGljIGJv
b2wgc2hvdWxkTG9nRnJhbWVMb2FkRGVsZWdhdGVzKGNvbnN0IHN0cmluZyYgcGF0aE9yVVJMKQot
ewotICAgIHJldHVybiBwYXRoT3JVUkwuZmluZCgibG9hZGluZy8iKSAhPSBzdHJpbmc6Om5wb3M7
Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZER1bXBBc1RleHQoY29uc3Qgc3RyaW5nJiBwYXRoT3JV
UkwpCi17Ci0gICAgcmV0dXJuIHBhdGhPclVSTC5maW5kKCJkdW1wQXNUZXh0LyIpICE9IHN0cmlu
Zzo6bnBvczsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKGNv
bnN0IHN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKLXsKLSAgICBXZWJL
aXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9kb21fZG9jdW1l
bnQoZnJhbWUpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdl
YktpdERPTURPTVdpbmRvdyogZG9tV2luZG93ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZGVm
YXVsdF92aWV3KGRvY3VtZW50KTsKLSAgICBpZiAoIWRvbVdpbmRvdykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZ2xvbmcgeCA9IHdlYmtpdF9kb21fZG9tX3dpbmRvd19nZXRfcGFnZV94X29mZnNl
dChkb21XaW5kb3cpOwotICAgIGdsb25nIHkgPSB3ZWJraXRfZG9tX2RvbV93aW5kb3dfZ2V0X3Bh
Z2VfeV9vZmZzZXQoZG9tV2luZG93KTsKLQotICAgIGlmIChhYnMoeCkgPiAwIHx8IGFicyh5KSA+
IDApIHsKLSAgICAgICAgaWYgKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3BhcmVudChmcmFtZSkpCi0g
ICAgICAgICAgICBwcmludGYoImZyYW1lICclcycgIiwgd2Via2l0X3dlYl9mcmFtZV9nZXRfbmFt
ZShmcmFtZSkpOwotICAgICAgICBwcmludGYoInNjcm9sbGVkIHRvICVsZCwlbGRcbiIsIHgsIHkp
OwotICAgIH0KLQotICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnMoKSkgewotICAgICAgICBHU0xpc3QqIGNoaWxkcmVuID0gRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpnZXRGcmFtZUNoaWxkcmVuKGZyYW1lKTsKLSAgICAgICAgZm9yIChHU0xpc3QqIGNo
aWxkID0gY2hpbGRyZW47IGNoaWxkOyBjaGlsZCA9IGdfc2xpc3RfbmV4dChjaGlsZCkpCi0gICAg
ICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihzdGF0aWNfY2FzdDxXZWJLaXRXZWJGcmFt
ZSo+KGNoaWxkLT5kYXRhKSk7Ci0gICAgICAgIGdfc2xpc3RfZnJlZShjaGlsZHJlbik7Ci0gICAg
fQotfQotCi12b2lkIGRpc3BsYXlXZWJWaWV3KCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OmZvcmNlV2ViVmlld1BhaW50KHdlYlZpZXcpOwotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6c2V0VHJhY2tzUmVwYWludHMobWFpbkZyYW1lLCB0cnVlKTsKLSAgICBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGs6OnJlc2V0VHJhY2tlZFJlcGFpbnRzKG1haW5GcmFtZSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGFwcGVuZFN0cmluZyhnY2hhciomIHRhcmdldCwgY29uc3QgZ2NoYXIqIHN0
cmluZykKLXsKLSAgICBnY2hhciogb2xkU3RyaW5nID0gdGFyZ2V0OwotICAgIHRhcmdldCA9IGdf
c3RyY29uY2F0KHRhcmdldCwgc3RyaW5nLCBOVUxMKTsKLSAgICBnX2ZyZWUob2xkU3RyaW5nKTsK
LX0KLQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUd0a0ZvbnRTZXR0aW5ncyhjb25zdCBjaGFyKiB0
ZXN0VVJMKQotewotICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRf
ZGVmYXVsdCgpOwotICAgIGlmICghc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLSAgICBnX29i
amVjdF9zZXQoc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICJndGsteGZ0LWRwaSIsIDk4MzA0
LCAvLyBUaGlzIGlzIDk2ICogMTAyNCBvciA5NiBEUEkgYWNjb3JkaW5nIHRvIHRoZSBHVEsrIGRv
Y3MuCi0gICAgICAgICAgICAgICAgICJndGsteGZ0LWFudGlhbGlhcyIsIDEsCi0gICAgICAgICAg
ICAgICAgICJndGsteGZ0LWhpbnRpbmciLCAwLAotICAgICAgICAgICAgICAgICAiZ3RrLWZvbnQt
bmFtZSIsICJMaWJlcmF0aW9uIFNhbnMgMTIiLAotICAgICAgICAgICAgICAgICAiZ3RrLWljb24t
dGhlbWUtbmFtZSIsICJnbm9tZSIsCi0gICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGdka19z
Y3JlZW5fc2V0X3Jlc29sdXRpb24oZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpLCA5Ni4wKTsKLQot
ICAgIC8vIE9uZSB0ZXN0IG5lZWRzIHN1YnBpeGVsIGFudGktYWxpYXNpbmcgdHVybmVkIG9uLCBi
dXQgZ2VuZXJhbGx5IHdlCi0gICAgLy8gd2FudCBhbGwgdGV4dCBpbiBvdGhlciB0ZXN0cyB0byB1
c2UgdG8gZ3JheXNjYWxlIGFudGktYWxpYXNpbmcuCi0gICAgaWYgKHRlc3RVUkwgJiYgc3Ryc3Ry
KHRlc3RVUkwsICJ4c2V0dGluZ3NfYW50aWFsaWFzX3NldHRpbmdzLmh0bWwiKSkKLSAgICAgICAg
Z19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZ3RrLXhmdC1yZ2JhIiwgInJnYiIsIE5VTEwpOwotICAg
IGVsc2UKLSAgICAgICAgZ19vYmplY3Rfc2V0KHNldHRpbmdzLCAiZ3RrLXhmdC1yZ2JhIiwgIm5v
bmUiLCBOVUxMKTsKLX0KLQotQ1N0cmluZyBnZXRUb3BMZXZlbFBhdGgoKQotewotICAgIGlmIChj
b25zdCBnY2hhciogdG9wTGV2ZWwgPSBnX2dldGVudigiV0VCS0lUX1RPUF9MRVZFTCIpKQotICAg
ICAgICByZXR1cm4gdG9wTGV2ZWw7Ci0KLSAgICBnX3NldGVudigiV0VCS0lUX1RPUF9MRVZFTCIs
IFRPUF9MRVZFTF9ESVIsIEZBTFNFKTsKLSAgICByZXR1cm4gVE9QX0xFVkVMX0RJUjsKLX0KLQot
Q1N0cmluZyBnZXRPdXRwdXREaXIoKQotewotICAgIGNvbnN0IGNoYXIqIHdlYmtpdE91dHB1dERp
ciA9IGdfZ2V0ZW52KCJXRUJLSVRfT1VUUFVURElSIik7Ci0gICAgaWYgKHdlYmtpdE91dHB1dERp
cikKLSAgICAgICAgcmV0dXJuIHdlYmtpdE91dHB1dERpcjsKLQotICAgIENTdHJpbmcgdG9wTGV2
ZWxQYXRoID0gZ2V0VG9wTGV2ZWxQYXRoKCk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBvdXRwdXRE
aXIoZ19idWlsZF9maWxlbmFtZSh0b3BMZXZlbFBhdGguZGF0YSgpLCAiV2ViS2l0QnVpbGQiLCBO
VUxMKSk7Ci0gICAgcmV0dXJuIG91dHB1dERpci5nZXQoKTsKLX0KLQotc3RhdGljIENTdHJpbmcg
Z2V0Rm9udHNQYXRoKCkKLXsKLSAgICBDU3RyaW5nIHdlYmtpdE91dHB1dERpciA9IGdldE91dHB1
dERpcigpOwotICAgIEdVbmlxdWVQdHI8Y2hhcj4gZm9udHNQYXRoKGdfYnVpbGRfZmlsZW5hbWUo
d2Via2l0T3V0cHV0RGlyLmRhdGEoKSwgIkRlcGVuZGVuY2llcyIsICJSb290IiwgIndlYmtpdGd0
ay10ZXN0LWZvbnRzIiwgTlVMTCkpOwotICAgIGlmIChnX2ZpbGVfdGVzdChmb250c1BhdGguZ2V0
KCksIHN0YXRpY19jYXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RF
U1RfSVNfRElSKSkpCi0gICAgICAgIHJldHVybiBmb250c1BhdGguZ2V0KCk7Ci0KLSAgICAvLyBU
cnkgYWx0ZXJuYXRpdmUgZm9udHMgcGF0aC4KLSAgICBmb250c1BhdGgucmVzZXQoZ19idWlsZF9m
aWxlbmFtZSh3ZWJraXRPdXRwdXREaXIuZGF0YSgpLCAid2Via2l0Z3RrLXRlc3QtZm9udHMiLCBO
VUxMKSk7Ci0gICAgaWYgKGdfZmlsZV90ZXN0KGZvbnRzUGF0aC5nZXQoKSwgc3RhdGljX2Nhc3Q8
R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIpKSkKLSAg
ICAgICAgcmV0dXJuIGZvbnRzUGF0aC5nZXQoKTsKLQotICAgIHJldHVybiBDU3RyaW5nKCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVGb250cyhjb25zdCBjaGFyKiB0ZXN0VVJMID0gMCkK
LXsKLSNpZiBQTEFURk9STShYMTEpCi0gICAgaW5pdGlhbGl6ZUd0a0ZvbnRTZXR0aW5ncyh0ZXN0
VVJMKTsKLQotICAgIEZjSW5pdCgpOwotCi0gICAgLy8gSWYgYSB0ZXN0IHJlc3VsdGVkIGEgZm9u
dCBiZWluZyBhZGRlZCBvciByZW1vdmVkIHZpYSB0aGUgQGZvbnQtZmFjZSBydWxlLCB0aGVuCi0g
ICAgLy8gd2Ugd2FudCB0byByZXNldCB0aGUgRm9udENvbmZpZyBjb25maWd1cmF0aW9uIHRvIHBy
ZXZlbnQgaXQgZnJvbSBhZmZlY3Rpbmcgb3RoZXIgdGVzdHMuCi0gICAgc3RhdGljIGludCBudW1G
b250cyA9IDA7Ci0gICAgRmNGb250U2V0KiBhcHBGb250U2V0ID0gRmNDb25maWdHZXRGb250cygw
LCBGY1NldEFwcGxpY2F0aW9uKTsKLSAgICBpZiAoYXBwRm9udFNldCAmJiBudW1Gb250cyAmJiBh
cHBGb250U2V0LT5uZm9udCA9PSBudW1Gb250cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
TG9hZCBvdXIgY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBzZXRzIHVwIHByb3BlciBhbGlhc2Vz
IGZvciBmYW1pbHkKLSAgICAvLyBuYW1lcyBsaWtlIHNhbnMsIHNlcmlmIGFuZCBtb25vc3BhY2Uu
Ci0gICAgRmNDb25maWcqIGNvbmZpZyA9IEZjQ29uZmlnQ3JlYXRlKCk7Ci0gICAgR1VuaXF1ZVB0
cjxnY2hhcj4gZm9udENvbmZpZ0ZpbGVuYW1lKGdfYnVpbGRfZmlsZW5hbWUoRk9OVFNfQ09ORl9E
SVIsICJmb250cy5jb25mIiwgbnVsbHB0cikpOwotICAgIGlmICghRmNDb25maWdQYXJzZUFuZExv
YWQoY29uZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihmb250Q29uZmlnRmlsZW5hbWUu
Z2V0KCkpLCB0cnVlKSkKLSAgICAgICAgZ19lcnJvcigiQ291bGRuJ3QgbG9hZCBmb250IGNvbmZp
Z3VyYXRpb24gZmlsZSBmcm9tOiAlcyIsIGZvbnRDb25maWdGaWxlbmFtZS5nZXQoKSk7Ci0KLSAg
ICBDU3RyaW5nIGZvbnRzUGF0aCA9IGdldEZvbnRzUGF0aCgpOwotICAgIGlmIChmb250c1BhdGgu
aXNOdWxsKCkpCi0gICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBsb2NhdGUgdGVzdCBmb250cyBh
dCAkV0VCS0lUX1RPUF9MRVZFTC9XZWJLaXRCdWlsZC9EZXBlbmRlbmNpZXMvUm9vdC93ZWJraXRn
dGstdGVzdC1mb250cy4gIgotICAgICAgICAgICAgIldFQktJVF9UT1BfTEVWRUwgaXMgeW91ciBX
ZWJLaXQgY2hlY2tvdXQgYnkgZGVmYXVsdCwgYW5kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRp
bmcgaXQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuIik7Ci0KLSAgICBHVW5pcXVlUHRyPEdE
aXI+IGZvbnRzRGlyZWN0b3J5KGdfZGlyX29wZW4oZm9udHNQYXRoLmRhdGEoKSwgMCwgbnVsbHB0
cikpOwotICAgIHdoaWxlIChjb25zdCBjaGFyKiBkaXJlY3RvcnlFbnRyeSA9IGdfZGlyX3JlYWRf
bmFtZShmb250c0RpcmVjdG9yeS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKCFnX3N0cl9oYXNfc3Vm
Zml4KGRpcmVjdG9yeUVudHJ5LCAiLnR0ZiIpICYmICFnX3N0cl9oYXNfc3VmZml4KGRpcmVjdG9y
eUVudHJ5LCAiLm90ZiIpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEdVbmlxdWVQ
dHI8Z2NoYXI+IGZvbnRQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZm9udHNQYXRoLmRhdGEoKSwgZGly
ZWN0b3J5RW50cnksIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRG
aWxlKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZm9udFBhdGguZ2V0
KCkpKSkKLSAgICAgICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwg
Zm9udFBhdGguZ2V0KCkpOwotCi0gICAgfQotCi0gICAgLy8gQWhlbSBpcyB1c2VkIGJ5IG1hbnkg
bGF5b3V0IHRlc3RzLgotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGFoZW1Gb250RmlsZW5hbWUoZ19i
dWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJUiwgIkFIRU1fX19fLlRURiIsIG51bGxwdHIpKTsK
LSAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0
PEZjQ2hhcjgqPihhaGVtRm9udEZpbGVuYW1lLmdldCgpKSkpCi0gICAgICAgIGdfZXJyb3IoIkNv
dWxkIG5vdCBsb2FkIGZvbnQgYXQgJXMhIiwgYWhlbUZvbnRGaWxlbmFtZS5nZXQoKSk7IAotCi0g
ICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gOTsgaSsrKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGZvbnRGaWxlbmFtZShnX3N0cmR1cF9wcmludGYoIldlYktpdFdlaWdodFdhdGNoZXIlaTAw
LnR0ZiIsIGkpKTsKLSAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZm9udFBhdGgoZ19idWlsZF9m
aWxlbmFtZShGT05UU19DT05GX0RJUiwgIi4uIiwgIi4uIiwgImZvbnRzIiwgZm9udEZpbGVuYW1l
LmdldCgpLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShj
b25maWcsIHJlaW50ZXJwcmV0X2Nhc3Q8RmNDaGFyOCo+KGZvbnRQYXRoLmdldCgpKSkpCi0gICAg
ICAgICAgICBnX2Vycm9yKCJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzISIsIGZvbnRQYXRoLmdl
dCgpKTsgCi0gICAgfQotCi0gICAgLy8gQSBmb250IHdpdGggbm8gdmFsaWQgRm9udGNvbmZpZyBl
bmNvZGluZyB0byB0ZXN0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NzQ1MgotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZvbnRXaXRoTm9WYWxpZEVuY29kaW5nRmlsZW5h
bWUoZ19idWlsZF9maWxlbmFtZShGT05UU19DT05GX0RJUiwgIkZvbnRXaXRoTm9WYWxpZEVuY29k
aW5nLmZvbiIsIG51bGxwdHIpKTsKLSAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29u
ZmlnLCByZWludGVycHJldF9jYXN0PEZjQ2hhcjgqPihmb250V2l0aE5vVmFsaWRFbmNvZGluZ0Zp
bGVuYW1lLmdldCgpKSkpCi0gICAgICAgIGdfZXJyb3IoIkNvdWxkIG5vdCBsb2FkIGZvbnQgYXQg
JXMhIiwgZm9udFdpdGhOb1ZhbGlkRW5jb2RpbmdGaWxlbmFtZS5nZXQoKSk7IAotCi0gICAgaWYg
KCFGY0NvbmZpZ1NldEN1cnJlbnQoY29uZmlnKSkKLSAgICAgICAgZ19lcnJvcigiQ291bGQgbm90
IHNldCB0aGUgY3VycmVudCBmb250IGNvbmZpZ3VyYXRpb24hIik7Ci0KLSAgICBudW1Gb250cyA9
IEZjQ29uZmlnR2V0Rm9udHMoY29uZmlnLCBGY1NldEFwcGxpY2F0aW9uKS0+bmZvbnQ7Ci0jZW5k
aWYKLX0KLQotc3RhdGljIGdjaGFyKiBkdW1wRnJhbWVzQXNUZXh0KFdlYktpdFdlYkZyYW1lKiBm
cmFtZSkKLXsKLSAgICBnY2hhciogcmVzdWx0ID0gMDsKLQotICAgIC8vIEFkZCBoZWFkZXIgZm9y
IGFsbCBidXQgdGhlIG1haW4gZnJhbWUuCi0gICAgYm9vbCBpc01haW5GcmFtZSA9ICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykgPT0gZnJhbWUpOwotCi0gICAgQ1N0cmlu
ZyBpbm5lclRleHQgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldElubmVyVGV4dChmcmFt
ZSk7Ci0gICAgaWYgKGlzTWFpbkZyYW1lKQotICAgICAgICByZXN1bHQgPSBnX3N0cmR1cF9wcmlu
dGYoIiVzXG4iLCBpbm5lclRleHQuZGF0YSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY29uc3Qg
Z2NoYXIqIGZyYW1lTmFtZSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25hbWUoZnJhbWUpOwotICAg
ICAgICByZXN1bHQgPSBnX3N0cmR1cF9wcmludGYoIlxuLS0tLS0tLS1cbkZyYW1lOiAnJXMnXG4t
LS0tLS0tLVxuJXNcbiIsIGZyYW1lTmFtZSwgaW5uZXJUZXh0LmRhdGEoKSk7Ci0gICAgfQotCi0g
ICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQ2hpbGRGcmFtZXNBc1RleHQoKSkgewotICAgICAgICBH
U0xpc3QqIGNoaWxkcmVuID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnZXRGcmFtZUNoaWxk
cmVuKGZyYW1lKTsKLSAgICAgICAgZm9yIChHU0xpc3QqIGNoaWxkID0gY2hpbGRyZW47IGNoaWxk
OyBjaGlsZCA9IGdfc2xpc3RfbmV4dChjaGlsZCkpIHsKLSAgICAgICAgICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGNoaWxkRGF0YShkdW1wRnJhbWVzQXNUZXh0KHN0YXRpY19jYXN0PFdlYktpdFdlYkZy
YW1lKj4oY2hpbGQtPmRhdGEpKSk7Ci0gICAgICAgICAgICBhcHBlbmRTdHJpbmcocmVzdWx0LCBj
aGlsZERhdGEuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGdfc2xpc3RfZnJlZShjaGlsZHJl
bik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGdpbnQgY29tcGFy
ZUhpc3RvcnlJdGVtcyhncG9pbnRlciogaXRlbTEsIGdwb2ludGVyKiBpdGVtMikKLXsKLSAgICBH
VW5pcXVlUHRyPGdjaGFyPiBmaXJzdEl0ZW1UYXJnZXQod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
Z2V0X3RhcmdldChXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShpdGVtMSkpKTsKLSAgICBHVW5pcXVl
UHRyPGdjaGFyPiBzZWNvbmRJdGVtVGFyZ2V0KHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90
YXJnZXQoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oaXRlbTIpKSk7Ci0gICAgcmV0dXJuIGdfYXNj
aWlfc3RyY2FzZWNtcChmaXJzdEl0ZW1UYXJnZXQuZ2V0KCksIHNlY29uZEl0ZW1UYXJnZXQuZ2V0
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wSGlzdG9yeUl0ZW0oV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIGl0ZW0sIGludCBpbmRlbnQsIGJvb2wgY3VycmVudCkKLXsKLSAgICBBU1NFUlQoaXRlbSAh
PSBOVUxMKTsKLSAgICBpbnQgc3RhcnQgPSAwOwotICAgIGdfb2JqZWN0X3JlZihpdGVtKTsKLSAg
ICBpZiAoY3VycmVudCkgewotICAgICAgICBwcmludGYoImN1cnItPiIpOwotICAgICAgICBzdGFy
dCA9IDY7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGluZGVudDsgaSsrKQot
ICAgICAgICBwdXRjaGFyKCcgJyk7Ci0KLSAgICAvLyBub3JtYWxpemUgZmlsZSBVUkxzLgotICAg
IGNvbnN0IGdjaGFyKiB1cmkgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKGl0ZW0p
OwotICAgIGdjaGFyKiB1cmlTY2hlbWUgPSBnX3VyaV9wYXJzZV9zY2hlbWUodXJpKTsKLSAgICBp
ZiAoZ19zdHJjbXAwKHVyaVNjaGVtZSwgImZpbGUiKSA9PSAwKSB7Ci0gICAgICAgIGdjaGFyKiBw
b3MgPSBnX3N0cnN0cl9sZW4odXJpLCAtMSwgIi9MYXlvdXRUZXN0cy8iKTsKLSAgICAgICAgaWYg
KCFwb3MpIHsKLSAgICAgICAgICAgIGdfZnJlZSh1cmlTY2hlbWUpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgR1N0cmluZyogcmVzdWx0ID0gZ19zdHJpbmdfc2l6
ZWRfbmV3KHN0cmxlbih1cmkpKTsKLSAgICAgICAgcmVzdWx0ID0gZ19zdHJpbmdfYXBwZW5kKHJl
c3VsdCwgIihmaWxlIHRlc3QpOiIpOwotICAgICAgICByZXN1bHQgPSBnX3N0cmluZ19hcHBlbmQo
cmVzdWx0LCBwb3MgKyBzdHJsZW4oIi9MYXlvdXRUZXN0cy8iKSk7Ci0gICAgICAgIHByaW50Zigi
JXMiLCByZXN1bHQtPnN0cik7Ci0gICAgICAgIGdfc3RyaW5nX2ZyZWUocmVzdWx0LCBUUlVFKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcHJpbnRmKCIlcyIsIHVyaSk7Ci0KLSAgICBnX2ZyZWUodXJp
U2NoZW1lKTsKLQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRhcmdldCh3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfdGFyZ2V0KGl0ZW0pKTsKLSAgICBpZiAodGFyZ2V0LmdldCgpICYmIHN0cmxl
bih0YXJnZXQuZ2V0KCkpID4gMCkKLSAgICAgICAgcHJpbnRmKCIgKGluIGZyYW1lIFwiJXNcIiki
LCB0YXJnZXQuZ2V0KCkpOwotICAgIGlmICh3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9pc190YXJn
ZXRfaXRlbShpdGVtKSkKLSAgICAgICAgcHJpbnRmKCIgICoqbmF2IHRhcmdldCoqIik7Ci0gICAg
cHV0Y2hhcignXG4nKTsKLQotICAgIGlmIChHTGlzdCoga2lkcyA9IHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX2dldF9jaGlsZHJlbihpdGVtKSkgewotICAgICAgICAvLyBtdXN0IHNvcnQgdG8gZWxp
bWluYXRlIGFyYml0cmFyeSByZXN1bHQgb3JkZXJpbmcgd2hpY2ggZGVmZWF0cyByZXByb2R1Y2li
bGUgdGVzdGluZwotICAgICAgICBmb3IgKEdMaXN0KiBraWQgPSBnX2xpc3Rfc29ydChraWRzLCAo
R0NvbXBhcmVGdW5jKSBjb21wYXJlSGlzdG9yeUl0ZW1zKTsga2lkOyBraWQgPSBnX2xpc3RfbmV4
dChraWQpKSB7Ci0gICAgICAgICAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbSA9IFdFQktJ
VF9XRUJfSElTVE9SWV9JVEVNKGtpZC0+ZGF0YSk7Ci0gICAgICAgICAgICBkdW1wSGlzdG9yeUl0
ZW0oaXRlbSwgaW5kZW50ICsgNCwgRkFMU0UpOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYo
aXRlbSk7Ci0gICAgICAgIH0KLSAgICAgICAgZ19saXN0X2ZyZWUoa2lkcyk7Ci0gICAgfQotICAg
IGdfb2JqZWN0X3VucmVmKGl0ZW0pOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wQmFja0ZvcndhcmRM
aXN0Rm9yV2ViVmlldyhXZWJLaXRXZWJWaWV3KiB2aWV3KQotewotICAgIHByaW50ZigiXG49PT09
PT09PT09PT09PSBCYWNrIEZvcndhcmQgTGlzdCA9PT09PT09PT09PT09PVxuIik7Ci0gICAgV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiBiZkxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tf
Zm9yd2FyZF9saXN0KHZpZXcpOwotCi0gICAgLy8gUHJpbnQgb3V0IGFsbCBpdGVtcyBpbiB0aGUg
bGlzdCBhZnRlciBwcmV2VGVzdEJGSXRlbSwgd2hpY2ggd2FzIGZyb20gdGhlIHByZXZpb3VzIHRl
c3QKLSAgICAvLyBHYXRoZXIgaXRlbXMgZnJvbSB0aGUgZW5kIG9mIHRoZSBsaXN0LCB0aGUgcHJp
bnQgdGhlbSBvdXQgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0Ci0gICAgR0xpc3QqIGl0ZW1zVG9Qcmlu
dCA9IE5VTEw7Ci0gICAgZ2ludCBmb3J3YXJkTGlzdENvdW50ID0gd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgoYmZMaXN0KTsKLSAgICBmb3IgKGludCBpID0g
Zm9yd2FyZExpc3RDb3VudDsgaSA+IDA7IGktLSkgewotICAgICAgICBXZWJLaXRXZWJIaXN0b3J5
SXRlbSogaXRlbSA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGJm
TGlzdCwgaSk7Ci0gICAgICAgIC8vIHNvbWV0aGluZyBpcyB3cm9uZyBpZiB0aGUgaXRlbSBmcm9t
IHRoZSBsYXN0IHRlc3QgaXMgaW4gdGhlIGZvcndhcmQgcGFydCBvZiB0aGUgYi9mIGxpc3QKLSAg
ICAgICAgQVNTRVJUKGl0ZW0gIT0gcHJldlRlc3RCRkl0ZW0pOwotICAgICAgICBnX29iamVjdF9y
ZWYoaXRlbSk7Ci0gICAgICAgIGl0ZW1zVG9QcmludCA9IGdfbGlzdF9wcmVwZW5kKGl0ZW1zVG9Q
cmludCwgaXRlbSk7Ci0gICAgfQotCi0gICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGN1cnJlbnRJ
dGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtKGJmTGlz
dCk7Ci0gICAgZ19vYmplY3RfcmVmKGN1cnJlbnRJdGVtKTsKLSAgICBpdGVtc1RvUHJpbnQgPSBn
X2xpc3RfcHJlcGVuZChpdGVtc1RvUHJpbnQsIGN1cnJlbnRJdGVtKTsKLQotICAgIGdpbnQgYmFj
a0xpc3RDb3VudCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3Ro
KGJmTGlzdCk7Ci0gICAgZm9yIChpbnQgaSA9IC0xOyBpID49IC0oYmFja0xpc3RDb3VudCk7IGkt
LSkgewotICAgICAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbSA9IHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtKGJmTGlzdCwgaSk7Ci0gICAgICAgIGlmIChpdGVt
ID09IHByZXZUZXN0QkZJdGVtKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGdfb2JqZWN0
X3JlZihpdGVtKTsKLSAgICAgICAgaXRlbXNUb1ByaW50ID0gZ19saXN0X3ByZXBlbmQoaXRlbXNU
b1ByaW50LCBpdGVtKTsKLSAgICB9Ci0KLSAgICBmb3IgKEdMaXN0KiBpdGVtVG9QcmludCA9IGl0
ZW1zVG9QcmludDsgaXRlbVRvUHJpbnQ7IGl0ZW1Ub1ByaW50ID0gZ19saXN0X25leHQoaXRlbVRv
UHJpbnQpKSB7Ci0gICAgICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtID0gV0VCS0lUX1dF
Ql9ISVNUT1JZX0lURU0oaXRlbVRvUHJpbnQtPmRhdGEpOwotICAgICAgICBkdW1wSGlzdG9yeUl0
ZW0oaXRlbSwgaGlzdG9yeUl0ZW1JbmRlbnQsIGl0ZW0gPT0gY3VycmVudEl0ZW0pOwotICAgICAg
ICBnX29iamVjdF91bnJlZihpdGVtKTsKLSAgICB9Ci0KLSAgICBnX2xpc3RfZnJlZShpdGVtc1Rv
UHJpbnQpOwotICAgIHByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT1cbiIpOwotfQotCi1zdGF0aWMgdm9pZCBkdW1wQmFja0ZvcndhcmRMaXN0Rm9y
QWxsV2ViVmlld3MoKQotewotICAgIC8vIER1bXAgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IG9mIHRo
ZSBtYWluIFdlYlZpZXcgZmlyc3QKLSAgICBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yV2ViVmlldyh3
ZWJWaWV3KTsKLQotICAgIC8vIFRoZSB2aWV3IGxpc3QgaXMgcHJlcGVuZGVkLiBSZXZlcnNlIHRo
ZSBsaXN0IHNvIHdlIGdldCB0aGUgb3JkZXIgcmlnaHQuCi0gICAgZm9yIChHU0xpc3QqIGN1cnJl
bnRWaWV3ID0gZ19zbGlzdF9yZXZlcnNlKHdlYlZpZXdMaXN0KTsgY3VycmVudFZpZXc7IGN1cnJl
bnRWaWV3ID0gZ19zbGlzdF9uZXh0KGN1cnJlbnRWaWV3KSkKLSAgICAgICAgZHVtcEJhY2tGb3J3
YXJkTGlzdEZvcldlYlZpZXcoV0VCS0lUX1dFQl9WSUVXKGN1cnJlbnRWaWV3LT5kYXRhKSk7Ci19
Ci0KLXZvaWQgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKGd1aW50IHRpbWVyKQotewotICAgIHdhaXRU
b0R1bXBXYXRjaGRvZyA9IHRpbWVyOwotfQotCi1ib29sIHNob3VsZFNldFdhaXRUb0R1bXBXYXRj
aGRvZygpCi17Ci0gICAgcmV0dXJuICF3YWl0VG9EdW1wV2F0Y2hkb2cgJiYgdXNlVGltZW91dFdh
dGNoZG9nOwotfQotCi1DU3RyaW5nIHNvdXBVUklUb1N0cmluZ1ByZXNlcnZpbmdQYXNzd29yZChT
b3VwVVJJKiBzb3VwVVJJKQotewotICAgIGlmICghc291cFVSSS0+cGFzc3dvcmQpIHsKLSAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9fc3RyaW5nKHNvdXBVUkks
IEZBTFNFKSk7Ci0gICAgICAgIHJldHVybiB1cmlTdHJpbmcuZ2V0KCk7Ci0gICAgfQotCi0gICAg
Ly8gc291cF91cmlfdG9fc3RyaW5nIGRvZXMgbm90IGluc2VydCB0aGUgcGFzc3dvcmQgaW50byB0
aGUgc3RyaW5nLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUKLSAgICAvLyBVUkkgc3RyaW5nIGFu
ZCB0aGVuIHJlaW5zZXJ0IGFueSBjcmVkZW50aWFscyB0aGF0IHdlcmUgcHJlc2VudCBpbiB0aGUg
U291cFVSSS4gQWxsIHRlc3RzIHRoYXQKLSAgICAvLyB1c2UgVVJMLWVtYmVkZGVkIGNyZWRlbnRp
YWxzIHVzZSBIVFRQLCBzbyBpdCdzIHNhZmUgaGVyZS4KLSAgICBHVW5pcXVlUHRyPGNoYXI+IHBh
c3N3b3JkKHNvdXBVUkktPnBhc3N3b3JkKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHVzZXIoc291
cFVSSS0+dXNlcik7Ci0gICAgc291cFVSSS0+cGFzc3dvcmQgPSAwOwotICAgIHNvdXBVUkktPnVz
ZXIgPSAwOwotCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiB1cmlTdHJpbmcoc291cF91cmlfdG9fc3Ry
aW5nKHNvdXBVUkksIEZBTFNFKSk7Ci0gICAgU3RyaW5nIGFic29sdXRlVVJJV2l0aG91dENyZWRl
bnRpYWxTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHVyaVN0cmluZy5nZXQoKSk7Ci0gICAgU3Ry
aW5nIHByb3RvY29sQW5kQ3JlZGVudGlhbCA9IFN0cmluZzo6Zm9ybWF0KCJodHRwOi8vJXM6JXNA
IiwgdXNlciA/IHVzZXIuZ2V0KCkgOiAiIiwgcGFzc3dvcmQuZ2V0KCkpOwotICAgIHJldHVybiBh
YnNvbHV0ZVVSSVdpdGhvdXRDcmVkZW50aWFsU3RyaW5nLnJlcGxhY2UoImh0dHA6Ly8iLCBwcm90
b2NvbEFuZENyZWRlbnRpYWwpLnV0ZjgoKTsKLX0KLQotc3RhdGljIHZvaWQgaW52YWxpZGF0ZUFu
eVByZXZpb3VzV2FpdFRvRHVtcFdhdGNoZG9nKCkKLXsKLSAgICBpZiAod2FpdFRvRHVtcFdhdGNo
ZG9nKSB7Ci0gICAgICAgIGdfc291cmNlX3JlbW92ZSh3YWl0VG9EdW1wV2F0Y2hkb2cpOwotICAg
ICAgICB3YWl0VG9EdW1wV2F0Y2hkb2cgPSAwOwotICAgIH0KLQotICAgIHdhaXRGb3JQb2xpY3kg
PSBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgcmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVl
cygpCi17Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBsb2NhbFN0b3Jh
Z2VQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAiRHVtcFJlbmRl
clRyZWVHdGsiLCAiZGF0YWJhc2VzIiwgbnVsbHB0cikpOwotICAgIGdfb2JqZWN0X3NldChHX09C
SkVDVChzZXR0aW5ncyksCi0gICAgICAgICJlbmFibGUtYWNjZWxlcmF0ZWQtY29tcG9zaXRpbmci
LCBGQUxTRSwKLSAgICAgICAgImVuYWJsZS1wcml2YXRlLWJyb3dzaW5nIiwgRkFMU0UsCi0gICAg
ICAgICJlbmFibGUtZGV2ZWxvcGVyLWV4dHJhcyIsIEZBTFNFLAotICAgICAgICAiZW5hYmxlLXNw
ZWxsLWNoZWNraW5nIiwgVFJVRSwKLSAgICAgICAgImVuYWJsZS1odG1sNS1kYXRhYmFzZSIsIFRS
VUUsCi0gICAgICAgICJlbmFibGUtaHRtbDUtbG9jYWwtc3RvcmFnZSIsIFRSVUUsCi0gICAgICAg
ICJodG1sNS1sb2NhbC1zdG9yYWdlLWRhdGFiYXNlLXBhdGgiLCBsb2NhbFN0b3JhZ2VQYXRoLmdl
dCgpLAotICAgICAgICAiZW5hYmxlLXhzcy1hdWRpdG9yIiwgRkFMU0UsCi0gICAgICAgICJlbmFi
bGUtc3BhdGlhbC1uYXZpZ2F0aW9uIiwgRkFMU0UsCi0gICAgICAgICJqYXZhc2NyaXB0LWNhbi1h
Y2Nlc3MtY2xpcGJvYXJkIiwgVFJVRSwKLSAgICAgICAgImphdmFzY3JpcHQtY2FuLW9wZW4td2lu
ZG93cy1hdXRvbWF0aWNhbGx5IiwgVFJVRSwKLSAgICAgICAgImVuYWJsZS1vZmZsaW5lLXdlYi1h
cHBsaWNhdGlvbi1jYWNoZSIsIFRSVUUsCi0gICAgICAgICJlbmFibGUtdW5pdmVyc2FsLWFjY2Vz
cy1mcm9tLWZpbGUtdXJpcyIsIFRSVUUsCi0gICAgICAgICJlbmFibGUtZmlsZS1hY2Nlc3MtZnJv
bS1maWxlLXVyaXMiLCBUUlVFLAotICAgICAgICAiZW5hYmxlLXNjcmlwdHMiLCBUUlVFLAotICAg
ICAgICAiZW5hYmxlLWRvbS1wYXN0ZSIsIFRSVUUsCi0gICAgICAgICJkZWZhdWx0LWZvbnQtZmFt
aWx5IiwgIlRpbWVzIiwKLSAgICAgICAgIm1vbm9zcGFjZS1mb250LWZhbWlseSIsICJDb3VyaWVy
IiwKLSAgICAgICAgInNlcmlmLWZvbnQtZmFtaWx5IiwgIlRpbWVzIiwKLSAgICAgICAgInNhbnMt
c2VyaWYtZm9udC1mYW1pbHkiLCAiSGVsdmV0aWNhIiwKLSAgICAgICAgImN1cnNpdmUtZm9udC1m
YW1pbHkiLCAiY3Vyc2l2ZSIsCi0gICAgICAgICJmYW50YXN5LWZvbnQtZmFtaWx5IiwgImZhbnRh
c3kiLAotICAgICAgICAiZGVmYXVsdC1mb250LXNpemUiLCAxMiwKLSAgICAgICAgImRlZmF1bHQt
bW9ub3NwYWNlLWZvbnQtc2l6ZSIsIDEwLAotICAgICAgICAibWluaW11bS1mb250LXNpemUiLCAw
LAotICAgICAgICAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgRkFMU0UsCi0gICAgICAgICJlbmFi
bGUtcGFnZS1jYWNoZSIsIEZBTFNFLAotICAgICAgICAiYXV0by1yZXNpemUtd2luZG93IiwgVFJV
RSwKLSAgICAgICAgImF1dG8tbG9hZC1pbWFnZXMiLCBUUlVFLAotICAgICAgICAiZW5hYmxlLWph
dmEtYXBwbGV0IiwgRkFMU0UsCi0gICAgICAgICJlbmFibGUtcGx1Z2lucyIsIFRSVUUsCi0gICAg
ICAgICJlbmFibGUtaHlwZXJsaW5rLWF1ZGl0aW5nIiwgRkFMU0UsCi0gICAgICAgICJlZGl0aW5n
LWJlaGF2aW9yIiwgV0VCS0lUX0VESVRJTkdfQkVIQVZJT1JfVU5JWCwKLSAgICAgICAgImVuYWJs
ZS1mdWxsc2NyZWVuIiwgVFJVRSwKLSAgICAgICAgImVuYWJsZS1tZWRpYXNvdXJjZSIsIFRSVUUs
Ci0gICAgICAgIE5VTEwpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mod2ViVmll
dywgc2V0dGluZ3MpOwotICAgIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwoV0VCS0lUX0NBQ0hFX01P
REVMX0RPQ1VNRU5UX0JST1dTRVIpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpj
bGVhck1haW5GcmFtZU5hbWUobWFpbkZyYW1lKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OnNjYWxlUGFnZUJ5KHdlYlZpZXcsIDEsIDAsIDApOwotCi0gICAgV2ViS2l0V2ViSW5zcGVj
dG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsK
LSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QoaW5zcGVjdG9yKSwgImphdmFzY3JpcHQtcHJvZmls
aW5nLWVuYWJsZWQiLCBGQUxTRSwgTlVMTCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pv
b21fbGV2ZWwod2ViVmlldywgMS4wKTsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
cmVzZXRPcmlnaW5BY2Nlc3NXaGl0ZUxpc3RzKCk7Ci0KLSAgICBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QqIGxpc3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZp
ZXcpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xlYXIobGlzdCk7Ci0KLSAg
ICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7Ci0g
ICAgU291cENvb2tpZUphciogamFyID0gcmVpbnRlcnByZXRfY2FzdDxTb3VwQ29va2llSmFyKj4o
c291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7
Ci0KLSAgICAvLyBXZSBvbmx5IGNyZWF0ZSB0aGUgamFyIHdoZW4gdGhlIHNvdXAgYmFja2VuZCBu
ZWVkcyB0byBkbwotICAgIC8vIEhUVFAuIFNob3VsZCB3ZSBpbml0aWFsaXplIGl0IGVhcmxpZXIs
IHBlcmhhcHM/Ci0gICAgaWYgKGphcikKLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKGph
ciksIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfUE9MSUNZLCBTT1VQX0NPT0tJRV9KQVJfQUNDRVBU
X05PX1RISVJEX1BBUlRZLCBOVUxMKTsKLQotICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKLQot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFp
bih0cnVlKTsKLSAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0X2lj
b25fZGF0YWJhc2UoKSwgMCk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREZWZl
cnNMb2FkaW5nKHdlYlZpZXcsIGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhmYWxzZSk7Ci0KLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkp
Ci0gICAgaWYgKGF4Q29udHJvbGxlcikKLSAgICAgICAgYXhDb250cm9sbGVyLT5yZXNldFRvQ29u
c2lzdGVudFN0YXRlKCk7Ci0jZW5kaWYKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
Y2xlYXJPcGVuZXIobWFpbkZyYW1lKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNl
dFRyYWNrc1JlcGFpbnRzKG1haW5GcmFtZSwgZmFsc2UpOwotCi0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpyZXNldEdlb2xvY2F0aW9uQ2xpZW50TW9jayh3ZWJWaWV3KTsKLQotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q1NTR3JpZExheW91dEVuYWJsZWQod2ViVmlldywg
ZmFsc2UpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0Q1NTUmVnaW9uc0VuYWJs
ZWQod2ViVmlldywgdHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRFeHBl
cmltZW50YWxDb250ZW50U2VjdXJpdHlQb2xpY3lGZWF0dXJlc0VuYWJsZWQodHJ1ZSk7Ci0KLSAg
ICBpZiAoZ1Rlc3RSdW5uZXIpIHsKLSAgICAgICAgZ1Rlc3RSdW5uZXItPnNldEF1dGhlbnRpY2F0
aW9uUGFzc3dvcmQoIiIpOwotICAgICAgICBnVGVzdFJ1bm5lci0+c2V0QXV0aGVudGljYXRpb25V
c2VybmFtZSgiIik7Ci0gICAgICAgIGdUZXN0UnVubmVyLT5zZXRIYW5kbGVzQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rp
b24oR1RLX1dJREdFVCh3ZWJWaWV3KSwgR1RLX1RFWFRfRElSX05PTkUpOwotfQotCi1zdGF0aWMg
Ym9vbCB1c2VMb25nUnVubmluZ1NlcnZlck1vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsK
LSAgICAvLyBUaGlzIGFzc3VtZXMgeW91J3ZlIGFscmVhZHkgY2FsbGVkIGdldG9wdF9sb25nCi0g
ICAgcmV0dXJuIChhcmdjID09IG9wdGluZCsxICYmICFzdHJjbXAoYXJndltvcHRpbmRdLCAiLSIp
KTsKLX0KLQotc3RhdGljIHZvaWQgcnVuVGVzdGluZ1NlcnZlckxvb3AoKQotewotICAgIC8vIFdo
ZW4gRHVtcFJlbmRlclRyZWUgcnVucyBpbiBzZXJ2ZXIgbW9kZSwgd2UganVzdCB3YWl0IGFyb3Vu
ZCBmb3IgZmlsZSBuYW1lcwotICAgIC8vIHRvIGJlIHBhc3NlZCB0byB1cyBhbmQgcmVhZCBlYWNo
IGluIHR1cm4sIHBhc3NpbmcgdGhlIHJlc3VsdHMgYmFjayB0byB0aGUgY2xpZW50Ci0gICAgY2hh
ciBmaWxlbmFtZUJ1ZmZlclsyMDQ4XTsKLSAgICB3aGlsZSAoZmdldHMoZmlsZW5hbWVCdWZmZXIs
IHNpemVvZihmaWxlbmFtZUJ1ZmZlciksIHN0ZGluKSkgewotICAgICAgICBjaGFyKiBuZXdMaW5l
Q2hhcmFjdGVyID0gc3RyY2hyKGZpbGVuYW1lQnVmZmVyLCAnXG4nKTsKLSAgICAgICAgaWYgKG5l
d0xpbmVDaGFyYWN0ZXIpCi0gICAgICAgICAgICAqbmV3TGluZUNoYXJhY3RlciA9ICdcMCc7Ci0K
LSAgICAgICAgaWYgKCFzdHJsZW4oZmlsZW5hbWVCdWZmZXIpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgcnVuVGVzdChmaWxlbmFtZUJ1ZmZlcik7Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBpbml0aWFsaXplR2xvYmFsc0Zyb21Db21tYW5kTGluZU9wdGlvbnMoaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKLXsKLSAgICBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLSAgICAg
ICAgeyJub3RyZWUiLCBub19hcmd1bWVudCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsi
cGl4ZWwtdGVzdHMiLCBub19hcmd1bWVudCwgJmR1bXBQaXhlbHNGb3JBbGxUZXN0cywgdHJ1ZX0s
Ci0gICAgICAgIHsidHJlZSIsIG5vX2FyZ3VtZW50LCAmZHVtcFRyZWUsIHRydWV9LAotICAgICAg
ICB7Im5vLXRpbWVvdXQiLCBub19hcmd1bWVudCwgJnVzZVRpbWVvdXRXYXRjaGRvZywgZmFsc2V9
LAotICAgICAgICB7TlVMTCwgMCwgTlVMTCwgMH0KLSAgICB9OwotICAgIAotICAgIGludCBvcHRp
b247Ci0gICAgd2hpbGUgKChvcHRpb24gPSBnZXRvcHRfbG9uZyhhcmdjLCAoY2hhciAqIGNvbnN0
ICopYXJndiwgIiIsIG9wdGlvbnMsIE5VTEwpKSAhPSAtMSkgewotICAgICAgICBzd2l0Y2ggKG9w
dGlvbikgewotICAgICAgICBjYXNlICc/JzogLy8gdW5rbm93biBvciBhbWJpZ3VvdXMgb3B0aW9u
Ci0gICAgICAgIGNhc2UgJzonOiAvLyBtaXNzaW5nIGFyZ3VtZW50Ci0gICAgICAgICAgICBleGl0
KDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotdm9pZCBk
dW1wKCkKLXsKLSAgICBpbnZhbGlkYXRlQW55UHJldmlvdXNXYWl0VG9EdW1wV2F0Y2hkb2coKTsK
LQotICAgIC8vIEdyYWIgd2lkZ2V0IGZvY3VzIGJlZm9yZSBkdW1waW5nIHRoZSBjb250ZW50cyBv
ZiBhIHdpZGdldCwgaW4KLSAgICAvLyBjYXNlIGl0IHdhcyBsb3N0IGluIHRoZSBjb3Vyc2Ugb2Yg
dGhlIHRlc3QuCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQod2ViVmlldykp
OwotCi0gICAgaWYgKGR1bXBUcmVlKSB7Ci0gICAgICAgIGNoYXIqIHJlc3VsdCA9IDA7Ci0gICAg
ICAgIGdjaGFyKiByZXNwb25zZU1pbWVUeXBlID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfcmVzcG9u
c2VfbWltZV90eXBlKG1haW5GcmFtZSk7Ci0KLSAgICAgICAgaWYgKGdfc3RyX2VxdWFsKHJlc3Bv
bnNlTWltZVR5cGUsICJ0ZXh0L3BsYWluIikpIHsKLSAgICAgICAgICAgIGdUZXN0UnVubmVyLT5z
ZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICAgICAgZ1Rlc3RSdW5uZXItPnNldEdlbmVyYXRl
UGl4ZWxSZXN1bHRzKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBnX2ZyZWUocmVzcG9uc2VN
aW1lVHlwZSk7Ci0KLSAgICAgICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkpCi0gICAg
ICAgICAgICByZXN1bHQgPSBkdW1wRnJhbWVzQXNUZXh0KG1haW5GcmFtZSk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gV2lkZ2V0IHJlc2l6aW5nIGlzIGRvbmUgYXN5bmNocm9ub3Vz
bHkgaW4gR1RLKy4gV2UgcHVtcCB0aGUgbWFpbgotICAgICAgICAgICAgLy8gbG9vcCBoZXJlLCB0
byBmbHVzaCBhbnkgcGVuZGluZyByZXNpemUgcmVxdWVzdHMuIFRoaXMgcHJldmVudHMKLSAgICAg
ICAgICAgIC8vIHRpbWluZyBpc3N1ZXMgd2hpY2ggYWZmZWN0IHRoZSBzaXplIG9mIGVsZW1lbnRz
IGluIHRoZSBvdXRwdXQuCi0gICAgICAgICAgICAvLyBXZSBvbmx5IGVuYWJsZSB0aGlzIHdvcmth
cm91bmQgZm9yIHRlc3RzIHRoYXQgcHJpbnQgdGhlIHJlbmRlciB0cmVlCi0gICAgICAgICAgICAv
LyBiZWNhdXNlIHRoaXMgc2VlbXMgdG8gYnJlYWsgc29tZSBkdW1wQXNUZXh0IHRlc3RzOiBzZWUg
YnVnIDM5OTg4Ci0gICAgICAgICAgICAvLyBBZnRlciBmaXhpbmcgdGhhdCB0ZXN0LCB3ZSBzaG91
bGQgYXBwbHkgdGhpcyBhcHByb2FjaCB0byBhbGwgZHVtcHMuCi0gICAgICAgICAgICB3aGlsZSAo
Z3RrX2V2ZW50c19wZW5kaW5nKCkpCi0gICAgICAgICAgICAgICAgZ3RrX21haW5faXRlcmF0aW9u
KCk7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGdfc3RyZHVwKER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6ZHVtcFJlbmRlclRyZWUobWFpbkZyYW1lKS5kYXRhKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yTWVzc2Fn
ZTsKLSAgICAgICAgICAgIGlmIChnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4dCgpKQotICAgICAgICAg
ICAgICAgIGVycm9yTWVzc2FnZSA9ICJbZG9jdW1lbnRFbGVtZW50IGlubmVyVGV4dF0iOwotICAg
ICAgICAgICAgZWxzZSBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSkKLSAg
ICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW1ttYWluRnJhbWUgRE9NRG9jdW1lbnRdIHdl
YkFyY2hpdmVdIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdUZXN0UnVubmVyLT5kdW1wU291cmNl
QXNXZWJBcmNoaXZlKCkpCi0gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIltbbWFpbkZy
YW1lIGRhdGFTb3VyY2VdIHdlYkFyY2hpdmVdIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBlcnJvck1lc3NhZ2UgPSAiW21haW5GcmFtZSByZW5kZXJUcmVlQXNFeHRlcm5hbFJl
cHJlc2VudGF0aW9uXSI7Ci0gICAgICAgICAgICBwcmludGYoIkVSUk9SOiBuaWwgcmVzdWx0IGZy
b20gJXMiLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJp
bnRmKCIlcyIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBnX2ZyZWUocmVzdWx0KTsKLSAgICAgICAg
ICAgIGlmICghZ1Rlc3RSdW5uZXItPmR1bXBBc1RleHQoKSAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBE
T01Bc1dlYkFyY2hpdmUoKSAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBTb3VyY2VBc1dlYkFyY2hpdmUo
KSkKLSAgICAgICAgICAgICAgICBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihtYWluRnJhbWUpOwot
Ci0gICAgICAgICAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBCYWNrRm9yd2FyZExpc3QoKSkKLSAg
ICAgICAgICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yQWxsV2ViVmlld3MoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChwcmludFNlcGFyYXRvcnMpIHsKLSAgICAgICAgICAgIHB1dHMo
IiNFT0YiKTsgLy8gdGVybWluYXRlIHRoZSBjb250ZW50IGJsb2NrCi0gICAgICAgICAgICBmcHV0
cygiI0VPRlxuIiwgc3RkZXJyKTsKLSAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAg
ICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZHVtcFBp
eGVsc0ZvckN1cnJlbnRUZXN0Ci0gICAgICYmIGdUZXN0UnVubmVyLT5nZW5lcmF0ZVBpeGVsUmVz
dWx0cygpCi0gICAgICYmICFnVGVzdFJ1bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpCi0gICAg
ICYmICFnVGVzdFJ1bm5lci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpKSB7Ci0gICAgICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Zm9yY2VXZWJWaWV3UGFpbnQod2ViVmlldyk7Ci0gICAg
ICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdUZXN0UnVubmVy
LT5leHBlY3RlZFBpeGVsSGFzaCgpKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogY2FsbCBkaXNw
bGF5V2ViVmlldyBoZXJlIHdoZW4gd2Ugc3VwcG9ydCAtLXBhaW50Ci0KLSAgICBkb25lID0gdHJ1
ZTsKLSAgICBndGtfbWFpbl9xdWl0KCk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIHRlbXBvcmFyeURh
dGFiYXNlRGlyZWN0b3J5KCkKLXsKLSAgICBjb25zdCBjaGFyKiBkaXJlY3RvcnlGcm9tRW52aXJv
bm1lbnQgPSBnX2dldGVudigiRFVNUFJFTkRFUlRSRUVfVEVNUCIpOwotICAgIGlmIChkaXJlY3Rv
cnlGcm9tRW52aXJvbm1lbnQpCi0gICAgICAgIHJldHVybiBkaXJlY3RvcnlGcm9tRW52aXJvbm1l
bnQ7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBmYWxsYmFjayhnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0
X3VzZXJfZGF0YV9kaXIoKSwgImd0a3dlYmtpdGRydCIsICJkYXRhYmFzZXMiLCBOVUxMKSk7Ci0g
ICAgcmV0dXJuIGZhbGxiYWNrLmdldCgpOwotfQotCi1zdGF0aWMgdm9pZCBzZXREZWZhdWx0c1Rv
Q29uc2lzdGVudFN0YXRlVmFsdWVzRm9yVGVzdGluZygpCi17Ci0gICAgcmVzZXREZWZhdWx0c1Rv
Q29uc2lzdGVudFZhbHVlcygpOwotCi0jaWYgUExBVEZPUk0oWDExKQotICAgIHdlYmtpdF93ZWJf
c2V0dGluZ3NfYWRkX2V4dHJhX3BsdWdpbl9kaXJlY3Rvcnkod2ViVmlldywgVEVTVF9QTFVHSU5f
RElSKTsKLSNlbmRpZgotCi0gICAgd2Via2l0X3NldF93ZWJfZGF0YWJhc2VfZGlyZWN0b3J5X3Bh
dGgodGVtcG9yYXJ5RGF0YWJhc2VEaXJlY3RvcnkoKS5kYXRhKCkpOwotCi0jaWYgZGVmaW5lZChH
VEtfQVBJX1ZFUlNJT05fMikKLSAgICBndGtfcmNfcGFyc2Vfc3RyaW5nKCJzdHlsZSBcIm5peF9z
Y3JvbGxiYXJfc3BhY2luZ1wiICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAgICAgICAgICAg
ICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBHdGtTY3JvbGxlZFdpbmRvdzo6c2Ny
b2xsYmFyLXNwYWNpbmcgPSAwICAgICAgICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJ9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAiY2xhc3MgXCJHdGtXaWRnZXRcIiBzdHlsZSBcIm5peF9zY3JvbGxi
YXJfc3BhY2luZ1wiIik7Ci0KLSNlbHNlCi0gICAgR3RrQ3NzUHJvdmlkZXIqIGNzc1Byb3ZpZGVy
ID0gZ3RrX2Nzc19wcm92aWRlcl9uZXcoKTsKLSAgICBndGtfY3NzX3Byb3ZpZGVyX2xvYWRfZnJv
bV9kYXRhKGNzc1Byb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkBiaW5kaW5nLXNldCBOb0tleWJvYXJkTmF2aWdhdGlvbiB7ICAgICAgICAiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgdW5iaW5kIFwiPHNoaWZ0PkYxMFwiOyAgICAg
ICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAqIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgLUd0a1Nj
cm9sbGVkV2luZG93LXNjcm9sbGJhci1zcGFjaW5nOiAwOyIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICBndGsta2V5LWJpbmRpbmdzOiBOb0tleWJvYXJkTmF2aWdhdGlv
bjsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLTEsIDApOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9wcm92aWRlcl9m
b3Jfc2NyZWVuKGdka19kaXNwbGF5X2dldF9kZWZhdWx0X3NjcmVlbihnZGtfZGlzcGxheV9nZXRf
ZGVmYXVsdCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHVEtfU1RZTEVfUFJPVklERVIoY3NzUHJvdmlkZXIpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVFlMRV9QUk9WSURFUl9QUklPUklUWV9BUFBM
SUNBVElPTik7Ci0gICAgZ19vYmplY3RfdW5yZWYoY3NzUHJvdmlkZXIpOwotI2VuZGlmCi19Ci0K
LXN0YXRpYyB2b2lkIHNlbmRQaXhlbFJlc3VsdHNFT0YoKQotewotICAgIHB1dHMoIiNFT0YiKTsK
LQotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGZmbHVzaChzdGRlcnIpOwotfQotCi1zdGF0aWMg
dm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQotewotICAgIEFTU0VSVCghaW5w
dXRMaW5lLmVtcHR5KCkpOwotCi0gICAgVGVzdENvbW1hbmQgY29tbWFuZCA9IHBhcnNlSW5wdXRM
aW5lKGlucHV0TGluZSk7Ci0gICAgc3RyaW5nJiB0ZXN0VVJMID0gY29tbWFuZC5wYXRoT3JVUkw7
Ci0gICAgZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gY29tbWFuZC5zaG91bGREdW1wUGl4ZWxz
IHx8IGR1bXBQaXhlbHNGb3JBbGxUZXN0czsKLQotICAgIC8vIENvbnZlcnQgdGhlIHBhdGggaW50
byBhIGZ1bGwgZmlsZSBVUkwgaWYgaXQgZG9lcyBub3QgbG9vawotICAgIC8vIGxpa2UgYW4gSFRU
UC9TIFVSTCAoZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8pLgotICAgIGlm
ICh0ZXN0VVJMLmZpbmQoImh0dHA6Ly8iKSAmJiB0ZXN0VVJMLmZpbmQoImh0dHBzOi8vIikpIHsK
LSAgICAgICAgR0ZpbGUqIHRlc3RGaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCh0ZXN0VVJMLmNf
c3RyKCkpOwotICAgICAgICBnY2hhciogdGVzdFVSTENTdHJpbmcgPSBnX2ZpbGVfZ2V0X3VyaSh0
ZXN0RmlsZSk7Ci0gICAgICAgIHRlc3RVUkwgPSB0ZXN0VVJMQ1N0cmluZzsKLSAgICAgICAgZ19m
cmVlKHRlc3RVUkxDU3RyaW5nKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYodGVzdEZpbGUpOwot
ICAgIH0KLQotICAgIHJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKLQotICAgIGdU
ZXN0UnVubmVyID0gVGVzdFJ1bm5lcjo6Y3JlYXRlKHRlc3RVUkwsIGNvbW1hbmQuZXhwZWN0ZWRQ
aXhlbEhhc2gpOwotICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci0gICAgZG9uZSA9IGZhbHNlOwot
Ci0gICAgZ1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoZmFsc2UpOwotCi0gICAg
aWYgKHNob3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyh0ZXN0VVJMKSkKLSAgICAgICAgZ1Rlc3RS
dW5uZXItPnNldER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7Ci0KLSAgICBpZiAoc2hvdWxk
RW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHRlc3RVUkwpKSB7Ci0gICAgICAgIGdUZXN0UnVubmVyLT5z
ZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKHRydWUpOwotICAgICAgICBpZiAoc2hvdWxkRHVtcEFz
VGV4dCh0ZXN0VVJMKSkgewotICAgICAgICAgICAgZ1Rlc3RSdW5uZXItPnNldER1bXBBc1RleHQo
dHJ1ZSk7Ci0gICAgICAgICAgICBnVGVzdFJ1bm5lci0+c2V0R2VuZXJhdGVQaXhlbFJlc3VsdHMo
ZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y2xl
YXIoKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4oZmFsc2UpOwotCi0gICAg
Ym9vbCBpc1NWR1czQ1Rlc3QgPSAodGVzdFVSTC5maW5kKCJzdmcvVzNDLVNWRy0xLjEiKSAhPSBz
dHJpbmc6Om5wb3MpOwotICAgIEd0a0FsbG9jYXRpb24gc2l6ZTsKLSAgICBzaXplLnggPSBzaXpl
LnkgPSAwOwotICAgIHNpemUud2lkdGggPSBpc1NWR1czQ1Rlc3QgPyBUZXN0UnVubmVyOjp3M2NT
VkdWaWV3V2lkdGggOiBUZXN0UnVubmVyOjp2aWV3V2lkdGg7Ci0gICAgc2l6ZS5oZWlnaHQgPSBp
c1NWR1czQ1Rlc3QgPyBUZXN0UnVubmVyOjp3M2NTVkdWaWV3SGVpZ2h0IDogVGVzdFJ1bm5lcjo6
dmlld0hlaWdodDsKLSAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIHNp
emUud2lkdGgsIHNpemUuaGVpZ2h0KTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoY29u
dGFpbmVyLCAmc2l6ZSk7Ci0KLSAgICBpZiAocHJldlRlc3RCRkl0ZW0pCi0gICAgICAgIGdfb2Jq
ZWN0X3VucmVmKHByZXZUZXN0QkZJdGVtKTsKLSAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Qq
IGJmTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qod2ViVmlldyk7
Ci0gICAgcHJldlRlc3RCRkl0ZW0gPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0oYmZMaXN0KTsKLSAgICBpZiAocHJldlRlc3RCRkl0ZW0pCi0gICAgICAgIGdf
b2JqZWN0X3JlZihwcmV2VGVzdEJGSXRlbSk7Ci0KLSAgICBpbml0aWFsaXplRm9udHModGVzdFVS
TC5jX3N0cigpKTsKLQotICAgIC8vIEZvY3VzIHRoZSB3ZWIgdmlldyBiZWZvcmUgbG9hZGluZyB0
aGUgdGVzdCB0byBhdm9pZCBmb2N1c2luZyBwcm9ibGVtcwotICAgIGd0a193aWRnZXRfZ3JhYl9m
b2N1cyhHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfb3Blbih3ZWJW
aWV3LCB0ZXN0VVJMLmNfc3RyKCkpOwotCi0gICAgZ3RrX21haW4oKTsKLQotICAgIC8vIElmIGRl
dmVsb3BlciBleHRyYXMgZW5hYmxlZCBXZWIgSW5zcGVjdG9yIG1heSBoYXZlIGJlZW4gb3BlbiBi
eSB0aGUgdGVzdC4KLSAgICBpZiAoc2hvdWxkRW5hYmxlRGV2ZWxvcGVyRXh0cmFzKHRlc3RVUkwp
KSB7Ci0gICAgICAgIGdUZXN0UnVubmVyLT5jbG9zZVdlYkluc3BlY3RvcigpOwotICAgICAgICBn
VGVzdFJ1bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChmYWxzZSk7Ci0gICAgfQotCi0g
ICAgLy8gQWxzbyBjaGVjayBpZiB3ZSBzdGlsbCBoYXZlIG9wZW5lZCB3ZWJWaWV3cyBhbmQgZnJl
ZSB0aGVtLgotICAgIGlmIChnVGVzdFJ1bm5lci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNv
bXBsZXRlKCkgfHwgd2ViVmlld0xpc3QpIHsKLSAgICAgICAgd2hpbGUgKHdlYlZpZXdMaXN0KSB7
Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihXRUJLSVRfV0VCX1ZJRVcod2ViVmlld0xpc3Qt
PmRhdGEpKTsKLSAgICAgICAgICAgIHdlYlZpZXdMaXN0ID0gZ19zbGlzdF9uZXh0KHdlYlZpZXdM
aXN0KTsKLSAgICAgICAgfQotICAgICAgICBnX3NsaXN0X2ZyZWUod2ViVmlld0xpc3QpOwotICAg
ICAgICB3ZWJWaWV3TGlzdCA9IDA7Ci0gICAgfQotCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpy
ZXNldEludGVybmFsc09iamVjdCh3ZWJraXRfd2ViX2ZyYW1lX2dldF9nbG9iYWxfY29udGV4dCht
YWluRnJhbWUpKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNsZWFyTWVtb3J5Q2Fj
aGUoKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZSgpOwotCi0gICAgLy8gQSBibGFuayBsb2FkIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSB0byByZXNl
dCBzdGF0ZSBhZnRlciBjZXJ0YWluIHRlc3RzLgotICAgIHdlYmtpdF93ZWJfdmlld19vcGVuKHdl
YlZpZXcsICJhYm91dDpibGFuayIpOwotCi0gICAgZ1Rlc3RSdW5uZXIuY2xlYXIoKTsKLQotICAg
IC8vIHRlcm1pbmF0ZSB0aGUgKHBvc3NpYmx5IGVtcHR5KSBwaXhlbHMgYmxvY2sgYWZ0ZXIgYWxs
IHRoZSBzdGF0ZSByZXNldAotICAgIHNlbmRQaXhlbFJlc3VsdHNFT0YoKTsKLX0KLQotdm9pZCB3
ZWJWaWV3TG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZy
YW1lLCB2b2lkKikKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBzZXQgdGhpcyBvbmNlIHBl
ciB0ZXN0LiAgSWYgaXQgZ2V0cyBjbGVhcmVkLCBhbmQgdGhlbiBzZXQgYWdhaW4sIHdlIG1pZ2h0
Ci0gICAgLy8gZW5kIHVwIGRvaW5nIHR3byBkdW1wcyBmb3Igb25lIHRlc3QuCi0gICAgaWYgKCF0
b3BMb2FkaW5nRnJhbWUgJiYgIWRvbmUpCi0gICAgICAgIHRvcExvYWRpbmdGcmFtZSA9IGZyYW1l
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gcHJvY2Vzc1dvcmsodm9pZCogZGF0YSkKLXsKLSAgICAv
LyBpZiB3ZSBmaW5pc2ggYWxsIHRoZSBjb21tYW5kcywgd2UncmUgcmVhZHkgdG8gZHVtcCBzdGF0
ZQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYmICFnVGVzdFJ1
bm5lci0+d2FpdFRvRHVtcCgpKQotICAgICAgICBkdW1wKCk7Ci0KLSAgICByZXR1cm4gRkFMU0U7
Ci19Ci0KLXN0YXRpYyBjaGFyKiBnZXRGcmFtZU5hbWVTdWl0YWJsZUZvclRlc3RSZXN1bHQoV2Vi
S2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lKQotewotICAgIGNoYXIqIGZy
YW1lTmFtZSA9IGdfc3RyZHVwKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X25hbWUoZnJhbWUpKTsKLQot
ICAgIGlmIChmcmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUodmlldykpIHsK
LSAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBzdHJhbmdlLiBTaG91bGRuJ3Qgd2ViX2ZyYW1lX2dl
dF9uYW1lIHJldHVybiBOVUxMPwotICAgICAgICBpZiAoZnJhbWVOYW1lICYmIChmcmFtZU5hbWVb
MF0gIT0gJ1wwJykpIHsKLSAgICAgICAgICAgIGNoYXIqIHRtcCA9IGdfc3RyZHVwX3ByaW50Zigi
bWFpbiBmcmFtZSBcIiVzXCIiLCBmcmFtZU5hbWUpOwotICAgICAgICAgICAgZ19mcmVlKGZyYW1l
TmFtZSk7Ci0gICAgICAgICAgICBmcmFtZU5hbWUgPSB0bXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBnX2ZyZWUoZnJhbWVOYW1lKTsKLSAgICAgICAgICAgIGZyYW1lTmFtZSA9IGdf
c3RyZHVwKCJtYWluIGZyYW1lIik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFmcmFtZU5h
bWUgfHwgKGZyYW1lTmFtZVswXSA9PSAnXDAnKSkgewotICAgICAgICBnX2ZyZWUoZnJhbWVOYW1l
KTsKLSAgICAgICAgZnJhbWVOYW1lID0gZ19zdHJkdXAoImZyYW1lIChhbm9ueW1vdXMpIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciogdG1wID0gZ19zdHJkdXBfcHJpbnRmKCJmcmFtZSBc
IiVzXCIiLCBmcmFtZU5hbWUpOwotICAgICAgICBnX2ZyZWUoZnJhbWVOYW1lKTsKLSAgICAgICAg
ZnJhbWVOYW1lID0gdG1wOwotICAgIH0KLQotICAgIHJldHVybiBmcmFtZU5hbWU7Ci19Ci0KLXN0
YXRpYyB2b2lkIHdlYlZpZXdMb2FkRmluaXNoZWQoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCB2b2lkKikKLXsKLSAgICAvLyBUaGUgZGVwcmVjYXRlZCAibG9hZC1m
aW5pc2hlZCIgc2lnbmFsIGlzIHRyaWdnZXJlZCBieSBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlm
aWNhdGlvbigpLAotICAgIC8vIHNvIHdlIGNhbiB1c2UgaXQgaGVyZSBpbiB0aGUgRFJUIHRvIHBy
b3ZpZGUgdGhlIGNvcnJlY3QgZHVtcC4KLSAgICBpZiAoZnJhbWUgIT0gdG9wTG9hZGluZ0ZyYW1l
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wUHJvZ3Jlc3NGaW5p
c2hlZENhbGxiYWNrKCkpCi0gICAgICAgIHByaW50ZigicG9zdFByb2dyZXNzRmluaXNoZWROb3Rp
ZmljYXRpb25cbiIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0xvYWRFcnJvcihXZWJL
aXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqLCBnY2hhciosIGdwb2ludGVyLCBncG9pbnRlcikK
LXsKLSAgICByZXR1cm4gVFJVRTsgLy8gUmV0dXJuIHRydWUgaGVyZSB0byBkaXNhYmxlIHRoZSBk
ZWZhdWx0IGVycm9yIHBhZ2UuCi19Ci0KLXN0YXRpYyB2b2lkIHdlYlZpZXdEb2N1bWVudExvYWRG
aW5pc2hlZChXZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIHZvaWQq
KQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKSB7Ci0gICAgICAgIGNoYXIqIGZyYW1lTmFtZSA9IGdldEZyYW1lTmFtZVN1aXRhYmxlRm9y
VGVzdFJlc3VsdCh2aWV3LCBmcmFtZSk7Ci0gICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JGcmFtZVxuIiwgZnJhbWVOYW1lKTsKLSAgICAgICAgZ19mcmVlKGZyYW1l
TmFtZSk7Ci0gICAgfSBlbHNlIGlmICghZG9uZSkgewotICAgICAgICBndWludCBwZW5kaW5nRnJh
bWVVbmxvYWRFdmVudHMgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmdldFBlbmRpbmdVbmxv
YWRFdmVudENvdW50KGZyYW1lKTsKLSAgICAgICAgaWYgKHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50
cykgewotICAgICAgICAgICAgY2hhciogZnJhbWVOYW1lID0gZ2V0RnJhbWVOYW1lU3VpdGFibGVG
b3JUZXN0UmVzdWx0KHZpZXcsIGZyYW1lKTsKLSAgICAgICAgICAgIHByaW50ZigiJXMgLSBoYXMg
JXUgb251bmxvYWQgaGFuZGxlcihzKVxuIiwgZnJhbWVOYW1lLCBwZW5kaW5nRnJhbWVVbmxvYWRF
dmVudHMpOwotICAgICAgICAgICAgZ19mcmVlKGZyYW1lTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYlZpZXdPbmxvYWRFdmVudChXZWJLaXRXZWJWaWV3KiB2aWV3
LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIHZvaWQqKQotewotICAgIGlmICghZG9uZSAmJiBnVGVz
dFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGNoYXIqIGZyYW1l
TmFtZSA9IGdldEZyYW1lTmFtZVN1aXRhYmxlRm9yVGVzdFJlc3VsdCh2aWV3LCBmcmFtZSk7Ci0g
ICAgICAgIHByaW50ZigiJXMgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZVxuIiwgZnJh
bWVOYW1lKTsKLSAgICAgICAgZ19mcmVlKGZyYW1lTmFtZSk7Ci0gICAgfQotfQotCi1zdGF0aWMg
dm9pZCBhZGRDb250cm9sbGVyVG9XaW5kb3coSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbmRvd09iamVjdCwgY29uc3QgY2hhciogY29udHJvbGxlck5hbWUsIEpTVmFsdWVSZWYg
Y29udHJvbGxlcikKLXsKLSAgICBKU1N0cmluZ1JlZiBjb250cm9sbGVyTmFtZVN0ciA9IEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnRyb2xsZXJOYW1lKTsKLSAgICBKU09iamVjdFNl
dFByb3BlcnR5KGNvbnRleHQsIHdpbmRvd09iamVjdCwgY29udHJvbGxlck5hbWVTdHIsIGNvbnRy
b2xsZXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUsIDApOwotICAgIEpTU3RyaW5nUmVsZWFzZShjb250cm9sbGVyTmFtZVN0cik7
IAotfQotCi1zdGF0aWMgdm9pZCB3ZWJWaWV3V2luZG93T2JqZWN0Q2xlYXJlZChXZWJLaXRXZWJW
aWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEpTR2xvYmFsQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgSlNW
YWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEFTU0VSVChnVGVzdFJ1bm5lcik7Ci0KLSAgICBn
VGVzdFJ1bm5lci0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNl
cHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKLQotICAgIGdjQ29udHJvbGxlci0+bWFr
ZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3dPYmplY3QsICZleGNlcHRpb24pOwotICAgIEFT
U0VSVCghZXhjZXB0aW9uKTsKLQotI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAgICBheENvbnRy
b2xsZXItPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93T2JqZWN0LCAmZXhjZXB0aW9u
KTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0jZW5kaWYKLQotICAgIGFkZENvbnRyb2xsZXJU
b1dpbmRvdyhjb250ZXh0LCB3aW5kb3dPYmplY3QsICJldmVudFNlbmRlciIsIG1ha2VFdmVudFNl
bmRlcihjb250ZXh0LCAhd2Via2l0X3dlYl9mcmFtZV9nZXRfcGFyZW50KGZyYW1lKSkpOwotICAg
IGFkZENvbnRyb2xsZXJUb1dpbmRvdyhjb250ZXh0LCB3aW5kb3dPYmplY3QsICJ0ZXh0SW5wdXRD
b250cm9sbGVyIiwgbWFrZVRleHRJbnB1dENvbnRyb2xsZXIoY29udGV4dCkpOwotICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4gd2ViVmlld0NvbnNvbGVNZXNzYWdlKFdlYktpdFdlYlZpZXcqIHZpZXcsIGNv
bnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZSwgY29uc3QgZ2NoYXIqIHNvdXJj
ZUlkLCBncG9pbnRlciBkYXRhKQotewotICAgIGdjaGFyKiB0ZXN0TWVzc2FnZSA9IDA7Ci0gICAg
Y29uc3QgZ2NoYXIqIHVyaVNjaGVtZTsKLQotICAgIC8vIFRlc3RzIGV4cGVjdCBvbmx5IHRoZSBm
aWxlbmFtZSBwYXJ0IG9mIGxvY2FsIFVSSXMKLSAgICB1cmlTY2hlbWUgPSBnX3N0cnN0cl9sZW4o
bWVzc2FnZSwgLTEsICJmaWxlOi8vIik7Ci0gICAgaWYgKHVyaVNjaGVtZSkgewotICAgICAgICBH
U3RyaW5nKiB0ZW1wU3RyaW5nID0gZ19zdHJpbmdfc2l6ZWRfbmV3KHN0cmxlbihtZXNzYWdlKSk7
Ci0gICAgICAgIGdjaGFyKiBmaWxlbmFtZSA9IGdfc3RycnN0cih1cmlTY2hlbWUsIEdfRElSX1NF
UEFSQVRPUl9TKTsKLQotICAgICAgICBpZiAoZmlsZW5hbWUpIHsKLSAgICAgICAgICAgIC8vIElm
IHRoZSBwYXRoIGlzIGEgbG9uZSBzbGFzaCwga2VlcCBpdCB0byBhdm9pZCBlbXB0eSBvdXRwdXQu
Ci0gICAgICAgICAgICBpZiAoc3RybGVuKGZpbGVuYW1lKSA+IDEpCi0gICAgICAgICAgICAgICAg
ZmlsZW5hbWUgKz0gc3RybGVuKEdfRElSX1NFUEFSQVRPUl9TKTsKLSAgICAgICAgICAgIHRlbXBT
dHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfbGVuKHRlbXBTdHJpbmcsIG1lc3NhZ2UsICh1cmlTY2hl
bWUgLSBtZXNzYWdlKSk7Ci0gICAgICAgICAgICB0ZW1wU3RyaW5nID0gZ19zdHJpbmdfYXBwZW5k
X2xlbih0ZW1wU3RyaW5nLCBmaWxlbmFtZSwgc3RybGVuKGZpbGVuYW1lKSk7Ci0gICAgICAgICAg
ICB0ZXN0TWVzc2FnZSA9IGdfc3RyaW5nX2ZyZWUodGVtcFN0cmluZywgRkFMU0UpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgZnByaW50ZihzdGRvdXQsICJDT05TT0xFIE1FU1NBR0U6ICIpOwot
ICAgIGlmIChsaW5lKQotICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImxpbmUgJWQ6ICIsIGxpbmUp
OwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXNcbiIsIHRlc3RNZXNzYWdlID8gdGVzdE1lc3NhZ2Ug
OiBtZXNzYWdlKTsKLSAgICBnX2ZyZWUodGVzdE1lc3NhZ2UpOwotCi0gICAgcmV0dXJuIFRSVUU7
Ci19Ci0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3
KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBncG9p
bnRlciBkYXRhKQotewotICAgIGZwcmludGYoc3Rkb3V0LCAiQUxFUlQ6ICVzXG4iLCBtZXNzYWdl
KTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdi
b29sZWFuIHdlYlZpZXdTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0
V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2FnZSwgY29uc3QgZ2NoYXIqIGRlZmF1
bHRWYWx1ZSwgZ2NoYXIqKiB2YWx1ZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBmcHJpbnRmKHN0
ZG91dCwgIlBST01QVDogJXMsIGRlZmF1bHQgdGV4dDogJXNcbiIsIG1lc3NhZ2UsIGRlZmF1bHRW
YWx1ZSk7Ci0gICAgKnZhbHVlID0gZ19zdHJkdXAoZGVmYXVsdFZhbHVlKTsKLSAgICByZXR1cm4g
VFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdTY3JpcHRDb25maXJtKFdlYktpdFdl
YlZpZXcqIHZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3NhZ2Us
IGdib29sZWFuKiBkaWRDb25maXJtLCBncG9pbnRlciBkYXRhKQotewotICAgIGZwcmludGYoc3Rk
b3V0LCAiQ09ORklSTTogJXNcbiIsIG1lc3NhZ2UpOwotICAgICpkaWRDb25maXJtID0gVFJVRTsK
LSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgd2ViVmlld1RpdGxlQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiB0
aXRsZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSAmJiAhZG9uZSkgewotICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGZyYW1l
TmFtZShnZXRGcmFtZU5hbWVTdWl0YWJsZUZvclRlc3RSZXN1bHQodmlldywgZnJhbWUpKTsKLSAg
ICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVUaXRsZTogJXNcbiIsIGZyYW1lTmFtZS5nZXQo
KSwgdGl0bGUgPyB0aXRsZSA6ICIiKTsKLSAgICB9Ci0KLSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1
bXBUaXRsZUNoYW5nZXMoKSAmJiAhZG9uZSkKLSAgICAgICAgcHJpbnRmKCJUSVRMRSBDSEFOR0VE
OiAnJXMnXG4iLCB0aXRsZSA/IHRpdGxlIDogIiIpOwotfQotCi1zdGF0aWMgYm9vbCB3ZWJWaWV3
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUmVxdWVzdGVkKFdlYktpdFdlYlZpZXcqIHZpZXcsIFdl
YktpdFdlYkZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYk5h
dmlnYXRpb25BY3Rpb24qIG5hdkFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2ViUG9saWN5RGVjaXNpb24qIHBvbGljeURl
Y2lzaW9uKQotewotICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGlmIHdlJ3JlIG5vdCB3
YWl0aW5nIGZvciBwb2xpY3ksCi0gICAgLy8gaS5lLiwgVGVzdFJ1bm5lcjo6d2FpdEZvclBvbGlj
eURlbGVnYXRlCi0gICAgaWYgKCF3YWl0Rm9yUG9saWN5KQotICAgICAgICByZXR1cm4gRkFMU0U7
Ci0KLSAgICBnY2hhciogdHlwZURlc2NyaXB0aW9uOwotICAgIFdlYktpdFdlYk5hdmlnYXRpb25S
ZWFzb24gcmVhc29uOwotICAgIGdfb2JqZWN0X2dldChHX09CSkVDVChuYXZBY3Rpb24pLCAicmVh
c29uIiwgJnJlYXNvbiwgTlVMTCk7Ci0KLSAgICBzd2l0Y2gocmVhc29uKSB7Ci0gICAgICAgIGNh
c2UgV0VCS0lUX1dFQl9OQVZJR0FUSU9OX1JFQVNPTl9MSU5LX0NMSUNLRUQ6Ci0gICAgICAgICAg
ICB0eXBlRGVzY3JpcHRpb24gPSBnX3N0cmR1cCgibGluayBjbGlja2VkIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfV0VCX05BVklHQVRJT05fUkVBU09OX0ZPUk1f
U1VCTUlUVEVEOgotICAgICAgICAgICAgdHlwZURlc2NyaXB0aW9uID0gZ19zdHJkdXAoImZvcm0g
c3VibWl0dGVkIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXRUJLSVRfV0VC
X05BVklHQVRJT05fUkVBU09OX0JBQ0tfRk9SV0FSRDoKLSAgICAgICAgICAgIHR5cGVEZXNjcmlw
dGlvbiA9IGdfc3RyZHVwKCJiYWNrL2ZvcndhcmQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdFQktJVF9XRUJfTkFWSUdBVElPTl9SRUFTT05fUkVMT0FEOgotICAgICAgICAg
ICAgdHlwZURlc2NyaXB0aW9uID0gZ19zdHJkdXAoInJlbG9hZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX1dFQl9OQVZJR0FUSU9OX1JFQVNPTl9GT1JNX1JFU1VC
TUlUVEVEOgotICAgICAgICAgICAgdHlwZURlc2NyaXB0aW9uID0gZ19zdHJkdXAoImZvcm0gcmVz
dWJtaXR0ZWQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdFQktJVF9XRUJf
TkFWSUdBVElPTl9SRUFTT05fT1RIRVI6Ci0gICAgICAgICAgICB0eXBlRGVzY3JpcHRpb24gPSBn
X3N0cmR1cCgib3RoZXIiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgdHlwZURlc2NyaXB0aW9uID0gZ19zdHJkdXAoImlsbGVnYWwgdmFsdWUiKTsK
LSAgICB9Ci0KLSAgICBwcmludGYoIlBvbGljeSBkZWxlZ2F0ZTogYXR0ZW1wdCB0byBsb2FkICVz
IHdpdGggbmF2aWdhdGlvbiB0eXBlICclcydcbiIsIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0
X3VyaShyZXF1ZXN0KSwgdHlwZURlc2NyaXB0aW9uKTsKLSAgICBnX2ZyZWUodHlwZURlc2NyaXB0
aW9uKTsKLQotICAgIHdlYmtpdF93ZWJfcG9saWN5X2RlY2lzaW9uX2lnbm9yZShwb2xpY3lEZWNp
c2lvbik7Ci0gICAgZ1Rlc3RSdW5uZXItPm5vdGlmeURvbmUoKTsKLQotICAgIHJldHVybiBUUlVF
OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJWaWV3U3RhdHVzQmFyVGV4dENoYW5nZWQoV2ViS2l0V2Vi
VmlldyogdmlldywgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAg
Ly8gQXJlIHdlIGRvaW5nIGFueXRoaW5nIHdyb25nPyBPbmUgdGVzdCB0aGF0IGRvZXMgbm90IGNh
bGwKLSAgICAvLyBkdW1wU3RhdHVzQ2FsbGJhY2tzIGdldHMgdHJ1ZSBoZXJlCi0gICAgaWYgKGdU
ZXN0UnVubmVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiVUkgREVM
RUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiVzXG4iLCBtZXNzYWdlKTsKLX0K
LQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdDbG9zZShXZWJLaXRXZWJWaWV3KiB2aWV3KQotewot
ICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHdlYlZpZXdMaXN0ID0gZ19zbGlzdF9yZW1vdmUod2Vi
Vmlld0xpc3QsIHZpZXcpOwotICAgIGdfb2JqZWN0X3VucmVmKHZpZXcpOwotCi0gICAgcmV0dXJu
IFRSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRhdGFiYXNlUXVvdGFFeGNlZWRlZChXZWJLaXRXZWJW
aWV3KiB2aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIFdlYktpdFdlYkRhdGFiYXNlICpkYXRh
YmFzZSkKLXsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBBU1NF
UlQoZGF0YWJhc2UpOwotCi0gICAgV2ViS2l0U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHdlYmtp
dF93ZWJfZGF0YWJhc2VfZ2V0X3NlY3VyaXR5X29yaWdpbihkYXRhYmFzZSk7Ci0gICAgaWYgKGdU
ZXN0UnVubmVyLT5kdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludGYoIlVJ
IERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbjp7JXMsICVzLCAlaX0gZGF0YWJhc2U6JXNcbiIsCi0gICAgICAgICAgICB3ZWJr
aXRfc2VjdXJpdHlfb3JpZ2luX2dldF9wcm90b2NvbChvcmlnaW4pLAotICAgICAgICAgICAgd2Vi
a2l0X3NlY3VyaXR5X29yaWdpbl9nZXRfaG9zdChvcmlnaW4pLAotICAgICAgICAgICAgd2Via2l0
X3NlY3VyaXR5X29yaWdpbl9nZXRfcG9ydChvcmlnaW4pLAotICAgICAgICAgICAgd2Via2l0X3dl
Yl9kYXRhYmFzZV9nZXRfbmFtZShkYXRhYmFzZSkpOwotICAgIH0KLSAgICB3ZWJraXRfc2VjdXJp
dHlfb3JpZ2luX3NldF93ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCA1ICogMTAyNCAqIDEwMjQp
OwotfQotCi1zdGF0aWMgYm9vbAotZ2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvblJlcXVlc3RlZChX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2ViRnJhbWUqLCBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURl
Y2lzaW9uKiBkZWNpc2lvbikKLXsKLSAgICBpZiAoIWdUZXN0UnVubmVyLT5pc0dlb2xvY2F0aW9u
UGVybWlzc2lvblNldCgpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgaWYgKGdUZXN0UnVu
bmVyLT5nZW9sb2NhdGlvblBlcm1pc3Npb24oKSkKLSAgICAgICAgd2Via2l0X2dlb2xvY2F0aW9u
X3BvbGljeV9hbGxvdyhkZWNpc2lvbik7Ci0gICAgZWxzZQotICAgICAgICB3ZWJraXRfZ2VvbG9j
YXRpb25fcG9saWN5X2RlbnkoZGVjaXNpb24pOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLQot
c3RhdGljIFdlYktpdFdlYlZpZXcqIHdlYlZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyosIFdlYktp
dFdlYkZyYW1lKik7Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJJbnNwZWN0b3JTaG93V2luZG93KFdl
YktpdFdlYkluc3BlY3RvciosIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgZ3RrX3dpbmRvd19zZXRf
ZGVmYXVsdF9zaXplKEdUS19XSU5ET1cod2ViSW5zcGVjdG9yV2luZG93KSwgVGVzdFJ1bm5lcjo6
dmlld1dpZHRoLCBUZXN0UnVubmVyOjp2aWV3SGVpZ2h0KTsKLSAgICBndGtfd2lkZ2V0X3Nob3df
YWxsKHdlYkluc3BlY3RvcldpbmRvdyk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiB3ZWJJbnNwZWN0b3JDbG9zZVdpbmRvdyhXZWJLaXRXZWJJbnNwZWN0b3IqLCBncG9p
bnRlciBkYXRhKQotewotICAgIGd0a193aWRnZXRfZGVzdHJveSh3ZWJJbnNwZWN0b3JXaW5kb3cp
OwotICAgIHdlYkluc3BlY3RvcldpbmRvdyA9IDA7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0
YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJJbnNwZWN0b3JJbnNwZWN0V2ViVmlldyhXZWJLaXRXZWJJ
bnNwZWN0b3IqLCBncG9pbnRlciBkYXRhKQotewotICAgIHdlYkluc3BlY3RvcldpbmRvdyA9IGd0
a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotCi0gICAgR3RrV2lkZ2V0KiB3ZWJW
aWV3ID0gc2VsZl9zY3JvbGxpbmdfd2Via2l0X3dlYl92aWV3X25ldygpOwotICAgIGd0a19jb250
YWluZXJfYWRkKEdUS19DT05UQUlORVIod2ViSW5zcGVjdG9yV2luZG93KSwKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJWaWV3KTsKLQotICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVcod2ViVmll
dyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRvcExvYWRpbmdGcmFtZUxvYWRGaW5pc2hlZCgpCi17Ci0g
ICAgdG9wTG9hZGluZ0ZyYW1lID0gMDsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96
ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRlIGxvYWQgZnJlZXplcyB0aGUgcXVldWUgZm9yIHRo
ZSByZXN0IG9mIHRoaXMgdGVzdAotICAgIGlmIChnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkK
LSAgICAgICAgZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgcHJvY2Vzc1dvcmss
IDAsIDApOwotICAgIGVsc2UKLSAgICAgICAgZHVtcCgpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJG
cmFtZUxvYWRTdGF0dXNOb3RpZmllZChXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGdwb2ludGVyIHVz
ZXJfZGF0YSkKLXsKLSAgICBXZWJLaXRMb2FkU3RhdHVzIGxvYWRTdGF0dXMgPSB3ZWJraXRfd2Vi
X2ZyYW1lX2dldF9sb2FkX3N0YXR1cyhmcmFtZSk7Ci0KLSAgICBpZiAoZ1Rlc3RSdW5uZXItPmR1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGZyYW1l
TmFtZShnZXRGcmFtZU5hbWVTdWl0YWJsZUZvclRlc3RSZXN1bHQod2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcoZnJhbWUpLCBmcmFtZSkpOwotCi0gICAgICAgIHN3aXRjaCAobG9hZFN0YXR1
cykgewotICAgICAgICBjYXNlIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMOgotICAgICAgICAgICAg
aWYgKCFkb25lKQotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lXG4iLCBmcmFtZU5hbWUuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV0VCS0lUX0xPQURfQ09NTUlUVEVEOgotICAgICAgICAgICAgaWYgKCFk
b25lKQotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVc
biIsIGZyYW1lTmFtZS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
RUJLSVRfTE9BRF9GSU5JU0hFRDoKLSAgICAgICAgICAgIGlmICghZG9uZSkKLSAgICAgICAgICAg
ICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoTG9hZEZvckZyYW1lXG4iLCBmcmFtZU5hbWUuZ2V0
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0VCS0lUX0xPQURfRkFJTEVE
OgotICAgICAgICAgICAgaWYgKCFkb25lKQotICAgICAgICAgICAgICAgIHByaW50ZigiJXMgLSBk
aWRGYWlsTG9hZFdpdGhFcnJvclxuIiwgZnJhbWVOYW1lLmdldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoKGxvYWRTdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNIRUQgfHwgbG9h
ZFN0YXR1cyA9PSBXRUJLSVRfTE9BRF9GQUlMRUQpCi0gICAgICAgICYmIGZyYW1lID09IHRvcExv
YWRpbmdGcmFtZSkKLSAgICAgICAgdG9wTG9hZGluZ0ZyYW1lTG9hZEZpbmlzaGVkKCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGZyYW1lQ3JlYXRlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotICAgIGdf
c2lnbmFsX2Nvbm5lY3Qod2ViRnJhbWUsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFD
Syh3ZWJGcmFtZUxvYWRTdGF0dXNOb3RpZmllZCksIE5VTEwpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Qod2ViRnJhbWUsICJpbnNlY3VyZS1jb250ZW50LXJ1biIsIEdfQ0FMTEJBQ0soZGlkUnVuSW5z
ZWN1cmVDb250ZW50KSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgcGF0aEZyb21Tb3VwVVJJ
KFNvdXBVUkkqIHVyaSkKLXsKLSAgICBpZiAoIXVyaSkKLSAgICAgICAgcmV0dXJuICIobnVsbCki
OwotCi0gICAgaWYgKCFnX3N0cl9lcXVhbCh1cmktPnNjaGVtZSwgImZpbGUiKSkKLSAgICAgICAg
cmV0dXJuIHNvdXBVUklUb1N0cmluZ1ByZXNlcnZpbmdQYXNzd29yZCh1cmkpLmRhdGEoKTsKLQot
ICAgIFN0cmluZyBwYXRoU3RyaW5nID0gdXJpLT5wYXRoOwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+
IHBhdGhCYXNlbmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKHBhdGhTdHJpbmcudXRmOCgpLmRhdGEo
KSkpOwotCi0gICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KTsKLSAgICBHVW5pcXVlUHRyPFNvdXBVUkk+IG1haW5GcmFt
ZVVyaShzb3VwX3VyaV9uZXcod2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1haW5GcmFtZSkpKTsK
LQotICAgIFN0cmluZyBtYWluRnJhbWVVcmlQYXRoU3RyaW5nID0gbWFpbkZyYW1lVXJpLmdldCgp
LT5wYXRoOwotICAgIFN0cmluZyBiYXNlUGF0aCA9IG1haW5GcmFtZVVyaVBhdGhTdHJpbmcuc3Vi
c3RyaW5nKDAsIG1haW5GcmFtZVVyaVBhdGhTdHJpbmcucmV2ZXJzZUZpbmQoJy8nKSArIDEpOwot
Ci0gICAgaWYgKCFiYXNlUGF0aC5pc0VtcHR5KCkgJiYgcGF0aFN0cmluZy5zdGFydHNXaXRoKGJh
c2VQYXRoKSkKLSAgICAgICAgcmV0dXJuIHBhdGhTdHJpbmcuc3Vic3RyaW5nKGJhc2VQYXRoLmxl
bmd0aCgpKTsKLQotICAgIHJldHVybiBwYXRoQmFzZW5hbWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBD
U3RyaW5nIGNvbnZlcnRTb3VwTWVzc2FnZVRvVVJMUGF0aChTb3VwTWVzc2FnZSogc291cE1lc3Nh
Z2UpCi17Ci0gICAgaWYgKCFzb3VwTWVzc2FnZSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoIihu
dWxsKSIpOwotICAgIGlmIChTb3VwVVJJKiByZXF1ZXN0VVJJID0gc291cF9tZXNzYWdlX2dldF91
cmkoc291cE1lc3NhZ2UpKQotICAgICAgICByZXR1cm4gcGF0aEZyb21Tb3VwVVJJKHJlcXVlc3RV
UkkpLnV0ZjgoKTsKLSAgICByZXR1cm4gQ1N0cmluZygiKG51bGwpIik7Ci19Ci0KLXN0YXRpYyBD
U3RyaW5nIGNvbnZlcnROZXR3b3JrUmVxdWVzdFRvVVJMUGF0aChXZWJLaXROZXR3b3JrUmVxdWVz
dCogcmVxdWVzdCkKLXsKLSAgICByZXR1cm4gY29udmVydFNvdXBNZXNzYWdlVG9VUkxQYXRoKHdl
YmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVxdWVzdCkpOwotfQotCi1zdGF0aWMg
Q1N0cmluZyBjb252ZXJ0V2ViUmVzb3VyY2VUb1VSTFBhdGgoV2ViS2l0V2ViUmVzb3VyY2UqIHdl
YlJlc291cmNlKQotewotICAgIEdVbmlxdWVQdHI8U291cFVSST4gdXJpKHNvdXBfdXJpX25ldyh3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkod2ViUmVzb3VyY2UpKSk7Ci0gICAgcmV0dXJuIHBh
dGhGcm9tU291cFVSSSh1cmkuZ2V0KCkpLnV0ZjgoKTsKLX0KLQotc3RhdGljIENTdHJpbmcgdXJs
U3VpdGFibGVGb3JUZXN0UmVzdWx0KGNvbnN0IGNoYXIqIHVyaVN0cmluZykKLXsKLSAgICBpZiAo
IWdfc3RyX2hhc19wcmVmaXgodXJpU3RyaW5nLCAiZmlsZTovLyIpKQotICAgICAgICByZXR1cm4g
Q1N0cmluZyh1cmlTdHJpbmcpOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gYmFzZW5hbWUoZ19w
YXRoX2dldF9iYXNlbmFtZSh1cmlTdHJpbmcpKTsKLSAgICByZXR1cm4gQ1N0cmluZyhiYXNlbmFt
ZS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0
UmVzdWx0KFNvdXBVUkkqIHVyaSkKLXsKLSAgICBpZiAoIXVyaSkKLSAgICAgICAgcmV0dXJuIENT
dHJpbmcoIihudWxsKSIpOwotCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiB1cmlTdHJpbmcoc291cF91
cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKLSAgICByZXR1cm4gdXJsU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHVyaVN0cmluZy5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGRlc2NyaXB0aW9u
U3VpdGFibGVGb3JUZXN0UmVzdWx0KEdFcnJvciogZXJyb3IsIFdlYktpdFdlYlJlc291cmNlKiB3
ZWJSZXNvdXJjZSkKLXsKLSAgICBjb25zdCBnY2hhciogZXJyb3JEb21haW4gPSBnX3F1YXJrX3Rv
X3N0cmluZyhlcnJvci0+ZG9tYWluKTsKLSAgICBDU3RyaW5nIHJlc291cmNlVVJJU3RyaW5nKHVy
bFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkod2ViUmVz
b3VyY2UpKSk7Ci0KLSAgICBpZiAoZ19zdHJfZXF1YWwoZXJyb3JEb21haW4sICJ3ZWJraXQtbmV0
d29yay1lcnJvci1xdWFyayIpIHx8IGdfc3RyX2VxdWFsKGVycm9yRG9tYWluLCAic291cF9odHRw
X2Vycm9yX3F1YXJrIikpCi0gICAgICAgIGVycm9yRG9tYWluID0gIk5TVVJMRXJyb3JEb21haW4i
OwotCi0gICAgaWYgKGdfc3RyX2VxdWFsKGVycm9yRG9tYWluLCAiV2ViS2l0UG9saWN5RXJyb3Ii
KSkKLSAgICAgICAgZXJyb3JEb21haW4gPSAiV2ViS2l0RXJyb3JEb21haW4iOwotCi0gICAgLy8g
VE9ETzogdGhlIG90aGVyIHBvcnRzIGdldCB0aGUgZmFpbGluZ1VSTCBmcm9tIHRoZSBSZXNvdXJj
ZUVycm9yCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBlcnJvclN0cmluZyhnX3N0cmR1cF9wcmludGYo
IjxOU0Vycm9yIGRvbWFpbiAlcywgY29kZSAlZCwgZmFpbGluZyBVUkwgXCIlc1wiPiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JEb21haW4sIGVy
cm9yLT5jb2RlLCByZXNvdXJjZVVSSVN0cmluZy5kYXRhKCkpKTsKLSAgICByZXR1cm4gQ1N0cmlu
ZyhlcnJvclN0cmluZy5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBDU3RyaW5nIGRlc2NyaXB0aW9uU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KQotewotICAg
IFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21l
c3NhZ2UocmVxdWVzdCk7Ci0KLSAgICBpZiAoIXNvdXBNZXNzYWdlKQotICAgICAgICByZXR1cm4g
Q1N0cmluZygiKG51bGwpIik7Ci0KLSAgICBTb3VwVVJJKiBtYWluRG9jdW1lbnRVUkkgPSBzb3Vw
X21lc3NhZ2VfZ2V0X2ZpcnN0X3BhcnR5KHNvdXBNZXNzYWdlKTsKLSAgICBDU3RyaW5nIG1haW5E
b2N1bWVudFVSSVN0cmluZyhkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChtYWluRG9j
dW1lbnRVUkkpKTsKLSAgICBDU3RyaW5nIHBhdGgoY29udmVydE5ldHdvcmtSZXF1ZXN0VG9VUkxQ
YXRoKHJlcXVlc3QpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2NyaXB0aW9uKGdfc3RyZHVw
X3ByaW50ZigiPE5TVVJMUmVxdWVzdCBVUkwgJXMsIG1haW4gZG9jdW1lbnQgVVJMICVzLCBodHRw
IG1ldGhvZCAlcz4iLAotICAgICAgICBwYXRoLmRhdGEoKSwgbWFpbkRvY3VtZW50VVJJU3RyaW5n
LmRhdGEoKSwgc291cE1lc3NhZ2UtPm1ldGhvZCkpOwotICAgIHJldHVybiBDU3RyaW5nKGRlc2Ny
aXB0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIENTdHJpbmcgZGVzY3JpcHRpb25TdWl0YWJsZUZv
clRlc3RSZXN1bHQoV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSkKLXsKLSAgICBpZiAo
IXJlc3BvbnNlKQotICAgICAgICByZXR1cm4gQ1N0cmluZygiKG51bGwpIik7Ci0KLSAgICBpbnQg
c3RhdHVzQ29kZSA9IDA7Ci0gICAgQ1N0cmluZyByZXNwb25zZVVSSVN0cmluZyh1cmxTdWl0YWJs
ZUZvclRlc3RSZXN1bHQod2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3VyaShyZXNwb25zZSkp
KTsKLSAgICBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UgPSB3ZWJraXRfbmV0d29ya19yZXNwb25z
ZV9nZXRfbWVzc2FnZShyZXNwb25zZSk7Ci0gICAgQ1N0cmluZyBwYXRoOwotCi0gICAgaWYgKHNv
dXBNZXNzYWdlKSB7Ci0gICAgICAgIHN0YXR1c0NvZGUgPSBzb3VwTWVzc2FnZS0+c3RhdHVzX2Nv
ZGU7Ci0gICAgICAgIHBhdGggPSBjb252ZXJ0U291cE1lc3NhZ2VUb1VSTFBhdGgoc291cE1lc3Nh
Z2UpOwotICAgIH0gZWxzZQotICAgICAgICBwYXRoID0gQ1N0cmluZygiKG51bGwpIik7Ci0KLSAg
ICBHVW5pcXVlUHRyPGNoYXI+IGRlc2NyaXB0aW9uKGdfc3RyZHVwX3ByaW50ZigiPE5TVVJMUmVz
cG9uc2UgJXMsIGh0dHAgc3RhdHVzIGNvZGUgJWQ+IiwgcGF0aC5kYXRhKCksIHN0YXR1c0NvZGUp
KTsKLSAgICByZXR1cm4gQ1N0cmluZyhkZXNjcmlwdGlvbi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdpbGxTZW5kUmVxdWVzdENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dFdlYkZyYW1lKiB3ZWJGcmFtZSwgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRO
ZXR3b3JrUmVxdWVzdCogcmVxdWVzdCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSkK
LXsKLQotCi0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbCgpKSB7Ci0gICAgICAgIC8vIEFzIHJlcXVlc3RlZCBieSB0aGUgVGVzdFJ1bm5lciwg
ZG9uJ3QgcGVyZm9ybSB0aGUgcmVxdWVzdC4KLSAgICAgICAgd2Via2l0X25ldHdvcmtfcmVxdWVz
dF9zZXRfdXJpKHJlcXVlc3QsICJhYm91dDpibGFuayIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3VyY2VMb2FkQ2FsbGJh
Y2tzKCkpCi0gICAgICAgIHByaW50ZigiJXMgLSB3aWxsU2VuZFJlcXVlc3QgJXMgcmVkaXJlY3RS
ZXNwb25zZSAlc1xuIiwKLSAgICAgICAgICAgICAgIGNvbnZlcnROZXR3b3JrUmVxdWVzdFRvVVJM
UGF0aChyZXF1ZXN0KS5kYXRhKCksCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlvblN1aXRhYmxl
Rm9yVGVzdFJlc3VsdChyZXF1ZXN0KS5kYXRhKCksCi0gICAgICAgICAgICAgICBkZXNjcmlwdGlv
blN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSkuZGF0YSgpKTsKLQotICAgIFNvdXBNZXNz
YWdlKiBzb3VwTWVzc2FnZSA9IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UocmVx
dWVzdCk7Ci0gICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3KHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7Ci0KLSAgICBpZiAoU09VUF9VUklfSVNfVkFMSUQodXJp
KSkgewotICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHVyaVN0cmluZyhzb3VwX3VyaV90b19zdHJp
bmcodXJpLCBGQUxTRSkpOwotCi0gICAgICAgIGlmIChTT1VQX1VSSV9WQUxJRF9GT1JfSFRUUCh1
cmkpICYmIGdfc3RyY21wMCh1cmktPmhvc3QsICIxMjcuMC4wLjEiKQotICAgICAgICAgICAgJiYg
Z19zdHJjbXAwKHVyaS0+aG9zdCwgIjI1NS4yNTUuMjU1LjI1NSIpCi0gICAgICAgICAgICAmJiBn
X2FzY2lpX3N0cm5jYXNlY21wKHVyaS0+aG9zdCwgImxvY2FsaG9zdCIsIDkpKSB7Ci0gICAgICAg
ICAgICBwcmludGYoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAlc1xuIiwgdXJpU3Ry
aW5nLmdldCgpKTsKLSAgICAgICAgICAgIC8vIENhbmNlbCBsb2FkIG9mIGJsb2NrZWQgcmVzb3Vy
Y2UgdG8gYXZvaWQgcG90ZW50aWFsCi0gICAgICAgICAgICAvLyBuZXR3b3JrLXJlbGF0ZWQgdGlt
ZW91dHMgaW4gdGVzdHMuCi0gICAgICAgICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X3NldF91
cmkocmVxdWVzdCwgImFib3V0OmJsYW5rIik7Ci0gICAgICAgICAgICBzb3VwX3VyaV9mcmVlKHVy
aSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBzdHJp
bmcmIGRlc3RpbmF0aW9uID0gZ1Rlc3RSdW5uZXItPnJlZGlyZWN0aW9uRGVzdGluYXRpb25Gb3JV
UkwodXJpU3RyaW5nLmdldCgpKTsKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbi5lbXB0eSgpKQot
ICAgICAgICAgICAgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9zZXRfdXJpKHJlcXVlc3QsIGRlc3Rp
bmF0aW9uLmNfc3RyKCkpOwotICAgIH0KLQotICAgIGlmICh1cmkpCi0gICAgICAgIHNvdXBfdXJp
X2ZyZWUodXJpKTsKLQotICAgIGlmIChzb3VwTWVzc2FnZSkgewotICAgICAgICBjb25zdCBzZXQ8
c3RyaW5nPiYgY2xlYXJIZWFkZXJzID0gZ1Rlc3RSdW5uZXItPndpbGxTZW5kUmVxdWVzdENsZWFy
SGVhZGVycygpOwotICAgICAgICBmb3IgKHNldDxzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBoZWFk
ZXIgPSBjbGVhckhlYWRlcnMuYmVnaW4oKTsgaGVhZGVyICE9IGNsZWFySGVhZGVycy5lbmQoKTsg
KytoZWFkZXIpCi0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19yZW1vdmUoc291cE1l
c3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgaGVhZGVyLT5jX3N0cigpKTsKLSAgICB9Ci19Ci0KLQot
c3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdFdlYkZyYW1lKiwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlLCBXZWJLaXROZXR3
b3JrUmVzcG9uc2UqIHJlc3BvbnNlKQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIENTdHJpbmcgcmVzcG9uc2VE
ZXNjcmlwdGlvbihkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSkpOwot
ICAgICAgICBDU3RyaW5nIHBhdGgoY29udmVydFdlYlJlc291cmNlVG9VUkxQYXRoKHdlYlJlc291
cmNlKSk7Ci0gICAgICAgIHByaW50ZigiJXMgLSBkaWRSZWNlaXZlUmVzcG9uc2UgJXNcbiIsIHBh
dGguZGF0YSgpLCByZXNwb25zZURlc2NyaXB0aW9uLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgLy8g
VE9ETzogYWRkICJoYXMgTUlNRSB0eXBlIiB3aGVuZXZlciBkdW1wUmVzb3VyY2VSZXNwb25zZU1J
TUVUeXBlcygpIGlzIHN1cHBvcnRlZC4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4MjIyLgotfQotCi1zdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSwgV2Vi
S2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlKQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1
bm5lci0+ZHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIiVzIC0g
ZGlkRmluaXNoTG9hZGluZ1xuIiwgY29udmVydFdlYlJlc291cmNlVG9VUkxQYXRoKHdlYlJlc291
cmNlKS5kYXRhKCkpOwotfQotCi1zdGF0aWMgdm9pZCBkaWRGYWlsTG9hZGluZ1dpdGhFcnJvcihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJGcmFtZSogd2ViRnJhbWUsIFdlYktpdFdl
YlJlc291cmNlKiB3ZWJSZXNvdXJjZSwgR0Vycm9yKiB3ZWJFcnJvcikKLXsKLSAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAg
ICBDU3RyaW5nIHdlYkVycm9yU3RyaW5nKGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0
KHdlYkVycm9yLCB3ZWJSZXNvdXJjZSkpOwotICAgICAgICBwcmludGYoIiVzIC0gZGlkRmFpbExv
YWRpbmdXaXRoRXJyb3I6ICVzXG4iLCBjb252ZXJ0V2ViUmVzb3VyY2VUb1VSTFBhdGgod2ViUmVz
b3VyY2UpLmRhdGEoKSwKLSAgICAgICAgICAgICAgIHdlYkVycm9yU3RyaW5nLmRhdGEoKSk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoV2ViS2l0V2ViRnJh
bWUqLCBXZWJLaXRTZWN1cml0eU9yaWdpbiosIGNvbnN0IGNoYXIqIHVybCkKLXsKLSAgICBpZiAo
IWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAg
cHJpbnRmKCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
d2ViVmlld1J1bkZpbGVDaG9vc2VyKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqKQotewotICAgIC8vIFdlIHJldHVybiBUUlVFIHRvIG5vdCBwcm9wYWdhdGUgdGhlIGV2
ZW50IGZ1cnRoZXIgc28gdGhlCi0gICAgLy8gZGVmYXVsdCBmaWxlIGNob29zZXIgZGlhbG9nIGlz
IG5vdCBzaG93bi4KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgZnJhbWVMb2Fk
RXZlbnRDYWxsYmFjayhXZWJLaXRXZWJGcmFtZSogZnJhbWUsIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6RnJhbWVMb2FkRXZlbnQgZXZlbnQsIGNvbnN0IGNoYXIqIHVybCkKLXsKLSAgICBpZiAo
ZG9uZSB8fCAhZ1Rlc3RSdW5uZXItPmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBmcmFtZU5hbWUoZ2V0RnJhbWVOYW1lU3Vp
dGFibGVGb3JUZXN0UmVzdWx0KHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KGZyYW1lKSwg
ZnJhbWUpKTsKLSAgICBzd2l0Y2ggKGV2ZW50KSB7Ci0gICAgY2FzZSBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OldpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDoKLSAgICAgICAgQVNTRVJU
KHVybCk7Ci0gICAgICAgIHByaW50ZigiJXMgLSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9V
Ukw6ICVzIFxuIiwgZnJhbWVOYW1lLmdldCgpLCB1cmwpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6RGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3Q6Ci0g
ICAgICAgIHByaW50ZigiJXMgLSBkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lXG4iLCBm
cmFtZU5hbWUuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkOgot
ICAgICAgICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9u
YWxMb2FkRm9yRnJhbWVcbiIsIGZyYW1lTmFtZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpEaWREaXNwbGF5SW5zZWN1cmVDb250ZW50
OgotICAgICAgICBwcmludGYgKCJkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50XG4iKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OkRpZERldGVjdFhT
UzoKLSAgICAgICAgcHJpbnRmICgiZGlkRGV0ZWN0WFNTXG4iKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1z
dGF0aWMgYm9vbCBhdXRoZW50aWNhdGlvbkNhbGxiYWNrKENTdHJpbmcmIHVzZXJuYW1lLCBDU3Ry
aW5nJiBwYXNzd29yZCwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlKQotewotICAgIENT
dHJpbmcgZGVzY3JpcHRpb24oY29udmVydFdlYlJlc291cmNlVG9VUkxQYXRoKHdlYlJlc291cmNl
KSk7Ci0KLSAgICBpZiAoIWdUZXN0UnVubmVyLT5oYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VzKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSAtIFNpbXVsYXRpbmcgY2FuY2VsbGVkIGF1dGhlbnRpY2F0aW9uIHNoZWV0XG4iLCBk
ZXNjcmlwdGlvbi5kYXRhKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
dXNlcm5hbWUgPSBnVGVzdFJ1bm5lci0+YXV0aGVudGljYXRpb25Vc2VybmFtZSgpLmNfc3RyKCk7
Ci0gICAgcGFzc3dvcmQgPSBnVGVzdFJ1bm5lci0+YXV0aGVudGljYXRpb25QYXNzd29yZCgpLmNf
c3RyKCk7Ci0gICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSAtIFJlc3BvbmRpbmcgd2l0aCAlczolc1xuIiwgZGVzY3JpcHRpb24uZGF0YSgpLCB1c2VybmFt
ZS5kYXRhKCksIHBhc3N3b3JkLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBXZWJLaXRXZWJWaWV3KiBjcmVhdGVXZWJWaWV3KCkKLXsKLSAgICAvLyBJdCBpcyBpbXBvcnRh
bnQgdG8gZGVjbGFyZSBEUlQgaXMgcnVubmluZyBlYXJseSBzbyB3aGVuIGNyZWF0aW5nCi0gICAg
Ly8gd2ViIHZpZXcgbW9jayBjbGllbnRzIGFyZSB1c2VkIGluc3RlYWQgb2YgcHJvcGVyIG9uZXMu
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXREdW1wUmVuZGVyVHJlZU1vZGVFbmFi
bGVkKHRydWUpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRGcmFtZUxvYWRF
dmVudENhbGxiYWNrKGZyYW1lTG9hZEV2ZW50Q2FsbGJhY2spOwotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0QXV0aGVudGljYXRpb25DYWxsYmFjayhhdXRoZW50aWNhdGlvbkNhbGxi
YWNrKTsKLQotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoc2VsZl9z
Y3JvbGxpbmdfd2Via2l0X3dlYl92aWV3X25ldygpKTsKLQotICAgIGdfb2JqZWN0X2Nvbm5lY3Qo
R19PQkpFQ1QodmlldyksCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpsb2FkLXN0YXJ0
ZWQiLCB3ZWJWaWV3TG9hZFN0YXJ0ZWQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFs
Ojpsb2FkLWZpbmlzaGVkIiwgd2ViVmlld0xvYWRGaW5pc2hlZCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICJzaWduYWw6OmxvYWQtZXJyb3IiLCB3ZWJWaWV3TG9hZEVycm9yLCAwLAotICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6d2luZG93LW9iamVjdC1jbGVhcmVkIiwgd2ViVmlld1dp
bmRvd09iamVjdENsZWFyZWQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpjb25z
b2xlLW1lc3NhZ2UiLCB3ZWJWaWV3Q29uc29sZU1lc3NhZ2UsIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpzY3JpcHQtYWxlcnQiLCB3ZWJWaWV3U2NyaXB0QWxlcnQsIDAsCi0gICAg
ICAgICAgICAgICAgICAgICAic2lnbmFsOjpzY3JpcHQtcHJvbXB0Iiwgd2ViVmlld1NjcmlwdFBy
b21wdCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNjcmlwdC1jb25maXJtIiwg
d2ViVmlld1NjcmlwdENvbmZpcm0sIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjp0
aXRsZS1jaGFuZ2VkIiwgd2ViVmlld1RpdGxlQ2hhbmdlZCwgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICJzaWduYWw6Om5hdmlnYXRpb24tcG9saWN5LWRlY2lzaW9uLXJlcXVlc3RlZCIsIHdlYlZp
ZXdOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25SZXF1ZXN0ZWQsIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAic2lnbmFsOjpzdGF0dXMtYmFyLXRleHQtY2hhbmdlZCIsIHdlYlZpZXdTdGF0dXNCYXJU
ZXh0Q2hhbmdlZCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmNyZWF0ZS13ZWIt
dmlldyIsIHdlYlZpZXdDcmVhdGUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpj
bG9zZS13ZWItdmlldyIsIHdlYlZpZXdDbG9zZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICJz
aWduYWw6OmRhdGFiYXNlLXF1b3RhLWV4Y2VlZGVkIiwgZGF0YWJhc2VRdW90YUV4Y2VlZGVkLCAw
LAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6ZG9jdW1lbnQtbG9hZC1maW5pc2hlZCIs
IHdlYlZpZXdEb2N1bWVudExvYWRGaW5pc2hlZCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICJz
aWduYWw6Omdlb2xvY2F0aW9uLXBvbGljeS1kZWNpc2lvbi1yZXF1ZXN0ZWQiLCBnZW9sb2NhdGlv
blBvbGljeURlY2lzaW9uUmVxdWVzdGVkLCAwLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25h
bDo6b25sb2FkLWV2ZW50Iiwgd2ViVmlld09ubG9hZEV2ZW50LCAwLAotICAgICAgICAgICAgICAg
ICAgICAgInNpZ25hbDo6ZHJhZy1iZWdpbiIsIGRyYWdCZWdpbkNhbGxiYWNrLCAwLAotICAgICAg
ICAgICAgICAgICAgICAgInNpZ25hbDo6ZHJhZy1lbmQiLCBkcmFnRW5kQ2FsbGJhY2ssIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpkcmFnLWZhaWxlZCIsIGRyYWdGYWlsZWRDYWxs
YmFjaywgMCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OmZyYW1lLWNyZWF0ZWQiLCBm
cmFtZUNyZWF0ZWRDYWxsYmFjaywgMCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnJl
c291cmNlLXJlcXVlc3Qtc3RhcnRpbmciLCB3aWxsU2VuZFJlcXVlc3RDYWxsYmFjaywgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnJlc291cmNlLXJlc3BvbnNlLXJlY2VpdmVkIiwg
ZGlkUmVjZWl2ZVJlc3BvbnNlLCAwLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6cmVz
b3VyY2UtbG9hZC1maW5pc2hlZCIsIGRpZEZpbmlzaExvYWRpbmcsIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjpyZXNvdXJjZS1sb2FkLWZhaWxlZCIsIGRpZEZhaWxMb2FkaW5nV2l0
aEVycm9yLCAwLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6cnVuLWZpbGUtY2hvb3Nl
ciIsIHdlYlZpZXdSdW5GaWxlQ2hvb3NlciwgMCwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwp
OwotICAgIGNvbm5lY3RFZGl0aW5nQ2FsbGJhY2tzKHZpZXcpOwotCi0gICAgV2ViS2l0V2ViSW5z
cGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih2aWV3KTsK
LSAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKGluc3BlY3RvciksCi0gICAgICAgICAgICAg
ICAgICAgICAic2lnbmFsOjppbnNwZWN0LXdlYi12aWV3Iiwgd2ViSW5zcGVjdG9ySW5zcGVjdFdl
YlZpZXcsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG93LXdpbmRvdyIsIHdl
Ykluc3BlY3RvclNob3dXaW5kb3csIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpj
bG9zZS13aW5kb3ciLCB3ZWJJbnNwZWN0b3JDbG9zZVdpbmRvdywgMCwKLSAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOwotCi0gICAgaWYgKHdlYlZpZXcpIHsKLSAgICAgICAgV2ViS2l0V2ViU2V0
dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsK
LSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh2aWV3LCBzZXR0aW5ncyk7Ci0g
ICAgfQotCi0gICAgLy8gZnJhbWUtY3JlYXRlZCBpcyBub3QgaXNzdWVkIGZvciBtYWluIGZyYW1l
LiBUaGF0J3Mgd2h5IHdlIG11c3QgZG8gdGhpcyBoZXJlCi0gICAgV2ViS2l0V2ViRnJhbWUqIGZy
YW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHZpZXcpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZnJhbWUsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyh3ZWJGcmFt
ZUxvYWRTdGF0dXNOb3RpZmllZCksIE5VTEwpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZnJhbWUs
ICJpbnNlY3VyZS1jb250ZW50LXJ1biIsIEdfQ0FMTEJBQ0soZGlkUnVuSW5zZWN1cmVDb250ZW50
KSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gdmlldzsKLX0KLQotc3RhdGljIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyogdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1l
KQotewotICAgIGlmICghZ1Rlc3RSdW5uZXItPmNhbk9wZW5XaW5kb3dzKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2FpdFVudGlsRG9uZSBoYXMgYmVlbiBj
YWxsZWQuCi0gICAgQVNTRVJUKGdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpOwotCi0gICAgV2Vi
S2l0V2ViVmlldyogbmV3V2ViVmlldyA9IGNyZWF0ZVdlYlZpZXcoKTsKLSAgICBnX29iamVjdF9y
ZWZfc2luayhHX09CSkVDVChuZXdXZWJWaWV3KSk7Ci0gICAgd2ViVmlld0xpc3QgPSBnX3NsaXN0
X3ByZXBlbmQod2ViVmlld0xpc3QsIG5ld1dlYlZpZXcpOwotICAgIHJldHVybiBuZXdXZWJWaWV3
OwotfQotCi1zdGF0aWMgdm9pZCBsb2dIYW5kbGVyKGNvbnN0IGdjaGFyKiBkb21haW4sIEdMb2dM
ZXZlbEZsYWdzIGxldmVsLCBjb25zdCBnY2hhciogbWVzc2FnZSwgZ3BvaW50ZXIgZGF0YSkKLXsK
LSAgICBpZiAobGV2ZWwgPCBHX0xPR19MRVZFTF9ERUJVRykKLSAgICAgICAgZnByaW50ZihzdGRl
cnIsICIlc1xuIiwgbWVzc2FnZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCi17Ci0gICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKLQotICAgIC8vIFNvbWUgcGx1Z2lu
cyBtaWdodCB0cnkgdG8gdXNlIHRoZSBHTGliIGxvZ2dlciBmb3IgcHJpbnRpbmcgZGVidWcKLSAg
ICAvLyBtZXNzYWdlcy4gVGhpcyB3aWxsIGNhdXNlIHRlc3RzIHRvIGZhaWwgYmVjYXVzZSBvZiB1
bmV4cGVjdGVkIG91dHB1dC4KLSAgICAvLyBXZSBzcXVlbGNoIGFsbCBkZWJ1ZyBtZXNzYWdlcyBz
ZW50IHRvIHRoZSBsb2dnZXIuCi0gICAgZ19sb2dfc2V0X2RlZmF1bHRfaGFuZGxlcihsb2dIYW5k
bGVyLCAwKTsKLQotICAgIGluaXRpYWxpemVHbG9iYWxzRnJvbUNvbW1hbmRMaW5lT3B0aW9ucyhh
cmdjLCBhcmd2KTsKLSAgICBpbml0aWFsaXplRm9udHMoKTsKLQotICAgIHdpbmRvdyA9IGd0a193
aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwpOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
Ci0gICAgY29udGFpbmVyID0gZ3RrX2hib3hfbmV3KFRSVUUsIDApOwotI2Vsc2UKLSAgICBjb250
YWluZXIgPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgMCk7Ci0gICAg
Z3RrX2JveF9zZXRfaG9tb2dlbmVvdXMoR1RLX0JPWChjb250YWluZXIpLCBUUlVFKTsKLSNlbmRp
ZgotICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIod2luZG93KSwgY29udGFpbmVy
KTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpbmRvdyk7Ci0KLSAgICB3ZWJWaWV3ID0gY3Jl
YXRlV2ViVmlldygpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGNvbnRhaW5lciks
IEdUS19XSURHRVQod2ViVmlldyksIFRSVUUsIFRSVUUsIDApOwotICAgIGd0a193aWRnZXRfcmVh
bGl6ZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKGNvbnRh
aW5lcik7Ci0gICAgbWFpbkZyYW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdl
YlZpZXcpOwotCi0gICAgc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRTdGF0ZVZhbHVlc0ZvclRlc3Rp
bmcoKTsKLQotICAgIGdjQ29udHJvbGxlciA9IG5ldyBHQ0NvbnRyb2xsZXIoKTsKLSNpZiBIQVZF
KEFDQ0VTU0lCSUxJVFkpCi0gICAgYXhDb250cm9sbGVyID0gbmV3IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKCk7Ci0jZW5kaWYKLQotICAgIGlmICh1c2VMb25nUnVubmluZ1NlcnZlck1vZGUoYXJn
YywgYXJndikpIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0gdHJ1ZTsKLSAgICAgICAgcnVu
VGVzdGluZ1NlcnZlckxvb3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludFNlcGFyYXRv
cnMgPSAob3B0aW5kIDwgYXJnYy0xIHx8IChkdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgJiYgZHVt
cFRyZWUpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IG9wdGluZDsgaSAhPSBhcmdjOyArK2kpCi0g
ICAgICAgICAgICBydW5UZXN0KGFyZ3ZbaV0pOwotICAgIH0KLQotICAgIGRlbGV0ZSBnY0NvbnRy
b2xsZXI7Ci0gICAgZ2NDb250cm9sbGVyID0gMDsKLQotI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkK
LSAgICBkZWxldGUgYXhDb250cm9sbGVyOwotICAgIGF4Q29udHJvbGxlciA9IDA7Ci0jZW5kaWYK
LQotICAgIGd0a193aWRnZXRfZGVzdHJveSh3aW5kb3cpOwotCi0gICAgcmV0dXJuIDA7Ci19CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRHVtcFJlbmRlclRyZWVHdGsuaCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZUd0ay5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q2ZTZlMzQyODU0NTllZGRjOTA4OWQ2MDJiOTM2NzljOTQ5
NzVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9EdW1wUmVuZGVyVHJlZUd0ay5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJp
Y0B3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBEdW1wUmVuZGVyVHJlZUd0a19oCi0jZGVmaW5lIER1bXBSZW5kZXJUcmVlR3Rr
X2gKLQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotZXh0ZXJuIFdlYktpdFdl
YkZyYW1lKiBtYWluRnJhbWU7Ci1leHRlcm4gV2ViS2l0V2ViRnJhbWUqIHRvcExvYWRpbmdGcmFt
ZTsKLWV4dGVybiBib29sIHdhaXRGb3JQb2xpY3k7Ci1leHRlcm4gR1NMaXN0KiB3ZWJWaWV3TGlz
dDsKLQotZ2NoYXIqIEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKEpTU3RyaW5nUmVmIGpzU3RyaW5n
KTsKLUNTdHJpbmcgZ2V0VG9wTGV2ZWxQYXRoKCk7Ci0KLXZvaWQgc2V0V2FpdFRvRHVtcFdhdGNo
ZG9nKGd1aW50IHRpbWVyKTsKLWJvb2wgc2hvdWxkU2V0V2FpdFRvRHVtcFdhdGNoZG9nKCk7Ci1D
U3RyaW5nIHNvdXBVUklUb1N0cmluZ1ByZXNlcnZpbmdQYXNzd29yZChTb3VwVVJJKiBzb3VwVVJJ
KTsKLQotI2VuZGlmIC8vIER1bXBSZW5kZXJUcmVlR3RrX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGZlN2NhNDJkYzU1Y2I3NGU0NGU1NGQ1MGI1MGY1OWQ1NzE0MWY0Yy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvRWRpdGluZ0NhbGxiYWNrcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkVkaXRpbmdDYWxsYmFja3MuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5j
bHVkZSAiVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0Lmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotc3RhdGljIENTdHJpbmcgZHVtcE5vZGVQYXRoKFdl
YktpdERPTU5vZGUqIG5vZGUpCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gbm9kZU5hbWUod2Vi
a2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkpOwotICAgIEdTdHJpbmcqIHBhdGggPSBn
X3N0cmluZ19uZXcobm9kZU5hbWUuZ2V0KCkpOwotCi0gICAgV2ViS2l0RE9NTm9kZSogcGFyZW50
ID0gd2Via2l0X2RvbV9ub2RlX2dldF9wYXJlbnRfbm9kZShub2RlKTsKLSAgICB3aGlsZSAocGFy
ZW50KSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHBhcmVudE5hbWUod2Via2l0X2RvbV9u
b2RlX2dldF9ub2RlX25hbWUocGFyZW50KSk7Ci0KLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHBh
dGgsICIgPiAiKTsKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHBhdGgsIHBhcmVudE5hbWUuZ2V0
KCkpOwotICAgICAgICBwYXJlbnQgPSB3ZWJraXRfZG9tX25vZGVfZ2V0X3BhcmVudF9ub2RlKHBh
cmVudCk7Ci0gICAgfQotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gcGF0aEJ1ZmZlcihnX3N0cmlu
Z19mcmVlKHBhdGgsIEZBTFNFKSk7Ci0gICAgcmV0dXJuIHBhdGhCdWZmZXIuZ2V0KCk7Ci19Ci0K
LXN0YXRpYyBDU3RyaW5nIGR1bXBSYW5nZShXZWJLaXRET01SYW5nZSogcmFuZ2UpCi17Ci0gICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuICIobnVsbCkiOwotCi0gICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gZHVtcChnX3N0cmR1cF9wcmludGYoInJhbmdlIGZyb20gJWxpIG9mICVzIHRvICVsaSBv
ZiAlcyIsCi0gICAgICAgIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X3N0YXJ0X29mZnNldChyYW5nZSwg
MCksCi0gICAgICAgIGR1bXBOb2RlUGF0aCh3ZWJraXRfZG9tX3JhbmdlX2dldF9zdGFydF9jb250
YWluZXIocmFuZ2UsIDApKS5kYXRhKCksCi0gICAgICAgIHdlYmtpdF9kb21fcmFuZ2VfZ2V0X2Vu
ZF9vZmZzZXQocmFuZ2UsIDApLAotICAgICAgICBkdW1wTm9kZVBhdGgod2Via2l0X2RvbV9yYW5n
ZV9nZXRfZW5kX2NvbnRhaW5lcihyYW5nZSwgMCkpLmRhdGEoKSkpOwotCi0gICAgcmV0dXJuIGR1
bXAuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBpbnNlcnRBY3Rpb25TdHJpbmcoV2Vi
S2l0SW5zZXJ0QWN0aW9uIGFjdGlvbikKLXsKLSAgICBzd2l0Y2ggKGFjdGlvbikgewotICAgIGNh
c2UgV0VCS0lUX0lOU0VSVF9BQ1RJT05fVFlQRUQ6Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0lu
c2VydEFjdGlvblR5cGVkIjsKLSAgICBjYXNlIFdFQktJVF9JTlNFUlRfQUNUSU9OX1BBU1RFRDoK
LSAgICAgICAgcmV0dXJuICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIjsKLSAgICBjYXNlIFdF
QktJVF9JTlNFUlRfQUNUSU9OX0RST1BQRUQ6Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0luc2Vy
dEFjdGlvbkRyb3BwZWQiOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gIldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZCI7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFy
KiBzZWxlY3Rpb25BZmZpbml0eVN0cmluZyhXZWJLaXRTZWxlY3Rpb25BZmZpbml0eSBhZmZpbml0
eSkKLXsKLSAgICBzd2l0Y2ggKGFmZmluaXR5KSB7Ci0gICAgY2FzZSBXRUJLSVRfU0VMRUNUSU9O
X0FGRklOSVRZX1VQU1RSRUFNOgotICAgICAgICByZXR1cm4gIk5TU2VsZWN0aW9uQWZmaW5pdHlV
cHN0cmVhbSI7Ci0gICAgY2FzZSBXRUJLSVRfU0VMRUNUSU9OX0FGRklOSVRZX0RPV05TVFJFQU06
Ci0gICAgICAgIHJldHVybiAiTlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0iOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gIk5TU2VsZWN0aW9uQWZmaW5p
dHlVcHN0cmVhbSI7Ci19Ci0KLWdib29sZWFuIHNob3VsZEJlZ2luRWRpdGluZyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRET01SYW5nZSogcmFuZ2UpCi17Ci0gICAgaWYgKCFkb25lICYm
IGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6JXNcbiIsIGR1bXBS
YW5nZShyYW5nZSkuZGF0YSgpKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4gc2hv
dWxkRW5kRWRpdGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRET01SYW5nZSogcmFu
Z2UpCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJ
bkRPTVJhbmdlOiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIFRS
VUU7Ci19Ci0KLWdib29sZWFuIHNob3VsZEluc2VydE5vZGUoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0RE9NTm9kZSogbm9kZSwgV2ViS2l0RE9NUmFuZ2UqIHJhbmdlLCBXZWJLaXRJbnNl
cnRBY3Rpb24gYWN0aW9uKQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEluc2VydE5vZGU6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rpb246JXNcbiIs
Ci0gICAgICAgICAgICAgICBkdW1wTm9kZVBhdGgobm9kZSkuZGF0YSgpLCBkdW1wUmFuZ2UocmFu
Z2UpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3RyaW5nKGFjdGlvbikpOwotICAgIH0KLSAgICByZXR1
cm4gVFJVRTsKLX0KLQotZ2Jvb2xlYW4gc2hvdWxkSW5zZXJ0VGV4dChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBjb25zdCBnY2hhciogdGV4dCwgV2ViS2l0RE9NUmFuZ2UqIHJhbmdlLCBXZWJLaXRJ
bnNlcnRBY3Rpb24gYWN0aW9uKQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkgewotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEluc2VydFRleHQ6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rpb246JXNc
biIsCi0gICAgICAgICAgICAgICB0ZXh0LCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSwgaW5zZXJ0
QWN0aW9uU3RyaW5nKGFjdGlvbikpOwotICAgIH0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotZ2Jv
b2xlYW4gc2hvdWxkRGVsZXRlUmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RE9N
UmFuZ2UqIHJhbmdlKQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRE
ZWxldGVET01SYW5nZTolc1xuIiwgZHVtcFJhbmdlKHJhbmdlKS5kYXRhKCkpOwotICAgIHJldHVy
biBUUlVFOwotfQotCi1nYm9vbGVhbiBzaG91bGRTaG93RGVsZXRlSW50ZXJmYWNlRm9yRWxlbWVu
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRET01IVE1MRWxlbWVudCogZWxlbWVudCkK
LXsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLWdib29sZWFuIHNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0RE9NUmFuZ2UqIGZyb21SYW5nZSwg
V2ViS2l0RE9NUmFuZ2UqIHRvUmFuZ2UsIFdlYktpdFNlbGVjdGlvbkFmZmluaXR5IGFmZmluaXR5
LCBnYm9vbGVhbiBzdGlsbFNlbGVjdGluZykKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5u
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiVzIHRvRE9NUmFuZ2U6JXMgYWZm
aW5pdHk6JXMgc3RpbGxTZWxlY3Rpbmc6JXNcbiIsCi0gICAgICAgICAgICAgICBkdW1wUmFuZ2Uo
ZnJvbVJhbmdlKS5kYXRhKCksIGR1bXBSYW5nZSh0b1JhbmdlKS5kYXRhKCksIHNlbGVjdGlvbkFm
ZmluaXR5U3RyaW5nKGFmZmluaXR5KSwKLSAgICAgICAgICAgICAgIHN0aWxsU2VsZWN0aW5nID8g
IlRSVUUiIDogIkZBTFNFIik7Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotfQotCi1nYm9vbGVh
biBzaG91bGRBcHBseVN0eWxlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdERPTUNTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBXZWJLaXRET01SYW5nZSogcmFuZ2UpCi17Ci0gICAgaWYg
KCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAgICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHN0eWxlVGV4dCh3ZWJraXRfZG9tX2Nzc19zdHlsZV9kZWNsYXJh
dGlvbl9nZXRfY3NzX3RleHQoc3R5bGUpKTsKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVH
QVRFOiBzaG91bGRBcHBseVN0eWxlOiVzIHRvRWxlbWVudHNJbkRPTVJhbmdlOiVzXG4iLAotICAg
ICAgICAgICAgICAgc3R5bGVUZXh0LmdldCgpLCBkdW1wUmFuZ2UocmFuZ2UpLmRhdGEoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBUUlVFOwotfQotCi12b2lkIGVkaXRpbmdCZWdhbihXZWJLaXRXZWJW
aWV3KikKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJh
Y2tzKCkpCi0gICAgICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2lu
RWRpdGluZzpXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uXG4iKTsKLX0KLQotdm9p
ZCB1c2VyQ2hhbmdlZENvbnRlbnRzKFdlYktpdFdlYlZpZXcqKQotewotICAgIGlmICghZG9uZSAm
JiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJF
RElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmlj
YXRpb25cbiIpOwotfQotCi12b2lkIGVkaXRpbmdFbmRlZChXZWJLaXRXZWJWaWV3KikKLXsKLSAg
ICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAg
ICAgIHByaW50ZigiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6V2ViVmll
d0RpZEVuZEVkaXRpbmdOb3RpZmljYXRpb25cbiIpOwotfQotCi12b2lkIHNlbGVjdGlvbkNoYW5n
ZWQoV2ViS2l0V2ViVmlldyopCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvblxuIik7Ci19Ci0KLXZvaWQgY29ubmVjdEVkaXRpbmdDYWxsYmFja3MoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKLXsKLSAgICBnX29iamVjdF9jb25uZWN0KEdfT0JKRUNUKHdlYlZpZXcpLAot
ICAgICAgICAgICAgICAgICAgICAgInNpZ25hbDo6c2hvdWxkLWJlZ2luLWVkaXRpbmciLCBzaG91
bGRCZWdpbkVkaXRpbmcsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG91bGQt
ZW5kLWVkaXRpbmciLCBzaG91bGRFbmRFZGl0aW5nLCAwLAotICAgICAgICAgICAgICAgICAgICAg
InNpZ25hbDo6c2hvdWxkLWluc2VydC1ub2RlIiwgc2hvdWxkSW5zZXJ0Tm9kZSwgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3VsZC1pbnNlcnQtdGV4dCIsIHNob3VsZEluc2Vy
dFRleHQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzaG91bGQtZGVsZXRlLXJh
bmdlIiwgc2hvdWxkRGVsZXRlUmFuZ2UsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFs
OjpzaG91bGQtc2hvdy1kZWxldGUtaW50ZXJmYWNlLWZvci1lbGVtZW50Iiwgc2hvdWxkU2hvd0Rl
bGV0ZUludGVyZmFjZUZvckVsZW1lbnQsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFs
OjpzaG91bGQtY2hhbmdlLXNlbGVjdGVkLXJhbmdlIiwgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICJzaWduYWw6OnNob3VsZC1hcHBseS1zdHlsZSIs
IHNob3VsZEFwcGx5U3R5bGUsIDAsCi0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjplZGl0
aW5nLWJlZ2FuIiwgZWRpdGluZ0JlZ2FuLCAwLAotICAgICAgICAgICAgICAgICAgICAgInNpZ25h
bDo6dXNlci1jaGFuZ2VkLWNvbnRlbnRzIiwgdXNlckNoYW5nZWRDb250ZW50cywgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICJzaWduYWw6OmVkaXRpbmctZW5kZWQiLCBlZGl0aW5nRW5kZWQsIDAs
Ci0gICAgICAgICAgICAgICAgICAgICAic2lnbmFsOjpzZWxlY3Rpb24tY2hhbmdlZCIsIHNlbGVj
dGlvbkNoYW5nZWQsIDAsCi0gICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLX0KLQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0VkaXRpbmdDYWxsYmFja3MuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9FZGl0aW5nQ2FsbGJhY2tzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGRiOWY3YjVmNDJjOTljZjg5MGEwZDgxZjZmMDFlYjcxMDIyMWIxYTQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0VkaXRpbmdDYWxsYmFja3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRWRpdGluZ0NhbGxiYWNr
c19oCi0jZGVmaW5lIEVkaXRpbmdDYWxsYmFja3NfaAotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0
V2ViVmlldyBXZWJLaXRXZWJWaWV3Owotdm9pZCBjb25uZWN0RWRpdGluZ0NhbGxiYWNrcyhXZWJL
aXRXZWJWaWV3Kik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0V2ZW50U2VuZGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9FdmVudFNlbmRl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NTZmYTUyZjc0MGIxZmEyNGEx
N2I2Y2JjZjM3MmFmODI4OTAyNTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0V2ZW50U2VuZGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDEwMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRv
d0BnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKLQotI2luY2x1
ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrLmgiCi0jaW5jbHVkZSA8R1JlZlB0ckd0ay5oPgotI2luY2x1ZGUgPEd0
a1ZlcnNpb25pbmcuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGdk
ay9nZGsuaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJmcmFtZS5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+Ci0jaW5j
bHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgotCi1leHRlcm4gIkMiIHsKLSAgICBleHRlcm4gR3RrTWVudSogd2Via2l0X3dlYl92aWV3
X2dldF9jb250ZXh0X21lbnUoV2ViS2l0V2ViVmlldyopOwotfQotCi1zdGF0aWMgYm9vbCBkcmFn
TW9kZTsKLXN0YXRpYyBpbnQgdGltZU9mZnNldCA9IDA7Ci0KLXN0YXRpYyBpbnQgbGFzdE1vdXNl
UG9zaXRpb25YOwotc3RhdGljIGludCBsYXN0TW91c2VQb3NpdGlvblk7Ci1zdGF0aWMgaW50IGxh
c3RDbGlja1Bvc2l0aW9uWDsKLXN0YXRpYyBpbnQgbGFzdENsaWNrUG9zaXRpb25ZOwotc3RhdGlj
IGludCBsYXN0Q2xpY2tUaW1lT2Zmc2V0Owotc3RhdGljIGludCBsYXN0Q2xpY2tCdXR0b247Ci1z
dGF0aWMgdW5zaWduZWQgYnV0dG9uQ3VycmVudGx5RG93bjsKLXN0YXRpYyBpbnQgY2xpY2tDb3Vu
dDsKLUdka0RyYWdDb250ZXh0KiBjdXJyZW50RHJhZ1NvdXJjZUNvbnRleHQ7Ci0KLXN0cnVjdCBE
ZWxheWVkTWVzc2FnZSB7Ci0gICAgR2RrRXZlbnQqIGV2ZW50OwotICAgIGd1bG9uZyBkZWxheTsK
LX07Ci0KLXN0YXRpYyBEZWxheWVkTWVzc2FnZSBtc2dRdWV1ZVsxMDI0XTsKLQotc3RhdGljIHVu
c2lnbmVkIGVuZE9mUXVldWU7Ci1zdGF0aWMgdW5zaWduZWQgc3RhcnRPZlF1ZXVlOwotCi1zdGF0
aWMgY29uc3QgZmxvYXQgem9vbU11bHRpcGxpZXJSYXRpbyA9IDEuMmY7Ci0KLS8vIFdlYkNvcmUg
YW5kIGxheW91dCB0ZXN0cyBhc3N1bWUgdGhpcyB2YWx1ZS4KLXN0YXRpYyBjb25zdCBmbG9hdCBw
aXhlbHNQZXJTY3JvbGxUaWNrID0gNDA7Ci0KLS8vIEtleSBldmVudCBsb2NhdGlvbiBjb2RlIGRl
ZmluZWQgaW4gRE9NIExldmVsIDMuCi1lbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAgRE9NX0tF
WV9MT0NBVElPTl9TVEFOREFSRCAgICAgID0gMHgwMCwKLSAgICBET01fS0VZX0xPQ0FUSU9OX0xF
RlQgICAgICAgICAgPSAweDAxLAotICAgIERPTV9LRVlfTE9DQVRJT05fUklHSFQgICAgICAgICA9
IDB4MDIsCi0gICAgRE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0gMHgwMwotfTsKLQot
c3RhdGljIHZvaWQgc2VuZE9yUXVldWVFdmVudChHZGtFdmVudCosIGJvb2wgPSB0cnVlKTsKLXN0
YXRpYyB2b2lkIGRpc3BhdGNoRXZlbnQoR2RrRXZlbnQqIGV2ZW50KTsKLXN0YXRpYyBndWludCBn
ZXRTdGF0ZUZsYWdzKCk7Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGdldERyYWdNb2RlQ2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlQm9vbGVhbihjb250ZXh0LCBkcmFnTW9kZSk7Ci19Ci0KLXN0YXRpYyBib29sIHNldERyYWdN
b2RlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNT
dHJpbmdSZWYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgZHJhZ01vZGUgPSBKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIHZhbHVl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbGVhcEZvcndhcmRD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPiAwKSB7Ci0gICAgICAgIG1zZ1F1ZXVlW2VuZE9mUXVldWVdLmRlbGF5ID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICAgICAgdGlt
ZU9mZnNldCArPSBtc2dRdWV1ZVtlbmRPZlF1ZXVlXS5kZWxheTsKLSAgICAgICAgQVNTRVJUKCFl
eGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotYm9vbCBwcmVwYXJlTW91c2VCdXR0b25FdmVudChH
ZGtFdmVudCogZXZlbnQsIGludCBldmVudFNlbmRlckJ1dHRvbk51bWJlciwgZ3VpbnQgbW9kaWZp
ZXJzKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhlIGxvZ2ljIGZvciBtYXBwaW5nIEV2ZW50U2VuZGVyIGJ1dHRvbiBudW1i
ZXJzIHRvIEdESyBidXR0b24KLSAgICAvLyBudW1iZXJzIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2lu
ZG93cyBFdmVudFNlbmRlci4KLSAgICBpbnQgZ2RrQnV0dG9uTnVtYmVyID0gMzsKLSAgICBpZiAo
ZXZlbnRTZW5kZXJCdXR0b25OdW1iZXIgPj0gMCAmJiBldmVudFNlbmRlckJ1dHRvbk51bWJlciA8
PSAyKQotICAgICAgICBnZGtCdXR0b25OdW1iZXIgPSBldmVudFNlbmRlckJ1dHRvbk51bWJlciAr
IDE7Ci0KLSAgICAvLyBmYXN0L2V2ZW50cy9tb3VzZS1jbGljay1ldmVudHMgZXhwZWN0cyB0aGUg
NHRoIGJ1dHRvbgotICAgIC8vIHRvIGJlIGV2ZW50LT5idXR0b24gPSAxLCBzbyBzZW5kIGEgbWlk
ZGxlLWJ1dHRvbiBldmVudC4KLSAgICBlbHNlIGlmIChldmVudFNlbmRlckJ1dHRvbk51bWJlciA9
PSAzKQotICAgICAgICBnZGtCdXR0b25OdW1iZXIgPSAyOwotCi0gICAgZXZlbnQtPmJ1dHRvbi5i
dXR0b24gPSBnZGtCdXR0b25OdW1iZXI7Ci0gICAgZXZlbnQtPmJ1dHRvbi54ID0gbGFzdE1vdXNl
UG9zaXRpb25YOwotICAgIGV2ZW50LT5idXR0b24ueSA9IGxhc3RNb3VzZVBvc2l0aW9uWTsKLSAg
ICBldmVudC0+YnV0dG9uLndpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VU
KHZpZXcpKTsKLSAgICBnX29iamVjdF9yZWYoZXZlbnQtPmJ1dHRvbi53aW5kb3cpOwotICAgIGV2
ZW50LT5idXR0b24uZGV2aWNlID0gZ2V0RGVmYXVsdEdES1BvaW50ZXJEZXZpY2UoZXZlbnQtPmJ1
dHRvbi53aW5kb3cpOwotICAgIGV2ZW50LT5idXR0b24uc3RhdGUgPSBtb2RpZmllcnMgfCBnZXRT
dGF0ZUZsYWdzKCk7Ci0gICAgZXZlbnQtPmJ1dHRvbi50aW1lID0gR0RLX0NVUlJFTlRfVElNRTsK
LSAgICBldmVudC0+YnV0dG9uLmF4ZXMgPSAwOwotCi0gICAgaW50IHhSb290LCB5Um9vdDsKLSAg
ICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJ
REdFVCh2aWV3KSksIGxhc3RNb3VzZVBvc2l0aW9uWCwgbGFzdE1vdXNlUG9zaXRpb25ZLCAmeFJv
b3QsICZ5Um9vdCk7Ci0gICAgZXZlbnQtPmJ1dHRvbi54X3Jvb3QgPSB4Um9vdDsKLSAgICBldmVu
dC0+YnV0dG9uLnlfcm9vdCA9IHlSb290OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIGdldE1lbnVJdGVtVGl0bGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBHdGtXaWRnZXQqIHdpZGdldCA9IEdUS19XSURHRVQoSlNP
YmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIENTdHJpbmcgbGFiZWw7Ci0gICAgaWYgKEdU
S19JU19TRVBBUkFUT1JfTUVOVV9JVEVNKHdpZGdldCkpCi0gICAgICAgIGxhYmVsID0gIjxzZXBh
cmF0b3I+IjsKLSAgICBlbHNlCi0gICAgICAgIGxhYmVsID0gZ3RrX21lbnVfaXRlbV9nZXRfbGFi
ZWwoR1RLX01FTlVfSVRFTSh3aWRnZXQpKTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBpdGVtVGV4dChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobGFiZWwuZGF0
YSgpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIGl0ZW1UZXh0Lmdl
dCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc2V0TWVudUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBtZW51SXRlbUNsaWNrQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIEd0a01lbnVJdGVtKiBpdGVtID0gR1RL
X01FTlVfSVRFTShKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGd0a19tZW51
X2l0ZW1fYWN0aXZhdGUoaXRlbSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwotfQotCi1zdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNNZW51SXRlbUZ1bmN0
aW9uc1tdID0gewotICAgIHsgImNsaWNrIiwgbWVudUl0ZW1DbGlja0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgeyAwLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBKU1N0YXRpY1ZhbHVlIHN0YXRpY01lbnVJ
dGVtVmFsdWVzW10gPSB7Ci0gICAgeyAidGl0bGUiLCBnZXRNZW51SXRlbVRpdGxlQ2FsbGJhY2ss
IHNldE1lbnVJdGVtVGl0bGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lIH0sCi0g
ICAgeyAwLCAwLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBKU0NsYXNzUmVmIGdldE1lbnVJdGVtQ2xh
c3MoKQotewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIG1lbnVJdGVtQ2xhc3MgPSAwOwotCi0gICAg
aWYgKCFtZW51SXRlbUNsYXNzKSB7Ci0gICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVm
aW5pdGlvbiA9IHsKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgICAg
ICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwotICAgICAgICBjbGFzc0Rl
ZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGljTWVudUl0ZW1GdW5jdGlvbnM7Ci0gICAg
ICAgIGNsYXNzRGVmaW5pdGlvbi5zdGF0aWNWYWx1ZXMgPSBzdGF0aWNNZW51SXRlbVZhbHVlczsK
LQotICAgICAgICBtZW51SXRlbUNsYXNzID0gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9u
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWVudUl0ZW1DbGFzczsKLX0KLQotCi1zdGF0aWMgSlNW
YWx1ZVJlZiBjb250ZXh0Q2xpY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgR2RrRXZlbnQqIHByZXNzRXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19CVVRUT05f
UFJFU1MpOwotCi0gICAgaWYgKCFwcmVwYXJlTW91c2VCdXR0b25FdmVudChwcmVzc0V2ZW50LCAy
LCAwKSkgewotICAgICAgICBnZGtfZXZlbnRfZnJlZShwcmVzc0V2ZW50KTsKLSAgICAgICAgcmV0
dXJuIEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIH0KLQotICAgIEdk
a0V2ZW50KiByZWxlYXNlRXZlbnQgPSBnZGtfZXZlbnRfY29weShwcmVzc0V2ZW50KTsKLSAgICBz
ZW5kT3JRdWV1ZUV2ZW50KHByZXNzRXZlbnQpOwotCi0gICAgSlNWYWx1ZVJlZiB2YWx1ZVJlZiA9
IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDAsIDAsIDApOwotICAgIFdlYktpdFdlYlZpZXcq
IHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEd0
a01lbnUqIGd0a01lbnUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHRfbWVudSh2aWV3KTsK
LSAgICBpZiAoZ3RrTWVudSkgewotICAgICAgICBHVW5pcXVlUHRyPEdMaXN0PiBpdGVtcyhndGtf
Y29udGFpbmVyX2dldF9jaGlsZHJlbihHVEtfQ09OVEFJTkVSKGd0a01lbnUpKSk7Ci0gICAgICAg
IEpTVmFsdWVSZWYgYXJyYXlWYWx1ZXNbZ19saXN0X2xlbmd0aChpdGVtcy5nZXQoKSldOwotICAg
ICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBmb3IgKEdMaXN0KiBpdGVtID0gZ19saXN0X2Zp
cnN0KGl0ZW1zLmdldCgpKTsgaXRlbTsgaXRlbSA9IGdfbGlzdF9uZXh0KGl0ZW0pKSB7Ci0gICAg
ICAgICAgICBhcnJheVZhbHVlc1tpbmRleF0gPSBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVu
dUl0ZW1DbGFzcygpLCBpdGVtLT5kYXRhKTsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGluZGV4KQotICAgICAgICAgICAgdmFsdWVSZWYgPSBKU09iamVjdE1h
a2VBcnJheShjb250ZXh0LCBpbmRleCAtIDEsIGFycmF5VmFsdWVzLCAwKTsKLSAgICB9Ci0KLSAg
ICByZWxlYXNlRXZlbnQtPnR5cGUgPSBHREtfQlVUVE9OX1JFTEVBU0U7Ci0gICAgc2VuZE9yUXVl
dWVFdmVudChyZWxlYXNlRXZlbnQpOwotICAgIHJldHVybiB2YWx1ZVJlZjsKLX0KLQotc3RhdGlj
IGdib29sZWFuIHNlbmRDbGljayhncG9pbnRlcikKLXsKLSAgICBHZGtFdmVudCogcHJlc3NFdmVu
dCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0KLSAgICBpZiAoIXByZXBhcmVN
b3VzZUJ1dHRvbkV2ZW50KHByZXNzRXZlbnQsIDEsIDApKSB7Ci0gICAgICAgIGdka19ldmVudF9m
cmVlKHByZXNzRXZlbnQpOwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotCi0gICAgR2Rr
RXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwotICAgIGRp
c3BhdGNoRXZlbnQocHJlc3NFdmVudCk7Ci0gICAgcmVsZWFzZUV2ZW50LT50eXBlID0gR0RLX0JV
VFRPTl9SRUxFQVNFOwotICAgIGRpc3BhdGNoRXZlbnQocmVsZWFzZUV2ZW50KTsKLQotICAgIHJl
dHVybiBGQUxTRTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2NoZWR1bGVBc3luY2hyb25vdXND
bGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBnX2lkbGVf
YWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCBzZW5kQ2xpY2ssIDAsIDApOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRl
Q2xpY2tDb3VudChpbnQgYnV0dG9uKQotewotICAgIGlmIChsYXN0Q2xpY2tQb3NpdGlvblggIT0g
bGFzdE1vdXNlUG9zaXRpb25YCi0gICAgICAgIHx8IGxhc3RDbGlja1Bvc2l0aW9uWSAhPSBsYXN0
TW91c2VQb3NpdGlvblkKLSAgICAgICAgfHwgbGFzdENsaWNrQnV0dG9uICE9IGJ1dHRvbgotICAg
ICAgICB8fCB0aW1lT2Zmc2V0IC0gbGFzdENsaWNrVGltZU9mZnNldCA+PSAxKQotICAgICAgICBj
bGlja0NvdW50ID0gMTsKLSAgICBlbHNlCi0gICAgICAgIGNsaWNrQ291bnQrKzsKLX0KLQotc3Rh
dGljIGd1aW50IGdka01vZGlmaWVyRnJvbUpTVmFsdWUoSlNDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IEpTVmFsdWVSZWYgdmFsdWUpCi17Ci0gICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCk7Ci0gICAgZ3VpbnQgZ2RrTW9kaWZpZXIg
PSAwOwotICAgIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZywgImN0cmxL
ZXkiKQotICAgICAgICB8fCBKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0cmluZywgImFk
ZFNlbGVjdGlvbktleSIpKQotICAgICAgICBnZGtNb2RpZmllciA9IEdES19DT05UUk9MX01BU0s7
Ci0gICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJpbmcsICJzaGlm
dEtleSIpCi0gICAgICAgICAgICAgfHwgSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdHJp
bmcsICJyYW5nZVNlbGVjdGlvbktleSIpKQotICAgICAgICBnZGtNb2RpZmllciA9IEdES19TSElG
VF9NQVNLOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RyaW5n
LCAiYWx0S2V5IikpCi0gICAgICAgIGdka01vZGlmaWVyID0gR0RLX01PRDFfTUFTSzsKLSAgICAK
LSAgICAvLyBDdXJyZW50bHkgdGhlIG1ldGFLZXkgYXMgZGVmaW5lZCBpbiBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCi0gICAgLy8gaXMgR0RLX01FVEFfTUFT
Sy4gVGhpcyBjb2RlIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhhdCBmaWxlLgotICAgIGVs
c2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RyaW5nLCAibWV0YUtleSIpKQot
ICAgICAgICBnZGtNb2RpZmllciA9IEdES19NRVRBX01BU0s7Ci0gICAgCi0gICAgSlNTdHJpbmdS
ZWxlYXNlKHN0cmluZyk7Ci0gICAgcmV0dXJuIGdka01vZGlmaWVyOwotfQotCi1zdGF0aWMgZ3Vp
bnQgZ2RrTW9kaWZlcnNGcm9tSlNWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgSlNW
YWx1ZVJlZiBtb2RpZmllcnMpCi17Ci0gICAgLy8gVGhlIHZhbHVlIG1heSBlaXRoZXIgYmUgYSBz
dHJpbmcgd2l0aCBhIHNpbmdsZSBtb2RpZmllciBvciBhbiBhcnJheSBvZiBtb2RpZmllcnMuCi0g
ICAgaWYgKEpTVmFsdWVJc1N0cmluZyhjb250ZXh0LCBtb2RpZmllcnMpKQotICAgICAgICByZXR1
cm4gZ2RrTW9kaWZpZXJGcm9tSlNWYWx1ZShjb250ZXh0LCBtb2RpZmllcnMpOwotCi0gICAgSlNP
YmplY3RSZWYgbW9kaWZpZXJzQXJyYXkgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgbW9kaWZp
ZXJzLCAwKTsKLSAgICBpZiAoIW1vZGlmaWVyc0FycmF5KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGd1aW50IGdka01vZGlmaWVycyA9IDA7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGxlbmd0aFByb3BlcnR5KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVu
Z3RoIikpOwotICAgIGludCBtb2RpZmllcnNDb3VudCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1vZGlmaWVyc0FycmF5LCBsZW5ndGhQcm9w
ZXJ0eS5nZXQoKSwgMCksIDApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kaWZpZXJzQ291
bnQ7ICsraSkKLSAgICAgICAgZ2RrTW9kaWZpZXJzIHw9IGdka01vZGlmaWVyRnJvbUpTVmFsdWUo
Y29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgbW9kaWZpZXJzQXJy
YXksIGksIDApKTsKLSAgICByZXR1cm4gZ2RrTW9kaWZpZXJzOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiBtb3VzZURvd25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgaW50IGJ1dHRvbiA9IDA7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewotICAgICAg
ICBidXR0b24gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1
bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgICAgICBnX3JldHVybl92YWxfaWZfZmFpbCgoIWV4
Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbiksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsK
LSAgICB9Ci0gICAgZ3VpbnQgbW9kaWZpZXJzID0gYXJndW1lbnRDb3VudCA+PSAyID8gZ2RrTW9k
aWZlcnNGcm9tSlNWYWx1ZShjb250ZXh0LCBhcmd1bWVudHNbMV0pIDogMDsKLQotICAgIEdka0V2
ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9QUkVTUyk7Ci0gICAgaWYgKCFw
cmVwYXJlTW91c2VCdXR0b25FdmVudChldmVudCwgYnV0dG9uLCBtb2RpZmllcnMpKSB7Ci0gICAg
ICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotICAgIH0KLQotICAgIC8vIElmIHRoZSBzYW1lIG1vdXNlIGJ1dHRv
biBpcyBhbHJlYWR5IGluIHRoZSBkb3duIHBvc2l0aW9uIGRvbid0IHNlbmQgYW5vdGhlciBldmVu
dCBhcyBpdCBtYXkgY29uZnVzZSBYdmZiLgotICAgIGlmIChidXR0b25DdXJyZW50bHlEb3duID09
IGV2ZW50LT5idXR0b24uYnV0dG9uKSB7Ci0gICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIH0KLQot
ICAgIGJ1dHRvbkN1cnJlbnRseURvd24gPSBldmVudC0+YnV0dG9uLmJ1dHRvbjsKLQotICAgIC8v
IE5vcm1hbGx5IEdESyB3aWxsIHNlbmQgYm90aCBHREtfQlVUVE9OX1BSRVNTIGFuZCBHREtfMkJV
VFRPTl9QUkVTUyBmb3IKLSAgICAvLyB0aGUgc2Vjb25kIGJ1dHRvbiBwcmVzcyBkdXJpbmcgZG91
YmxlLWNsaWNrcy4gV2ViS2l0IEdUSysgc2VsZWN0aXZlbHkKLSAgICAvLyBpZ25vcmVzIHRoZSBm
aXJzdCBHREtfQlVUVE9OX1BSRVNTIG9mIHRoYXQgcGFpciB1c2luZyBnZGtfZXZlbnRfcGVlay4K
LSAgICAvLyBTaW5jZSBvdXIgZXZlbnRzIGFyZW4ndCBldmVyIGdvaW5nIG9udG8gdGhlIEdESyBl
dmVudCBxdWV1ZSwgV2ViS2l0IHdvbid0Ci0gICAgLy8gYmUgYWJsZSB0byBmaWx0ZXIgb3V0IHRo
ZSBmaXJzdCBHREtfQlVUVE9OX1BSRVNTLCBzbyB3ZSBqdXN0IGRvbid0IHNlbmQKLSAgICAvLyBp
dCBoZXJlLiBFdmVudHVhbGx5IHRoaXMgY29kZSBzaG91bGQgcHJvYmFibHkgZmlndXJlIG91dCBh
IHdheSB0byBnZXQgYWxsCi0gICAgLy8gYXBwcm9wcmlhdGUgZXZlbnRzIG9udG8gdGhlIGV2ZW50
IHF1ZXVlIGFuZCB0aGlzIHdvcmstYXJvdW5kIHNob3VsZCBiZQotICAgIC8vIHJlbW92ZWQuCi0g
ICAgdXBkYXRlQ2xpY2tDb3VudChldmVudC0+YnV0dG9uLmJ1dHRvbik7Ci0gICAgaWYgKGNsaWNr
Q291bnQgPT0gMikKLSAgICAgICAgZXZlbnQtPnR5cGUgPSBHREtfMkJVVFRPTl9QUkVTUzsKLSAg
ICBlbHNlIGlmIChjbGlja0NvdW50ID09IDMpCi0gICAgICAgIGV2ZW50LT50eXBlID0gR0RLXzNC
VVRUT05fUFJFU1M7Ci0KLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBndWludCBnZXRTdGF0
ZUZsYWdzKCkKLXsKLSAgICBpZiAoYnV0dG9uQ3VycmVudGx5RG93biA9PSAxKQotICAgICAgICBy
ZXR1cm4gR0RLX0JVVFRPTjFfTUFTSzsKLSAgICBpZiAoYnV0dG9uQ3VycmVudGx5RG93biA9PSAy
KQotICAgICAgICByZXR1cm4gR0RLX0JVVFRPTjJfTUFTSzsKLSAgICBpZiAoYnV0dG9uQ3VycmVu
dGx5RG93biA9PSAzKQotICAgICAgICByZXR1cm4gR0RLX0JVVFRPTjNfTUFTSzsKLSAgICByZXR1
cm4gMDsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbW91c2VVcENhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpbnQgYnV0dG9uID0gMDsKLSAgICBpZiAoYXJndW1l
bnRDb3VudCA9PSAxKSB7Ci0gICAgICAgIGJ1dHRvbiA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCkpOwotICAgIH0KLSAgICBndWludCBtb2RpZmllcnMgPSBhcmd1
bWVudENvdW50ID49IDIgPyBnZGtNb2RpZmVyc0Zyb21KU1ZhbHVlKGNvbnRleHQsIGFyZ3VtZW50
c1sxXSkgOiAwOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfQlVU
VE9OX1JFTEVBU0UpOwotICAgIGlmICghcHJlcGFyZU1vdXNlQnV0dG9uRXZlbnQoZXZlbnQsIGJ1
dHRvbiwgbW9kaWZpZXJzKSkgewotICAgICAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7Ci0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBs
YXN0Q2xpY2tQb3NpdGlvblggPSBsYXN0TW91c2VQb3NpdGlvblg7Ci0gICAgbGFzdENsaWNrUG9z
aXRpb25ZID0gbGFzdE1vdXNlUG9zaXRpb25ZOwotICAgIGxhc3RDbGlja0J1dHRvbiA9IGJ1dHRv
bkN1cnJlbnRseURvd247Ci0gICAgbGFzdENsaWNrVGltZU9mZnNldCA9IHRpbWVPZmZzZXQ7Ci0g
ICAgYnV0dG9uQ3VycmVudGx5RG93biA9IDA7Ci0KLSAgICBzZW5kT3JRdWV1ZUV2ZW50KGV2ZW50
KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRp
YyBKU1ZhbHVlUmVmIG1vdXNlTW92ZVRvQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBsYXN0
TW91c2VQb3NpdGlvblggPSAoaW50KUpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNb
MF0sIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNlcHRpb24gfHwg
ISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7Ci0gICAgbGFzdE1v
dXNlUG9zaXRpb25ZID0gKGludClKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEq
ZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwotCi0gICAgR2RrRXZl
bnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfTU9USU9OX05PVElGWSk7Ci0gICAgZXZlbnQt
Pm1vdGlvbi54ID0gbGFzdE1vdXNlUG9zaXRpb25YOwotICAgIGV2ZW50LT5tb3Rpb24ueSA9IGxh
c3RNb3VzZVBvc2l0aW9uWTsKLQotICAgIGV2ZW50LT5tb3Rpb24udGltZSA9IEdES19DVVJSRU5U
X1RJTUU7Ci0gICAgZXZlbnQtPm1vdGlvbi53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3co
R1RLX1dJREdFVCh2aWV3KSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5tb3Rpb24ud2luZG93
KTsKLSAgICBldmVudC0+YnV0dG9uLmRldmljZSA9IGdldERlZmF1bHRHREtQb2ludGVyRGV2aWNl
KGV2ZW50LT5tb3Rpb24ud2luZG93KTsKLQotICAgIGd1aW50IG1vZGlmaWVycyA9IGFyZ3VtZW50
Q291bnQgPj0gMyA/IGdka01vZGlmZXJzRnJvbUpTVmFsdWUoY29udGV4dCwgYXJndW1lbnRzWzJd
KSA6IDA7Ci0gICAgZXZlbnQtPm1vdGlvbi5zdGF0ZSA9IG1vZGlmaWVycyB8IGdldFN0YXRlRmxh
Z3MoKTsKLSAgICBldmVudC0+bW90aW9uLmF4ZXMgPSAwOwotCi0gICAgaW50IHhSb290LCB5Um9v
dDsKLSAgICBnZGtfd2luZG93X2dldF9yb290X2Nvb3JkcyhndGtfd2lkZ2V0X2dldF93aW5kb3co
R1RLX1dJREdFVCh2aWV3KSksIGxhc3RNb3VzZVBvc2l0aW9uWCwgbGFzdE1vdXNlUG9zaXRpb25Z
LCAmeFJvb3QsICZ5Um9vdCk7Ci0gICAgZXZlbnQtPm1vdGlvbi54X3Jvb3QgPSB4Um9vdDsKLSAg
ICBldmVudC0+bW90aW9uLnlfcm9vdCA9IHlSb290OwotCi0gICAgc2VuZE9yUXVldWVFdmVudChl
dmVudCwgZmFsc2UpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbW91c2VTY3JvbGxCeUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dl
Yl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgaW50IGhvcml6b250YWwgPSAoaW50KUpTVmFsdWVUb051bWJlcihjb250ZXh0LCBh
cmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCFleGNl
cHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KSk7Ci0g
ICAgaW50IHZlcnRpY2FsID0gKGludClKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzFdLCBleGNlcHRpb24pOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8
ICEqZXhjZXB0aW9uKSwgSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwotCi0gICAgLy8g
Q29weSBiZWhhdmlvdXIgb2YgUXQgYW5kIEVGTCAtIGp1c3QgcmV0dXJuIGluIGNhc2Ugb2YgKDAs
MCkgbW91c2Ugc2Nyb2xsCi0gICAgaWYgKCFob3Jpem9udGFsICYmICF2ZXJ0aWNhbCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgR2RrRXZlbnQq
IGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfU0NST0xMKTsKLSAgICBldmVudC0+c2Nyb2xsLngg
PSBsYXN0TW91c2VQb3NpdGlvblg7Ci0gICAgZXZlbnQtPnNjcm9sbC55ID0gbGFzdE1vdXNlUG9z
aXRpb25ZOwotICAgIGV2ZW50LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAg
ZXZlbnQtPnNjcm9sbC53aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh2
aWV3KSk7Ci0gICAgZ19vYmplY3RfcmVmKGV2ZW50LT5zY3JvbGwud2luZG93KTsKLQotICAgIC8v
IEdUSysgb25seSBzdXBwb3J0cyBvbmUgdGljayBpbiBlYWNoIHNjcm9sbCBldmVudCB0aGF0IGlz
IG5vdCBzbW9vdGguIEZvciB0aGUgY2FzZXMgb2YgbW9yZSB0aGFuIG9uZSBkaXJlY3Rpb24sCi0g
ICAgLy8gYW5kIG1vcmUgdGhhbiBvbmUgc3RlcCBpbiBhIGRpcmVjdGlvbiwgd2UgY2FuIG9ubHkg
dXNlIHNtb290aCBldmVudHMsIHN1cHBvcnRlZCBmcm9tIEd0ayAzLjMuMTguCi0jaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMywgMTgpCi0gICAgaWYgKChob3Jpem9udGFsICYmIHZlcnRpY2FsKSB8
fCBob3Jpem9udGFsID4gMSB8fCBob3Jpem9udGFsIDwgLTEgfHwgdmVydGljYWwgPiAxIHx8IHZl
cnRpY2FsIDwgLTEpIHsKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rpb24gPSBHREtfU0NS
T0xMX1NNT09USDsKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gLWhvcml6b250YWw7
Ci0gICAgICAgIGV2ZW50LT5zY3JvbGwuZGVsdGFfeSA9IC12ZXJ0aWNhbDsKLQotICAgICAgICBz
ZW5kT3JRdWV1ZUV2ZW50KGV2ZW50KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotICAgIH0KLSNlbHNlCi0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoKCF2
ZXJ0aWNhbCB8fCAhaG9yaXpvbnRhbCksIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpKTsK
LSNlbmRpZgotCi0gICAgaWYgKGhvcml6b250YWwgPCAwKQotICAgICAgICBldmVudC0+c2Nyb2xs
LmRpcmVjdGlvbiA9IEdES19TQ1JPTExfUklHSFQ7Ci0gICAgZWxzZSBpZiAoaG9yaXpvbnRhbCA+
IDApCi0gICAgICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID0gR0RLX1NDUk9MTF9MRUZUOwot
ICAgIGVsc2UgaWYgKHZlcnRpY2FsIDwgMCkKLSAgICAgICAgZXZlbnQtPnNjcm9sbC5kaXJlY3Rp
b24gPSBHREtfU0NST0xMX0RPV047Ci0gICAgZWxzZSBpZiAodmVydGljYWwgPiAwKQotICAgICAg
ICBldmVudC0+c2Nyb2xsLmRpcmVjdGlvbiA9IEdES19TQ1JPTExfVVA7Ci0gICAgZWxzZQotICAg
ICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwotCi0gICAgc2VuZE9yUXVldWVFdmVudChldmVu
dCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBjb250aW51b3VzTW91c2VTY3JvbGxCeUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAzLCAxOCkKLSAg
ICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFp
bkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgaW50IGhvcml6b250YWwg
PSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwgSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCkpOwotICAgIGludCB2ZXJ0aWNhbCA9IEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pLCBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KSk7Ci0KLSAgICAvLyBXZSBkbyBub3QgeWV0IHN1cHBvcnQgY29udGludW91cyBz
Y3JvbGxpbmcgYnkgcGFnZS4KLSAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAzICYmIEpTVmFsdWVU
b0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzJdKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50
X25ldyhHREtfU0NST0xMKTsKLSAgICBldmVudC0+c2Nyb2xsLnggPSBsYXN0TW91c2VQb3NpdGlv
blg7Ci0gICAgZXZlbnQtPnNjcm9sbC55ID0gbGFzdE1vdXNlUG9zaXRpb25ZOwotICAgIGV2ZW50
LT5zY3JvbGwudGltZSA9IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQtPnNjcm9sbC53aW5k
b3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh2aWV3KSk7Ci0gICAgZ19vYmpl
Y3RfcmVmKGV2ZW50LT5zY3JvbGwud2luZG93KTsKLQotICAgIGV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID0gR0RLX1NDUk9MTF9TTU9PVEg7Ci0gICAgZXZlbnQtPnNjcm9sbC5kZWx0YV94ID0gLWhv
cml6b250YWwgLyBwaXhlbHNQZXJTY3JvbGxUaWNrOwotICAgIGV2ZW50LT5zY3JvbGwuZGVsdGFf
eSA9IC12ZXJ0aWNhbCAvIHBpeGVsc1BlclNjcm9sbFRpY2s7Ci0KLSAgICBzZW5kT3JRdWV1ZUV2
ZW50KGV2ZW50KTsKLSNlbmRpZgotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhZ1dpdGhGaWxlc0RyYWdEYXRhR2V0Q2FsbGJhY2so
R3RrV2lkZ2V0KiwgR2RrRHJhZ0NvbnRleHQqLCBHdGtTZWxlY3Rpb25EYXRhICpkYXRhLCBndWlu
dCwgZ3VpbnQsIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIGd0a19zZWxlY3Rpb25fZGF0YV9z
ZXRfdXJpcyhkYXRhLCBzdGF0aWNfY2FzdDxnY2hhcioqPih1c2VyRGF0YSkpOwotfQotCi1zdGF0
aWMgdm9pZCBkcmFnV2l0aEZpbGVzRHJhZ0VuZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtEcmFnQ29udGV4dCosIGdwb2ludGVyIHVzZXJEYXRhKQotewotICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyh3aWRnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGRy
YWdXaXRoRmlsZXNEcmFnRW5kQ2FsbGJhY2spLCB1c2VyRGF0YSk7Ci0gICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpZGdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
ZHJhZ1dpdGhGaWxlc0RyYWdEYXRhR2V0Q2FsbGJhY2spLCB1c2VyRGF0YSk7Ci0gICAgZ19zdHJm
cmVldihzdGF0aWNfY2FzdDxnY2hhcioqPih1c2VyRGF0YSkpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiBiZWdpbkRyYWdXaXRoRmlsZXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCi17Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU09iamVjdFJlZiBmaWxlc0FycmF5ID0g
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICBB
U1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0KLSAgICBjb25zdCBnY2hhciogbWFp
bkZyYW1lVVJJID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1haW5GcmFtZSk7Ci0gICAgR1Jl
ZlB0cjxHRmlsZT4gdGVzdEZpbGUoYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3VyaShtYWluRnJh
bWVVUkkpKSk7Ci0gICAgR1JlZlB0cjxHRmlsZT4gcGFyZW50RGlyZWN0b3J5KGdfZmlsZV9nZXRf
cGFyZW50KHRlc3RGaWxlLmdldCgpKSk7Ci0gICAgaWYgKCFwYXJlbnREaXJlY3RvcnkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIC8vIElmIHRo
aXMgaXMgYW4gSFRUUCB0ZXN0LCB3ZSBzdGlsbCBuZWVkIHRvIHBhc3MgYSBsb2NhbCBmaWxlIHBh
dGgKLSAgICAvLyB0byBXZWJDb3JlLiBFdmVuIHRob3VnaCB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0
LCB0aGlzIHNob3VsZCBiZSBmaW5lCi0gICAgLy8gZm9yIG1vc3QgdGVzdHMuCi0gICAgR1VuaXF1
ZVB0cjxnY2hhcj4gc2NoZW1lKGdfZmlsZV9nZXRfdXJpX3NjaGVtZShwYXJlbnREaXJlY3Rvcnku
Z2V0KCkpKTsKLSAgICBpZiAoZ19zdHJfZXF1YWwoc2NoZW1lLmdldCgpLCAiaHR0cCIpIHx8IGdf
c3RyX2VxdWFsKHNjaGVtZS5nZXQoKSwgImh0dHBzIikpIHsKLSAgICAgICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gY3VycmVudERpcmVjdG9yeShnX2dldF9jdXJyZW50X2RpcigpKTsKLSAgICAgICAgcGFy
ZW50RGlyZWN0b3J5ID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoY3VycmVudERpcmVj
dG9yeS5nZXQoKSkpOwotICAgIH0KLQotICAgIEpTU3RyaW5nUmVmIGxlbmd0aFByb3BlcnR5ID0g
SlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOwotICAgIGludCBmaWxlc0Fy
cmF5TGVuZ3RoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgZmlsZXNBcnJheSwgbGVuZ3RoUHJvcGVydHksIDApLCAwKTsKLSAgICBKU1N0cmlu
Z1JlbGVhc2UobGVuZ3RoUHJvcGVydHkpOwotCi0gICAgZ2NoYXIqKiBkcmFnZ2VkRmlsZXNVUklM
aXN0ID0gZ19uZXcwKGdjaGFyKiwgZmlsZXNBcnJheUxlbmd0aCArIDEpOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZmlsZXNBcnJheUxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTU3RyaW5nUmVm
IGZpbGVuYW1lU3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgZmlsZXNBcnJheSwgaSwgMCksIDApOwotICAgICAg
ICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShm
aWxlbmFtZVN0cmluZyk7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lQnVmZmVy
KHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkpKTsKLSAgICAgICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhmaWxlbmFtZVN0cmluZywgZmlsZW5hbWVCdWZmZXIuZ2V0KCks
IGJ1ZmZlclNpemUpOwotICAgICAgICBKU1N0cmluZ1JlbGVhc2UoZmlsZW5hbWVTdHJpbmcpOwot
Ci0gICAgICAgIEdSZWZQdHI8R0ZpbGU+IGRyYWdGaWxlKGdfZmlsZV9nZXRfY2hpbGQocGFyZW50
RGlyZWN0b3J5LmdldCgpLCBmaWxlbmFtZUJ1ZmZlci5nZXQoKSkpOwotICAgICAgICBkcmFnZ2Vk
RmlsZXNVUklMaXN0W2ldID0gZ19maWxlX2dldF91cmkoZHJhZ0ZpbGUuZ2V0KCkpOwotICAgIH0K
LQotICAgIEd0a1dpZGdldCogdmlldyA9IEdUS19XSURHRVQod2Via2l0X3dlYl9mcmFtZV9nZXRf
d2ViX3ZpZXcobWFpbkZyYW1lKSk7Ci0gICAgZ19vYmplY3RfY29ubmVjdChHX09CSkVDVCh2aWV3
KSwKLSAgICAgICAgInNpZ25hbDo6ZHJhZy1lbmQiLCBkcmFnV2l0aEZpbGVzRHJhZ0VuZENhbGxi
YWNrLCBkcmFnZ2VkRmlsZXNVUklMaXN0LAotICAgICAgICAic2lnbmFsOjpkcmFnLWRhdGEtZ2V0
IiwgZHJhZ1dpdGhGaWxlc0RyYWdEYXRhR2V0Q2FsbGJhY2ssIGRyYWdnZWRGaWxlc1VSSUxpc3Qs
Ci0gICAgICAgIE5VTEwpOwotCi0gICAgR2RrRXZlbnQgZXZlbnQ7Ci0gICAgR2RrV2luZG93KiB2
aWV3R0RLV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KHZpZXcpOwotICAgIG1lbXNldCgm
ZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwotICAgIGV2ZW50LnR5cGUgPSBHREtfTU9USU9OX05P
VElGWTsKLSAgICBldmVudC5tb3Rpb24ueCA9IGxhc3RNb3VzZVBvc2l0aW9uWDsKLSAgICBldmVu
dC5tb3Rpb24ueSA9IGxhc3RNb3VzZVBvc2l0aW9uWTsKLSAgICBldmVudC5tb3Rpb24udGltZSA9
IEdES19DVVJSRU5UX1RJTUU7Ci0gICAgZXZlbnQubW90aW9uLndpbmRvdyA9IHZpZXdHREtXaW5k
b3c7Ci0gICAgZXZlbnQubW90aW9uLmRldmljZSA9IGdldERlZmF1bHRHREtQb2ludGVyRGV2aWNl
KHZpZXdHREtXaW5kb3cpOwotICAgIGV2ZW50Lm1vdGlvbi5zdGF0ZSA9IEdES19CVVRUT04xX01B
U0s7Ci0KLSAgICBpbnQgeFJvb3QsIHlSb290OwotICAgIGdka193aW5kb3dfZ2V0X3Jvb3RfY29v
cmRzKHZpZXdHREtXaW5kb3csIGxhc3RNb3VzZVBvc2l0aW9uWCwgbGFzdE1vdXNlUG9zaXRpb25Z
LCAmeFJvb3QsICZ5Um9vdCk7Ci0gICAgZXZlbnQubW90aW9uLnhfcm9vdCA9IHhSb290OwotICAg
IGV2ZW50Lm1vdGlvbi55X3Jvb3QgPSB5Um9vdDsKLQotICAgIEd0a1RhcmdldExpc3QqIHRhcmdl
dExpc3QgPSBndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApOwotICAgIGd0a190YXJnZXRfbGlzdF9h
ZGRfdXJpX3RhcmdldHModGFyZ2V0TGlzdCwgMCk7Ci0gICAgZ3RrX2RyYWdfYmVnaW4odmlldywg
dGFyZ2V0TGlzdCwgR0RLX0FDVElPTl9DT1BZLCAxLCAmZXZlbnQpOwotICAgIGd0a190YXJnZXRf
bGlzdF91bnJlZih0YXJnZXRMaXN0KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgc2VuZE9yUXVldWVFdmVudChHZGtFdmVudCog
ZXZlbnQsIGJvb2wgc2hvdWxkUmVwbGF5U2F2ZWRFdmVudHMpCi17Ci0gICAgLy8gTW91c2UgbW92
ZSBldmVudHMgYXJlIHF1ZXVlZCBpZiB0aGUgcHJldmlvdXMgZXZlbnQgd2FzIHF1ZXVlZCBvciBp
ZiBhCi0gICAgLy8gZGVsYXkgd2FzIHNldCB1cCBieSBsZWFwRm9yd2FyZCgpLgotICAgIGlmICgo
ZHJhZ01vZGUgJiYgYnV0dG9uQ3VycmVudGx5RG93bikgfHwgZW5kT2ZRdWV1ZSAhPSBzdGFydE9m
UXVldWUgfHwgbXNnUXVldWVbZW5kT2ZRdWV1ZV0uZGVsYXkpIHsKLSAgICAgICAgbXNnUXVldWVb
ZW5kT2ZRdWV1ZSsrXS5ldmVudCA9IGV2ZW50OwotCi0gICAgICAgIGlmIChzaG91bGRSZXBsYXlT
YXZlZEV2ZW50cykKLSAgICAgICAgICAgIHJlcGxheVNhdmVkRXZlbnRzKCk7Ci0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGRpc3BhdGNoRXZlbnQoZXZlbnQpOwotfQotCi1zdGF0aWMg
dm9pZCBkaXNwYXRjaEV2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGs6OmxheW91dEZyYW1lKG1haW5GcmFtZSk7Ci0gICAgV2ViS2l0V2ViVmlldyog
dmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgaWYg
KCF2aWV3KSB7Ci0gICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIFRoZSB3aWRnZXQgZm9jdXMgbWF5IGhhdmUgYmVlbiBsb3N0IGlu
IHRoZSBjb3Vyc2Ugb2YgdGhlIHRlc3QsCi0gICAgLy8gc28gZm9yY2UgYW5vdGhlciBleHBsaWNp
dCBmb2N1cyBncmFiIGhlcmUuCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQo
dmlldykpOwotICAgIGd0a19tYWluX2RvX2V2ZW50KGV2ZW50KTsKLQotICAgIGlmICghY3VycmVu
dERyYWdTb3VyY2VDb250ZXh0KSB7Ci0gICAgICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfTU9USU9O
X05PVElGWSkgewotICAgICAgICAvLyBXZWJLaXQgaGFzIGNhbGxlZCBndGtfZHJhZ19zdGFydCgp
LCBidXQgYmVjYXVzZSB0aGUgbWFpbiBsb29wIGlzbid0Ci0gICAgICAgIC8vIHJ1bm5pbmcgR0RL
IGludGVybmFscyBkb24ndCBrbm93IHRoYXQgdGhlIGRyYWcgaGFzIHN0YXJ0ZWQgeWV0LiBQdW1w
Ci0gICAgICAgIC8vIHRoZSBtYWluIGxvb3AgYSBsaXR0bGUgYml0IHNvIHRoYXQgR0RLIGlzIGlu
IHRoZSBjb3JyZWN0IHN0YXRlLgotICAgICAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkp
Ci0gICAgICAgICAgICBndGtfbWFpbl9pdGVyYXRpb24oKTsKLQotICAgICAgICAvLyBTaW11bGF0
ZSBhIGRyYWcgbW90aW9uIG9uIHRoZSB0b3AtbGV2ZWwgR0RLIHdpbmRvdy4KLSAgICAgICAgR3Rr
V2lkZ2V0KiBwYXJlbnRXaWRnZXQgPSBndGtfd2lkZ2V0X2dldF9wYXJlbnQoR1RLX1dJREdFVCh2
aWV3KSk7Ci0gICAgICAgIEdka1dpbmRvdyogcGFyZW50V2lkZ2V0V2luZG93ID0gZ3RrX3dpZGdl
dF9nZXRfd2luZG93KHBhcmVudFdpZGdldCk7Ci0gICAgICAgIGdka19kcmFnX21vdGlvbihjdXJy
ZW50RHJhZ1NvdXJjZUNvbnRleHQsIHBhcmVudFdpZGdldFdpbmRvdywgR0RLX0RSQUdfUFJPVE9f
WERORCwKLSAgICAgICAgICAgIGV2ZW50LT5tb3Rpb24ueF9yb290LCBldmVudC0+bW90aW9uLnlf
cm9vdCwKLSAgICAgICAgICAgIGdka19kcmFnX2NvbnRleHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihj
dXJyZW50RHJhZ1NvdXJjZUNvbnRleHQpLAotICAgICAgICAgICAgZ2RrX2RyYWdfY29udGV4dF9n
ZXRfYWN0aW9ucyhjdXJyZW50RHJhZ1NvdXJjZUNvbnRleHQpLAotICAgICAgICAgICAgR0RLX0NV
UlJFTlRfVElNRSk7Ci0KLSAgICB9IGVsc2UgaWYgKGN1cnJlbnREcmFnU291cmNlQ29udGV4dCAm
JiBldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpIHsKLSAgICAgICAgLy8gV2UndmUg
cmVsZWFzZWQgdGhlIG1vdXNlIGJ1dHRvbiwgd2Ugc2hvdWxkIGp1c3QgYmUgYWJsZSB0byBzcGlu
IHRoZQotICAgICAgICAvLyBldmVudCBsb29wIGhlcmUgYW5kIGhhdmUgR1RLKyBzZW5kIHRoZSBh
cHByb3ByaWF0ZSBub3RpZmljYXRpb25zIGZvcgotICAgICAgICAvLyB0aGUgZW5kIG9mIHRoZSBk
cmFnLgotICAgICAgICB3aGlsZSAoZ3RrX2V2ZW50c19wZW5kaW5nKCkpCi0gICAgICAgICAgICBn
dGtfbWFpbl9pdGVyYXRpb24oKTsKLSAgICB9Ci0KLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7
Ci19Ci0KLXZvaWQgcmVwbGF5U2F2ZWRFdmVudHMoKQotewotICAgIC8vIEZpcnN0IHNlbmQgYWxs
IHRoZSBldmVudHMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgc2VudAotICAgIHdoaWxlIChzdGFydE9m
UXVldWUgPCBlbmRPZlF1ZXVlKSB7Ci0gICAgICAgIGlmIChtc2dRdWV1ZVtzdGFydE9mUXVldWVd
LmRlbGF5KSB7Ci0gICAgICAgICAgICBnX3VzbGVlcChtc2dRdWV1ZVtzdGFydE9mUXVldWVdLmRl
bGF5ICogMTAwMCk7Ci0gICAgICAgICAgICBtc2dRdWV1ZVtzdGFydE9mUXVldWVdLmRlbGF5ID0g
MDsKLSAgICAgICAgfQotCi0gICAgICAgIGRpc3BhdGNoRXZlbnQobXNnUXVldWVbc3RhcnRPZlF1
ZXVlKytdLmV2ZW50KTsKLSAgICB9Ci0KLSAgICBzdGFydE9mUXVldWUgPSAwOwotICAgIGVuZE9m
UXVldWUgPSAwOwotfQotCi1zdGF0aWMgR2RrRXZlbnQqIGNyZWF0ZUtleVByZXNzRXZlbnQoSlND
b250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoYXJndW1lbnRDb3VudCA+PSAxLCAwKTsKLSAgICBndWludCBtb2RpZmllcnMgPSBh
cmd1bWVudENvdW50ID49IDIgPyBnZGtNb2RpZmVyc0Zyb21KU1ZhbHVlKGNvbnRleHQsIGFyZ3Vt
ZW50c1sxXSkgOiAwOwotCi0gICAgLy8gaGFuZGxlIGxvY2F0aW9uIGFyZ3VtZW50LgotICAgIGlu
dCBsb2NhdGlvbiA9IERPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQ7Ci0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPiAyKQotICAgICAgICBsb2NhdGlvbiA9IChpbnQpSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKTsKLQotICAgIEpTU3RyaW5nUmVmIGNoYXJhY3Rl
ciA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKSwg
MCk7Ci0KLSAgICBpbnQgZ2RrS2V5U3ltID0gR0RLX1ZvaWRTeW1ib2w7Ci0gICAgaWYgKGxvY2F0
aW9uID09IERPTV9LRVlfTE9DQVRJT05fTlVNUEFEKSB7Ci0gICAgICAgIGlmIChKU1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImxlZnRBcnJvdyIpKQotICAgICAgICAgICAg
Z2RrS2V5U3ltID0gR0RLX0tQX0xlZnQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAicmlnaHRBcnJvdyIpKQotICAgICAgICAgICAgZ2Rr
S2V5U3ltID0gR0RLX0tQX1JpZ2h0OwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGNoYXJhY3RlciwgInVwQXJyb3ciKSkKLSAgICAgICAgICAgIGdka0tleVN5
bSA9IEdES19LUF9VcDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhjaGFyYWN0ZXIsICJkb3duQXJyb3ciKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdE
S19LUF9Eb3duOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGNoYXJhY3RlciwgInBhZ2VVcCIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0tQX1Bh
Z2VfVXA7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hh
cmFjdGVyLCAicGFnZURvd24iKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19LUF9QYWdl
X0Rvd247Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hh
cmFjdGVyLCAiaG9tZSIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0tQX0hvbWU7Ci0g
ICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAi
ZW5kIikpCi0gICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfS1BfRW5kOwotICAgICAgICBlbHNl
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImluc2VydCIpKQot
ICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0tQX0luc2VydDsKLSAgICAgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJkZWxldGUiKSkKLSAgICAg
ICAgICAgIGdka0tleVN5bSA9IEdES19LUF9EZWxldGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIC8vIElmIHdlIGdldCBzb21lIG90aGVyIGtleSBzcGVjaWZpZWQgd2l0aCB0aGUgbnVtcGFk
IGxvY2F0aW9uLAotICAgICAgICAgICAgLy8gY3Jhc2ggaGVyZSwgc28gd2UgYWRkIGl0IHNvb25l
ciByYXRoZXIgdGhhbiBsYXRlci4KLSAgICAgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
Y2hhcmFjdGVyLCAibGVmdEFycm93IikpCi0gICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfTGVm
dDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0
ZXIsICJyaWdodEFycm93IikpCi0gICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfUmlnaHQ7Ci0g
ICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAi
dXBBcnJvdyIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX1VwOwotICAgICAgICBlbHNl
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImRvd25BcnJvdyIp
KQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0Rvd247Ci0gICAgICAgIGVsc2UgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAicGFnZVVwIikpCi0gICAgICAg
ICAgICBnZGtLZXlTeW0gPSBHREtfUGFnZV9VcDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJwYWdlRG93biIpKQotICAgICAgICAgICAg
Z2RrS2V5U3ltID0gR0RLX1BhZ2VfRG93bjsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0Vx
dWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJob21lIikpCi0gICAgICAgICAgICBnZGtLZXlT
eW0gPSBHREtfSG9tZTsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhjaGFyYWN0ZXIsICJlbmQiKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19FbmQ7
Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVy
LCAiaW5zZXJ0IikpCi0gICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfSW5zZXJ0OwotICAgICAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgImRlbGV0
ZSIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0RlbGV0ZTsKLSAgICAgICAgZWxzZSBp
ZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJwcmludFNjcmVlbiIp
KQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX1ByaW50OwotICAgICAgICBlbHNlIGlmIChK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgIm1lbnUiKSkKLSAgICAgICAg
ICAgIGdka0tleVN5bSA9IEdES19NZW51OwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgIkYxIikpCi0gICAgICAgICAgICBnZGtLZXlTeW0g
PSBHREtfRjE7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
Y2hhcmFjdGVyLCAiRjIiKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19GMjsKLSAgICAg
ICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJGMyIp
KQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0YzOwotICAgICAgICBlbHNlIGlmIChKU1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgIkY0IikpCi0gICAgICAgICAgICBn
ZGtLZXlTeW0gPSBHREtfRjQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoY2hhcmFjdGVyLCAiRjUiKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19G
NTsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0
ZXIsICJGNiIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0Y2OwotICAgICAgICBlbHNl
IGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgIkY3IikpCi0gICAg
ICAgICAgICBnZGtLZXlTeW0gPSBHREtfRjc7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAiRjgiKSkKLSAgICAgICAgICAgIGdka0tleVN5
bSA9IEdES19GODsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhjaGFyYWN0ZXIsICJGOSIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0Y5OwotICAg
ICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgIkYx
MCIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0YxMDsKLSAgICAgICAgZWxzZSBpZiAo
SlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0ZXIsICJGMTEiKSkKLSAgICAgICAg
ICAgIGdka0tleVN5bSA9IEdES19GMTE7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAiRjEyIikpCi0gICAgICAgICAgICBnZGtLZXlTeW0g
PSBHREtfRjEyOwotICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KGNoYXJhY3RlciwgImxlZnRBbHQiKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19BbHRf
TDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0
ZXIsICJsZWZ0Q29udHJvbCIpKQotICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0NvbnRyb2xf
TDsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhjaGFyYWN0
ZXIsICJsZWZ0U2hpZnQiKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19TaGlmdF9MOwot
ICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3Rlciwg
InJpZ2h0QWx0IikpCi0gICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfQWx0X1I7Ci0gICAgICAg
IGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoY2hhcmFjdGVyLCAicmlnaHRD
b250cm9sIikpCi0gICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfQ29udHJvbF9SOwotICAgICAg
ICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGNoYXJhY3RlciwgInJpZ2h0
U2hpZnQiKSkKLSAgICAgICAgICAgIGdka0tleVN5bSA9IEdES19TaGlmdF9SOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGludCBjaGFyQ29kZSA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0
cihjaGFyYWN0ZXIpWzBdOwotICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09ICdcbicgfHwgY2hh
ckNvZGUgPT0gJ1xyJykKLSAgICAgICAgICAgICAgICBnZGtLZXlTeW0gPSBHREtfUmV0dXJuOwot
ICAgICAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPT0gJ1x0JykKLSAgICAgICAgICAgICAgICBn
ZGtLZXlTeW0gPSBHREtfVGFiOwotICAgICAgICAgICAgZWxzZSBpZiAoY2hhckNvZGUgPT0gJ1x4
OCcpCi0gICAgICAgICAgICAgICAgZ2RrS2V5U3ltID0gR0RLX0JhY2tTcGFjZTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGdka0tleVN5bSA9IGdka191bmljb2RlX3RvX2tl
eXZhbChjaGFyQ29kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVVwcGVyKGNo
YXJDb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzIHw9IEdES19TSElGVF9NQVNL
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIEpTU3RyaW5nUmVsZWFzZShj
aGFyYWN0ZXIpOwotCi0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodmlldywg
MCk7Ci0KLSAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGdka19ldmVudF9uZXcoR0RLX0tFWV9Q
UkVTUyk7Ci0gICAgcHJlc3NFdmVudC0+a2V5LmtleXZhbCA9IGdka0tleVN5bTsKLSAgICBwcmVz
c0V2ZW50LT5rZXkuc3RhdGUgPSBtb2RpZmllcnM7Ci0gICAgcHJlc3NFdmVudC0+a2V5LndpbmRv
dyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHZpZXcpKTsKLSAgICBnX29iamVj
dF9yZWYocHJlc3NFdmVudC0+a2V5LndpbmRvdyk7Ci0jaWZuZGVmIEdUS19BUElfVkVSU0lPTl8y
Ci0gICAgZ2RrX2V2ZW50X3NldF9kZXZpY2UocHJlc3NFdmVudCwgZ2V0RGVmYXVsdEdES1BvaW50
ZXJEZXZpY2UocHJlc3NFdmVudC0+a2V5LndpbmRvdykpOwotI2VuZGlmCi0KLSAgICAvLyBXaGVu
IHN5bnRoZXNpemluZyBhbiBldmVudCwgYW4gaW52YWxpZCBoYXJkd2FyZV9rZXljb2RlIHZhbHVl
Ci0gICAgLy8gY2FuIGNhdXNlIGl0IHRvIGJlIGJhZGx5IHByb2Nlc3NlZCBieSBHdGsrLgotICAg
IEdVbmlxdWVPdXRQdHI8R2RrS2V5bWFwS2V5PiBrZXlzOwotICAgIGdpbnQgbktleXM7Ci0gICAg
aWYgKGdka19rZXltYXBfZ2V0X2VudHJpZXNfZm9yX2tleXZhbChnZGtfa2V5bWFwX2dldF9kZWZh
dWx0KCksIGdka0tleVN5bSwgJmtleXMub3V0UHRyKCksICZuS2V5cykpCi0gICAgICAgIHByZXNz
RXZlbnQtPmtleS5oYXJkd2FyZV9rZXljb2RlID0ga2V5cy5nZXQoKVswXS5rZXljb2RlOwotCi0g
ICAgcmV0dXJuIHByZXNzRXZlbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRLZXlEb3duKEdka0V2
ZW50KiBwcmVzc0V2ZW50KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwocHJlc3NFdmVudCk7Ci0g
ICAgR2RrRXZlbnQqIHJlbGVhc2VFdmVudCA9IGdka19ldmVudF9jb3B5KHByZXNzRXZlbnQpOwot
ICAgIHJlbGVhc2VFdmVudC0+dHlwZSA9IEdES19LRVlfUkVMRUFTRTsKLQotICAgIGRpc3BhdGNo
RXZlbnQocHJlc3NFdmVudCk7Ci0gICAgZGlzcGF0Y2hFdmVudChyZWxlYXNlRXZlbnQpOwotCi0g
ICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkZWxpdmVyQWxsTXV0YXRpb25zSWZOZWNlc3Nh
cnkoKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYga2V5RG93bkNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBHZGtFdmVudCogcHJlc3NFdmVudCA9IGNyZWF0ZUtl
eVByZXNzRXZlbnQoY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24p
OwotICAgIHNlbmRLZXlEb3duKHByZXNzRXZlbnQpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB6b29tSW4oZ2Jvb2xlYW4gZnVs
bENvbnRlbnRzWm9vbSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfZnVsbF9jb250ZW50X3pvb20odmlldywg
ZnVsbENvbnRlbnRzWm9vbSk7Ci0gICAgZ2Zsb2F0IGN1cnJlbnRab29tID0gd2Via2l0X3dlYl92
aWV3X2dldF96b29tX2xldmVsKHZpZXcpOwotICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9s
ZXZlbCh2aWV3LCBjdXJyZW50Wm9vbSAqIHpvb21NdWx0aXBsaWVyUmF0aW8pOwotfQotCi1zdGF0
aWMgdm9pZCB6b29tT3V0KGdib29sZWFuIGZ1bGxDb250ZW50c1pvb20pCi17Ci0gICAgV2ViS2l0
V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7
Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdf
c2V0X2Z1bGxfY29udGVudF96b29tKHZpZXcsIGZ1bGxDb250ZW50c1pvb20pOwotICAgIGdmbG9h
dCBjdXJyZW50Wm9vbSA9IHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCh2aWV3KTsKLSAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwodmlldywgY3VycmVudFpvb20gLyB6b29t
TXVsdGlwbGllclJhdGlvKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgdGV4dFpvb21JbkNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICB6b29tSW4oRkFMU0UpOwot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgdGV4dFpvb21PdXRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgem9vbU91dChGQUxTRSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB6b29tUGFnZUluQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIHpvb21JbihUUlVFKTsKLSAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVm
IHpvb21QYWdlT3V0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAg
IHpvb21PdXQoVFJVRSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzY2FsZVBhZ2VCeUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDMpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGZsb2F0IHNjYWxl
RmFjdG9yID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KTsKLSAgICBmbG9hdCB4ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwg
ZXhjZXB0aW9uKTsKLSAgICBmbG9hdCB5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1syXSwgZXhjZXB0aW9uKTsKLQotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIGlmICghdmlldykKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpzY2FsZVBhZ2VCeSh2aWV3LCBzY2FsZUZhY3RvciwgeCwgeSk7Ci0K
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBn
Ym9vbGVhbiBzZW5kQXN5bmNocm9ub3VzS2V5RG93bihncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAg
ICBzZW5kS2V5RG93bihzdGF0aWNfY2FzdDxHZGtFdmVudCo+KHVzZXJEYXRhKSk7Ci0gICAgcmV0
dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzY2hlZHVsZUFzeW5jaHJvbm91c0tl
eURvd25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgR2RrRXZl
bnQqIHByZXNzRXZlbnQgPSBjcmVhdGVLZXlQcmVzc0V2ZW50KGNvbnRleHQsIGFyZ3VtZW50Q291
bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKLSAgICBpZiAocHJlc3NFdmVudCkKLSAgICAgICAg
Z19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgc2VuZEFzeW5jaHJvbm91c0tleURv
d24sIHN0YXRpY19jYXN0PGdwb2ludGVyPihwcmVzc0V2ZW50KSwgMCk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGNs
ZWFyVG91Y2hQb2ludHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNT
dGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKLSAgICB7ICJtb3VzZVNjcm9sbEJ5
IiwgbW91c2VTY3JvbGxCeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiY29udGludW91c01vdXNl
U2Nyb2xsQnkiLCBjb250aW51b3VzTW91c2VTY3JvbGxCeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAg
eyAiY29udGV4dENsaWNrIiwgY29udGV4dENsaWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJt
b3VzZURvd24iLCBtb3VzZURvd25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgIm1vdXNlVXAiLCBt
b3VzZVVwQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJtb3VzZU1vdmVUbyIsIG1vdXNlTW92ZVRv
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJiZWdpbkRyYWdXaXRoRmlsZXMiLCBiZWdpbkRyYWdX
aXRoRmlsZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgImxlYXBGb3J3YXJkIiwgbGVhcEZvcndh
cmRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgImtleURvd24iLCBrZXlEb3duQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICB7ICJ0ZXh0Wm9vbUluIiwgdGV4dFpvb21JbkNhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgeyAidGV4dFpvb21PdXQiLCB0ZXh0Wm9vbU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAi
em9vbVBhZ2VJbiIsIHpvb21QYWdlSW5DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInpvb21QYWdl
T3V0Iiwgem9vbVBhZ2VPdXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInNjaGVkdWxlQXN5bmNo
cm9ub3VzQ2xpY2siLCBzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICB7ICJzY2FsZVBhZ2VCeSIsIHNjYWxlUGFnZUJ5Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7
ICJzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24iLCBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURv
d25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotCi0gICAgeyAwLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBKU1N0
YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0gewotICAgIHsgImRyYWdNb2RlIiwgZ2V0RHJhZ01v
ZGVDYWxsYmFjaywgc2V0RHJhZ01vZGVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25l
IH0sCi0gICAgeyAwLCAwLCAwLCAwIH0KLX07Ci0KLXN0YXRpYyBKU0NsYXNzUmVmIGdldENsYXNz
KEpTQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGV2ZW50U2Vu
ZGVyQ2xhc3MgPSAwOwotCi0gICAgaWYgKCFldmVudFNlbmRlckNsYXNzKSB7Ci0gICAgICAgIEpT
Q2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKLSAgICAgICAgICAgICAgICAwLCAw
LCAwLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDB9OwotICAgICAgICBjbGFzc0RlZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGlj
RnVuY3Rpb25zOwotICAgICAgICBjbGFzc0RlZmluaXRpb24uc3RhdGljVmFsdWVzID0gc3RhdGlj
VmFsdWVzOwotCi0gICAgICAgIGV2ZW50U2VuZGVyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFz
c0RlZmluaXRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBldmVudFNlbmRlckNsYXNzOwotfQot
Ci1KU09iamVjdFJlZiBtYWtlRXZlbnRTZW5kZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wg
aXNUb3BGcmFtZSkKLXsKLSAgICBpZiAoaXNUb3BGcmFtZSkgewotICAgICAgICBkcmFnTW9kZSA9
IHRydWU7Ci0KLSAgICAgICAgLy8gRmx5IGZvcndhcmQgaW4gdGltZSBvbmUgc2Vjb25kIHdoZW4g
dGhlIG1haW4gZnJhbWUgbG9hZHMuIFRoaXMgd2lsbAotICAgICAgICAvLyBlbnN1cmUgdGhhdCB3
aGVuIGEgdGVzdCBiZWdpbnMgY2xpY2tpbmcgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMKLSAgICAg
ICAgLy8gYSBwcmV2aW91cyB0ZXN0LCB0aG9zZSBjbGlja3Mgd29uJ3QgYmUgaW50ZXJwcmV0ZWQg
YXMgY29udGludWF0aW9ucwotICAgICAgICAvLyBvZiB0aGUgcHJldmlvdXMgdGVzdCdzIGNsaWNr
IHNlcXVlbmNlcy4KLSAgICAgICAgdGltZU9mZnNldCArPSAxMDAwOwotCi0gICAgICAgIGxhc3RN
b3VzZVBvc2l0aW9uWCA9IGxhc3RNb3VzZVBvc2l0aW9uWSA9IDA7Ci0gICAgICAgIGxhc3RDbGlj
a1Bvc2l0aW9uWCA9IGxhc3RDbGlja1Bvc2l0aW9uWSA9IDA7Ci0gICAgICAgIGxhc3RDbGlja1Rp
bWVPZmZzZXQgPSAwOwotICAgICAgICBsYXN0Q2xpY2tCdXR0b24gPSAwOwotICAgICAgICBidXR0
b25DdXJyZW50bHlEb3duID0gMDsKLSAgICAgICAgY2xpY2tDb3VudCA9IDA7Ci0KLSAgICAgICAg
ZW5kT2ZRdWV1ZSA9IDA7Ci0gICAgICAgIHN0YXJ0T2ZRdWV1ZSA9IDA7Ci0KLSAgICAgICAgY3Vy
cmVudERyYWdTb3VyY2VDb250ZXh0ID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNPYmplY3RN
YWtlKGNvbnRleHQsIGdldENsYXNzKGNvbnRleHQpLCAwKTsKLX0KLQotdm9pZCBkcmFnQmVnaW5D
YWxsYmFjayhHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ3BvaW50ZXIpCi17
Ci0gICAgY3VycmVudERyYWdTb3VyY2VDb250ZXh0ID0gY29udGV4dDsKLX0KLQotdm9pZCBkcmFn
RW5kQ2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdwb2ludGVy
KQotewotICAgIGN1cnJlbnREcmFnU291cmNlQ29udGV4dCA9IDA7Ci19Ci0KLWdib29sZWFuIGRy
YWdGYWlsZWRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ3Bv
aW50ZXIpCi17Ci0gICAgLy8gUmV0dXJuIFRSVUUgaGVyZSB0byBkaXNhYmxlIHRoZSBzdHVwaWQg
R1RLKyBkcmFnIGZhaWxlZCBhbmltYXRpb24sCi0gICAgLy8gd2hpY2ggaW50cm9kdWNlcyBhc3lu
Y2hyb25vdXMgYmVoYXZpb3IgaW50byBvdXIgZHJhZ3MuCi0gICAgcmV0dXJuIFRSVUU7Ci19CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvRXZlbnRTZW5kZXIuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9FdmVudFNlbmRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2NTY3MjZjOTE0OWE2ZDZhMWE3YTk4YzhiZjJjMjg2YTU3MDUzNWZjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9FdmVudFNlbmRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEV2ZW50U2VuZGVy
X2gKLSNkZWZpbmUgRXZlbnRTZW5kZXJfaAotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U0NvbnRleHQqIEpTQ29udGV4dFJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpT
T2JqZWN0UmVmOwotCi1KU09iamVjdFJlZiBtYWtlRXZlbnRTZW5kZXIoSlNDb250ZXh0UmVmIGNv
bnRleHQsIGJvb2wgaXNUb3BGcmFtZSk7Ci12b2lkIHJlcGxheVNhdmVkRXZlbnRzKCk7Ci12b2lk
IGRyYWdCZWdpbkNhbGxiYWNrKEd0a1dpZGdldCosIEdka0RyYWdDb250ZXh0KiwgZ3BvaW50ZXIp
Owotdm9pZCBkcmFnRW5kQ2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRHJhZ0NvbnRleHQqLCBncG9p
bnRlcik7Ci1nYm9vbGVhbiBkcmFnRmFpbGVkQ2FsbGJhY2soR3RrV2lkZ2V0KiwgR2RrRHJhZ0Nv
bnRleHQqLCBncG9pbnRlcik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0dDQ29udHJvbGxlckd0ay5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
R0NDb250cm9sbGVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ5Mzg3
NWUzN2I2MmNiY2QyMjczYzA3MzhjYTE5M2QzMGJkMmU2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvR0NDb250
cm9sbGVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgotCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXQuaD4KLQotdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3QoKSBjb25zdAotewot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Z2NDb2xsZWN0SmF2YXNjcmlwdE9iamVjdHMo
KTsKLX0KLQotdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29s
IHdhaXRVbnRpbERvbmUpIGNvbnN0Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpn
Y0NvbGxlY3RKYXZhc2NyaXB0T2JqZWN0c09uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUp
OwotfQotCi1zaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpnY0NvdW50SmF2YXNjcmlwdE9i
amVjdHMoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9QaXhlbER1
bXBTdXBwb3J0R3RrLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9QaXhlbER1bXBTdXBw
b3J0R3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxNDM0ZWY0YTUzNTVj
ODA5YzQ3ZWQ4MTZhMmExODU2ZGU2NmY4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvUGl4ZWxEdW1wU3VwcG9y
dEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0jaW5jbHVkZSAiUGl4ZWxEdW1w
U3VwcG9ydENhaXJvLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmgiCi0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1zdGF0aWMgdm9pZCBw
YWludE92ZXJsYXkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGNhaXJvX3QqIGNv
bnRleHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7Ci0KLSAgICAvLyBQYWludCBhIHRyYW5zcGFy
ZW50IGJsYWNrIG92ZXJsYXkgZnJvbSB3aGljaCB0aGUgcmVwYWludGVkIHJlY3RhbmdsZXMgYXJl
IHRoZW4gY2xlYXJlZC4KLSAgICAvLyBUaGUgYWxwaGEgY29tcG9uZW50IG9mIHRoZSBvdmVybGF5
IHNob3VsZCBoYXZlIGEgdmFsdWUgb2YgMC42NiwgYXMgb24gb3RoZXIgcG9ydHMuCi0gICAgY2Fp
cm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQsIDAuMCwgMC4wLCAwLjAsIDAuNjYpOwotICAgIGNh
aXJvX3JlY3RhbmdsZShjb250ZXh0LCAwLCAwLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChzdXJmYWNlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKLSAg
ICBjYWlyb19maWxsKGNvbnRleHQpOwotCi0gICAgR1NMaXN0KiB0cmFja2VkUmVjdHNMaXN0ID0g
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjp0cmFja2VkUmVwYWludFJlY3RzKG1haW5GcmFtZSk7
Ci0gICAgZm9yIChHU0xpc3QqIGxpc3RFbGVtZW50ID0gdHJhY2tlZFJlY3RzTGlzdDsgbGlzdEVs
ZW1lbnQ7IGxpc3RFbGVtZW50ID0gZ19zbGlzdF9uZXh0KGxpc3RFbGVtZW50KSkgewotICAgICAg
ICBHZGtSZWN0YW5nbGUqIHJlY3QgPSBzdGF0aWNfY2FzdDxHZGtSZWN0YW5nbGUqPihsaXN0RWxl
bWVudC0+ZGF0YSk7Ci0KLSAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQsIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKLSAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQsIHJlY3Qt
PngsIHJlY3QtPnksIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOwotICAgICAgICBjYWlyb19m
aWxsKGNvbnRleHQpOwotICAgIH0KLQotICAgIGdfc2xpc3RfZnJlZV9mdWxsKHRyYWNrZWRSZWN0
c0xpc3QsIGdfZnJlZSk7Ci0gICAgY2Fpcm9fZGVzdHJveShjb250ZXh0KTsKLX0KLQotc3RhdGlj
IHZvaWQgZmlsbFJlcGFpbnRPdmVybGF5SW50b0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgZ2lu
dCB3aWR0aCwgZ2ludCBoZWlnaHQpCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBvdmVybGF5U3Vy
ZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdp
ZHRoLCBoZWlnaHQpOwotICAgIHBhaW50T3ZlcmxheShvdmVybGF5U3VyZmFjZSk7Ci0KLSAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29udGV4dCwgb3ZlcmxheVN1cmZhY2UsIDAsIDApOwot
ICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBj
YWlyb19maWxsKGNvbnRleHQpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KG92ZXJsYXlT
dXJmYWNlKTsKLX0KLQotUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250
ZXh0RnJvbVdlYlZpZXcoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCBkcmF3U2VsZWN0aW9uUmVjdCkK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3Zp
ZXcobWFpbkZyYW1lKTsKLSAgICBHdGtXaWRnZXQqIHZpZXdDb250YWluZXIgPSBndGtfd2lkZ2V0
X2dldF9wYXJlbnQoR1RLX1dJREdFVCh2aWV3KSk7Ci0gICAgZ2ludCB3aWR0aCwgaGVpZ2h0Owot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgR2RrUGl4bWFwKiBwaXhtYXAgPSBndGtfd2lk
Z2V0X2dldF9zbmFwc2hvdCh2aWV3Q29udGFpbmVyLCAwKTsKLSAgICBnZGtfcGl4bWFwX2dldF9z
aXplKHBpeG1hcCwgJndpZHRoLCAmaGVpZ2h0KTsKLSNlbHNlCi0gICAgd2lkdGggPSBndGtfd2lk
Z2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgodmlld0NvbnRhaW5lcik7Ci0gICAgaGVpZ2h0ID0gZ3Rr
X3dpZGdldF9nZXRfYWxsb2NhdGVkX2hlaWdodCh2aWV3Q29udGFpbmVyKTsKLSNlbmRpZgotCi0g
ICAgd2hpbGUgKGd0a19ldmVudHNfcGVuZGluZygpKQotICAgICAgICBndGtfbWFpbl9pdGVyYXRp
b24oKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2VTdXJmYWNlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
Y2Fpcm9fdCogY29udGV4dCA9IGNhaXJvX2NyZWF0ZShpbWFnZVN1cmZhY2UpOwotCi0jaWZkZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLSAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY29udGV4
dCwgcGl4bWFwLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjb250ZXh0KTsKLSAgICBnX29iamVj
dF91bnJlZihwaXhtYXApOwotI2Vsc2UKLSAgICBndGtfd2lkZ2V0X2RyYXcodmlld0NvbnRhaW5l
ciwgY29udGV4dCk7Ci0jZW5kaWYKLQotICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OmlzVHJhY2tpbmdSZXBhaW50cyhtYWluRnJhbWUpKQotICAgICAgICBmaWxsUmVwYWludE92ZXJs
YXlJbnRvQ29udGV4dChjb250ZXh0LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChkcmF3U2Vs
ZWN0aW9uUmVjdCkgewotICAgICAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdGFuZ2xlOwot
ICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlY3RhbmdsZUZvclNlbGVjdGlvbiht
YWluRnJhbWUsICZyZWN0YW5nbGUpOwotCi0gICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNv
bnRleHQsIDEuMCk7Ci0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCByZWN0YW5nbGUu
eCwgcmVjdGFuZ2xlLnksIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLmhlaWdodCk7Ci0gICAg
ICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCAxLjAsIDAuMCwgMC4wLCAxLjApOwot
ICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dCk7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KGltYWdlU3VyZmFjZSk7Ci0gICAgcmV0dXJuIEJpdG1hcENvbnRleHQ6OmNyZWF0
ZUJ5QWRvcHRpbmdCaXRtYXBBbmRDb250ZXh0KDAsIGNvbnRleHQpOwotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3LmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9TZWxmU2Nyb2xsaW5nV2ViS2l0V2ViVmlldy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZjNhNTYyYzcxY2VmNWNkNTk0YzA2M2Zj
ZWRhNWJiYTkxZWVmMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWxmU2Nyb2xsaW5nV2ViS2l0
V2ViVmlldy5oIgotCi0jaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgotCi1HX0JFR0lOX0RFQ0xT
Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIHZvaWQgc2l6ZVJlcXVlc3RNZXRo
b2QoR3RrV2lkZ2V0KiwgR3RrUmVxdWlzaXRpb24qKTsKLSNlbHNlCi1zdGF0aWMgdm9pZCBnZXRQ
cmVmZXJyZWRTaXplTWV0aG9kKEd0a1dpZGdldCosIGdpbnQqIG1pbmltdW0sIGdpbnQqIG5hdHVy
YWwpOwotI2VuZGlmCi0KLUdfREVGSU5FX1RZUEUoU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXcs
IHNlbGZfc2Nyb2xsaW5nX3dlYmtpdF93ZWJfdmlldywgV0VCS0lUX1RZUEVfV0VCX1ZJRVcpCi0K
LXN0YXRpYyB2b2lkIHNlbGZfc2Nyb2xsaW5nX3dlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFNl
bGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3Q2xhc3MqIGtsYXNzKQotewotICAgIEd0a1dpZGdldENs
YXNzKiB3aWRnZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Moa2xhc3MpOwotI2lmZGVmIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgd2lkZ2V0Q2xhc3MtPnNpemVfcmVxdWVzdCA9IHNpemVSZXF1ZXN0
TWV0aG9kOwotI2Vsc2UKLSAgICB3aWRnZXRDbGFzcy0+Z2V0X3ByZWZlcnJlZF93aWR0aCA9IGdl
dFByZWZlcnJlZFNpemVNZXRob2Q7Ci0gICAgd2lkZ2V0Q2xhc3MtPmdldF9wcmVmZXJyZWRfaGVp
Z2h0ID0gZ2V0UHJlZmVycmVkU2l6ZU1ldGhvZDsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBz
ZWxmX3Njcm9sbGluZ193ZWJraXRfd2ViX3ZpZXdfaW5pdChTZWxmU2Nyb2xsaW5nV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKLXsKLX0KLQotR3RrV2lkZ2V0KiBzZWxmX3Njcm9sbGluZ193ZWJraXRf
d2ViX3ZpZXdfbmV3KCkKLXsKLSAgICByZXR1cm4gR1RLX1dJREdFVChnX29iamVjdF9uZXcoc2Vs
Zl9zY3JvbGxpbmdfd2Via2l0X3dlYl92aWV3X2dldF90eXBlKCksICJzZWxmLXNjcm9sbGluZyIs
IFRSVUUsIE5VTEwpKTsKLX0KLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMgdm9p
ZCBzaXplUmVxdWVzdE1ldGhvZChHdGtXaWRnZXQqLCBHdGtSZXF1aXNpdGlvbiogcmVxdWlzaXRp
b24pCi17Ci0gICAgcmVxdWlzaXRpb24tPndpZHRoID0gMTsKLSAgICByZXF1aXNpdGlvbi0+aGVp
Z2h0ID0gMTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBnZXRQcmVmZXJyZWRTaXplTWV0aG9kKEd0
a1dpZGdldCosIGdpbnQqIG1pbmltdW0sIGdpbnQqIG5hdHVyYWwpCi17Ci0gICAgKm1pbmltdW0g
PSAxOwotICAgICpuYXR1cmFsID0gMTsKLX0KLSNlbmRpZgotCi1HX0VORF9ERUNMUwpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllZDg2NjQyZDY3NmViNTUzMGJkMDg4
NWI4NmQzOWY4YjUyMDg0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZp
ZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXdfaAotI2RlZmluZSBTZWxm
U2Nyb2xsaW5nV2ViS2l0V2ViVmlld19oCi0KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0K
LUdfQkVHSU5fREVDTFMKLQotdHlwZWRlZiBzdHJ1Y3QgX1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJW
aWV3ICAgICAgU2VsZlNjcm9sbGluZ1dlYktpdFdlYlZpZXc7Ci10eXBlZGVmIHN0cnVjdCBfU2Vs
ZlNjcm9sbGluZ1dlYktpdFdlYlZpZXdDbGFzcyBTZWxmU2Nyb2xsaW5nV2ViS2l0V2ViVmlld0Ns
YXNzOwotCi1zdHJ1Y3QgX1NlbGZTY3JvbGxpbmdXZWJLaXRXZWJWaWV3IHsKLSAgICBXZWJLaXRX
ZWJWaWV3IHdlYl92aWV3OwotfTsKLQotc3RydWN0IF9TZWxmU2Nyb2xsaW5nV2ViS2l0V2ViVmll
d0NsYXNzIHsKLSAgICBXZWJLaXRXZWJWaWV3Q2xhc3MgcGFyZW50X2NsYXNzOwotfTsKLQotR3Rr
V2lkZ2V0KiBzZWxmX3Njcm9sbGluZ193ZWJraXRfd2ViX3ZpZXdfbmV3KCk7Ci0KLUdfRU5EX0RF
Q0xTCi0KLSNlbmRpZiAvLyBTZWxmU2Nyb2xsaW5nV2ViS2l0V2ViVmlld19oCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvVGVzdFJ1bm5lckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDIwYjc4OWY2MmJiZjRjYzUzMDEwMDBhZjRhZTA3MDIzODE2NTk5ZWYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL1Rlc3RSdW5uZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTE0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSwyMDExIENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9v
bmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0UnVubmVyLmgi
Ci0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2lu
Y2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Ci0jaW5jbHVk
ZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRlIDxzc3RyZWFtPgotI2lu
Y2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGxpYnNvdXAvc291
cC5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9H
VW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLWV4dGVybiAi
QyIgewotdm9pZCB3ZWJraXRfd2ViX2luc3BlY3Rvcl9leGVjdXRlX3NjcmlwdChXZWJLaXRXZWJJ
bnNwZWN0b3IqIGluc3BlY3RvciwgY29uc3QgZ2NoYXIqIHNjcmlwdCk7Ci19Ci0KLVRlc3RSdW5u
ZXI6On5UZXN0UnVubmVyKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRM
aXN0KCkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGxp
c3QgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KHdlYlZpZXcpOwotICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfY3VycmVudF9pdGVtKGxpc3QpOwotICAgIGdfb2JqZWN0X3JlZihpdGVtKTsKLQotICAg
IC8vIFdlIGNsZWFyIHRoZSBoaXN0b3J5IGJ5IHNldHRpbmcgdGhlIGJhY2svZm9yd2FyZCBsaXN0
J3MgY2FwYWNpdHkgdG8gMAotICAgIC8vIHRoZW4gcmVzdG9yaW5nIGl0IGJhY2sgYW5kIGFkZGlu
ZyBiYWNrIHRoZSBjdXJyZW50IGl0ZW0uCi0gICAgZ2ludCBsaW1pdCA9IHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2xpbWl0KGxpc3QpOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3Rfc2V0X2xpbWl0KGxpc3QsIDApOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3Rfc2V0X2xpbWl0KGxpc3QsIGxpbWl0KTsKLSAgICB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2FkZF9pdGVtKGxpc3QsIGl0ZW0pOwotICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ29fdG9faXRlbShsaXN0LCBpdGVtKTsKLSAgICBnX29iamVjdF91bnJlZihpdGVtKTsK
LX0KLQotSlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmlu
Z1JlZiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0K
LQotSlNTdHJpbmdSZWYgVGVzdFJ1bm5lcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1Jl
ZiBuYW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQotewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6ZGlzcGxheSgpCi17Ci0gICAgZGlzcGxheVdlYlZpZXcoKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotfQotCi1zaXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1h
aW5GcmFtZSk7Ci0gICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gd2Via2l0X3dl
Yl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCh3ZWJWaWV3KTsKLQotICAgIGlmICghbGlzdCkK
LSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLy8gV2UgZG8gbm90IGFkZCB0aGUgY3VycmVudCBw
YWdlIHRvIHRoZSB0b3RhbCBjb3VudCBhcyBpdCdzIG5vdAotICAgIC8vIGNvbnNpZGVyZWQgaW4g
RFJUIHRlc3RzCi0gICAgcmV0dXJuIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGVuZ3RoKGxpc3QpICsKLSAgICAgICAgICAgIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKGxpc3QpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6Om5vdGlm
eURvbmUoKQotewotICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAh
V29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKLSAgICAgICAgZHVtcCgpOwotICAgIG1fd2Fp
dFRvRHVtcCA9IGZhbHNlOwotICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKLX0KLQotSlNTdHJp
bmdSZWYgVGVzdFJ1bm5lcjo6cGF0aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNTdHJpbmdSZWYgdXJsKQotewotICAgIEdVbmlxdWVQdHI8Y2hhcj4gdXJsQ1N0cmluZyhK
U1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh1cmwpKTsKLSAgICBpZiAoIWdfc3RyX2hhc19wcmVmaXgo
dXJsQ1N0cmluZy5nZXQoKSwgImZpbGU6Ly8vdG1wL0xheW91dFRlc3RzLyIpKQotICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsKLQotICAgIGNvbnN0IGNoYXIqIGxheW91dFRlc3Rz
U3VmZml4ID0gdXJsQ1N0cmluZy5nZXQoKSArIHN0cmxlbigiZmlsZTovLy90bXAvIik7Ci0gICAg
R1VuaXF1ZVB0cjxjaGFyPiB0ZXN0UGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdldFRvcExldmVsUGF0
aCgpLmRhdGEoKSwgbGF5b3V0VGVzdHNTdWZmaXgsIG51bGxwdHIpKTsKLSAgICBHVW5pcXVlUHRy
PGNoYXI+IHRlc3RVUkkoZ19maWxlbmFtZV90b191cmkodGVzdFBhdGguZ2V0KCksIDAsIDApKTsK
LSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodGVzdFVSSS5nZXQoKSk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJp
bmdSZWYgdGFyZ2V0KQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHJlbGF0aXZlVVJMKEpTU3Ry
aW5nQ29weVVURjhDU3RyaW5nKHVybCkpOwotICAgIFNvdXBVUkkqIGJhc2VVUkkgPSBzb3VwX3Vy
aV9uZXcod2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKG1haW5GcmFtZSkpOwotICAgIFNvdXBVUkkq
IGFic29sdXRlVVJJID0gc291cF91cmlfbmV3X3dpdGhfYmFzZShiYXNlVVJJLCByZWxhdGl2ZVVS
TC5nZXQoKSk7Ci0gICAgc291cF91cmlfZnJlZShiYXNlVVJJKTsKLQotICAgIGlmICghYWJzb2x1
dGVVUkkpIHsKLSAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVt
KHVybCwgdGFyZ2V0KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDU3RyaW5nIGFi
c29sdXRlVVJJU3RyaW5nID0gc291cFVSSVRvU3RyaW5nUHJlc2VydmluZ1Bhc3N3b3JkKGFic29s
dXRlVVJJKTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGFic29sdXRlVVJJU3RyaW5nLmRhdGEoKSkp
OwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVS
TC5nZXQoKSwgdGFyZ2V0KSk7Ci0gICAgc291cF91cmlfZnJlZShhYnNvbHV0ZVVSSSk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2Vi
X3ZpZXcobWFpbkZyYW1lKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2VkaXRhYmxlKHdlYlZp
ZXcsIGFjY2VwdHNFZGl0aW5nKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2Nl
cHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29va2llcykKLXsKLSAgICBTb3VwU2Vzc2lvbiog
c2Vzc2lvbiA9IHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7Ci0gICAgU291cENvb2tpZUph
ciogamFyID0gcmVpbnRlcnByZXRfY2FzdDxTb3VwQ29va2llSmFyKj4oc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7Ci0KLSAgICAvKiBJZiB0
aGUgamFyIHdhcyBub3QgY3JlYXRlZCAtIHdlIGNyZWF0ZSBpdCBvbiBkZW1hbmQsIGkuZSwganVz
dAotICAgICAgIGluIGNhc2Ugd2UgaGF2ZSBIVFRQIHJlcXVlc3RzIC0gdGhlbiB3ZSBtdXN0IGNy
ZWF0ZSBpdCBoZXJlIGluCi0gICAgICAgb3JkZXIgdG8gc2V0IHRoZSBwcm9wZXIgYWNjZXB0IHBv
bGljeSAqLwotICAgIGlmICghamFyKSB7Ci0gICAgICAgIGphciA9IHNvdXBfY29va2llX2phcl9u
ZXcoKTsKLSAgICAgICAgc291cF9zZXNzaW9uX2FkZF9mZWF0dXJlKHNlc3Npb24sIFNPVVBfU0VT
U0lPTl9GRUFUVVJFKGphcikpOwotICAgICAgICBnX29iamVjdF91bnJlZihqYXIpOwotICAgIH0K
LQotICAgIFNvdXBDb29raWVKYXJBY2NlcHRQb2xpY3kgcG9saWN5OwotCi0gICAgaWYgKGFsd2F5
c0FjY2VwdENvb2tpZXMpCi0gICAgICAgIHBvbGljeSA9IFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRf
QUxXQVlTOwotICAgIGVsc2UKLSAgICAgICAgcG9saWN5ID0gU09VUF9DT09LSUVfSkFSX0FDQ0VQ
VF9OT19USElSRF9QQVJUWTsKLQotICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChqYXIpLCBTT1VQ
X0NPT0tJRV9KQVJfQUNDRVBUX1BPTElDWSwgcG9saWN5LCBOVUxMKTsKLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBl
cm1pc3NpdmUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCi17Ci0gICAgd2FpdEZvclBvbGljeSA9IHRydWU7
Ci0gICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRTY3Jv
bGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBvbGljeSkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmlu
Z1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykK
LXsKLSAgICBnY2hhciogc291cmNlT3JpZ2luR0NoYXIgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmlu
Zyhzb3VyY2VPcmlnaW4pOwotICAgIGdjaGFyKiBwcm90b2NvbEdDaGFyID0gSlNTdHJpbmdDb3B5
VVRGOENTdHJpbmcocHJvdG9jb2wpOwotICAgIGdjaGFyKiBob3N0R0NoYXIgPSBKU1N0cmluZ0Nv
cHlVVEY4Q1N0cmluZyhob3N0KTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OndoaXRl
TGlzdEFjY2Vzc0Zyb21PcmlnaW4oc291cmNlT3JpZ2luR0NoYXIsIHByb3RvY29sR0NoYXIsIGhv
c3RHQ2hhciwgaW5jbHVkZVN1YmRvbWFpbnMpOwotICAgIGdfZnJlZShzb3VyY2VPcmlnaW5HQ2hh
cik7Ci0gICAgZ19mcmVlKHByb3RvY29sR0NoYXIpOwotICAgIGdfZnJlZShob3N0R0NoYXIpOwot
fQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpT
U3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVm
IGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4g
c291cmNlT3JpZ2luR0NoYXIoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNlT3JpZ2luKSk7
Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gcHJvdG9jb2xHQ2hhcihKU1N0cmluZ0NvcHlVVEY4Q1N0
cmluZyhwcm90b2NvbCkpOwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGhvc3RHQ2hhcihKU1N0cmlu
Z0NvcHlVVEY4Q1N0cmluZyhob3N0KSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpy
ZW1vdmVXaGl0ZUxpc3RBY2Nlc3NGcm9tT3JpZ2luKHNvdXJjZU9yaWdpbkdDaGFyLmdldCgpLCBw
cm90b2NvbEdDaGFyLmdldCgpLCBob3N0R0NoYXIuZ2V0KCksIGluY2x1ZGVTdWJkb21haW5zKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wg
ZmxhZykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQotewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJh
bWUpOwotICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfc2V0dGluZ3Mod2ViVmlldyk7Ci0gICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdz
KSwgInRhYi1rZXktY3ljbGVzLXRocm91Z2gtZWxlbWVudHMiLCBjeWNsZXMsIE5VTEwpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wg
ZmxhZykKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXN0YXRpYyBnY2hhciogdXNl
clN0eWxlU2hlZXQgPSBOVUxMOwotc3RhdGljIGdib29sZWFuIHVzZXJTdHlsZVNoZWV0RW5hYmxl
ZCA9IFRSVUU7Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJv
b2wgZmxhZykKLXsKLSAgICB1c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBmbGFnOwotCi0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLSAgICBpZiAoZmxhZyAmJiB1c2VyU3R5bGVTaGVldCkK
LSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgInVzZXItc3R5bGVzaGVl
dC11cmkiLCB1c2VyU3R5bGVTaGVldCwgTlVMTCk7Ci0gICAgZWxzZQotICAgICAgICBnX29iamVj
dF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAidXNlci1zdHlsZXNoZWV0LXVyaSIsICIiLCBOVUxM
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3Ry
aW5nUmVmIHBhdGgpCi17Ci0gICAgZ19mcmVlKHVzZXJTdHlsZVNoZWV0KTsKLSAgICB1c2VyU3R5
bGVTaGVldCA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHBhdGgpOwotICAgIGlmICh1c2VyU3R5
bGVTaGVldEVuYWJsZWQpCi0gICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoY29udGV4dCwgbm9kZU9iamVj
dCwgdmFsdWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJl
KEpTU3RyaW5nUmVmIG1vZGUpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0g
ICAgY2hhciogdmlld01vZGUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhtb2RlKTsKLQotICAg
IGlmICghZ19zdHJjbXAwKHZpZXdNb2RlLCAid2luZG93ZWQiKSkKLSAgICAgICAgd2Via2l0X3dl
Yl92aWV3X3NldF92aWV3X21vZGUodmlldywgV0VCS0lUX1dFQl9WSUVXX1ZJRVdfTU9ERV9XSU5E
T1dFRCk7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMCh2aWV3TW9kZSwgImZsb2F0aW5nIikpCi0g
ICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHZpZXcsIFdFQktJVF9XRUJfVklF
V19WSUVXX01PREVfRkxPQVRJTkcpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAodmlld01vZGUs
ICJmdWxsc2NyZWVuIikpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfdmlld19tb2RlKHZp
ZXcsIFdFQktJVF9XRUJfVklFV19WSUVXX01PREVfRlVMTFNDUkVFTik7Ci0gICAgZWxzZSBpZiAo
IWdfc3RyY21wMCh2aWV3TW9kZSwgIm1heGltaXplZCIpKQotICAgICAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJLSVRfV0VCX1ZJRVdfVklFV19NT0RFX01BWElNSVpF
RCk7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMCh2aWV3TW9kZSwgIm1pbmltaXplZCIpKQotICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdfbW9kZSh2aWV3LCBXRUJLSVRfV0VCX1ZJRVdf
VklFV19NT0RFX01JTklNSVpFRCk7Ci0KLSAgICBnX2ZyZWUodmlld01vZGUpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCi17Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudAotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2FpdFRvRHVtcFdhdGNoZG9n
RmlyZWQodm9pZCopCi17Ci0gICAgc2V0V2FpdFRvRHVtcFdhdGNoZG9nKDApOwotICAgIGdUZXN0
UnVubmVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgcmV0dXJuIEZBTFNF
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VW50aWxEb25l
KQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgdGltZW91dFNlY29uZHMgPSAzMDsKLQotICAgIG1f
d2FpdFRvRHVtcCA9IHdhaXRVbnRpbERvbmU7Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiBzaG91
bGRTZXRXYWl0VG9EdW1wV2F0Y2hkb2coKSkgewotICAgICAgICBndWludCBpZCA9IGdfdGltZW91
dF9hZGRfc2Vjb25kcyh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDAp
OwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZChpZCwgIltXZWJLaXRdIHdhaXRUb0R1
bXBXYXRjaGRvZ0ZpcmVkIik7Ci0gICAgICAgIHNldFdhaXRUb0R1bXBXYXRjaGRvZyhpZCk7Ci0g
ICAgfQotfQotCi1pbnQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQotewotICAgIC8vICsxIC0+
IGluY2x1ZGluZyB0aGUgbWFpbiB2aWV3Ci0gICAgcmV0dXJuIGdfc2xpc3RfbGVuZ3RoKHdlYlZp
ZXdMaXN0KSArIDE7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAg
V2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXBy
aXZhdGUtYnJvd3NpbmciLCBmbGFnLCBOVUxMKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZykKLXsKLSAgICBXZWJLaXRXZWJW
aWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAg
ICBBU1NFUlQodmlldyk7Ci0KLSAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAgIGdfb2JqZWN0X3NldChHX09CSkVD
VChzZXR0aW5ncyksICJqYXZhc2NyaXB0LWNhbi1hY2Nlc3MtY2xpcGJvYXJkIiwgZmxhZywgTlVM
TCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFn
KQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJf
dmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIFdlYktpdFdlYlNldHRp
bmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Modmlldyk7Ci0gICAg
Z19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgImVuYWJsZS14c3MtYXVkaXRvciIsIGZs
YWcsIE5VTEwpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5h
YmxlZChib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJf
ZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAg
V2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5hYmxlLXNw
YXRpYWwtbmF2aWdhdGlvbiIsIGZsYWcsIE5VTEwpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNl
dEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxhZykKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGluZ3Mg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAgIGdfb2JqZWN0X3NldChH
X09CSkVDVChzZXR0aW5ncyksICJlbmFibGUtdW5pdmVyc2FsLWFjY2Vzcy1mcm9tLWZpbGUtdXJp
cyIsIGZsYWcsIE5VTEwpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vz
c0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcp
OwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dl
dF9zZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAi
ZW5hYmxlLWZpbGUtYWNjZXNzLWZyb20tZmlsZS11cmlzIiwgZmxhZywgTlVMTCk7Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2Nr
RGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRvdWJsZSBhbHBoYSwgYm9v
bCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJvdmlkZUdhbW1hLCBkb3Vi
bGUgZ2FtbWEpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgRGV2aWNlT3JpZW50YXRp
b24gbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzAzMzUuCi19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUgYWNj
dXJhY3ksIGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlLCBib29sLCBkb3VibGUsIGJvb2wsIGRv
dWJsZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfc2xp
c3RfbnRoX2RhdGEod2ViVmlld0xpc3QsIDApKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZp
ZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VS
VCh2aWV3KTsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb24odmlldywgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpOwotfQotCi12
b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJv
cihKU1N0cmluZ1JlZiBtZXNzYWdlKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJL
SVRfV0VCX1ZJRVcoZ19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOwotICAgIGlmICgh
dmlldykKLSAgICAgICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gY01lc3Nh
Z2UoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobWVzc2FnZSkpOwotICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKHZp
ZXcsIGNNZXNzYWdlLmdldCgpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24oYm9vbCBhbGxvdykKLXsKLSAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25D
b21tb24oYWxsb3cpOwotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
Z19zbGlzdF9udGhfZGF0YSh3ZWJWaWV3TGlzdCwgMCkpOwotICAgIGlmICghdmlldykKLSAgICAg
ICAgdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAg
QVNTRVJUKHZpZXcpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRNb2NrR2Vv
bG9jYXRpb25QZXJtaXNzaW9uKHZpZXcsIGFsbG93KTsKLX0KLQotaW50IFRlc3RSdW5uZXI6Om51
bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKLXsKLSAgICBXZWJL
aXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93
ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RzKHZpZXcpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZE1vY2tTcGVlY2hJbnB1
dFJlc3VsdChKU1N0cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1Jl
ZiBsYW5ndWFnZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQg
bGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzk0ODUuCi19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElucHV0
RHVtcFJlY3QoYm9vbCBmbGFnKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVj
aCBpbnB1dCBsYXlvdXQgdGVzdHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzdGFydFNwZWVj
aElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OnNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdlYktpdElj
b25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfZ2V0X2ljb25fZGF0YWJhc2UoKTsKLSAgICBp
ZiAoZW5hYmxlZCkgewotICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBpY29uRGF0YWJhc2VQYXRo
KGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2RpcigpLCAiRHVtcFJlbmRlclRyZWUiLCAiaWNv
bmRhdGFiYXNlIiwgbnVsbHB0cikpOwotICAgICAgICB3ZWJraXRfaWNvbl9kYXRhYmFzZV9zZXRf
cGF0aChkYXRhYmFzZSwgaWNvbkRhdGFiYXNlUGF0aC5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHdlYmtpdF9pY29uX2RhdGFiYXNlX3NldF9wYXRoKGRhdGFiYXNlLCAwKTsKLX0KLQotdm9p
ZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRp
bmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9z
ZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiamF2YXNjcmlwdC1jYW4tb3Blbi13aW5kb3dzLWF1dG9t
YXRpY2FsbHkiLCAhZmxhZywgTlVMTCk7Ci0KLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQbHVn
aW5zRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwot
Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyh2aWV3KTsKLSAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZW5h
YmxlLXBsdWdpbnMiLCBmbGFnLCBOVUxMKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpleGVjQ29t
bWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsK
LSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBnY2hhciogY05hbWUgPSBKU1N0cmluZ0NvcHlVVEY4
Q1N0cmluZyhuYW1lKTsKLSAgICBnY2hhciogY1ZhbHVlID0gSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcodmFsdWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6ZXhlY3V0ZUNvcmVDb21t
YW5kQnlOYW1lKHZpZXcsIGNOYW1lLCBjVmFsdWUpOwotICAgIGdfZnJlZShjTmFtZSk7Ci0gICAg
Z19mcmVlKGNWYWx1ZSk7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJy
YXkpCi17Ci0gICAgV2ViS2l0RmluZE9wdGlvbnMgZmluZE9wdGlvbnMgPSAwOwotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJh
bWUpOwotICAgIEFTU0VSVCh3ZWJWaWV3KTsKLQotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJsZW5ndGgiKSk7Ci0gICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDAp
OyAKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRhcmdldFN0cmluZyhK
U1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh0YXJnZXQpKTsKLQotICAgIHNpemVfdCBsZW5ndGggPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwg
MCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
SlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9w
dGlvbnNBcnJheSwgaSwgMCk7IAotICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAKLSAgICAgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29u
dGV4dCwgdmFsdWUsIDApKTsKLQotICAgICAgICBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhvcHRpb25OYW1lLmdldCgpLCAiQ2FzZUluc2Vuc2l0aXZlIikpCi0gICAgICAgICAgICBm
aW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRPcHRpb25zQ2FzZUluc2Vuc2l0aXZlOwotICAg
ICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0
KCksICJBdFdvcmRTdGFydHMiKSkKLSAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6
V2ViRmluZE9wdGlvbnNBdFdvcmRTdGFydHM7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlRyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0IikpCi0gICAgICAgICAgICBmaW5kT3B0aW9ucyB8PSBXZWJLaXQ6OldlYkZpbmRP
cHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkJhY2t3YXJkcyIp
KQotICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0gV2ViS2l0OjpXZWJGaW5kT3B0aW9uc0JhY2t3
YXJkczsKLSAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhvcHRp
b25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIpKQotICAgICAgICAgICAgZmluZE9wdGlvbnMgfD0g
V2ViS2l0OjpXZWJGaW5kT3B0aW9uc1dyYXBBcm91bmQ7Ci0gICAgICAgIGVsc2UgaWYgKEpTU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIlN0YXJ0SW5TZWxlY3Rp
b24iKSkKLSAgICAgICAgICAgIGZpbmRPcHRpb25zIHw9IFdlYktpdDo6V2ViRmluZE9wdGlvbnNT
dGFydEluU2VsZWN0aW9uOwotICAgIH0gICAKLQotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OmZpbmRTdHJpbmcod2ViVmlldywgdGFyZ2V0U3RyaW5nLmdldCgpLCBmaW5kT3B0
aW9ucyk7IAotfQotCi1ib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdS
ZWYgbmFtZSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBnY2hhciog
Y05hbWUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhuYW1lKTsKLSAgICBib29sIHJlc3VsdCA9
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6aXNDb21tYW5kRW5hYmxlZCh2aWV3LCBjTmFtZSk7
Ci0gICAgZ19mcmVlKGNOYW1lKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFRlc3RS
dW5uZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCi17Ci0gICAgLy8gVGhlc2UgY29u
c3RhbnRzIGFyZSBkZXJpdmVkIGZyb20gdGhlIE1hYyBjYWNoZSBtb2RlbCBlbnVtIGluIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMuaC4KLSAgICBzd2l0Y2ggKGNhY2hl
TW9kZWwpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHdlYmtpdF9zZXRfY2FjaGVfbW9kZWwoV0VC
S0lUX0NBQ0hFX01PREVMX0RPQ1VNRU5UX1ZJRVdFUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgMToKLSAgICAgICAgd2Via2l0X3NldF9jYWNoZV9tb2RlbChXRUJLSVRfQ0FDSEVfTU9ERUxf
RE9DVU1FTlRfQlJPV1NFUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAg
d2Via2l0X3NldF9jYWNoZV9tb2RlbChXRUJLSVRfQ0FDSEVfTU9ERUxfV0VCX0JST1dTRVIpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVu
dAotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJB
bGxBcHBsaWNhdGlvbkNhY2hlcygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBw
b3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbGVh
ckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqKQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRpb24gY2FjaGVz
IGZvciBhbiBvcmlnaW4uCi19Ci0KLWxvbmcgbG9uZyBUZXN0UnVubmVyOjpsb2NhbFN0b3JhZ2VE
aXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVz
IGZvciBhbiBvcmlnaW4uCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTVmFsdWVSZWYgVGVzdFJ1bm5l
cjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250YWluIGFwcGxp
Y2F0aW9uIGNhY2hlcy4KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLWxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9y
T3JpZ2luKEpTU3RyaW5nUmVmIG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiAwOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsK
LSAgICB3ZWJraXRfcmVtb3ZlX2FsbF93ZWJfZGF0YWJhc2VzKCk7Ci19Ci0gCi12b2lkIFRlc3RS
dW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQotewotICAg
IFdlYktpdFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF9zZWN1
cml0eV9vcmlnaW4obWFpbkZyYW1lKTsKLSAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX3NldF93
ZWJfZGF0YWJhc2VfcXVvdGEob3JpZ2luLCBxdW90YSk7Ci19Ci0KLUpTVmFsdWVSZWYgVGVzdFJ1
bm5lcjo6b3JpZ2luc1dpdGhMb2NhbFN0b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQot
ewotICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGVs
ZXRlTG9jYWxTdG9yYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbklkZW50aWZpZXIpCi17
Ci0gICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpvYnNl
cnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKLXsKLSAgICAg
ICAgLy8gRklYTUU6IGltcGxlbWVudAotfQotCi12b2lkIFRlc3RSdW5uZXI6OnN5bmNMb2NhbFN0
b3JhZ2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBUZXN0UnVubmVy
OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVu
LCBKU1N0cmluZ1JlZiBzY2hlbWUpCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gdXJsU2NoZW1l
KEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHNjaGVtZSkpOwotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0azo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShmb3JiaWRk
ZW4sIHVybFNjaGVtZS5nZXQoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKLXsK
LSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3Zp
ZXcobWFpbkZyYW1lKTsKLSAgICB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayh3ZWJWaWV3KTsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQotewotICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyht
YWluRnJhbWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0RGVmZXJzTG9hZGlu
Zyh3ZWJWaWV3LCBkZWZlcnMpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFwcENhY2hlTWF4
aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCi17Ci0gICAgd2Via2l0X2FwcGxpY2F0
aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUoc2l6ZSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBi
b29sZWFuRnJvbVZhbHVlKGdjaGFyKiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gIWdfYXNjaWlfc3Ry
Y2FzZWNtcCh2YWx1ZSwgInRydWUiKSB8fCAhZ19hc2NpaV9zdHJjYXNlY21wKHZhbHVlLCAiMSIp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBr
ZXksIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IG9yaWdpbmFs
TmFtZShKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhrZXkpKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFy
PiB2YWx1ZUFzU3RyaW5nKEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHZhbHVlKSk7Ci0KLSAgICBX
ZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZy
YW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICAvLyBUaGlzIHRyYW5zZm9ybWF0aW9uIGNv
dWxkIGJlIGhhbmRsZWQgYnkgYSBoYXNoIHRhYmxlIChhbmQgaXQgb25jZSB3YXMpLCBidXQKLSAg
ICAvLyBoYXZpbmcgaXQgcHJvbWluZW50LCBtYWtlcyBpdCBlYXNpZXIgZm9yIHBlb3BsZSBmcm9t
IG90aGVyIHBvcnRzIHRvIGtlZXAgdGhlCi0gICAgLy8gbGlzdCB1cCB0byBkYXRlLgotICAgIGNv
bnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUgPSAwOwotICAgIGlmIChnX3N0cl9lcXVhbChvcmlnaW5h
bE5hbWUuZ2V0KCksICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpKQotICAgICAgICBwcm9wZXJ0
eU5hbWUgPSAiZW5hYmxlLXNjcmlwdHMiOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdp
bmFsTmFtZS5nZXQoKSwgIldlYktpdERlZmF1bHRGb250U2l6ZSIpKQotICAgICAgICBwcm9wZXJ0
eU5hbWUgPSAiZGVmYXVsdC1mb250LXNpemUiOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9y
aWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdEVuYWJsZUNhcmV0QnJvd3NpbmciKSkKLSAgICAgICAg
cHJvcGVydHlOYW1lID0gImVuYWJsZS1jYXJldC1icm93c2luZyI7Ci0gICAgZWxzZSBpZiAoZ19z
dHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVu
Y2VLZXkiKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImVuYWJsZS1wYWdlLWNhY2hlIjsKLSAg
ICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCksICJXZWJLaXRQbHVnaW5z
RW5hYmxlZCIpKQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLXBsdWdpbnMiOwotICAg
IGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdEh5cGVybGlu
a0F1ZGl0aW5nRW5hYmxlZCIpKQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxlLWh5cGVy
bGluay1hdWRpdGluZyI7Ci0gICAgZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdl
dCgpLCAiV2ViS2l0V2ViR0xFbmFibGVkIikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFi
bGUtd2ViZ2wiOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwg
IldlYktpdFdlYkF1ZGlvRW5hYmxlZCIpKQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiZW5hYmxl
LXdlYmF1ZGlvIjsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0KCks
ICJXZWJLaXREaXNwbGF5SW1hZ2VzS2V5IikpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJhdXRv
LWxvYWQtaW1hZ2VzIjsKLSAgICBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5hbE5hbWUuZ2V0
KCksICJXZWJLaXRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiIpKQotICAgICAgICBwcm9w
ZXJ0eU5hbWUgPSAicmVzcGVjdC1pbWFnZS1vcmllbnRhdGlvbiI7Ci0gICAgZWxzZSBpZiAoZ19z
dHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAiV2ViS2l0TWVkaWFTb3VyY2VFbmFibGVkIikp
Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJlbmFibGUtbWVkaWFzb3VyY2UiOwotICAgIGVsc2Ug
aWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdFRhYlRvTGlua3NQcmVm
ZXJlbmNlS2V5IikpIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRMaW5r
c0luY2x1ZGVkSW5Gb2N1c0NoYWluKGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5nZXQo
KSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChvcmlnaW5h
bE5hbWUuZ2V0KCksICJXZWJLaXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnNQcmVmZXJlbmNlS2V5
IikpIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRQYWdlQ2FjaGVTdXBw
b3J0c1BsdWdpbnMod2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKSwgYm9v
bGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdldCgpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKG9yaWdpbmFsTmFtZS5nZXQoKSwgIldlYktpdENTU0dy
aWRMYXlvdXRFbmFibGVkIikpIHsKLSAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXRDU1NHcmlkTGF5b3V0RW5hYmxlZCh3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWlu
RnJhbWUpLCBib29sZWFuRnJvbVZhbHVlKHZhbHVlQXNTdHJpbmcuZ2V0KCkpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwob3JpZ2luYWxOYW1lLmdldCgpLCAi
V2ViS2l0Q1NTUmVnaW9uc0VuYWJsZWQiKSkgewotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldENTU1JlZ2lvbnNFbmFibGVkKHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3
KG1haW5GcmFtZSksIGJvb2xlYW5Gcm9tVmFsdWUodmFsdWVBc1N0cmluZy5nZXQoKSkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJUZXN0
UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UgdHJpZWQgdG8gb3ZlcnJpZGUgIgotICAgICAgICAg
ICAgICAgICJ1bmtub3duIHByZWZlcmVuY2UgJyVzJy5cbiIsIG9yaWdpbmFsTmFtZS5nZXQoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGlu
Z3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHZpZXcpOwotICAgIEdQYXJhbVNwZWMq
IHBzcGVjID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9DTEFTUygKLSAg
ICAgICAgV0VCS0lUX1dFQl9TRVRUSU5HU19HRVRfQ0xBU1Moc2V0dGluZ3MpKSwgcHJvcGVydHlO
YW1lKTsKLSAgICBHVmFsdWUgY3VycmVudFByb3BlcnR5VmFsdWUgPSB7IDAsIHsgeyAwIH0gfSB9
OwotICAgIGdfdmFsdWVfaW5pdCgmY3VycmVudFByb3BlcnR5VmFsdWUsIHBzcGVjLT52YWx1ZV90
eXBlKTsKLQotICAgIGlmIChHX1ZBTFVFX0hPTERTX1NUUklORygmY3VycmVudFByb3BlcnR5VmFs
dWUpKQotICAgICAgICBnX29iamVjdF9zZXQoc2V0dGluZ3MsIHByb3BlcnR5TmFtZSwgdmFsdWVB
c1N0cmluZy5nZXQoKSwgTlVMTCk7Ci0gICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19CT09MRUFO
KCZjdXJyZW50UHJvcGVydHlWYWx1ZSkpCi0gICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChz
ZXR0aW5ncyksIHByb3BlcnR5TmFtZSwgYm9vbGVhbkZyb21WYWx1ZSh2YWx1ZUFzU3RyaW5nLmdl
dCgpKSwgTlVMTCk7Ci0gICAgZWxzZSBpZiAoR19WQUxVRV9IT0xEU19JTlQoJmN1cnJlbnRQcm9w
ZXJ0eVZhbHVlKSkKLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNldHRpbmdzKSwgcHJv
cGVydHlOYW1lLCBhdG9pKHZhbHVlQXNTdHJpbmcuZ2V0KCkpLCBOVUxMKTsKLSAgICBlbHNlIGlm
IChHX1ZBTFVFX0hPTERTX0ZMT0FUKCZjdXJyZW50UHJvcGVydHlWYWx1ZSkpIHsKLSAgICAgICAg
Z2Zsb2F0IG5ld1ZhbHVlID0gZ19hc2NpaV9zdHJ0b2QodmFsdWVBc1N0cmluZy5nZXQoKSwgMCk7
Ci0gICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZXR0aW5ncyksIHByb3BlcnR5TmFtZSwg
bmV3VmFsdWUsIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRl
c3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSBmYWlsZWQgdG8gb3ZlcnJpZGUgIgotICAgICAg
ICAgICAgICAgICJwcmVmZXJlbmNlICclcycuXG4iLCBvcmlnaW5hbE5hbWUuZ2V0KCkpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29s
IHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHNv
dXJjZUNvZGUoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNlKSk7Ci0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjphZGRVc2VyU2NyaXB0KG1haW5GcmFtZSwgc291cmNlQ29kZS5nZXQo
KSwgcnVuQXRTdGFydCwgYWxsRnJhbWVzKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRVc2Vy
U3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQotewotICAgIEdV
bmlxdWVQdHI8Z2NoYXI+IHNvdXJjZUNvZGUoSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoc291cmNl
KSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjphZGRVc2VyU3R5bGVTaGVldChtYWlu
RnJhbWUsIHNvdXJjZUNvZGUuZ2V0KCksIGFsbEZyYW1lcyk7Ci0gICAgLy8gRklYTUU6IG5lZWRz
IG1vcmUgaW52ZXN0aWdhdGlvbiB3aHkgdXNlcnNjcmlwdHMvdXNlci1zdHlsZS10b3AtZnJhbWUt
b25seS5odG1sIGZhaWxzIHdoZW4gYWxsRnJhbWVzIGlzIGZhbHNlLgotCi19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1h
aW5GcmFtZSk7Ci0gICAgV2ViS2l0V2ViU2V0dGluZ3MqIHdlYlNldHRpbmdzID0gd2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KTsKLQotICAgIGdfb2JqZWN0X3NldCh3ZWJTZXR0
aW5ncywgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgZW5hYmxlZCwgTlVMTCk7Ci19Ci0KLXZv
aWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCi17Ci0gICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAg
V2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3Bl
Y3Rvcih3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3Nob3coaW5zcGVjdG9y
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5G
cmFtZSk7Ci0gICAgV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KTsKLQotICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2Ns
b3NlKGluc3BlY3Rvcik7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVJbldlYkluc3Bl
Y3RvcihKU1N0cmluZ1JlZiBzY3JpcHQpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgV2ViS2l0V2Vi
SW5zcGVjdG9yKiBpbnNwZWN0b3IgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJW
aWV3KTsKLSAgICBjaGFyKiBzY3JpcHRTdHJpbmcgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhz
Y3JpcHQpOwotCi0gICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfZXhlY3V0ZV9zY3JpcHQoaW5zcGVj
dG9yLCBzY3JpcHRTdHJpbmcpOwotICAgIGdfZnJlZShzY3JpcHRTdHJpbmcpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUo
dW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBz
Y3JpcHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgotfQotCi12b2lkIFRlc3RS
dW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVBbGxWaXNp
dGVkTGlua3MoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KLX0KLQotYm9vbCBU
ZXN0UnVubmVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQotewotICAgIHJldHVybiBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNob3VsZENsb3NlKG1haW5GcmFtZSk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1
dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKLXsKLQotfQotCi12b2lkIFRlc3RSdW5uZXI6
OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCi17Ci0KLX0KLQotdm9pZCBUZXN0
UnVubmVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVy
OjphdXRoZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdS
ZWYpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWJvcnRNb2RhbCgpCi17Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQotewotICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0U2VyaWFsaXplSFRUUExvYWRzKHNlcmlhbGl6
ZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBk
aXJlY3Rpb24pCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gd3JpdGluZ0RpcmVjdGlvbihKU1N0
cmluZ0NvcHlVVEY4Q1N0cmluZyhkaXJlY3Rpb24pKTsKLQotICAgIFdlYktpdFdlYlZpZXcqIHZp
ZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VS
VCh2aWV3KTsKLQotICAgIGlmIChnX3N0cl9lcXVhbCh3cml0aW5nRGlyZWN0aW9uLmdldCgpLCAi
YXV0byIpKQotICAgICAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24oR1RLX1dJREdFVCh2aWV3
KSwgR1RLX1RFWFRfRElSX05PTkUpOwotICAgIGVsc2UgaWYgKGdfc3RyX2VxdWFsKHdyaXRpbmdE
aXJlY3Rpb24uZ2V0KCksICJsdHIiKSkKLSAgICAgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9u
KEdUS19XSURHRVQodmlldyksIEdUS19URVhUX0RJUl9MVFIpOwotICAgIGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKHdyaXRpbmdEaXJlY3Rpb24uZ2V0KCksICJydGwiKSkKLSAgICAgICAgZ3RrX3dpZGdl
dF9zZXRfZGlyZWN0aW9uKEdUS19XSURHRVQodmlldyksIEdUS19URVhUX0RJUl9SVEwpOwotICAg
IGVsc2UKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJUZXN0UnVubmVyOjpzZXRUZXh0RGlyZWN0
aW9uIGNhbGxlZCB3aXRoIHVua25vd24gZGlyZWN0aW9uOiAnJXMnLlxuIiwgd3JpdGluZ0RpcmVj
dGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgp
Ci17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Zm9jdXNXZWJWaWV3KCkKLXsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpzZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQotewotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCi17
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNT
dHJpbmdSZWYganNPcmlnaW4pCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlQWxsV2Vi
Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNpbXVs
YXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBqc05vdGlmaWNhdGlvbikKLXsKLX0K
LQotdm9pZCBUZXN0UnVubmVyOjpzaW11bGF0ZUxlZ2FjeVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpT
U3RyaW5nUmVmIHRpdGxlKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2li
aWxpdHkoKQotewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
c2V0UGFnZVZpc2liaWxpdHkod2ViVmlldywgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZp
c2libGUsIHRydWUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5KGNv
bnN0IGNoYXIqIHZpc2liaWxpdHkpCi17Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdl
YmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgU3RyaW5nIHZpc2li
aWxpdHlTdHJpbmcodmlzaWJpbGl0eSk7Ci0gICAgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0
ZSB2aXNpYmlsaXR5U3RhdGUgPSBXZWJDb3JlOjpQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJsZTsK
LQotICAgIGlmICh2aXNpYmlsaXR5U3RyaW5nID09ICJ2aXNpYmxlIikKLSAgICAgICAgdmlzaWJp
bGl0eVN0YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGU7Ci0gICAgZWxz
ZSBpZiAodmlzaWJpbGl0eVN0cmluZyA9PSAiaGlkZGVuIikKLSAgICAgICAgdmlzaWJpbGl0eVN0
YXRlID0gV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbjsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybjsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0UGFnZVZpc2li
aWxpdHkod2ViVmlldywgdmlzaWJpbGl0eVN0YXRlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgVGVzdFJ1
bm5lcjo6c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCi19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U3RvcmFnZURh
dGFiYXNlSWRsZUludGVydmFsKGRvdWJsZSkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMuCi19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Y2xvc2VJZGxlTG9jYWxTdG9yYWdlRGF0YWJhc2Vz
KCkKLXsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRD
b250cm9sbGVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9UZXh0SW5wdXRDb250cm9s
bGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBhNjkyYzkyNDY3ZjViNTZi
ZTcwOTJmMTEyYzgxOGFhYWIzZjFiMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxl
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xs
ZXIuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCi0jaW5jbHVkZSA8R1VuaXF1ZVB0ckd0
ay5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8d2Via2l0L3dlYmtp
dC5oPgotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhj
ZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLQotICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJp
bmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7Ci0gICAgR1VuaXF1ZVB0cjxnY2hh
cj4gc3RyaW5nQnVmZmVyKHN0YXRpY19jYXN0PGdjaGFyKj4oZ19tYWxsb2MoYnVmZmVyU2l6ZSkp
KTsKLSAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0cmluZywgc3RyaW5nQnVmZmVyLmdldCgp
LCBidWZmZXJTaXplKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKLQotICAgIGludCBz
dGFydCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50
c1sxXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24p
OwotCi0gICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24g
fHwgISpleGNlcHRpb24pOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRDb21w
b3NpdGlvbih2aWV3LCBzdHJpbmdCdWZmZXIuZ2V0KCksIHN0YXJ0LCBsZW5ndGgpOwotICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVS
ZWYgaGFzTWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXco
bWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0LCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6Omhhc0NvbXBvc2l0aW9uKHZp
ZXcpKTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbWFya2VkUmFuZ2VDYWxsYmFjayhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtp
dF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwot
Ci0gICAgaW50IHN0YXJ0LCBsZW5ndGg7Ci0gICAgaWYgKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGs6OmNvbXBvc2l0aW9uUmFuZ2UodmlldywgJnN0YXJ0LCAmbGVuZ3RoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJh
eVZhbHVlc1syXTsKLSAgICBhcnJheVZhbHVlc1swXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRl
eHQsIHN0YXJ0KTsKLSAgICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRl
eHQsIGxlbmd0aCk7Ci0gICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VB
cnJheShjb250ZXh0LCAyLCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKLSAgICBBU1NFUlQoIWV4
Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIGFycmF5T2JqZWN0OwotfQotCi1z
dGF0aWMgSlNWYWx1ZVJlZiBpbnNlcnRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dl
dF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIGlmIChhcmd1
bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotCi0gICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwg
ISpleGNlcHRpb24pOwotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGlt
dW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5nKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBzdHJpbmdC
dWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwotICAgIEpT
U3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5nLCBzdHJpbmdCdWZmZXIuZ2V0KCksIGJ1ZmZlclNp
emUpOwotICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOwotCi0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24odmlldywgc3RyaW5nQnVmZmVyLmdldCgpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIHVubWFya1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Ci17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpjb25maXJtQ29tcG9zaXRpb24odmlldywgMCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBXZWJLaXRXZWJWaWV3KiB2aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3Zp
ZXcobWFpbkZyYW1lKTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAg
ICBpbnQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEq
ZXhjZXB0aW9uKTsKLQotICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIEFTU0VSVCgh
ZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLQotICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCBy
ZWN0OwotICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZSh2aWV3LCBsb2NhdGlvbiwgbGVuZ3RoLCAmcmVjdCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTVmFsdWVSZWYgYXJyYXlW
YWx1ZXNbNF07Ci0gICAgYXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCByZWN0LngpOwotICAgIGFycmF5VmFsdWVzWzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4
dCwgcmVjdC55KTsKLSAgICBhcnJheVZhbHVlc1syXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRl
eHQsIHJlY3Qud2lkdGgpOwotICAgIGFycmF5VmFsdWVzWzNdID0gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgcmVjdC5oZWlnaHQpOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNP
YmplY3RNYWtlQXJyYXkoY29udGV4dCwgNCwgYXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAg
QVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotCi0gICAgcmV0dXJuIGFycmF5T2Jq
ZWN0OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZWxlY3RlZFJhbmdlQ2FsbGJhY2soSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIFdlYktpdFdlYlZpZXcqIHZpZXcgPSB3ZWJr
aXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOwotICAgIEFTU0VSVCh2aWV3KTsK
LQotICAgIGludCBzdGFydCwgbGVuZ3RoOwotICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZWxlY3RlZFJhbmdlKHZpZXcsICZzdGFydCwgJmxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTVmFsdWVSZWYgYXJyYXlW
YWx1ZXNbMl07Ci0gICAgYXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCBzdGFydCk7Ci0gICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCBsZW5ndGgpOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJy
YXkoY29udGV4dCwgMiwgYXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24gfHwgISpleGNlcHRpb24pOwotCi0gICAgcmV0dXJuIGFycmF5T2JqZWN0OwotfQotCi1z
dGF0aWMgSlNWYWx1ZVJlZiBkb0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgV2ViS2l0V2ViVmlldyogdmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X3dlYl92aWV3KG1haW5GcmFtZSk7Ci0gICAgQVNTRVJUKHZpZXcpOwotICAgIGlmIChhcmd1bWVu
dENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpl
eGNlcHRpb24pOwotCi0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1V
VEY4Q1N0cmluZ1NpemUoc3RyaW5nKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBzdHJpbmdCdWZm
ZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhidWZmZXJTaXplKSkpOwotICAgIEpTU3Ry
aW5nR2V0VVRGOENTdHJpbmcoc3RyaW5nLCBzdHJpbmdCdWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUp
OwotICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrOjpkb0NvbW1hbmQodmlldywgc3RyaW5nQnVmZmVyLmdldCgpKTsKLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1N0YXRpY0Z1bmN0
aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0gewotICAgIHsgInNldE1hcmtlZFRleHQiLCBzZXRNYXJr
ZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJoYXNNYXJrZWRUZXh0IiwgaGFzTWFya2Vk
VGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAibWFya2VkUmFuZ2UiLCBtYXJrZWRSYW5nZUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCi0gICAgeyAiaW5zZXJ0VGV4dCIsIGluc2VydFRleHRDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAotICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0Q2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICB7ICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSIsIGZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJzZWxlY3RlZFJhbmdlIiwgc2VsZWN0ZWRS
YW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiZG9Db21tYW5kIiwgZG9Db21tYW5kQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICB7IDAsIDAsIDAgfQotfTsKLQotc3RhdGljIEpTQ2xhc3NSZWYgZ2V0
Q2xhc3MoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgc3RhdGljIEpTQ2xhc3NSZWYgdGV4
dElucHV0Q29udHJvbGxlckNsYXNzID0gMDsKLQotICAgIGlmICghdGV4dElucHV0Q29udHJvbGxl
ckNsYXNzKSB7Ci0gICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsK
LSAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwotICAgICAgICBjbGFzc0RlZmluaXRpb24uc3Rh
dGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zOwotCi0gICAgICAgIHRleHRJbnB1dENvbnRy
b2xsZXJDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRleHRJbnB1dENvbnRyb2xsZXJDbGFzczsKLX0KLQotSlNPYmplY3RSZWYgbWFr
ZVRleHRJbnB1dENvbnRyb2xsZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJu
IEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRDbGFzcyhjb250ZXh0KSwgMCk7Ci19CmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5oIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZ3RrL1RleHRJbnB1dENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNkYmE2MzQ5N2I3N2M3MGM2NTE4M2YzNjM0MTYyNzdkOTM3YTQ3
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvVGV4dElucHV0Q29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXh0SW5w
dXRDb250cm9sbGVyX2gKLSNkZWZpbmUgVGV4dElucHV0Q29udHJvbGxlcl9oCi0KLXR5cGVkZWYg
Y29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwotdHlwZWRlZiBzdHJ1
Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Ci0KLUpTT2JqZWN0UmVmIG1ha2VUZXh0SW5w
dXRDb250cm9sbGVyKEpTQ29udGV4dFJlZik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA5NTQ2MTI3NmVmOWY2ZjkzNjc4MjU2YzQyZDE0ZmE4MzEwNTYxODg0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9Xb3JrUXVldWVJdGVtR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCi0KLSNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZS5oIgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+Ci0j
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgotCi0vLyBSZXR1cm5zIGEgbmV3bHkg
YWxsb2NhdGVkIFVURi04IGNoYXJhY3RlciBidWZmZXIgd2hpY2ggbXVzdCBiZSBmcmVlZCB3aXRo
IGdfZnJlZSgpCi1nY2hhciogSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoSlNTdHJpbmdSZWYganNT
dHJpbmcpCi17Ci0gICAgc2l6ZV90IGRhdGFTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENT
dHJpbmdTaXplKGpzU3RyaW5nKTsKLSAgICBnY2hhciogdXRmOCA9IChnY2hhciopZ19tYWxsb2Mo
ZGF0YVNpemUpOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoanNTdHJpbmcsIHV0ZjgsIGRh
dGFTaXplKTsKLQotICAgIHJldHVybiB1dGY4OwotfQotCi1ib29sIExvYWRJdGVtOjppbnZva2Uo
KSBjb25zdAotewotICAgIGdjaGFyKiB0YXJnZXRTdHJpbmcgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0
cmluZyhtX3RhcmdldC5nZXQoKSk7Ci0KLSAgICBXZWJLaXRXZWJGcmFtZSogdGFyZ2V0RnJhbWU7
Ci0gICAgaWYgKCFzdHJsZW4odGFyZ2V0U3RyaW5nKSkKLSAgICAgICAgdGFyZ2V0RnJhbWUgPSBt
YWluRnJhbWU7Ci0gICAgZWxzZQotICAgICAgICB0YXJnZXRGcmFtZSA9IHdlYmtpdF93ZWJfZnJh
bWVfZmluZF9mcmFtZShtYWluRnJhbWUsIHRhcmdldFN0cmluZyk7Ci0gICAgZ19mcmVlKHRhcmdl
dFN0cmluZyk7Ci0KLSAgICBnY2hhciogdXJsU3RyaW5nID0gSlNTdHJpbmdDb3B5VVRGOENTdHJp
bmcobV91cmwuZ2V0KCkpOwotICAgIFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0ID0gd2Vi
a2l0X25ldHdvcmtfcmVxdWVzdF9uZXcodXJsU3RyaW5nKTsKLSAgICBnX2ZyZWUodXJsU3RyaW5n
KTsKLSAgICB3ZWJraXRfd2ViX2ZyYW1lX2xvYWRfcmVxdWVzdCh0YXJnZXRGcmFtZSwgcmVxdWVz
dCk7Ci0gICAgZ19vYmplY3RfdW5yZWYocmVxdWVzdCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBMb2FkSFRNTFN0cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0Ci17Ci0gICAgR1VuaXF1
ZVB0cjxnY2hhcj4gY29udGVudChKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhtX2NvbnRlbnQuZ2V0
KCkpKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBiYXNlVVJMKEpTU3RyaW5nQ29weVVURjhDU3Ry
aW5nKG1fYmFzZVVSTC5nZXQoKSkpOwotCi0gICAgaWYgKG1fdW5yZWFjaGFibGVVUkwpIHsKLSAg
ICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gdW5yZWFjaGFibGVVUkwoSlNTdHJpbmdDb3B5VVRGOENT
dHJpbmcobV91bnJlYWNoYWJsZVVSTC5nZXQoKSkpOwotICAgICAgICB3ZWJraXRfd2ViX2ZyYW1l
X2xvYWRfYWx0ZXJuYXRlX3N0cmluZyhtYWluRnJhbWUsIGNvbnRlbnQuZ2V0KCksIGJhc2VVUkwu
Z2V0KCksIHVucmVhY2hhYmxlVVJMLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHdlYmtpdF93ZWJfZnJhbWVfbG9hZF9zdHJpbmcobWFpbkZyYW1lLCBjb250ZW50Lmdl
dCgpLCAwLCAwLCBiYXNlVVJMLmdldCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBS
ZWxvYWRJdGVtOjppbnZva2UoKSBjb25zdAotewotICAgIHdlYmtpdF93ZWJfZnJhbWVfcmVsb2Fk
KG1haW5GcmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU2NyaXB0SXRlbTo6aW52
b2tlKCkgY29uc3QKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBnY2hhciogc2NyaXB0U3RyaW5nID0g
SlNTdHJpbmdDb3B5VVRGOENTdHJpbmcobV9zY3JpcHQuZ2V0KCkpOwotICAgIHdlYmtpdF93ZWJf
dmlld19leGVjdXRlX3NjcmlwdCh3ZWJWaWV3LCBzY3JpcHRTdHJpbmcpOwotICAgIGdfZnJlZShz
Y3JpcHRTdHJpbmcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEJhY2tGb3J3YXJkSXRl
bTo6aW52b2tlKCkgY29uc3QKLXsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0
X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAobV9ob3dGYXIgPT0g
MSkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQod2ViVmlldyk7Ci0gICAgZWxz
ZSBpZiAobV9ob3dGYXIgPT0gLTEpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKHdl
YlZpZXcpOwotICAgIGVsc2UgewotICAgICAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdl
YkJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Qo
d2ViVmlldyk7Ci0gICAgICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtID0gd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0od2ViQmFja0ZvcndhcmRMaXN0LCBtX2hv
d0Zhcik7Ci0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbSh3
ZWJWaWV3LCBpdGVtKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvZm9udHMvQUhFTV9fX18uVFRGIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL2ZvbnRzL0FIRU1fX19fLlRURgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWM4MWNiMDMxNjVhYjgzMWEzNmFiYjU5MTQ1ZmY3YTJmNTY3NWZiOS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg
MApIY21WP2QwMDAwMQoKbGl0ZXJhbCAxMjQ4MAp6Y21lSE5aRm0mYjZAS1NxWEZxYD9WI0o4X1d7
WigzMjc7QyVyTn5GNU5EK31CcU5VMHZKSU15S3lLIzQ4ZiZ4V3IKeilrZ1UhVDgmQzZCNyVZPDNS
KG44NWZLNFZzaXRUVm1vIT5VWkImWTJlR3BqUkozQTIrK2RxQiRWTFArVz8ze2I8Cnp5PVR0Nz1i
ZH1jP3p+VXtfJVJiMmBkKDdqcihlVV5RTF9NTDBKVzFWcU1fT0B5WWZjPnR7VDhkUkUzaFlJMGFz
eQp6P0BIRl5STWt3YXlsN1F3SHgwQV4xPnVNcDNoIURwcmFTQV9eWHdtPyF0Sy1aREllaDNHWkla
VEpSPmxqX0x+NSQKenhoN3JfNV9NKz1mdWQ2QytNfVV7VDZgKylFOFc7JCM2blNYTSVPI20wS05N
MXsqbF52R0JzPUc+NVZgIWA+V2pgCnplT0U5bkAwM2ZjdUlAN0VBaVA9fEhDUHFEYFUtajdjK1Q+
UmZYbzFgTyVwNj9QXkZkIWApTUxHZlp0WW9lb0lUbwp6OXx0WVhMM3Ijd1UjO2l1d0tpb2dUb2wl
O15heWpaU0xKIzFRIzVMIWF+JCVSMnxTKHlHMTRtVj4rKkFsMTRBSjgKenNrUlJTVExxTmRBKnxE
YzwqQmVkPDIrP09sd0xaZ0dZMVheelRGcyprOH0zYU44MmstY1dTdHtzNntZVHBNMmd+CnpgMDg0
dGE1MmRxOWFwPH0hWD97TmdVKXJ5ZlNhcUFUIVZhRS12ajdgJmdnPDE8UlQ5enAoez5DS0cqVllJ
Mjhwcgp6NGMmMSVkZis8e0NgMXQ3TU5nYzhCQWtne18jViF9KzMxYVBQPmVxNGl4VHcxeGl9QnNN
fVBiUDE4X2JEOylmVzcKekE3TDtxO0pQKnghIVI3QnhEWEBvVn5vVF83PUBvO0clbSYlVCFPSzw2
eXMyYUB3Zn5WYTUqTzgzUzVid1ZpSkNhCnp0OGdfWSk4NyF2UUdxWl9SSDZ6SVJBVU9SS0BGbWFB
JnkjSGl2KkhMcCReeGY5dTFnXj52MDM3YWJLQiVwTDRsPQp6NkYxQH1gfm8tUUUmTEw8Ozh4cyp4
QTd9OTsoZ3FYSko1eiVfeV5pQzgqfWd1LW9AWTBqSzU8cGV2UXtLNHxuMSYKenswNFg5Sl5UcUQ7
OG9tJUNacmpxYCoxKHo8N0s+cEtWdWkoeitkb05FV3EjWkFyQGpNVEpab3tASy1BJGQkMCh2CnpW
PmtCVktgaDJZU2MwV143Pns1WG1nNy04I3heVlBJOUIyYkpjKDZVamk+TjVldmRWSDI1WWc3SkV1
LUdmVWBBKAp6UVM4aHAlc0BzZFFPY0FDV3VFJGl4PW5wY3lHd2dTVGQhPnRJaWptNTVJc2F0NnA2
bEtwZVFYMjc4Vjg3cGJfajYKeiVuS0YtZGohdThqdG91P24hKXtOWX5RRDVHUEVsZyh9bEQqJmEk
X0tfVEQoby1idGRIPXFgazFAQkE7PiVNRzZUCnpnfXR6NDUxQ0JuP015M28qYyZzYEc3fmN3MDd1
JCs0bkFfJDtuJDlJLUo1Q0kxaGxNZ1M9WHxyPD8pdUtFZXJOTwp6eVo1bmxZa0VnfG16PH5jX1Zr
QUlMK1FyIXQjNXR5WDN3MERZfX04TWJAR3M0bWdqTkQoY3xSZiNkYiNGI04lR1oKelFSM2hNTSow
cyNMbkNvOG0rYHpDbn45MDFoPn1AJjBiN1pUSW1GMiMmaUB1LXBiNld0NEtFU31fYzMtNEdVXmhL
Cnp3LWI+fGlPSSFgPTVqbGw4O0g7cVJ6Jjkkc21+S3hQZ3JyUyFiV1QmP3k4QzFEYTdxSE1EOUZk
eDBkTFkqaTh8PQp6NjEjc1NkWiFZPCpBdSVwNUpgNzMoJGcmakthMXl4cyNVfjc3OCZiXmxDPjd6
VU1GNVIpN1NTTGx3PD8kcHlXVEkKekw/KXVsQmVpUVohOE9iY29TUiNpZHEhYnk7ZEolR0JYZzdr
TSsySFQrJWxhajRreXlpbCh8US1RSzhtJHhFbXtGCnpDaHBZOVVsN2lgSUdBdnIyV0tzQykmZ2dM
YVE0UDtJNEB3PCFUcStSQE1MU3grM01zVio/JSRyWExBc1NgXjBzJQp6I21QT0xvWlFLfm8hP140
P0A7R0FffUE8WS0qNjcle057SzUyWGcpY2I4O3t6MlhrXlRDa0p6S0ZlZUI1SCNyIXsKekMmKyQr
V0MjckEreHsjMD8oO2duYkRoV2NtQER7KFlDR1NVemwjSGtzXmxtPWwtfGxmV3UhN2UyYGRSQHJa
UVdaCnp1UGpzNkN8aV9mckImSWQ5OTA4cWYhYSYkdWE+SWcpWDhkMG91KVJiUDNqVkx3WW97JnNp
eEktXl5vUyNeMGw1Pwp6S1cmSU1Nd19IZihIZ1d7XyNTKGF3bz09bT9hKzQ5KEAlNj0mKG5vb3RQ
aiNoPUBhI15wM3JDTnYtU0Q8R0pURHsKek1RXyR5Xj9td0xTSE0tXj5nRFMxRHNfIT5PP0pneChf
RD9OQ2Y1P3pZUyQqJFBGTEYxP21BPzZqQ2BZfihhI3VTCnpqND50fFE7WWBWN1VNMnNrK0lVKVZD
Km48OCpSb1hacno+ZDdWY3ZBQW9uUXVNMGNlLTwtVzsxKlMpfn5zQyV0QAp6dDl6SUc5cnUwQEpl
QHQ9SiFnM2FASDRfUS1jIzxXXn5+X3g7a25RQXU7KiNkWDN3amg3U0QmQyEoTn1hbzQzZSYKem9f
Q21jdG9KSCFqclYlKlpRaUBSaUBpXkpIK288OD8oeDN3e25UZ3B5ODQyP3pQYGJ9KFlgQnY1I00j
Ym58PD9xCnozdzxrbT53VmpPWn17SHo5cV9DRTlEZmdnWn5zOTVOZEUrWCpxYHZ2XncwTHNfYj5D
V0BvKGByYCY8M3t7Nl88VQp6S3RaNWFwbnNxPUZmSzRUNURRRVRHek9YaU85SEN7bip1dW49fEZx
blAkeTVQezd5WVBePHlAMG5zViROe1F7UD0KemhYUmslUUJ1KWFTel94bzJ4WVlgPnVsMyglUCE8
QWR1LVhEZSFxT1d0bTc1c2tTIX5HJWV+RShSaytvY1kqfEImCnorSEFgQCtxYDRURjhJfEJFfXVk
RCRGQEYpXjFwMDNtdiVuMDx2aSRgJURxaklUcz51aFg0bz52cUEjeyhqenhkZQp6bU5eIUV0dTFw
YmBmZ2sxU29Cc349Mi1Na1o4LS1YbTs0YDcrUnNJMm0mY2Ejc0x2LU9DVHtVcTFpMXdmdko0VkQK
ekU2NUhvRXE7cnpHJHNUITUkWGliRDhHfkI1WSpYcXkpQTc2ZHpvWXhxKnk4PD9gOX49YihTNHpC
U3pNT0FnOEM2CnpyKSp6T1l0X35yckw3MmtzSFprV1N6M3YpVW11SG1iRjNgTFpiLTE1eW5CWik8
eUhAcT8xcE9nRzA2PVFXYmBCewp6UnIyMDdFTEV+YyFzPW1DcFIoRmp2MFB6VWwzYSkrYnk2UnYx
P2tJRnREUEtXKHl9KyF4QCh5QnEtU3l6PCFtRiEKejlnNEZnJU9tSlRnc3IzcEA/T1g4blZxcldX
RXohR1UmZU0oK0wxRntPOyVIcXhebH5VSj5fZylJcSUyKEVhb2dxCno4JlJeQU90TyZWbX1HPHxT
Z29iIVMrN2d6WCRoQCR3Qz1jbWVMSzdNVik5cjtNSUA5NlJpdztCUWlLd3dOSlVJeAp6TW4mQDRJ
K2w3MXYhVE1RT15Lb2xoZ1FfM09jOUVPTVgpeTVUaHZGWUQ8VUVwaVB3dXp2Y2ltfGBoLXBFRGs+
QjQKenNBWikqbHIoRnFWYGowcUVOTkVPKXJpVj9MWnItT3N5YkZCRCZrU0hYc2M3ekB0ODxYT3tV
Q2Z2Ukk1dyNLVXpKCnpXPn1PQDczMVVLdW93fUZCd31WRittbnRCRkRueWVwPWV6cVJERVZybHFj
ZiNOIUhwbmktJChjPXMyXmd0fHBZMgp6en5NO0tDQi1FfHNeeGl7dTB2KEZtUE98Jl88d3kwekli
Tjd7RGdIcEwyN24wJGxTb3A7c2hjWEgzejl3JCFfXkYKeit3dDRQYm9fNjVqeUdCeU42QiEhalUy
V3thQDF5Iz1fWXhNY2FyMEZrSHJeVE5jUCh6aS0jIXJobXc2THhyYlIrCnoqOz15VnAwZ05tK25B
cmRoI2gjejt5M09qXllKeHVBfD1vOWImS2hebzFEciRXSypXZVhfUEYtSHU1Rmt3PlhwXgp6a2Ff
bkpfVGl0e2tCYGFuS1pzQVB4Smg+N0kmJFM2Q2E+KiZpfDRyNlZtZHhnTSYyZn1AME9FbXd9QXx9
Xjw+UjgKemshZzE/eHB3byZ1YmdBQ0ZQRDt3X2JPUiomeXE+NkQhTS1BdmVCY31rPmo8fTNyRXdz
WDBoXmZwcGVnfmVHVSFICkJjQGg4cwoKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2d0ay9mb250cy9Gb250V2l0aE5vVmFsaWRFbmNvZGluZy5mb24gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvZm9udHMvRm9udFdpdGhOb1ZhbGlkRW5jb2RpbmcuZm9uCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA4ZmZmN2Q5YzFmNGE1YzYzZmZhMGIxMWU1ZWFhMTQwZDI3ZTU4NjE4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDgzNjgKemNtZUklUGlxckY3e35GNlIl
QCRtVzdTcnhQTnpqZ3BAKzY4aChjOGAxO1BISUVlYWs2VnpRV2tPPV4tdEBofThACnoxNzV0JnN9
THozPHtrSkojeTgrPW5FMmhidHchMSZKY3VvYCVWIyQ7emhgJFJQZjdATTtwSVJzQ3hxeGhyejZC
Ugp6PVg4Nk45Uz1YV2kzaThPNDJuO0VVbmpQNiYlUkVxUmpOKDMrXkR+OTZ4VVUkU2dYfXI+USRs
fG4+QUlmc1Y3VVQKellRMGBnMktzTzgtRlVIWkQpKGBCXm5VbG51ayVBekA8X1pCQUs2RktnPVE7
RlNEUzQ7SikqYXJPXlhySEN6aSEqCnpIaHBHaVpkYG9OUDNNPX1LWn0xSmQqXyFIKlBjOUc4Sih9
IVN9JkB0JTN9Ul9AbENae3NGbXZGWVZDRGFeJmwtOwp6RFhnbFE+RktHTipeSWljNCFERldiP2Ve
VW5MRGJIRztqYUBGcCo8VDs+MmV1IzZyRTxRbCgwPFE3cEJSTXBHM1YKemlFMzM2bThgNGcrZjdE
T0QlbU99OCFkSVNAVks8dU4+czV7UitBZihRO0l3R2khSnRuLUZ0dD9pOUd4SF5xQE41CnojQiFF
YzkrUGgyZk9WJFhLVlFwOTktMF43V00wVWd5cUpUQWZyYUN2XnFmLXhAKVJ9REZ0QmomMiN9fUFw
PCFVKgp6OzFNOHUkKVJDajtvdVA8JnlZakl6ezBeSks9elNDIUAkRDlCUzd8KEwmTHpyITZRSlBD
NU1LQWdAWj9jSlZ5PTwKejB9QlVfMDY5UG80RmR9WWp7ckdINGg7aGYyYWY8Ykw9RnVESjB5aExM
b0lWMjBXd2M1R3pASD5URnhvWT4oR1UzCnpuM3cjPyV8WE0hIW9lZSk3ZVdxR2dTbFpMYmNSflMx
e013OzByQ1FNJkBpeFlAQ2M5PiQpUkNqO291UDxGT2ZzVAp6enswXkpLI3FfQCFAJEQ5QlM0T2xM
Jkx6ciE2UUlrQ1duVEJnQFo/Y3loMDhRMH1CVV8wNjlodTRGZH1Zant0ZDwKejkyeTF8NGp1dlc4
YVhyIUVGMyVuPGFLZ3I3KzUlWDFWfjheanJOIWpBOGAyQWlDZ1NJPl9GXjU+X0ZeNT5fRl41Cno/
NyklZ0stYUgzUntyUHNOV0djMyp3fSZDZm4oS3l1SjVDTDJGTDJuI3kxbD81SVliJUBWNmJ7YD8y
Zk5LZ1Y1UgplOUs7VTk0I1c8YDQjVz1wemE3fTtDeDYkfUFeKjREc3J2IXMlT3hmTgoKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9mb250cy9mb250cy5jb25mIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL2ZvbnRzL2ZvbnRzLmNvbmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDUxZWE2YzZlY2U1OTZhMGFkMWI0NTNmMDY0ZTAwOWE4N2Y2MmIzNTEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL2ZvbnRzL2ZvbnRzLmNvbmYKKysrIC9kZXYvbnVsbApAQCAtMSw0MTkgKzAsMCBA
QAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgZm9udGNvbmZpZyBTWVNURU0gImZv
bnRzLmR0ZCI+Ci08Zm9udGNvbmZpZz4KLQotICAgIDwhLS0gRHVlIHRvIHBhdGVudCAoaHR0cDov
L2ZyZWV0eXBlLnNvdXJjZWZvcmdlLm5ldC9wYXRlbnRzLmh0bWwpCi0gICAgICAgICBpc3N1ZXMg
aGludGluZyBnaXZlcyBkaWZmZXJlbnQgcmVzdWx0cyBkZXBlbmRpbmcgb24gdGhlCi0gICAgICAg
ICBmcmVldHlwZSB2ZXJzaW9uIG9mIHRoZSBsaW51eCBkaXN0cmlidXRpb24sIGF2b2lkaW5nIGhp
bnRpbmcKLSAgICAgICAgIGdpdmVzIG1vcmUgY29uc2lzdGVudCByZXN1bHRzLiBXaGVuIGFsbCB0
aGUgZGlzdHJpYnV0aW9ucwotICAgICAgICAgcmVsZWFzZSBmcmVldHlwZSB0aGUgMi40LCB3aGlj
aCBlbmFibGVzIGJ5IGRlZmF1bHQgdGhlCi0gICAgICAgICBoaW50aW5nIG1ldGhvZCB0aGF0IHdh
cyBwYXRlbnRlZCwgd2UgY291bGQgdW5kbyB0aGlzIGNoYW5nZQotICAgICAgICAgYW5kIHRyeSB0
aGUgaGludGluZyBhZ2Fpbi4gLS0+Ci0gICAgPG1hdGNoIHRhcmdldD0iZm9udCI+Ci0gICAgICAg
IDxlZGl0IG5hbWU9ImhpbnRpbmciIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgICAgICA8Ym9vbD5m
YWxzZTwvYm9vbD4KLSAgICAgICAgPC9lZGl0PgotICAgIDwvbWF0Y2g+Ci0KLSAgICA8IS0tIFRo
aXMgc3lzdGVtIG1heSBoYXZlIHR1cm5lZCBvZmYgc2VsZWN0aW9uIG9mIGJpdG1hcCBmb250cywg
YnV0Ci0gICAgICAgICB3ZSBtdXN0IHR1cm4gaXQgb24gYWdhaW4sIGJlY2F1c2Ugd2Ugd2FudCB0
byBiZSBhYmxlIHRvIHRlc3QgdGhhdAotICAgICAgICAgYml0bWFwIGZvbnRzIHdpdGggbm8gdmFs
aWQgZW5jb2RpbmdzIGFyZSAqbmV2ZXIqIHNlbGVjdGVkIHJlZ2FyZGxlc3MKLSAgICAgICAgIG9m
IHRoZSBGb250Y29uZmlnIHNldHRpbmdzLiBTbyBmb3JjZSBGb250Y29uZmlnIHRvIHNlbGVjdCBv
dXIgY3J1ZGR5Ci0gICAgICAgICBiaXRtYXAgZm9udCAtLT4KLSAgICA8c2VsZWN0Zm9udD4KLSAg
ICAgICAgPGFjY2VwdGZvbnQ+Ci0gICAgICAgICAgICA8cGF0dGVybj4KLSAgICAgICAgICAgICAg
ICA8cGF0ZWx0IG5hbWU9ImZhbWlseSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHJpbmc+Rm9u
dFdpdGhOb1ZhbGlkRW5jb2Rpbmc8L3N0cmluZz4KLSAgICAgICAgICAgICAgICA8L3BhdGVsdD4K
LSAgICAgICAgICAgIDwvcGF0dGVybj4KLSAgICAgICAgPC9hY2NlcHRmb250PgotICAgIDwvc2Vs
ZWN0Zm9udD4KLQotICAgIDwhLS0gVGhlIHNhbnMtc2VyaWYgZm9udCBzaG91bGQgYmUgTGliZXJh
dGlvbiBTZXJpZiAtLT4KLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRl
c3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgICAgICAgPHN0cmluZz5zZXJpZjwv
c3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9k
ZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBTZXJpZjwvc3RyaW5n
PgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0
ZXJuIj4KLSAgICAgICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgICAg
ICAgPHN0cmluZz5UaW1lczwvc3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxlZGl0
IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxzdHJpbmc+TGliZXJh
dGlvbiBTZXJpZjwvc3RyaW5nPgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAgICA8
bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJm
YW1pbHkiPgotICAgICAgICAgICAgPHN0cmluZz5UaW1lcyBOZXcgUm9tYW48L3N0cmluZz4KLSAg
ICAgICAgPC90ZXN0PgotICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+
Ci0gICAgICAgICAgICA8c3RyaW5nPkxpYmVyYXRpb24gU2VyaWY8L3N0cmluZz4KLSAgICAgICAg
PC9lZGl0PgotICAgIDwvbWF0Y2g+Ci0KLSAgICA8IS0tIFVudGlsIHdlIGZpbmQgZ29vZCBmb250
cyB0byB1c2UgZm9yIGN1cnNpdmUgYW5kIGZhbnRhc3kKLSAgICAgICAgIGp1c3QgdXNlIG91ciBz
ZXJpZiBmb250LiAtLT4KLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRl
c3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgotICAgICAgICAgICAgPHN0cmluZz5jdXJzaXZl
PC9zdHJpbmc+Ci0gICAgICAgIDwvdGVzdD4KLSAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBt
b2RlPSJhc3NpZ24iPgotICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIFNlcmlmPC9zdHJp
bmc+Ci0gICAgICAgIDwvZWRpdD4KLSAgICA8L21hdGNoPgotICAgIDxtYXRjaCB0YXJnZXQ9InBh
dHRlcm4iPgotICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICAg
ICAgICA8c3RyaW5nPmZhbnRhc3k8L3N0cmluZz4KLSAgICAgICAgPC90ZXN0PgotICAgICAgICA8
ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgICAgICA8c3RyaW5nPkxp
YmVyYXRpb24gU2VyaWY8L3N0cmluZz4KLSAgICAgICAgPC9lZGl0PgotICAgIDwvbWF0Y2g+Ci0K
LSAgICA8IS0tIFRoZSBzYW5zLXNlcmlmIGZvbnQgc2hvdWxkIGJlIExpYmVyYXRpb24gU2FucyAt
LT4KLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRlc3QgcXVhbD0iYW55
IiBuYW1lPSJmYW1pbHkiPgotICAgICAgICAgICAgPHN0cmluZz5zYW5zIHNlcmlmPC9zdHJpbmc+
Ci0gICAgICAgIDwvdGVzdD4KLSAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3Np
Z24iPgotICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIFNhbnM8L3N0cmluZz4KLSAgICAg
ICAgPC9lZGl0PgotICAgIDwvbWF0Y2g+Ci0gICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0g
ICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KLSAgICAgICAgICAgIDxzdHJp
bmc+c2Fuczwvc3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImZh
bWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBTYW5z
PC9zdHJpbmc+Ci0gICAgICAgIDwvZWRpdD4KLSAgICA8L21hdGNoPgotICAgIDwhLS0gV2UgbmVl
ZCB0byBlbnN1cmUgdGhhdCBsYXlvdXQgdGVzdHMgdGhhdCB1c2UgIkhlbHZldGljYSIgZG9uJ3QK
LSAgICAgICAgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IHNlcmlmIGZvbnQgLS0+Ci0gICAgPG1h
dGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWls
eSI+Ci0gICAgICAgIDxzdHJpbmc+SGVsdmV0aWNhPC9zdHJpbmc+Ci0gICAgICA8L3Rlc3Q+Ci0g
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgIDxzdHJpbmc+
TGliZXJhdGlvbiBTYW5zPC9zdHJpbmc+Ci0gICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAg
ICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0i
ZmFtaWx5Ij4KLSAgICAgICAgPHN0cmluZz5BcmlhbDwvc3RyaW5nPgotICAgICAgPC90ZXN0Pgot
ICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgICA8c3RyaW5n
PkxpYmVyYXRpb24gU2Fuczwvc3RyaW5nPgotICAgICAgPC9lZGl0PgotICAgIDwvbWF0Y2g+Ci0g
ICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0gICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9
ImZhbWlseSI+Ci0gICAgICAgIDxzdHJpbmc+THVjaWRhIEdyYW5kZTwvc3RyaW5nPgotICAgICAg
PC90ZXN0PgotICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAg
ICA8c3RyaW5nPkxpYmVyYXRpb24gU2Fuczwvc3RyaW5nPgotICAgICAgPC9lZGl0PgotICAgIDwv
bWF0Y2g+Ci0KLSAgICA8IS0tIFRoZSBNb25vc3BhY2UgZm9udCBzaG91bGQgYmUgTGliZXJhdGlv
biBNb25vIC0tPgotICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgICAgICA8dGVzdCBx
dWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICAgICAgICA8c3RyaW5nPm1vbm9zcGFjZTwv
c3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9k
ZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBNb25vPC9zdHJpbmc+
Ci0gICAgICAgIDwvZWRpdD4KLSAgICA8L21hdGNoPgotICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRl
cm4iPgotICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+Ci0gICAgICAgICAg
ICA8c3RyaW5nPm1vbm88L3N0cmluZz4KLSAgICAgICAgPC90ZXN0PgotICAgICAgICA8ZWRpdCBu
YW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgICAgICA8c3RyaW5nPkxpYmVyYXRp
b24gTW9ubzwvc3RyaW5nPgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAgICA8IS0t
IFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgbGF5b3V0IHRlc3RzIHRoYXQgdXNlICJDb3VyaWVyIiwg
IkNvdXJpZXIgTmV3IiwKLSAgICAgICAgIGFuZCAiTW9uYWNvIiAoYWxsIG1vbm9zcGFjZSBmb250
cykgZG9uJ3QgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0Ci0gICAgICAgICBzZXJpZiBmb250IC0t
PgotICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgICAgPHRlc3QgcXVhbD0iYW55IiBu
YW1lPSJmYW1pbHkiPgotICAgICAgICA8c3RyaW5nPkNvdXJpZXI8L3N0cmluZz4KLSAgICAgIDwv
dGVzdD4KLSAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAg
PHN0cmluZz5MaWJlcmF0aW9uIE1vbm88L3N0cmluZz4KLSAgICAgIDwvZWRpdD4KLSAgICA8L21h
dGNoPgotICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgICAgPHRlc3QgcXVhbD0iYW55
IiBuYW1lPSJmYW1pbHkiPgotICAgICAgICA8c3RyaW5nPkNvdXJpZXIgTmV3PC9zdHJpbmc+Ci0g
ICAgICA8L3Rlc3Q+Ci0gICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0g
ICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBNb25vPC9zdHJpbmc+Ci0gICAgICA8L2VkaXQ+Ci0g
ICAgPC9tYXRjaD4KLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgIDx0ZXN0IHF1
YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KLSAgICAgICAgPHN0cmluZz5Nb25hY288L3N0cmluZz4K
LSAgICAgIDwvdGVzdD4KLSAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4K
LSAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIE1vbm88L3N0cmluZz4KLSAgICAgIDwvZWRpdD4K
LSAgICA8L21hdGNoPgotCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIGhpbnRpbmcgc3BlY2lhbGl6
YXRpb25zIGFyZSBhZGFwdGVkIGZyb20gdGhvc2UgaW4gdGhlCi0gICAgICAgICBDaHJvbWl1bSB0
ZXN0X3NoZWxsLiAgV2UgdHJ5IHRvIGR1cGxpY2F0ZSB0aGVpciBpbmNyZWRpYmx5IHRob3JvdWdo
Ci0gICAgICAgICB0ZXN0aW5nIGhlcmUgLS0+Ci0gICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+
Ci0gICAgICAgIDx0ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEiPgotICAgICAgICAgICAg
PHN0cmluZz5Ob25BbnRpQWxpYXNlZFNhbnM8L3N0cmluZz4KLSAgICAgICAgPC90ZXN0PgotICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgICAgICA8c3Ry
aW5nPkxpYmVyYXRpb24gU2Fuczwvc3RyaW5nPgotICAgICAgICA8L2VkaXQ+Ci0gICAgICAgIDxl
ZGl0IG5hbWU9ImFudGlhbGlhcyIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxib29sPmZh
bHNlPC9ib29sPgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAgICAKLSAgICA8bWF0
Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJl
PSJlcSI+Ci0gICAgICAgICAgICA8c3RyaW5nPlNsaWdodEhpbnRlZFNlcmlmPC9zdHJpbmc+Ci0g
ICAgICAgIDwvdGVzdD4KLSAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24i
PgotICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIFNlcmlmPC9zdHJpbmc+Ci0gICAgICAg
IDwvZWRpdD4KLSAgICAgICAgPGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNzaWduIj4KLSAg
ICAgICAgICAgIDxib29sPnRydWU8L2Jvb2w+Ci0gICAgICAgIDwvZWRpdD4KLSAgICAgICAgPGVk
aXQgbmFtZT0iaGludHN0eWxlIiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAgPGNvbnN0Pmhp
bnRzbGlnaHQ8L2NvbnN0PgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAgICAKLSAg
ICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBj
b21wYXJlPSJlcSI+Ci0gICAgICAgICAgICA8c3RyaW5nPk5vbkhpbnRlZFNhbnM8L3N0cmluZz4K
LSAgICAgICAgPC90ZXN0PgotICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2ln
biI+Ci0gICAgICAgICAgICA8c3RyaW5nPkxpYmVyYXRpb24gU2Fuczwvc3RyaW5nPgotICAgICAg
ICA8L2VkaXQ+Ci0gICAgICAgIDwhLS0gVGhlc2UgZGVsaWJlcmF0ZWx5IGNvbnRyYWRpY3QgZWFj
aCBvdGhlci4gVGhlICdoaW50aW5nJyBwcmVmZXJlbmNlCi0gICAgICAgICAgICAgc2hvdWxkIHRh
a2UgcHJpb3JpdHkgLS0+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImhpbnRzdHlsZSIgbW9kZT0iYXNz
aWduIj4KLSAgICAgICAgICAgIDxjb25zdD5oaW50ZnVsbDwvY29uc3Q+Ci0gICAgICAgIDwvZWRp
dD4KLSAgICAgICAgPGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAg
ICAgIDxib29sPmZhbHNlPC9ib29sPgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAg
ICAKLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KLSAgICAgICAgPHRlc3QgbmFtZT0iZmFt
aWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICAgICAgICA8c3RyaW5nPkF1dG9oaW50ZWRTZXJpZjwv
c3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9k
ZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBTZXJpZjwvc3RyaW5n
PgotICAgICAgICA8L2VkaXQ+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImhpbnRpbmciIG1vZGU9ImFz
c2lnbiI+Ci0gICAgICAgICAgICA8Ym9vbD50cnVlPC9ib29sPgotICAgICAgICA8L2VkaXQ+Ci0g
ICAgICAgIDxlZGl0IG5hbWU9ImF1dG9oaW50IiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAg
PGJvb2w+dHJ1ZTwvYm9vbD4KLSAgICAgICAgPC9lZGl0PgotICAgICAgICA8ZWRpdCBuYW1lPSJo
aW50c3R5bGUiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgICAgICA8Y29uc3Q+aGludG1lZGl1bTwv
Y29uc3Q+Ci0gICAgICAgIDwvZWRpdD4KLSAgICA8L21hdGNoPgotICAgIAotICAgIDxtYXRjaCB0
YXJnZXQ9InBhdHRlcm4iPgotICAgICAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVx
Ij4KLSAgICAgICAgICAgIDxzdHJpbmc+SGludGVkU2VyaWY8L3N0cmluZz4KLSAgICAgICAgPC90
ZXN0PgotICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+Ci0gICAgICAg
ICAgICA8c3RyaW5nPkxpYmVyYXRpb24gU2VyaWY8L3N0cmluZz4KLSAgICAgICAgPC9lZGl0Pgot
ICAgICAgICA8ZWRpdCBuYW1lPSJoaW50aW5nIiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAg
PGJvb2w+dHJ1ZTwvYm9vbD4KLSAgICAgICAgPC9lZGl0PgotICAgICAgICA8ZWRpdCBuYW1lPSJh
dXRvaGludCIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxib29sPmZhbHNlPC9ib29sPgot
ICAgICAgICA8L2VkaXQ+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImhpbnRzdHlsZSIgbW9kZT0iYXNz
aWduIj4KLSAgICAgICAgICAgIDxjb25zdD5oaW50bWVkaXVtPC9jb25zdD4KLSAgICAgICAgPC9l
ZGl0PgotICAgIDwvbWF0Y2g+Ci0gICAgCi0gICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+Ci0g
ICAgICAgIDx0ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEiPgotICAgICAgICAgICAgPHN0
cmluZz5GdWxsQW5kQXV0b0hpbnRlZFNlcmlmPC9zdHJpbmc+Ci0gICAgICAgIDwvdGVzdD4KLSAg
ICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAgPHN0
cmluZz5MaWJlcmF0aW9uIFNlcmlmPC9zdHJpbmc+Ci0gICAgICAgIDwvZWRpdD4KLSAgICAgICAg
PGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxib29sPnRy
dWU8L2Jvb2w+Ci0gICAgICAgIDwvZWRpdD4KLSAgICAgICAgPGVkaXQgbmFtZT0iYXV0b2hpbnQi
IG1vZGU9ImFzc2lnbiI+Ci0gICAgICAgICAgICA8Ym9vbD50cnVlPC9ib29sPgotICAgICAgICA8
L2VkaXQ+Ci0gICAgICAgIDxlZGl0IG5hbWU9ImhpbnRzdHlsZSIgbW9kZT0iYXNzaWduIj4KLSAg
ICAgICAgICAgIDxjb25zdD5oaW50ZnVsbDwvY29uc3Q+Ci0gICAgICAgIDwvZWRpdD4KLSAgICA8
L21hdGNoPgotICAgIAotICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgotICAgICAgICA8dGVz
dCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KLSAgICAgICAgICAgIDxzdHJpbmc+U3VicGl4
ZWxFbmFibGVkU2Fuczwvc3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxlZGl0IG5h
bWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlv
biBTYW5zPC9zdHJpbmc+Ci0gICAgICAgIDwvZWRpdD4KLSAgICAgICAgPGVkaXQgbmFtZT0icmdi
YSIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxjb25zdD5yZ2I8L2NvbnN0PgotICAgICAg
ICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLSAgICAKLSAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJu
Ij4KLSAgICAgICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+Ci0gICAgICAgICAg
ICA8c3RyaW5nPlN1YnBpeGVsRGlzYWJsZWRTYW5zPC9zdHJpbmc+Ci0gICAgICAgIDwvdGVzdD4K
LSAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAg
PHN0cmluZz5MaWJlcmF0aW9uIFNhbnM8L3N0cmluZz4KLSAgICAgICAgPC9lZGl0PgotICAgICAg
ICA8ZWRpdCBuYW1lPSJyZ2JhIiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAgPGNvbnN0Pm5v
bmU8L2NvbnN0PgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLQotICAgIDwhLS0gV2Ug
bmVlZCB0byBlbmFibGUgc2ltdWxhdGVkIGJvbGQgdG8gZm9yIERlamFWdSBTZXJpZiB0byBlbnN1
cmUgdGhhdCB3ZSBpbnRlcnByZXQKLSAgICAgICAgIHRoaXMgcHJvcGVydHkgY29ycmVjdGx5IGlu
OiBwbGF0Zm9ybS9ndGsvZm9udHMvZm9udGNvbmZpZy1zeW50aGV0aWMtYm9sZC5odG1sIC0tPgot
ICAgIDxtYXRjaCB0YXJnZXQ9ImZvbnQiPgotICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9
ImZhbWlseSI+Ci0gICAgICAgICAgICA8c3RyaW5nPkRlamFWdSBTZXJpZjwvc3RyaW5nPgotICAg
ICAgICA8L3Rlc3Q+Ci0gICAgICAgIDx0ZXN0IG5hbWU9IndlaWdodCIgY29tcGFyZT0ibGVzc19l
cSI+Ci0gICAgICAgICAgICA8Y29uc3Q+bWVkaXVtPC9jb25zdD4KLSAgICAgICAgPC90ZXN0Pgot
ICAgICAgICA8dGVzdCB0YXJnZXQ9InBhdHRlcm4iIG5hbWU9IndlaWdodCIgY29tcGFyZT0ibW9y
ZSI+Ci0gICAgICAgICAgICA8Y29uc3Q+bWVkaXVtPC9jb25zdD4KLSAgICAgICAgPC90ZXN0Pgot
ICAgICAgICA8ZWRpdCBuYW1lPSJlbWJvbGRlbiIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAg
IDxib29sPnRydWU8L2Jvb2w+Ci0gICAgICAgIDwvZWRpdD4KLSAgICAgICAgPGVkaXQgbmFtZT0i
d2VpZ2h0IiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAgPGNvbnN0PmJvbGQ8L2NvbnN0Pgot
ICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLQotICAgIDwhLS0gV2UgbmVlZCB0byBlbmFi
bGUgc2ltdWxhdGVkIG9ibGlxdWUgdG8gZm9yIERlamFWdSBTZXJpZiB0byBlbnN1cmUgdGhhdCB3
ZSBpbnRlcnByZXQKLSAgICAgICAgIHRoaXMgcHJvcGVydHkgY29ycmVjdGx5IGluOiBwbGF0Zm9y
bS9ndGsvZm9udHMvZm9udGNvbmZpZy1zeW50aGV0aWMtb2JsaXF1ZS5odG1sIC0tPgotICAgIDxt
YXRjaCB0YXJnZXQ9ImZvbnQiPgotICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWls
eSI+Ci0gICAgICAgICAgICA8c3RyaW5nPkRlamFWdSBTZXJpZjwvc3RyaW5nPgotICAgICAgICA8
L3Rlc3Q+Ci0gICAgICAgIDx0ZXN0IG5hbWU9InNsYW50Ij4KLSAgICAgICAgICAgIDxjb25zdD5y
b21hbjwvY29uc3Q+Ci0gICAgICAgIDwvdGVzdD4KLSAgICAgICAgPHRlc3QgdGFyZ2V0PSJwYXR0
ZXJuIiBuYW1lPSJzbGFudCIgY29tcGFyZT0ibm90X2VxIj4KLSAgICAgICAgICAgIDxjb25zdD5y
b21hbjwvY29uc3Q+Ci0gICAgICAgIDwvdGVzdD4KLSAgICAgICAgPGVkaXQgbmFtZT0ibWF0cml4
IiBtb2RlPSJhc3NpZ24iPgotICAgICAgICAgICAgPHRpbWVzPgotICAgICAgICAgICAgICAgIDxu
YW1lPm1hdHJpeDwvbmFtZT4KLSAgICAgICAgICAgICAgICA8bWF0cml4Pjxkb3VibGU+MTwvZG91
YmxlPjxkb3VibGU+MC4yPC9kb3VibGU+Ci0gICAgICAgICAgICAgICAgICAgIDxkb3VibGU+MDwv
ZG91YmxlPjxkb3VibGU+MTwvZG91YmxlPgotICAgICAgICAgICAgICAgIDwvbWF0cml4PgotICAg
ICAgICAgICAgPC90aW1lcz4KLSAgICAgICAgPC9lZGl0PgotICAgICAgICA8ZWRpdCBuYW1lPSJz
bGFudCIgbW9kZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxjb25zdD5vYmxpcXVlPC9jb25zdD4K
LSAgICAgICAgPC9lZGl0PgotICAgICAgICA8ZWRpdCBuYW1lPSJlbWJlZGRlZGJpdG1hcCIgbW9k
ZT0iYXNzaWduIj4KLSAgICAgICAgICAgIDxib29sPmZhbHNlPC9ib29sPgotICAgICAgICA8L2Vk
aXQ+Ci0gICAgPC9tYXRjaD4KLQotICAgIDwhLS0gSWYgdGhpcyBmb250IGRvZXNuJ3QgaGF2ZSBh
IGZhbWlseSBuYW1lIHdlIGFyZSBmYWxsaW5nIGJhY2suIFRoZSBmYWxsYmFjawotICAgICAgICAg
Zm9udCB3aWxsIGNlcnRhaW5seSBiZSBvbmUgb2YgdGhlIERlamFWdSBmb250cyB0aGF0IHdlIGhh
dmUgaW4gb3VyCi0gICAgICAgICBjb2xsZWN0aW9uIHNpbmNlIHRoZXkgaGF2ZSBhIHdpZGUgcmFu
Z2Ugb2YgY2hhcmFjdGVycy4gRm9udGNvbmZpZyBtaWdodAotICAgICAgICAgY2hvb3NlIERlamFW
dSBTYW5zIG9yIERlamFWdSBTZXJpZiBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSwgc28gd2UgZm9y
Y2UKLSAgICAgICAgIHRoZSB1c2Ugb2YgRGVqYVZ1IFNhbnMgaW4gdGhlc2Ugc2l0dWF0aW9ucyB0
byBtYWludGFpbiBjb25zaXN0ZW5jeS4gLS0+Ci0gICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+
Ci0gICAgICAgIDx0ZXN0IHF1YWw9ImFsbCIgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+Ci0g
ICAgICAgICAgICA8c3RyaW5nPjwvc3RyaW5nPgotICAgICAgICA8L3Rlc3Q+Ci0gICAgICAgIDxl
ZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXBwZW5kX2xhc3QiPgotICAgICAgICAgICAgPHN0cmlu
Zz5EZWphVnUgU2Fuczwvc3RyaW5nPgotICAgICAgICA8L2VkaXQ+Ci0gICAgPC9tYXRjaD4KLQot
ICAgIDxjb25maWc+Ci0gICAgICAgIDwhLS0gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IFVuaWNvZGUg
Y2hhcnMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgYmxhbmsKLSAgICAgICAgICAgICBpbiBmb250
cy4gQWxsIG90aGVyIGJsYW5rIGNoYXJzIGFyZSBhc3N1bWVkIHRvIGJlIGJyb2tlbiBhbmQgd29u
J3QKLSAgICAgICAgICAgICBhcHBlYXIgaW4gdGhlIHJlc3VsdGluZyBjaGFyc2V0cyAtLT4KLSAg
ICAgICAgPGJsYW5rPgotICAgICAgICAgICAgPGludD4weDAwMjA8L2ludD4gICAgPCEtLSBTUEFD
RSAtLT4KLSAgICAgICAgICAgIDxpbnQ+MHgwMEEwPC9pbnQ+ICAgIDwhLS0gTk8tQlJFQUsgU1BB
Q0UgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MDBBRDwvaW50PiAgICA8IS0tIFNPRlQgSFlQSEVO
IC0tPgotICAgICAgICAgICAgPGludD4weDAzNEY8L2ludD4gICAgPCEtLSBDT01CSU5JTkcgR1JB
UEhFTUUgSk9JTkVSIC0tPgotICAgICAgICAgICAgPGludD4weDA2MDA8L2ludD4gICAgPCEtLSBB
UkFCSUMgTlVNQkVSIFNJR04gLS0+Ci0gICAgICAgICAgICA8aW50PjB4MDYwMTwvaW50PiAgICA8
IS0tIEFSQUJJQyBTSUdOIFNBTkFIIC0tPgotICAgICAgICAgICAgPGludD4weDA2MDI8L2ludD4g
ICAgPCEtLSBBUkFCSUMgRk9PVE5PVEUgTUFSS0VSIC0tPgotICAgICAgICAgICAgPGludD4weDA2
MDM8L2ludD4gICAgPCEtLSBBUkFCSUMgU0lHTiBTQUZIQSAtLT4KLSAgICAgICAgICAgIDxpbnQ+
MHgwNkREPC9pbnQ+ICAgIDwhLS0gQVJBQklDIEVORCBPRiBBWUFIIC0tPgotICAgICAgICAgICAg
PGludD4weDA3MEY8L2ludD4gICAgPCEtLSBTWVJJQUMgQUJCUkVWSUFUSU9OIE1BUksgLS0+Ci0g
ICAgICAgICAgICA8aW50PjB4MTE1RjwvaW50PiAgICA8IS0tIEhBTkdVTCBDSE9TRU9ORyBGSUxM
RVIgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MTE2MDwvaW50PiAgICA8IS0tIEhBTkdVTCBKVU5H
U0VPTkcgRklMTEVSIC0tPgotICAgICAgICAgICAgPGludD4weDE2ODA8L2ludD4gICAgPCEtLSBP
R0hBTSBTUEFDRSBNQVJLIC0tPgotICAgICAgICAgICAgPGludD4weDE3QjQ8L2ludD4gICAgPCEt
LSBLSE1FUiBWT1dFTCBJTkhFUkVOVCBBUSAtLT4KLSAgICAgICAgICAgIDxpbnQ+MHgxN0I1PC9p
bnQ+ICAgIDwhLS0gS0hNRVIgVk9XRUwgSU5IRVJFTlQgQUEgLS0+Ci0gICAgICAgICAgICA8aW50
PjB4MTgwRTwvaW50PiAgICA8IS0tIE1PTkdPTElBTiBWT1dFTCBTRVBBUkFUT1IgLS0+Ci0gICAg
ICAgICAgICA8aW50PjB4MjAwMDwvaW50PiAgICA8IS0tIEVOIFFVQUQgLS0+Ci0gICAgICAgICAg
ICA8aW50PjB4MjAwMTwvaW50PiAgICA8IS0tIEVNIFFVQUQgLS0+Ci0gICAgICAgICAgICA8aW50
PjB4MjAwMjwvaW50PiAgICA8IS0tIEVOIFNQQUNFIC0tPgotICAgICAgICAgICAgPGludD4weDIw
MDM8L2ludD4gICAgPCEtLSBFTSBTUEFDRSAtLT4KLSAgICAgICAgICAgIDxpbnQ+MHgyMDA0PC9p
bnQ+ICAgIDwhLS0gVEhSRUUtUEVSLUVNIFNQQUNFIC0tPgotICAgICAgICAgICAgPGludD4weDIw
MDU8L2ludD4gICAgPCEtLSBGT1VSLVBFUi1FTSBTUEFDRSAtLT4KLSAgICAgICAgICAgIDxpbnQ+
MHgyMDA2PC9pbnQ+ICAgIDwhLS0gU0lYLVBFUi1FTSBTUEFDRSAtLT4KLSAgICAgICAgICAgIDxp
bnQ+MHgyMDA3PC9pbnQ+ICAgIDwhLS0gRklHVVJFIFNQQUNFIC0tPgotICAgICAgICAgICAgPGlu
dD4weDIwMDg8L2ludD4gICAgPCEtLSBQVU5DVFVBVElPTiBTUEFDRSAtLT4KLSAgICAgICAgICAg
IDxpbnQ+MHgyMDA5PC9pbnQ+ICAgIDwhLS0gVEhJTiBTUEFDRSAtLT4KLSAgICAgICAgICAgIDxp
bnQ+MHgyMDBBPC9pbnQ+ICAgIDwhLS0gSEFJUiBTUEFDRSAtLT4KLSAgICAgICAgICAgIDxpbnQ+
MHgyMDBCPC9pbnQ+ICAgIDwhLS0gWkVSTyBXSURUSCBTUEFDRSAtLT4KLSAgICAgICAgICAgIDxp
bnQ+MHgyMDBDPC9pbnQ+ICAgIDwhLS0gWkVSTyBXSURUSCBOT04tSk9JTkVSIC0tPgotICAgICAg
ICAgICAgPGludD4weDIwMEQ8L2ludD4gICAgPCEtLSBaRVJPIFdJRFRIIEpPSU5FUiAtLT4KLSAg
ICAgICAgICAgIDxpbnQ+MHgyMDBFPC9pbnQ+ICAgIDwhLS0gTEVGVC1UTy1SSUdIVCBNQVJLIC0t
PgotICAgICAgICAgICAgPGludD4weDIwMEY8L2ludD4gICAgPCEtLSBSSUdIVC1UTy1MRUZUIE1B
UksgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MjAyODwvaW50PiAgICA8IS0tIExJTkUgU0VQQVJB
VE9SIC0tPgotICAgICAgICAgICAgPGludD4weDIwMjk8L2ludD4gICAgPCEtLSBQQVJBR1JBUEgg
U0VQQVJBVE9SIC0tPgotICAgICAgICAgICAgPGludD4weDIwMkE8L2ludD4gICAgPCEtLSBMRUZU
LVRPLVJJR0hUIEVNQkVERElORyAtLT4KLSAgICAgICAgICAgIDxpbnQ+MHgyMDJCPC9pbnQ+ICAg
IDwhLS0gUklHSFQtVE8tTEVGVCBFTUJFRERJTkcgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MjAy
QzwvaW50PiAgICA8IS0tIFBPUCBESVJFQ1RJT05BTCBGT1JNQVRUSU5HIC0tPgotICAgICAgICAg
ICAgPGludD4weDIwMkQ8L2ludD4gICAgPCEtLSBMRUZULVRPLVJJR0hUIG92ZXJyaWRlIC0tPgot
ICAgICAgICAgICAgPGludD4weDIwMkU8L2ludD4gICAgPCEtLSBSSUdIVC1UTy1MRUZUIG92ZXJy
aWRlIC0tPgotICAgICAgICAgICAgPGludD4weDIwMkY8L2ludD4gICAgPCEtLSBOQVJST1cgTk8t
QlJFQUsgU1BBQ0UgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MjA1RjwvaW50PiAgICA8IS0tIE1F
RElVTSBNQVRIRU1BVElDQUwgU1BBQ0UgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MjA2MDwvaW50
PiAgICA8IS0tIFdPUkQgSk9JTkVSIC0tPgotICAgICAgICAgICAgPGludD4weDIwNjE8L2ludD4g
ICAgPCEtLSBGVU5DVElPTiBBUFBMSUNBVElPTiAtLT4KLSAgICAgICAgICAgIDxpbnQ+MHgyMDYy
PC9pbnQ+ICAgIDwhLS0gSU5WSVNJQkxFIFRJTUVTIC0tPgotICAgICAgICAgICAgPGludD4weDIw
NjM8L2ludD4gICAgPCEtLSBJTlZJU0lCTEUgU0VQQVJBVE9SIC0tPgotICAgICAgICAgICAgPGlu
dD4weDIwNkE8L2ludD4gICAgPCEtLSBJTkhJQklUIFNZTU1FVFJJQyBTV0FQUElORyAtLT4KLSAg
ICAgICAgICAgIDxpbnQ+MHgyMDZCPC9pbnQ+ICAgIDwhLS0gQUNUSVZBVEUgU1lNTUVUUklDIFNX
QVBQSU5HIC0tPgotICAgICAgICAgICAgPGludD4weDIwNkM8L2ludD4gICAgPCEtLSBJTkhJQklU
IEFSQUJJQyBGT1JNIFNIQVBJTkcgLS0+Ci0gICAgICAgICAgICA8aW50PjB4MjA2RDwvaW50PiAg
ICA8IS0tIEFDVElWQVRFIEFSQUJJQyBGT1JNIFNIQVBJTkcgLS0+Ci0gICAgICAgICAgICA8aW50
PjB4MjA2RTwvaW50PiAgICA8IS0tIE5BVElPTkFMIERJR0lUIFNIQVBFUyAtLT4KLSAgICAgICAg
ICAgIDxpbnQ+MHgyMDZGPC9pbnQ+ICAgIDwhLS0gTk9NSU5BTCBESUdJVCBTSEFQRVMgLS0+Ci0g
ICAgICAgICAgICA8aW50PjB4MzAwMDwvaW50PiAgICA8IS0tIElERU9HUkFQSElDIFNQQUNFIC0t
PgotICAgICAgICAgICAgPGludD4weDMxNjQ8L2ludD4gICAgPCEtLSBIQU5HVUwgRklMTEVSIC0t
PgotICAgICAgICAgICAgPGludD4weEZFRkY8L2ludD4gICAgPCEtLSBaRVJPIFdJRFRIIE5PLUJS
RUFLIFNQQUNFIC0tPgotICAgICAgICAgICAgPGludD4weEZGQTA8L2ludD4gICAgPCEtLSBIQUxG
V0lEVEggSEFOR1VMIEZJTExFUiAtLT4KLSAgICAgICAgICAgIDxpbnQ+MHhGRkY5PC9pbnQ+ICAg
IDwhLS0gSU5URVJMSU5FQVIgQU5OT1RBVElPTiBBTkNIT1IgLS0+Ci0gICAgICAgICAgICA8aW50
PjB4RkZGQTwvaW50PiAgICA8IS0tIElOVEVSTElORUFSIEFOTk9UQVRJT04gU0VQQVJBVE9SIC0t
PgotICAgICAgICAgICAgPGludD4weEZGRkI8L2ludD4gICAgPCEtLSBJTlRFUkxJTkVBUiBBTk5P
VEFUSU9OIFRFUk1JTkFUT1IgLS0+Ci0gICAgICAgIDwvYmxhbms+Ci0gICAgPC9jb25maWc+Ci08
L2ZvbnRjb25maWc+CmRpZmYgLS1naXQgYS9Ub29scy9HdGtMYXVuY2hlci9DTWFrZUxpc3RzLnR4
dCBiL1Rvb2xzL0d0a0xhdW5jaGVyL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwYTIwMzc0Y2JkMjRmYTk0MzY5NzRlYWRhODhlYmM4NDdlN2Y4YjYwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0d0a0xhdW5j
aGVyL0NNYWtlTGlzdHMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotYWRkX2Rl
ZmluaXRpb25zKC1EV0VCS0lUX0VYRUNfUEFUSD0iJHtDTUFLRV9SVU5USU1FX09VVFBVVF9ESVJF
Q1RPUll9IikKLQotaW5jbHVkZV9kaXJlY3RvcmllcygKLSAgICAke0NNQUtFX0JJTkFSWV9ESVJ9
Ci0gICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UKLSAgICAke0NNQUtFX1NPVVJDRV9ESVJ9
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycwotICAgICR7Q01BS0VfU09V
UkNFX0RJUn0vU291cmNlL1dlYktpdC9ndGsKLSAgICAke0RFUklWRURfU09VUkNFU19ESVJ9Ci0g
ICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCS0lUR1RLX0RJUn0KLSAgICAke0dMSUJfSU5DTFVERV9E
SVJTfQotICAgICR7R1NUUkVBTUVSX0lOQ0xVREVfRElSU30KLSAgICAke0dUS19JTkNMVURFX0RJ
UlN9Ci0gICAgJHtMSUJTT1VQX0lOQ0xVREVfRElSU30KLSkKLQotYWRkX2V4ZWN1dGFibGUoR3Rr
TGF1bmNoZXIKLSAgICBMYXVuY2hlckluc3BlY3RvcldpbmRvdy5jCi0gICAgTGF1bmNoZXJJbnNw
ZWN0b3JXaW5kb3cuaAotICAgIG1haW4uYwotKQotCi10YXJnZXRfbGlua19saWJyYXJpZXMoR3Rr
TGF1bmNoZXIKLSAgICAke0phdmFTY3JpcHRDb3JlX0xJQlJBUllfTkFNRX0KLSAgICBXZWJLaXQK
LSAgICAke0dMSUJfTElCUkFSSUVTfQotICAgICR7R1NUUkVBTUVSX0xJQlJBUklFU30KLSAgICAk
e0dUS19MSUJSQVJJRVN9Ci0gICAgJHtMSUJTT1VQX0xJQlJBUklFU30KLSkKLQpkaWZmIC0tZ2l0
IGEvVG9vbHMvR3RrTGF1bmNoZXIvTGF1bmNoZXJJbnNwZWN0b3JXaW5kb3cuYyBiL1Rvb2xzL0d0
a0xhdW5jaGVyL0xhdW5jaGVySW5zcGVjdG9yV2luZG93LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDhlZTlmY2ZiNGEwYzRlODlhMWUwNDI2ZGI0N2Q3NDUxNWRlN2RjNWUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvR3RrTGF1bmNo
ZXIvTGF1bmNoZXJJbnNwZWN0b3JXaW5kb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJMYXVuY2hlckluc3BlY3RvcldpbmRvdy5oIgotCi1zdHJ1Y3QgX0xhdW5jaGVySW5z
cGVjdG9yV2luZG93IHsKLSAgICBHdGtXaW5kb3cgcGFyZW50OwotCi0gICAgV2ViS2l0V2ViSW5z
cGVjdG9yICppbnNwZWN0b3I7Ci0gICAgR3RrV2lkZ2V0ICp3ZWJWaWV3OwotfTsKLQotc3RydWN0
IF9MYXVuY2hlckluc3BlY3RvcldpbmRvd0NsYXNzIHsKLSAgICBHdGtXaW5kb3dDbGFzcyBwYXJl
bnQ7Ci19OwotCi1HX0RFRklORV9UWVBFKExhdW5jaGVySW5zcGVjdG9yV2luZG93LCBsYXVuY2hl
cl9pbnNwZWN0b3Jfd2luZG93LCBHVEtfVFlQRV9XSU5ET1cpCi0KLXN0YXRpYyB2b2lkIGxhdW5j
aGVySW5zcGVjdG9yV2luZG93RmluYWxpemUoR09iamVjdCAqZ09iamVjdCkKLXsKLSAgICBMYXVu
Y2hlckluc3BlY3RvcldpbmRvdyAqaW5zcGVjdG9yV2luZG93ID0gTEFVTkNIRVJfSU5TUEVDVE9S
X1dJTkRPVyhnT2JqZWN0KTsKLSAgICBpZiAoaW5zcGVjdG9yV2luZG93LT5pbnNwZWN0b3IpCi0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKGluc3BlY3RvcldpbmRvdy0+aW5zcGVjdG9yKTsKLQotICAg
IEdfT0JKRUNUX0NMQVNTKGxhdW5jaGVyX2luc3BlY3Rvcl93aW5kb3dfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUoZ09iamVjdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxhdW5jaGVyX2luc3BlY3Rvcl93
aW5kb3dfaW5pdChMYXVuY2hlckluc3BlY3RvcldpbmRvdyAqaW5zcGVjdG9yV2luZG93KQotewot
ICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coaW5zcGVjdG9yV2luZG93KSwgIldl
YiBJbnNwZWN0b3IiKTsKLSAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRP
VyhpbnNwZWN0b3JXaW5kb3cpLCA4MDAsIDYwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxhdW5jaGVy
X2luc3BlY3Rvcl93aW5kb3dfY2xhc3NfaW5pdChMYXVuY2hlckluc3BlY3RvcldpbmRvd0NsYXNz
ICprbGFzcykKLXsKLSAgICBHT2JqZWN0Q2xhc3MgKmdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NM
QVNTKGtsYXNzKTsKLSAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gbGF1bmNoZXJJbnNwZWN0
b3JXaW5kb3dGaW5hbGl6ZTsKLX0KLQotc3RhdGljIHZvaWQgaW5zcGVjdGVkVVJJQ2hhbmdlZChX
ZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgR1BhcmFtU3BlYyAqcGFyYW1TcGVjLCBMYXVu
Y2hlckluc3BlY3RvcldpbmRvdyAqaW5zcGVjdG9yV2luZG93KQotewotICAgIGdjaGFyICp0aXRs
ZSA9IGdfc3RyZHVwX3ByaW50ZigiV2ViIEluc3BlY3RvciAtICVzIiwgd2Via2l0X3dlYl9pbnNw
ZWN0b3JfZ2V0X2luc3BlY3RlZF91cmkoaW5zcGVjdG9yKSk7Ci0gICAgZ3RrX3dpbmRvd19zZXRf
dGl0bGUoR1RLX1dJTkRPVyhpbnNwZWN0b3JXaW5kb3cpLCB0aXRsZSk7Ci0gICAgZ19mcmVlKHRp
dGxlKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHNob3dJbnNwZWN0b3JXaW5kb3coV2ViS2l0V2Vi
SW5zcGVjdG9yICppbnNwZWN0b3IsIExhdW5jaGVySW5zcGVjdG9yV2luZG93ICppbnNwZWN0b3JX
aW5kb3cpCi17Ci0gICAgZ3RrX3dpZGdldF9zaG93KEdUS19XSURHRVQoaW5zcGVjdG9yV2luZG93
KSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBjbG9zZUluc3BlY3Rv
cldpbmRvdyhXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3RvciwgTGF1bmNoZXJJbnNwZWN0b3JX
aW5kb3cgKmluc3BlY3RvcldpbmRvdykKLXsKLSAgICBndGtfd2lkZ2V0X2hpZGUoR1RLX1dJREdF
VChpbnNwZWN0b3JXaW5kb3cpKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIHZvaWQg
aW5zcGVjdG9yV2luZG93RGVzdHJveWVkKGdwb2ludGVyIGluc3BlY3RvciwgR09iamVjdCogaW5z
cGVjdG9yV2luZG93KQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0
YShpbnNwZWN0b3IsIGluc3BlY3RvcldpbmRvdyk7Ci19Ci0KLUd0a1dpZGdldCAqbGF1bmNoZXJJ
bnNwZWN0b3JXaW5kb3dOZXcoV2ViS2l0V2ViSW5zcGVjdG9yICppbnNwZWN0b3IsIEd0a1dpbmRv
dyAqcGFyZW50KQotewotICAgIExhdW5jaGVySW5zcGVjdG9yV2luZG93ICppbnNwZWN0b3JXaW5k
b3cgPSBMQVVOQ0hFUl9JTlNQRUNUT1JfV0lORE9XKGdfb2JqZWN0X25ldyhMQVVOQ0hFUl9UWVBF
X0lOU1BFQ1RPUl9XSU5ET1csICJ0eXBlIiwgR1RLX1dJTkRPV19UT1BMRVZFTCwgTlVMTCkpOwot
ICAgIGluc3BlY3RvcldpbmRvdy0+aW5zcGVjdG9yID0gZ19vYmplY3RfcmVmKGluc3BlY3Rvcik7
Ci0gICAgaW5zcGVjdG9yV2luZG93LT53ZWJWaWV3ID0gd2Via2l0X3dlYl92aWV3X25ldygpOwot
ICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3IoR1RLX1dJTkRPVyhpbnNwZWN0b3JXaW5k
b3cpLCBwYXJlbnQpOwotCi0gICAgR3RrV2lkZ2V0ICpzY3JvbGxlZFdpbmRvdyA9IGd0a19zY3Jv
bGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwotICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0
X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwgR1RLX1BPTElDWV9B
VVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChH
VEtfQ09OVEFJTkVSKHNjcm9sbGVkV2luZG93KSwgaW5zcGVjdG9yV2luZG93LT53ZWJWaWV3KTsK
LSAgICBndGtfd2lkZ2V0X3Nob3coaW5zcGVjdG9yV2luZG93LT53ZWJWaWV3KTsKLQotICAgIGd0
a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoaW5zcGVjdG9yV2luZG93KSwgc2Nyb2xsZWRX
aW5kb3cpOwotICAgIGd0a193aWRnZXRfc2hvdyhzY3JvbGxlZFdpbmRvdyk7Ci0KLSAgICBnX3Np
Z25hbF9jb25uZWN0KGluc3BlY3RvciwgIm5vdGlmeTo6aW5zcGVjdGVkLXVyaSIsIEdfQ0FMTEJB
Q0soaW5zcGVjdGVkVVJJQ2hhbmdlZCksIGluc3BlY3RvcldpbmRvdyk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdChpbnNwZWN0b3IsICJzaG93LXdpbmRvdyIsIEdfQ0FMTEJBQ0soc2hvd0luc3BlY3Rv
cldpbmRvdyksIGluc3BlY3RvcldpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChpbnNwZWN0
b3IsICJjbG9zZS13aW5kb3ciLCBHX0NBTExCQUNLKGNsb3NlSW5zcGVjdG9yV2luZG93KSwgaW5z
cGVjdG9yV2luZG93KTsKLQotICAgIGdfb2JqZWN0X3dlYWtfcmVmKEdfT0JKRUNUKGluc3BlY3Rv
cldpbmRvdyksIGluc3BlY3RvcldpbmRvd0Rlc3Ryb3llZCwgaW5zcGVjdG9yKTsKLQotICAgIHJl
dHVybiBHVEtfV0lER0VUKGluc3BlY3RvcldpbmRvdyk7Ci19Ci0KLVdlYktpdFdlYlZpZXcgKmxh
dW5jaGVySW5zcGVjdG9yV2luZG93R2V0V2ViVmlldyhMYXVuY2hlckluc3BlY3RvcldpbmRvdyAq
aW5zcGVjdG9yV2luZG93KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKExBVU5DSEVSX0lT
X0lOU1BFQ1RPUl9XSU5ET1coaW5zcGVjdG9yV2luZG93KSwgMCk7Ci0KLSAgICByZXR1cm4gV0VC
S0lUX1dFQl9WSUVXKGluc3BlY3RvcldpbmRvdy0+d2ViVmlldyk7Ci19CmRpZmYgLS1naXQgYS9U
b29scy9HdGtMYXVuY2hlci9MYXVuY2hlckluc3BlY3RvcldpbmRvdy5oIGIvVG9vbHMvR3RrTGF1
bmNoZXIvTGF1bmNoZXJJbnNwZWN0b3JXaW5kb3cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZjcwOTFkMjM4OGY4MTQ3MTY2YzY5NDRkYzgwYzVkNDA4M2RlY2QxZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9HdGtMYXVuY2hlci9M
YXVuY2hlckluc3BlY3RvcldpbmRvdy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IExhdW5jaGVySW5zcGVjdG9yV2luZG93X2gKLSNkZWZpbmUgTGF1bmNoZXJJbnNwZWN0b3JXaW5k
b3dfaAotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4K
LQotR19CRUdJTl9ERUNMUwotCi0jZGVmaW5lIExBVU5DSEVSX1RZUEVfSU5TUEVDVE9SX1dJTkRP
VyAgICAgICAgICAgIChsYXVuY2hlcl9pbnNwZWN0b3Jfd2luZG93X2dldF90eXBlKCkpCi0jZGVm
aW5lIExBVU5DSEVSX0lOU1BFQ1RPUl9XSU5ET1cob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgTEFVTkNIRVJfVFlQRV9JTlNQRUNUT1JfV0lORE9XLCBM
YXVuY2hlckluc3BlY3RvcldpbmRvdykpCi0jZGVmaW5lIExBVU5DSEVSX0lTX0lOU1BFQ1RPUl9X
SU5ET1cob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgTEFV
TkNIRVJfVFlQRV9JTlNQRUNUT1JfV0lORE9XKSkKLSNkZWZpbmUgTEFVTkNIRVJfSU5TUEVDVE9S
X1dJTkRPV19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBMQVVOQ0hFUl9UWVBFX0lOU1BFQ1RPUl9XSU5ET1csIExhdW5jaGVySW5zcGVjdG9yV2luZG93
Q2xhc3MpKQotI2RlZmluZSBMQVVOQ0hFUl9JU19JTlNQRUNUT1JfV0lORE9XX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIExBVU5DSEVSX1RZUEVfSU5TUEVD
VE9SX1dJTkRPVykpCi0jZGVmaW5lIExBVU5DSEVSX0lOU1BFQ1RPUl9XSU5ET1dfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgTEFVTkNIRVJfVFlQRV9J
TlNQRUNUT1JfV0lORE9XLCBMYXVuY2hlckluc3BlY3RvcldpbmRvd0NsYXNzKSkKLQotdHlwZWRl
ZiBzdHJ1Y3QgX0xhdW5jaGVySW5zcGVjdG9yV2luZG93ICAgICAgICBMYXVuY2hlckluc3BlY3Rv
cldpbmRvdzsKLXR5cGVkZWYgc3RydWN0IF9MYXVuY2hlckluc3BlY3RvcldpbmRvd0NsYXNzICAg
TGF1bmNoZXJJbnNwZWN0b3JXaW5kb3dDbGFzczsKLQotR1R5cGUgbGF1bmNoZXJfaW5zcGVjdG9y
X3dpbmRvd19nZXRfdHlwZSh2b2lkKTsKLQotR3RrV2lkZ2V0ICpsYXVuY2hlckluc3BlY3Rvcldp
bmRvd05ldyhXZWJLaXRXZWJJbnNwZWN0b3IgKiwgR3RrV2luZG93ICpwYXJlbnQpOwotV2ViS2l0
V2ViVmlldyAqbGF1bmNoZXJJbnNwZWN0b3JXaW5kb3dHZXRXZWJWaWV3KExhdW5jaGVySW5zcGVj
dG9yV2luZG93ICopOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xz
L0d0a0xhdW5jaGVyL21haW4uYyBiL1Rvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjgyNWY5NmE3MzE5ZGRhNzM3ZThkMmY5NDBmYmY0ZmFjN2Mw
MGY5NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9HdGtMYXVuY2hlci9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBM
dWthc3ogU2xhY2hjaWFrCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjbWFrZWNvbmZpZy5oIgotI2luY2x1ZGUgIkxhdW5jaGVySW5zcGVjdG9y
V2luZG93LmgiCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5o
PgotI2lmZGVmIFdURl9VU0VfR1NUUkVBTUVSCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2VuZGlm
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KLQotc3RhdGljIGdpbnQgd2luZG93
Q291bnQgPSAwOwotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVXaW5kb3coV2ViS2l0V2ViVmll
dyoqIG91dFdlYlZpZXcpOwotCi1zdGF0aWMgdm9pZCBhY3RpdmF0ZVVyaUVudHJ5Q2IoR3RrV2lk
Z2V0KiBlbnRyeSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3
ID0gZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoZW50cnkpLCAid2ViLXZpZXciKTsKLSAgICBj
b25zdCBnY2hhciogdXJpID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShlbnRyeSkpOwot
ICAgIGdfYXNzZXJ0KHVyaSk7Ci0gICAgZ3RrX2VudHJ5X3NldF9pY29uX2Zyb21fcGl4YnVmKEdU
S19FTlRSWShlbnRyeSksIEdUS19FTlRSWV9JQ09OX1BSSU1BUlksIDApOwotICAgIHdlYmtpdF93
ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCB1cmkpOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVU
aXRsZShHdGtXaW5kb3cqIHdpbmRvdywgV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBH
U3RyaW5nICpzdHJpbmcgPSBnX3N0cmluZ19uZXcod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh3
ZWJWaWV3KSk7Ci0gICAgZ2RvdWJsZSBsb2FkUHJvZ3Jlc3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3Byb2dyZXNzKHdlYlZpZXcpICogMTAwOwotICAgIGdfc3RyaW5nX2FwcGVuZChzdHJpbmcsICIg
LSBXZWJLaXQgTGF1bmNoZXIiKTsKLSAgICBpZiAobG9hZFByb2dyZXNzIDwgMTAwKQotICAgICAg
ICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmKHN0cmluZywgIiAoJWYlJSkiLCBsb2FkUHJvZ3Jlc3Mp
OwotICAgIGdjaGFyICp0aXRsZSA9IGdfc3RyaW5nX2ZyZWUoc3RyaW5nLCBGQUxTRSk7Ci0gICAg
Z3RrX3dpbmRvd19zZXRfdGl0bGUod2luZG93LCB0aXRsZSk7Ci0gICAgZ19mcmVlKHRpdGxlKTsK
LX0KLQotc3RhdGljIHZvaWQgbGlua0hvdmVyQ2IoV2ViS2l0V2ViVmlldyogcGFnZSwgY29uc3Qg
Z2NoYXIqIHRpdGxlLCBjb25zdCBnY2hhciogbGluaywgR3RrU3RhdHVzYmFyKiBzdGF0dXNiYXIp
Ci17Ci0gICAgZ3VpbnQgc3RhdHVzQ29udGV4dElkID0KLSAgICAgIEdQT0lOVEVSX1RPX1VJTlQo
Z19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc3RhdHVzYmFyKSwgImxpbmstaG92ZXItY29udGV4
dCIpKTsKLSAgICAvKiB1bmRlcmZsb3cgaXMgYWxsb3dlZCAqLwotICAgIGd0a19zdGF0dXNiYXJf
cG9wKHN0YXR1c2Jhciwgc3RhdHVzQ29udGV4dElkKTsKLSAgICBpZiAobGluaykKLSAgICAgICAg
Z3RrX3N0YXR1c2Jhcl9wdXNoKHN0YXR1c2Jhciwgc3RhdHVzQ29udGV4dElkLCBsaW5rKTsKLX0K
LQotc3RhdGljIHZvaWQgbm90aWZ5VGl0bGVDYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBHUGFy
YW1TcGVjKiBwc3BlYywgR3RrV2lkZ2V0KiB3aW5kb3cpCi17Ci0gICAgdXBkYXRlVGl0bGUoR1RL
X1dJTkRPVyh3aW5kb3cpLCB3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgbm90aWZ5TG9hZFN0
YXR1c0NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBHdGtXaWRn
ZXQqIHVyaUVudHJ5KQotewotICAgIGlmICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVz
KHdlYlZpZXcpID09IFdFQktJVF9MT0FEX0NPTU1JVFRFRCkgewotICAgICAgICBXZWJLaXRXZWJG
cmFtZSAqZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7Ci0g
ICAgICAgIGNvbnN0IGdjaGFyICp1cmkgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkoZnJhbWUp
OwotICAgICAgICBpZiAodXJpKQotICAgICAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdUS19F
TlRSWSh1cmlFbnRyeSksIHVyaSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlQcm9n
cmVzc0NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqIHBzcGVjLCBHdGtXaWRn
ZXQqIHdpbmRvdykKLXsKLSAgICB1cGRhdGVUaXRsZShHVEtfV0lORE9XKHdpbmRvdyksIHdlYlZp
ZXcpOwotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95Q2IoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1dp
ZGdldCogd2luZG93KQotewotICAgIGlmIChnX2F0b21pY19pbnRfZGVjX2FuZF90ZXN0KCZ3aW5k
b3dDb3VudCkpCi0gICAgICBndGtfbWFpbl9xdWl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdvQmFj
a0NiKEd0a1dpZGdldCogd2lkZ2V0LCAgV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICB3
ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayh3ZWJWaWV3KTsKLX0KLQotc3RhdGljIHZvaWQgZ29Gb3J3
YXJkQ2IoR3RrV2lkZ2V0KiB3aWRnZXQsIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCi17Ci0gICAg
d2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJl
bG9hZENiKEd0a1dpZGdldCogd2lkZ2V0LCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAg
IHdlYmtpdF93ZWJfdmlld19yZWxvYWQod2ViVmlldyk7Ci19Ci0KLXN0YXRpYyBXZWJLaXRXZWJW
aWV3KgotY3JlYXRlV2ViVmlld0NiKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkZy
YW1lKiB3ZWJfZnJhbWUsIEd0a1dpZGdldCogd2luZG93KQotewotICAgIFdlYktpdFdlYlZpZXcg
Km5ld1dlYlZpZXc7Ci0gICAgY3JlYXRlV2luZG93KCZuZXdXZWJWaWV3KTsKLSAgICB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3NldHRpbmdzKG5ld1dlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3Mod2ViVmlldykpOwotICAgIHJldHVybiBuZXdXZWJWaWV3OwotfQotCi1zdGF0aWMgZ2Jv
b2xlYW4gd2ViVmlld1JlYWR5Q2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrV2lkZ2V0KiB3
aW5kb3cpCi17Ci0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQod2ViVmlldykp
OwotICAgIGd0a193aWRnZXRfc2hvd19hbGwod2luZG93KTsKLSAgICByZXR1cm4gRkFMU0U7Ci19
Ci0KLXN0YXRpYyBnYm9vbGVhbiBjbG9zZVdlYlZpZXdDYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBHdGtXaWRnZXQqIHdpbmRvdykKLXsKLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kod2luZG93KTsK
LSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdGdWxsc2NyZWVu
TWVzc2FnZVdpbmRvd0Nsb3NlKEd0a1dpZGdldCAqZGlhbG9nKQotewotICAgIGlmIChHVEtfSVNf
V0lER0VUKGRpYWxvZykpCi0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwotICAg
IHJldHVybiBGQUxTRTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYlZpZXdXaW5kb3dTdGF0ZUV2
ZW50KEd0a1dpZGdldCAqd2lkZ2V0LCBHZGtFdmVudFdpbmRvd1N0YXRlICpldmVudCwgV2ViS2l0
V2ViVmlldyAqd2ViVmlldykKLXsKLSAgICBpZiAoZXZlbnQtPm5ld193aW5kb3dfc3RhdGUgJiBH
REtfV0lORE9XX1NUQVRFX0ZVTExTQ1JFRU4pIHsKLSAgICAgICAgV2ViS2l0V2ViRnJhbWUgKmZy
YW1lID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOwotICAgICAgICBj
b25zdCBnY2hhciAqdXJpID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKGZyYW1lKTsKLSAgICAg
ICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VU
KHdlYlZpZXcpKTsKLSAgICAgICAgaWYgKCFndGtfd2lkZ2V0X2lzX3RvcGxldmVsKHdpbmRvdykg
fHwgIUdUS19JU19XSU5ET1cod2luZG93KSB8fCBHVEtfSVNfT0ZGU0NSRUVOX1dJTkRPVyh3aW5k
b3cpKQotICAgICAgICAgICAgd2luZG93ID0gMDsKLQotICAgICAgICBHdGtXaWRnZXQgKmRpYWxv
ZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcod2luZG93ID8gR1RLX1dJTkRPVyh3aW5kb3cpIDog
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfRElBTE9HX01PREFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdUS19NRVNTQUdFX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0JVVFRPTlNfQ0xPU0UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIG5vdyBmdWxs
IHNjcmVlbi4gUHJlc3MgRVNDIG9yIGYgdG8gZXhpdC4iLCB1cmkpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQoZGlhbG9nLCAicmVzcG9uc2UiLCBHX0NBTExCQUNLKGd0a193aWRn
ZXRfZGVzdHJveSksIGRpYWxvZyk7Ci0gICAgICAgIGd1aW50IGlkID0gZ190aW1lb3V0X2FkZCgx
NTAwLCAoR1NvdXJjZUZ1bmMpIHdlYlZpZXdGdWxsc2NyZWVuTWVzc2FnZVdpbmRvd0Nsb3NlLCBk
aWFsb2cpOwotICAgICAgICBnX3NvdXJjZV9zZXRfbmFtZV9ieV9pZChpZCwgIltXZWJLaXRdIHdl
YlZpZXdGdWxsc2NyZWVuTWVzc2FnZVdpbmRvd0Nsb3NlIik7Ci0gICAgICAgIGd0a19kaWFsb2df
cnVuKEdUS19ESUFMT0coZGlhbG9nKSk7Ci0gICAgfQotICAgIHJldHVybiBUUlVFOwotfQotCi1z
dGF0aWMgdm9pZCBoaWRlV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRhKQot
ewotICAgIGlmICghR1RLX0lTX1NDUk9MTEVEX1dJTkRPVyh3aWRnZXQpKQotICAgICAgICBndGtf
d2lkZ2V0X2hpZGUod2lkZ2V0KTsKLX0KLQotc3RhdGljIHZvaWQgc2hvd1dpZGdldChHdGtXaWRn
ZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoIUdUS19JU19TQ1JPTExFRF9X
SU5ET1cod2lkZ2V0KSkKLSAgICAgICAgZ3RrX3dpZGdldF9zaG93KHdpZGdldCk7Ci19Ci0KLXN0
YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RW50ZXJpbmdGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIEdPYmplY3QgKmVsZW1lbnQsIEd0a1dpZGdldCogdmJveCkKLXsKLSAgICBXZWJLaXRX
ZWJGcmFtZSAqZnJhbWUgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldyk7
Ci0gICAgY29uc3QgZ2NoYXIgKnVyaSA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3VyaShmcmFtZSk7
Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lE
R0VUKHdlYlZpZXcpKTsKLSAgICBpZiAoIWd0a193aWRnZXRfaXNfdG9wbGV2ZWwod2luZG93KSB8
fCAhR1RLX0lTX1dJTkRPVyh3aW5kb3cpIHx8IEdUS19JU19PRkZTQ1JFRU5fV0lORE9XKHdpbmRv
dykpCi0gICAgICAgIHdpbmRvdyA9IDA7Ci0KLSAgICBHdGtXaWRnZXQgKmRpYWxvZyA9IGd0a19t
ZXNzYWdlX2RpYWxvZ19uZXcod2luZG93ID8gR1RLX1dJTkRPVyh3aW5kb3cpIDogMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX0RJQUxPR19NT0RB
TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX01F
U1NBR0VfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR1RLX0JVVFRPTlNfWUVTX05PLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQWxsb3cgZnVsbCBzY3JlZW4gZGlzcGxheSBvZiAlcyA/IiwgdXJpKTsK
LSAgICBnaW50IHJlc3VsdCA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBHVEtfUkVTUE9OU0VfWUVTKSB7Ci0gICAgICAgIGd0a19jb250YWlu
ZXJfZm9yZWFjaChHVEtfQ09OVEFJTkVSKHZib3gpLCAoR3RrQ2FsbGJhY2spIGhpZGVXaWRnZXQs
IE5VTEwpOwotICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChkaWFsb2cpKTsK
LSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RL
X1dJREdFVChkaWFsb2cpKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFu
IHdlYlZpZXdMZWF2aW5nRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHT2JqZWN0
ICplbGVtZW50LCBHdGtXaWRnZXQqIHZib3gpCi17Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3cgPSBn
dGtfd2lkZ2V0X2dldF90b3BsZXZlbChHVEtfV0lER0VUKHdlYlZpZXcpKTsKLSAgICBpZiAoZ3Rr
X3dpZGdldF9pc190b3BsZXZlbCh3aW5kb3cpICYmIEdUS19JU19XSU5ET1cod2luZG93KSAmJiAh
R1RLX0lTX09GRlNDUkVFTl9XSU5ET1cod2luZG93KSkKLSAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jKHdpbmRvdywgR19DQUxMQkFDSyh3ZWJWaWV3V2luZG93U3Rh
dGVFdmVudCksIHdlYlZpZXcpOwotICAgIGd0a19jb250YWluZXJfZm9yZWFjaChHVEtfQ09OVEFJ
TkVSKHZib3gpLCAoR3RrQ2FsbGJhY2spIHNob3dXaWRnZXQsIE5VTEwpOwotICAgIHJldHVybiBG
QUxTRTsKLX0KLQotc3RhdGljIHZvaWQgaWNvbkxvYWRlZENiKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIGNvbnN0IGNoYXIqIGljb25VUkksIEd0a1dpZGdldCogdXJpRW50cnkpCi17Ci0gICAgR2Rr
UGl4YnVmICppY29uID0gd2Via2l0X3dlYl92aWV3X3RyeV9nZXRfZmF2aWNvbl9waXhidWYod2Vi
VmlldywgMTYsIDE2KTsKLSAgICBpZiAoIWljb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGd0
a19lbnRyeV9zZXRfaWNvbl9mcm9tX3BpeGJ1ZihHVEtfRU5UUlkodXJpRW50cnkpLCBHVEtfRU5U
UllfSUNPTl9QUklNQVJZLCBpY29uKTsKLSAgICBnX29iamVjdF91bnJlZihpY29uKTsKLX0KLQot
c3RhdGljIEd0a1dpZGdldCAqaW5zcGVjdG9ySW5zcGVjdFdlYlZpZXdDYihXZWJLaXRXZWJJbnNw
ZWN0b3IgKmluc3BlY3RvciwgV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR3RrV2luZG93KiB3aW5k
b3cpCi17Ci0gICAgR3RrV2lkZ2V0ICppbnNwZWN0b3JXaW5kb3cgPSBsYXVuY2hlckluc3BlY3Rv
cldpbmRvd05ldyhpbnNwZWN0b3IsIHdpbmRvdyk7Ci0gICAgcmV0dXJuIEdUS19XSURHRVQobGF1
bmNoZXJJbnNwZWN0b3JXaW5kb3dHZXRXZWJWaWV3KExBVU5DSEVSX0lOU1BFQ1RPUl9XSU5ET1co
aW5zcGVjdG9yV2luZG93KSkpOwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVCcm93c2Vy
KEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQqIHVyaUVudHJ5LCBHdGtXaWRnZXQqIHN0YXR1
c2JhciwgV2ViS2l0V2ViVmlldyogd2ViVmlldywgR3RrV2lkZ2V0KiB2Ym94KQotewotICAgIGNo
YXIgKmljb25EYXRhYmFzZVBhdGg7Ci0gICAgR3RrV2lkZ2V0ICpzY3JvbGxlZFdpbmRvdyA9IGd0
a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOwotICAgIGd0a19zY3JvbGxlZF93aW5k
b3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lORE9XKHNjcm9sbGVkV2luZG93KSwgR1RLX1BP
TElDWV9BVVRPTUFUSUMsIEdUS19QT0xJQ1lfQVVUT01BVElDKTsKLQotICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIoc2Nyb2xsZWRXaW5kb3cpLCBHVEtfV0lER0VUKHdlYlZpZXcp
KTsKLQotICAgIGljb25EYXRhYmFzZVBhdGggPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJf
Y2FjaGVfZGlyKCksICJHdGtMYXVuY2hlciIsICJpY29uZGF0YWJhc2UiLCBOVUxMKTsKLSAgICB3
ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9zZXRfcGF0aCh3ZWJraXRfZ2V0X2Zhdmljb25fZGF0YWJh
c2UoKSwgaWNvbkRhdGFiYXNlUGF0aCk7Ci0gICAgZ19mcmVlKGljb25EYXRhYmFzZVBhdGgpOwot
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibm90aWZ5Ojp0aXRsZSIsIEdfQ0FMTEJB
Q0sobm90aWZ5VGl0bGVDYiksIHdpbmRvdyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3
LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FMTEJBQ0sobm90aWZ5TG9hZFN0YXR1c0NiKSwg
dXJpRW50cnkpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIm5vdGlmeTo6cHJvZ3Jl
c3MiLCBHX0NBTExCQUNLKG5vdGlmeVByb2dyZXNzQ2IpLCB3aW5kb3cpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2ViVmlldywgImljb24tbG9hZGVkIiwgR19DQUxMQkFDSyhpY29uTG9hZGVkQ2Ip
LCB1cmlFbnRyeSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiaG92ZXJpbmctb3Zl
ci1saW5rIiwgR19DQUxMQkFDSyhsaW5rSG92ZXJDYiksIHN0YXR1c2Jhcik7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19DQUxMQkFDSyhjcmVhdGVX
ZWJWaWV3Q2IpLCB3aW5kb3cpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2ViVmlldywgIndlYi12
aWV3LXJlYWR5IiwgR19DQUxMQkFDSyh3ZWJWaWV3UmVhZHlDYiksIHdpbmRvdyk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LCAiY2xvc2Utd2ViLXZpZXciLCBHX0NBTExCQUNLKGNsb3Nl
V2ViVmlld0NiKSwgd2luZG93KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcsICJlbnRl
cmluZy1mdWxsc2NyZWVuIiwgR19DQUxMQkFDSyh3ZWJWaWV3RW50ZXJpbmdGdWxsU2NyZWVuKSwg
dmJveCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LCAibGVhdmluZy1mdWxsc2NyZWVu
IiwgR19DQUxMQkFDSyh3ZWJWaWV3TGVhdmluZ0Z1bGxTY3JlZW4pLCB2Ym94KTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpLCAiaW5z
cGVjdC13ZWItdmlldyIsIEdfQ0FMTEJBQ0soaW5zcGVjdG9ySW5zcGVjdFdlYlZpZXdDYiksIHdp
bmRvdyk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsZWRXaW5kb3c7Ci19Ci0KLXN0YXRpYyBHdGtXaWRn
ZXQqIGNyZWF0ZVN0YXR1c2JhcigpCi17Ci0gICAgR3RrU3RhdHVzYmFyICpzdGF0dXNiYXIgPSBH
VEtfU1RBVFVTQkFSKGd0a19zdGF0dXNiYXJfbmV3KCkpOwotICAgIGd1aW50IHN0YXR1c0NvbnRl
eHRJZCA9IGd0a19zdGF0dXNiYXJfZ2V0X2NvbnRleHRfaWQoc3RhdHVzYmFyLCAiTGluayBIb3Zl
ciIpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHN0YXR1c2JhciksICJsaW5rLWhv
dmVyLWNvbnRleHQiLAotICAgICAgICBHVUlOVF9UT19QT0lOVEVSKHN0YXR1c0NvbnRleHRJZCkp
OwotCi0gICAgcmV0dXJuIEdUS19XSURHRVQoc3RhdHVzYmFyKTsKLX0KLQotc3RhdGljIEd0a1dp
ZGdldCogY3JlYXRlVG9vbGJhcihHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlFbnRy
eSwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKLXsKLSAgICBHdGtXaWRnZXQgKnRvb2xiYXIgPSBn
dGtfdG9vbGJhcl9uZXcoKTsKLQotICAgIGd0a19vcmllbnRhYmxlX3NldF9vcmllbnRhdGlvbihH
VEtfT1JJRU5UQUJMRSh0b29sYmFyKSwgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpOwotICAg
IGd0a190b29sYmFyX3NldF9zdHlsZShHVEtfVE9PTEJBUih0b29sYmFyKSwgR1RLX1RPT0xCQVJf
Qk9USF9IT1JJWik7Ci0KLSAgICBHdGtUb29sSXRlbSAqaXRlbTsKLQotICAgIC8qIEtleWJvYXJk
IGFjY2VsZXJhdG9ycyAqLwotICAgIEd0a0FjY2VsR3JvdXAgKmFjY2VsR3JvdXAgPSBndGtfYWNj
ZWxfZ3JvdXBfbmV3KCk7Ci0gICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRP
Vyh3aW5kb3cpLCBhY2NlbEdyb3VwKTsKLQotICAgIC8qIHRoZSBiYWNrIGJ1dHRvbiAqLwotICAg
IGl0ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21fc3RvY2soR1RLX1NUT0NLX0dPX0JBQ0sp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoaXRlbSksICJjbGlja2VkIiwgR19DQUxM
QkFDSyhnb0JhY2tDYiksIHdlYlZpZXcpOwotICAgIGd0a190b29sYmFyX2luc2VydChHVEtfVE9P
TEJBUih0b29sYmFyKSwgaXRlbSwgLTEpOwotCi0gICAgLyogVGhlIGZvcndhcmQgYnV0dG9uICov
Ci0gICAgaXRlbSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayhHVEtfU1RPQ0tfR09f
Rk9SV0FSRCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChpdGVtKSwgImNsaWNrZWQi
LCBHX0NBTExCQUNLKGdvRm9yd2FyZENiKSwgd2ViVmlldyk7Ci0gICAgZ3RrX3Rvb2xiYXJfaW5z
ZXJ0KEdUS19UT09MQkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7Ci0KLSAgICAvKiBUaGUgcmVsb2Fk
IGJ1dHRvbiAqLwotICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21fc3RvY2soR1RL
X1NUT0NLX1JFRlJFU0gpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QoaXRlbSksICJj
bGlja2VkIiwgR19DQUxMQkFDSyhyZWxvYWRDYiksIHdlYlZpZXcpOwotICAgIGd0a190b29sYmFy
X2luc2VydChHVEtfVE9PTEJBUih0b29sYmFyKSwgaXRlbSwgLTEpOwotICAgIGd0a193aWRnZXRf
YWRkX2FjY2VsZXJhdG9yKEdUS19XSURHRVQoaXRlbSksICJjbGlja2VkIiwgYWNjZWxHcm91cCwg
R0RLX0tFWV9GNSwgMCwgR1RLX0FDQ0VMX1ZJU0lCTEUpOwotCi0gICAgLyogVGhlIFVSTCBlbnRy
eSAqLwotICAgIGl0ZW0gPSBndGtfdG9vbF9pdGVtX25ldygpOwotICAgIGd0a190b29sX2l0ZW1f
c2V0X2V4cGFuZChpdGVtLCBUUlVFKTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKGl0ZW0pLCB1cmlFbnRyeSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVCh1cmlF
bnRyeSksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0soYWN0aXZhdGVVcmlFbnRyeUNiKSwgTlVMTCk7
Ci0gICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0KEdUS19UT09MQkFSKHRvb2xiYXIpLCBpdGVtLCAtMSk7
Ci0KLSAgICAvKiBUaGUgZ28gYnV0dG9uICovCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QodXJpRW50cnkpLCAid2ViLXZpZXciLCB3ZWJWaWV3KTsKLSAgICBpdGVtID0gZ3RrX3Rvb2xf
YnV0dG9uX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19PSyk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKEdfT0JKRUNUKGl0ZW0pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soYWN0aXZhdGVV
cmlFbnRyeUNiKSwgKGdwb2ludGVyKXVyaUVudHJ5KTsKLSAgICBndGtfdG9vbGJhcl9pbnNlcnQo
R1RLX1RPT0xCQVIodG9vbGJhciksIGl0ZW0sIC0xKTsKLQotICAgIHJldHVybiB0b29sYmFyOwot
fQotCi1zdGF0aWMgR3RrV2lkZ2V0KiBjcmVhdGVXaW5kb3coV2ViS2l0V2ViVmlldyoqIG91dFdl
YlZpZXcpCi17Ci0gICAgV2ViS2l0V2ViVmlldyAqd2ViVmlldzsKLSAgICBHdGtXaWRnZXQgKnZi
b3g7Ci0gICAgR3RrV2lkZ2V0ICp3aW5kb3c7Ci0gICAgR3RrV2lkZ2V0ICp1cmlFbnRyeTsKLSAg
ICBHdGtXaWRnZXQgKnN0YXR1c2JhcjsKLQotICAgIGdfYXRvbWljX2ludF9pbmMoJndpbmRvd0Nv
dW50KTsKLQotICAgIHdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfVE9QTEVWRUwp
OwotICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKHdpbmRvdyksIDgw
MCwgNjAwKTsKLSAgICBndGtfd2lkZ2V0X3NldF9uYW1lKHdpbmRvdywgIkd0a0xhdW5jaGVyIik7
Ci0KLSAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7
Ci0gICAgdXJpRW50cnkgPSBndGtfZW50cnlfbmV3KCk7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgotICAgIHZib3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDApOwotI2Vsc2UKLSAgICB2Ym94
ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAwKTsKLSNlbmRpZgotICAg
IHN0YXR1c2JhciA9IGNyZWF0ZVN0YXR1c2JhcigpOwotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKHZib3gpLCBjcmVhdGVUb29sYmFyKHdpbmRvdywgdXJpRW50cnksIHdlYlZpZXcpLCBG
QUxTRSwgRkFMU0UsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBj
cmVhdGVCcm93c2VyKHdpbmRvdywgdXJpRW50cnksIHN0YXR1c2Jhciwgd2ViVmlldywgdmJveCks
IFRSVUUsIFRSVUUsIDApOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBz
dGF0dXNiYXIsIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtf
Q09OVEFJTkVSKHdpbmRvdyksIHZib3gpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdCh3aW5kb3cs
ICJkZXN0cm95IiwgR19DQUxMQkFDSyhkZXN0cm95Q2IpLCBOVUxMKTsKLQotICAgIGlmIChvdXRX
ZWJWaWV3KQotICAgICAgICAqb3V0V2ViVmlldyA9IHdlYlZpZXc7Ci0KLSAgICByZXR1cm4gd2lu
ZG93OwotfQotCi1zdGF0aWMgZ2NoYXIqIGZpbGVuYW1lVG9VUkwoY29uc3QgY2hhciogZmlsZW5h
bWUpCi17Ci0gICAgaWYgKCFnX2ZpbGVfdGVzdChmaWxlbmFtZSwgR19GSUxFX1RFU1RfRVhJU1RT
KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBHRmlsZSAqZ2ZpbGUgPSBnX2ZpbGVfbmV3
X2Zvcl9wYXRoKGZpbGVuYW1lKTsKLSAgICBnY2hhciAqZmlsZVVSTCA9IGdfZmlsZV9nZXRfdXJp
KGdmaWxlKTsKLSAgICBnX29iamVjdF91bnJlZihnZmlsZSk7Ci0KLSAgICByZXR1cm4gZmlsZVVS
TDsKLX0KLQotc3RhdGljIGdib29sZWFuIHBhcnNlT3B0aW9uRW50cnlDYWxsYmFjayhjb25zdCBn
Y2hhciAqb3B0aW9uTmFtZUZ1bGwsIGNvbnN0IGdjaGFyICp2YWx1ZSwgV2ViS2l0V2ViU2V0dGlu
Z3MgKndlYlNldHRpbmdzLCBHRXJyb3IgKiplcnJvcikKLXsKLSAgICBpZiAoc3RybGVuKG9wdGlv
bk5hbWVGdWxsKSA8PSAyKSB7Ci0gICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX09QVElPTl9F
UlJPUiwgR19PUFRJT05fRVJST1JfRkFJTEVELCAiSW52YWxpZCBvcHRpb24gJXMiLCBvcHRpb25O
YW1lRnVsbCk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICB9Ci0KLSAgICAvKiBXZSBoYXZl
IHR3byAtLSBpbiBvcHRpb24gbmFtZSBzbyByZW1vdmUgdGhlbS4gKi8KLSAgICBjb25zdCBnY2hh
ciAqb3B0aW9uTmFtZSA9IG9wdGlvbk5hbWVGdWxsICsgMjsKLSAgICBHUGFyYW1TcGVjICpzcGVj
ID0gZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1Mod2ViU2V0
dGluZ3MpLCBvcHRpb25OYW1lKTsKLSAgICBpZiAoIXNwZWMpIHsKLSAgICAgICAgZ19zZXRfZXJy
b3IoZXJyb3IsIEdfT1BUSU9OX0VSUk9SLCBHX09QVElPTl9FUlJPUl9GQUlMRUQsICJDYW5ub3Qg
ZmluZCB3ZWIgc2V0dGluZ3MgZm9yIG9wdGlvbiAlcyIsIG9wdGlvbk5hbWVGdWxsKTsKLSAgICAg
ICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLQotICAgIHN3aXRjaCAoR19QQVJBTV9TUEVDX1ZBTFVF
X1RZUEUoc3BlYykpIHsKLSAgICBjYXNlIEdfVFlQRV9CT09MRUFOOiB7Ci0gICAgICAgIGdib29s
ZWFuIHByb3BlcnR5VmFsdWUgPSBUUlVFOwotICAgICAgICBpZiAodmFsdWUgJiYgZ19hc2NpaV9z
dHJjYXNlY21wKHZhbHVlLCAidHJ1ZSIpICYmIHN0cmNtcCh2YWx1ZSwgIjEiKSkKLSAgICAgICAg
ICAgIHByb3BlcnR5VmFsdWUgPSBGQUxTRTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNU
KHdlYlNldHRpbmdzKSwgb3B0aW9uTmFtZSwgcHJvcGVydHlWYWx1ZSwgTlVMTCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdfVFlQRV9TVFJJTkc6Ci0gICAgICAgIGdfb2JqZWN0
X3NldChHX09CSkVDVCh3ZWJTZXR0aW5ncyksIG9wdGlvbk5hbWUsIHZhbHVlLCBOVUxMKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHX1RZUEVfSU5UOiB7Ci0gICAgICAgIGdsb25nIHByb3Bl
cnR5VmFsdWU7Ci0gICAgICAgIGdjaGFyICplbmQ7Ci0KLSAgICAgICAgZXJybm8gPSAwOwotICAg
ICAgICBwcm9wZXJ0eVZhbHVlID0gZ19hc2NpaV9zdHJ0b2xsKHZhbHVlLCAmZW5kLCAwKTsKLSAg
ICAgICAgaWYgKGVycm5vID09IEVSQU5HRSB8fCBwcm9wZXJ0eVZhbHVlID4gR19NQVhJTlQgfHwg
cHJvcGVydHlWYWx1ZSA8IEdfTUlOSU5UKSB7Ci0gICAgICAgICAgICBnX3NldF9lcnJvcihlcnJv
ciwgR19PUFRJT05fRVJST1IsIEdfT1BUSU9OX0VSUk9SX0JBRF9WQUxVRSwgIkludGVnZXIgdmFs
dWUgJyVzJyBmb3IgJXMgb3V0IG9mIHJhbmdlIiwgdmFsdWUsIG9wdGlvbk5hbWVGdWxsKTsKLSAg
ICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJybm8gfHwg
dmFsdWUgPT0gZW5kKSB7Ci0gICAgICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgR19PUFRJT05f
RVJST1IsIEdfT1BUSU9OX0VSUk9SX0JBRF9WQUxVRSwgIkNhbm5vdCBwYXJzZSBpbnRlZ2VyIHZh
bHVlICclcycgZm9yICVzIiwgdmFsdWUsIG9wdGlvbk5hbWVGdWxsKTsKLSAgICAgICAgICAgIHJl
dHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qod2Vi
U2V0dGluZ3MpLCBvcHRpb25OYW1lLCBwcm9wZXJ0eVZhbHVlLCBOVUxMKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgR19UWVBFX0ZMT0FUOiB7Ci0gICAgICAgIGdkb3VibGUgcHJv
cGVydHlWYWx1ZTsKLSAgICAgICAgZ2NoYXIgKmVuZDsKLQotICAgICAgICBlcnJubyA9IDA7Ci0g
ICAgICAgIHByb3BlcnR5VmFsdWUgPSBnX2FzY2lpX3N0cnRvZCh2YWx1ZSwgJmVuZCk7Ci0gICAg
ICAgIGlmIChlcnJubyA9PSBFUkFOR0UgfHwgcHJvcGVydHlWYWx1ZSA+IEdfTUFYRkxPQVQgfHwg
cHJvcGVydHlWYWx1ZSA8IEdfTUlORkxPQVQpIHsKLSAgICAgICAgICAgIGdfc2V0X2Vycm9yKGVy
cm9yLCBHX09QVElPTl9FUlJPUiwgR19PUFRJT05fRVJST1JfQkFEX1ZBTFVFLCAiRmxvYXQgdmFs
dWUgJyVzJyBmb3IgJXMgb3V0IG9mIHJhbmdlIiwgdmFsdWUsIG9wdGlvbk5hbWVGdWxsKTsKLSAg
ICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXJybm8gfHwg
dmFsdWUgPT0gZW5kKSB7Ci0gICAgICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgR19PUFRJT05f
RVJST1IsIEdfT1BUSU9OX0VSUk9SX0JBRF9WQUxVRSwgIkNhbm5vdCBwYXJzZSBmbG9hdCB2YWx1
ZSAnJXMnIGZvciAlcyIsIHZhbHVlLCBvcHRpb25OYW1lRnVsbCk7Ci0gICAgICAgICAgICByZXR1
cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHdlYlNl
dHRpbmdzKSwgb3B0aW9uTmFtZSwgcHJvcGVydHlWYWx1ZSwgTlVMTCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBUUlVFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gaXNWYWxpZFBh
cmFtZXRlclR5cGUoR1R5cGUgZ1BhcmFtVHlwZSkKLXsKLSAgICByZXR1cm4gKGdQYXJhbVR5cGUg
PT0gR19UWVBFX0JPT0xFQU4gfHwgZ1BhcmFtVHlwZSA9PSBHX1RZUEVfU1RSSU5HIHx8IGdQYXJh
bVR5cGUgPT0gR19UWVBFX0lOVAotICAgICAgICAgICAgfHwgZ1BhcmFtVHlwZSA9PSBHX1RZUEVf
RkxPQVQpOwotfQotCi1zdGF0aWMgR09wdGlvbkVudHJ5KiBnZXRPcHRpb25FbnRyaWVzRnJvbVdl
YktpdFdlYlNldHRpbmdzKFdlYktpdFdlYlNldHRpbmdzICp3ZWJTZXR0aW5ncykKLXsKLSAgICBH
UGFyYW1TcGVjICoqcHJvcGVydHlTcGVjczsKLSAgICBHT3B0aW9uRW50cnkgKm9wdGlvbkVudHJp
ZXM7Ci0gICAgZ3VpbnQgbnVtUHJvcGVydGllcywgbnVtRW50cmllcywgaTsKLQotICAgIHByb3Bl
cnR5U3BlY3MgPSBnX29iamVjdF9jbGFzc19saXN0X3Byb3BlcnRpZXMoR19PQkpFQ1RfR0VUX0NM
QVNTKHdlYlNldHRpbmdzKSwgJm51bVByb3BlcnRpZXMpOwotICAgIGlmICghcHJvcGVydHlTcGVj
cykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBvcHRpb25FbnRyaWVzID0gZ19uZXcwKEdP
cHRpb25FbnRyeSwgbnVtUHJvcGVydGllcyArIDEpOwotICAgIG51bUVudHJpZXMgPSAwOwotICAg
IGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyBpKyspIHsKLSAgICAgICAgR1BhcmFtU3Bl
YyAqcGFyYW0gPSBwcm9wZXJ0eVNwZWNzW2ldOwotCi0gICAgICAgIC8qIEZpbGwgaW4gc3RydWN0
dXJlcyBvbmx5IGZvciB3cml0YWJsZSBhbmQgbm90IGNvbnN0cnVjdC1vbmx5IHByb3BlcnRpZXMu
ICovCi0gICAgICAgIGlmICghcGFyYW0gfHwgIShwYXJhbS0+ZmxhZ3MgJiBHX1BBUkFNX1dSSVRB
QkxFKSB8fCAocGFyYW0tPmZsYWdzICYgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBHVHlwZSBnUGFyYW1UeXBlID0gR19QQVJBTV9TUEVD
X1ZBTFVFX1RZUEUocGFyYW0pOwotICAgICAgICBpZiAoIWlzVmFsaWRQYXJhbWV0ZXJUeXBlKGdQ
YXJhbVR5cGUpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgR09wdGlvbkVudHJ5
ICpvcHRpb25FbnRyeSA9ICZvcHRpb25FbnRyaWVzW251bUVudHJpZXMrK107Ci0gICAgICAgIG9w
dGlvbkVudHJ5LT5sb25nX25hbWUgPSBnX3BhcmFtX3NwZWNfZ2V0X25hbWUocGFyYW0pOwotCi0g
ICAgICAgIC8qIFRoZXJlIGlzIG5vIGVhc3kgd2F5IHRvIGZpZ3VyZSBvdXIgc2hvcnQgbmFtZSBm
b3IgZ2VuZXJhdGVkIG9wdGlvbiBlbnRyaWVzLgotICAgICAgICAgICBvcHRpb25FbnRyeS5zaG9y
dF9uYW1lPSovCi0gICAgICAgIC8qIEZvciBib29sIGFyZ3VtZW50cyAiZW5hYmxlIiB0eXBlIG1h
a2Ugb3B0aW9uIGFyZ3VtZW50IG5vdCByZXF1aXJlZC4gKi8KLSAgICAgICAgaWYgKGdQYXJhbVR5
cGUgPT0gR19UWVBFX0JPT0xFQU4gJiYgKHN0cnN0cihvcHRpb25FbnRyeS0+bG9uZ19uYW1lLCAi
ZW5hYmxlIikpKQotICAgICAgICAgICAgb3B0aW9uRW50cnktPmZsYWdzID0gR19PUFRJT05fRkxB
R19PUFRJT05BTF9BUkc7Ci0gICAgICAgIG9wdGlvbkVudHJ5LT5hcmcgPSBHX09QVElPTl9BUkdf
Q0FMTEJBQ0s7Ci0gICAgICAgIG9wdGlvbkVudHJ5LT5hcmdfZGF0YSA9IHBhcnNlT3B0aW9uRW50
cnlDYWxsYmFjazsKLSAgICAgICAgb3B0aW9uRW50cnktPmRlc2NyaXB0aW9uID0gZ19wYXJhbV9z
cGVjX2dldF9ibHVyYihwYXJhbSk7Ci0gICAgICAgIG9wdGlvbkVudHJ5LT5hcmdfZGVzY3JpcHRp
b24gPSBnX3R5cGVfbmFtZShnUGFyYW1UeXBlKTsKLSAgICB9Ci0gICAgZ19mcmVlKHByb3BlcnR5
U3BlY3MpOwotCi0gICAgcmV0dXJuIG9wdGlvbkVudHJpZXM7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biBhZGRXZWJTZXR0aW5nc0dyb3VwVG9Db250ZXh0KEdPcHRpb25Db250ZXh0ICpjb250ZXh0LCBX
ZWJLaXRXZWJTZXR0aW5ncyogd2Via2l0U2V0dGluZ3MpCi17Ci0gICAgR09wdGlvbkVudHJ5ICpv
cHRpb25FbnRyaWVzID0gZ2V0T3B0aW9uRW50cmllc0Zyb21XZWJLaXRXZWJTZXR0aW5ncyh3ZWJr
aXRTZXR0aW5ncyk7Ci0gICAgaWYgKCFvcHRpb25FbnRyaWVzKQotICAgICAgICByZXR1cm4gRkFM
U0U7Ci0KLSAgICBHT3B0aW9uR3JvdXAgKndlYlNldHRpbmdzR3JvdXAgPSBnX29wdGlvbl9ncm91
cF9uZXcoIndlYnNldHRpbmdzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIldlYktpdFdlYlNldHRpbmdzIHdyaXRhYmxlIHByb3BlcnRp
ZXMgZm9yIGRlZmF1bHQgV2ViS2l0V2ViVmlldyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXRXZWJTZXR0aW5ncyBwcm9wZXJ0
aWVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2Via2l0U2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGdfb3B0aW9uX2dyb3VwX2FkZF9lbnRy
aWVzKHdlYlNldHRpbmdzR3JvdXAsIG9wdGlvbkVudHJpZXMpOwotICAgIGdfZnJlZShvcHRpb25F
bnRyaWVzKTsKLQotICAgIC8qIE9wdGlvbiBjb250ZXh0IHRha2VzIG93bmVyc2hpcCBvZiB0aGUg
Z3JvdXAuICovCi0gICAgZ19vcHRpb25fY29udGV4dF9hZGRfZ3JvdXAoY29udGV4dCwgd2ViU2V0
dGluZ3NHcm91cCk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqIGFyZ3ZbXSkKLXsKLSAgICBXZWJLaXRXZWJTZXR0aW5ncyAqd2Via2l0U2V0dGluZ3Mg
PSAwOwotICAgIGNvbnN0IGdjaGFyICoqdXJpQXJndW1lbnRzID0gMDsKLSAgICBjb25zdCBHT3B0
aW9uRW50cnkgY29tbWFuZExpbmVPcHRpb25zW10gPQotICAgIHsKLSAgICAgICAgeyBHX09QVElP
Tl9SRU1BSU5JTkcsIDAsIDAsIEdfT1BUSU9OX0FSR19GSUxFTkFNRV9BUlJBWSwgJnVyaUFyZ3Vt
ZW50cywgMCwgIltVUkxdIiB9LAotICAgICAgICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfQotICAg
IH07Ci0KLSAgICBndGtfaW5pdCgmYXJnYywgJmFyZ3YpOwotCi0gICAgR09wdGlvbkNvbnRleHQg
KmNvbnRleHQgPSBnX29wdGlvbl9jb250ZXh0X25ldygwKTsKLSAgICBnX29wdGlvbl9jb250ZXh0
X2FkZF9tYWluX2VudHJpZXMoY29udGV4dCwgY29tbWFuZExpbmVPcHRpb25zLCAwKTsKLSAgICBn
X29wdGlvbl9jb250ZXh0X2FkZF9ncm91cChjb250ZXh0LCBndGtfZ2V0X29wdGlvbl9ncm91cChU
UlVFKSk7Ci0jaWZkZWYgV1RGX1VTRV9HU1RSRUFNRVIKLSAgICBnX29wdGlvbl9jb250ZXh0X2Fk
ZF9ncm91cChjb250ZXh0LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkpOwotI2VuZGlmCi0g
ICAgd2Via2l0U2V0dGluZ3MgPSB3ZWJraXRfd2ViX3NldHRpbmdzX25ldygpOwotICAgIGdfb2Jq
ZWN0X3NldCh3ZWJraXRTZXR0aW5ncywgImVuYWJsZS1kZXZlbG9wZXItZXh0cmFzIiwgVFJVRSwg
TlVMTCk7Ci0gICAgaWYgKCFhZGRXZWJTZXR0aW5nc0dyb3VwVG9Db250ZXh0KGNvbnRleHQsIHdl
YmtpdFNldHRpbmdzKSkgewotICAgICAgICBnX29iamVjdF91bnJlZih3ZWJraXRTZXR0aW5ncyk7
Ci0gICAgICAgIHdlYmtpdFNldHRpbmdzID0gMDsKLSAgICB9Ci0KLSAgICBHRXJyb3IgKmVycm9y
ID0gMDsKLSAgICBpZiAoIWdfb3B0aW9uX2NvbnRleHRfcGFyc2UoY29udGV4dCwgJmFyZ2MsICZh
cmd2LCAmZXJyb3IpKSB7Ci0gICAgICAgIGdfcHJpbnRlcnIoIkNhbm5vdCBwYXJzZSBhcmd1bWVu
dHM6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7
Ci0gICAgICAgIGdfb3B0aW9uX2NvbnRleHRfZnJlZShjb250ZXh0KTsKLQotICAgICAgICByZXR1
cm4gMTsKLSAgICB9Ci0gICAgZ19vcHRpb25fY29udGV4dF9mcmVlKGNvbnRleHQpOwotCi0jaWZk
ZWYgU09VUF9UWVBFX1BST1hZX1JFU09MVkVSX0RFRkFVTFQKLSAgICBzb3VwX3Nlc3Npb25fYWRk
X2ZlYXR1cmVfYnlfdHlwZSh3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpLCBTT1VQX1RZUEVf
UFJPWFlfUkVTT0xWRVJfREVGQVVMVCk7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIgKmh0dHBQcm94
eSA9IGdfZ2V0ZW52KCJodHRwX3Byb3h5Iik7Ci0gICAgaWYgKGh0dHBQcm94eSkgewotICAgICAg
ICBTb3VwVVJJICpwcm94eVVyaSA9IHNvdXBfdXJpX25ldyhodHRwUHJveHkpOwotICAgICAgICBn
X29iamVjdF9zZXQod2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSwgU09VUF9TRVNTSU9OX1BS
T1hZX1VSSSwgcHJveHlVcmksIE5VTEwpOwotICAgICAgICBzb3VwX3VyaV9mcmVlKHByb3h5VXJp
KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXc7Ci0gICAgR3Rr
V2lkZ2V0ICptYWluX3dpbmRvdyA9IGNyZWF0ZVdpbmRvdygmd2ViVmlldyk7Ci0KLSAgICBpZiAo
d2Via2l0U2V0dGluZ3MpIHsKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyhX
RUJLSVRfV0VCX1ZJRVcod2ViVmlldyksIHdlYmtpdFNldHRpbmdzKTsKLSAgICAgICAgZ19vYmpl
Y3RfdW5yZWYod2Via2l0U2V0dGluZ3MpOwotICAgIH0KLQotICAgIGNvbnN0IGdjaGFyICp1cmkg
PSAodXJpQXJndW1lbnRzID8gdXJpQXJndW1lbnRzWzBdIDogImh0dHA6Ly93d3cuZ29vZ2xlLmNv
bS8iKTsKLSAgICBnY2hhciAqZmlsZVVSTCA9IGZpbGVuYW1lVG9VUkwodXJpKTsKLQotICAgIHdl
YmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LCBmaWxlVVJMID8gZmlsZVVSTCA6IHVyaSk7
Ci0gICAgZ19mcmVlKGZpbGVVUkwpOwotCi0gICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19X
SURHRVQod2ViVmlldykpOwotICAgIGd0a193aWRnZXRfc2hvd19hbGwobWFpbl93aW5kb3cpOwot
ICAgIGd0a19tYWluKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0d0
a0xhdW5jaGVyL3NpbXBsZS5zdmcgYi9Ub29scy9HdGtMYXVuY2hlci9zaW1wbGUuc3ZnCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGIxM2FjNWNhNzI1YWEwNjM0YmY1ZjFhNzkwYjkw
OTY2ZmQ0NDA5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1Rvb2xzL0d0a0xhdW5jaGVyL3NpbXBsZS5zdmcKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCww
IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+Ci08IURPQ1RZUEUgc3Zn
IFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKLSJodHRwOi8vd3d3LnczLm9y
Zy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+Ci08c3ZnIHdpZHRoPSI1
Y20iIGhlaWdodD0iNGNtIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KLTxk
ZXNjPkZvdXIgc2VwYXJhdGUgcmVjdGFuZ2xlcwotPC9kZXNjPgotPHJlY3QgeD0iMC41Y20iIHk9
IjAuNWNtIiB3aWR0aD0iMmNtIiBoZWlnaHQ9IjFjbSIvPgotPHJlY3QgeD0iMC41Y20iIHk9IjJj
bSIgd2lkdGg9IjFjbSIgaGVpZ2h0PSIxLjVjbSIvPgotPHJlY3QgeD0iM2NtIiB5PSIwLjVjbSIg
d2lkdGg9IjEuNWNtIiBoZWlnaHQ9IjJjbSIvPgotPHJlY3QgeD0iMy41Y20iIHk9IjNjbSIgd2lk
dGg9IjFjbSIgaGVpZ2h0PSIwLjVjbSIvPgotPCEtLSBTaG93IG91dGxpbmUgb2YgY2FudmFzIHVz
aW5nICdyZWN0JyBlbGVtZW50IC0tPgotPHJlY3QgeD0iLjAxY20iIHk9Ii4wMWNtIiB3aWR0aD0i
NC45OGNtIiBoZWlnaHQ9IjMuOThjbSIKLWZpbGw9Im5vbmUiIHN0cm9rZT0iYmx1ZSIgc3Ryb2tl
LXdpZHRoPSIuMDJjbSIgLz4KLTwvc3ZnPgpkaWZmIC0tZ2l0IGEvVG9vbHMvR3RrTGF1bmNoZXIv
dGV4dC5odG1sIGIvVG9vbHMvR3RrTGF1bmNoZXIvdGV4dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2MDdkZjcyYjYwNWExMzcwMTBhMTExZDhlNThiMzFmZmZkYWMyMzk1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0d0a0xh
dW5jaGVyL3RleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPGh0bWw+Ci08
aGVhZD4KLTx0aXRsZT5IZWxsbyBXb3JsZDwvdGl0bGU+IAotPGJvZHkgYmdjb2xvcj0jMDBmZmZm
IHRleHQ9IzAwMDAwMD4gCi08cD4KLUhlbGxvIHdvcmxkCi08L3A+Ci08L2JvZHk+Ci08L2h0bWw+
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggZDdjNDk0ZDIy
OTlhNzAyMDg1MjdjZWFkOTlkMGUwODQxMzc2YWNhNC4uMzBmNmE0NDIyMTBiYTBkNjdiOTAyZjYx
ZWNlZjMzNTE4MjVlODhiMCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC01Niw2ICs1Niw2IEBAIGxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJJbmplY3Rl
ZEJ1bmRsZV9TT1VSQ0VTCiApCiAKIGFkZF9kZWZpbml0aW9ucygKLSAgICAtREZPTlRTX0NPTkZf
RElSPSIke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZ3RrL2ZvbnRzIgorICAgIC1ERk9OVFNf
Q09ORl9ESVI9IiR7VE9PTFNfRElSfS9XZWJLaXRUZXN0UnVubmVyL2d0ay9mb250cyIKICAgICAt
RFRPUF9MRVZFTF9ESVI9IiR7Q01BS0VfU09VUkNFX0RJUn0iCiApCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2d0ay9mb250cy9BSEVNX19fXy5UVEYgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2d0ay9mb250cy9BSEVNX19fXy5UVEYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWM4MWNiMDMxNjVh
YjgzMWEzNmFiYjU5MTQ1ZmY3YTJmNTY3NWZiOQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTI0
ODAKemNtZUhOWkZtJmI2QEtTcVhGcWA/ViNKOF9Xe1ooMzI3O0Mlck5+RjVORCt9QnFOVTB2SklN
eUt5SyM0OGYmeFdyCnopa2dVIVQ4JkM2QjclWTwzUihuODVmSzRWc2l0VFZtbyE+VVpCJlkyZUdw
alJKM0EyKytkcUIkVkxQK1c/M3tiPAp6eT1UdDc9YmR9Yz96flV7XyVSYjJgZCg3anIoZVVeUUxf
TUwwSlcxVnFNX09AeVlmYz50e1Q4ZFJFM2hZSTBhc3kKej9ASEZeUk1rd2F5bDdRd0h4MEFeMT51
TXAzaCFEcHJhU0FfXlh3bT8hdEstWkRJZWgzR1pJWlRKUj5sal9MfjUkCnp4aDdyXzVfTSs9ZnVk
NkMrTX1Ve1Q2YCspRThXOyQjNm5TWE0lTyNtMEtOTTF7KmxedkdCcz1HPjVWYCFgPldqYAp6ZU9F
OW5AMDNmY3VJQDdFQWlQPXxIQ1BxRGBVLWo3YytUPlJmWG8xYE8lcDY/UF5GZCFgKU1MR2ZadFlv
ZW9JVG8Kejl8dFlYTDNyI3dVIztpdXdLaW9nVG9sJTteYXlqWlNMSiMxUSM1TCFhfiQlUjJ8Uyh5
RzE0bVY+KypBbDE0QUo4Cnpza1JSU1RMcU5kQSp8RGM8KkJlZDwyKz9PbHdMWmdHWTFYXnpURnMq
azh9M2FOODJrLWNXU3R7czZ7WVRwTTJnfgp6YDA4NHRhNTJkcTlhcDx9IVg/e05nVSlyeWZTYXFB
VCFWYUUtdmo3YCZnZzwxPFJUOXpwKHs+Q0tHKlZZSTI4cHIKejRjJjElZGYrPHtDYDF0N01OZ2M4
QkFrZ3tfI1YhfSszMWFQUD5lcTRpeFR3MXhpfUJzTX1QYlAxOF9iRDspZlc3CnpBN0w7cTtKUCp4
ISFSN0J4RFhAb1Z+b1RfNz1AbztHJW0mJVQhT0s8NnlzMmFAd2Z+VmE1Kk84M1M1YndWaUpDYQp6
dDhnX1kpODchdlFHcVpfUkg2eklSQVVPUktARm1hQSZ5I0hpdipITHAkXnhmOXUxZ14+djAzN2Fi
S0IlcEw0bD0KejZGMUB9YH5vLVFFJkxMPDs4eHMqeEE3fTk7KGdxWEpKNXolX3leaUM4Kn1ndS1v
QFkwaks1PHBldlF7SzR8bjEmCnp7MDRYOUpeVHFEOzhvbSVDWnJqcWAqMSh6PDdLPnBLVnVpKHor
ZG9ORVdxI1pBckBqTVRKWm97QEstQSRkJDAodgp6Vj5rQlZLYGgyWVNjMFdeNz57NVhtZzctOCN4
XlZQSTlCMmJKYyg2VWppPk41ZXZkVkgyNVlnN0pFdS1HZlVgQSgKelFTOGhwJXNAc2RRT2NBQ1d1
RSRpeD1ucGN5R3dnU1RkIT50SWlqbTU1SXNhdDZwNmxLcGVRWDI3OFY4N3BiX2o2CnolbktGLWRq
IXU4anRvdT9uISl7Tll+UUQ1R1BFbGcofWxEKiZhJF9LX1REKG8tYnRkSD1xYGsxQEJBOz4lTUc2
VAp6Z310ejQ1MUNCbj9NeTNvKmMmc2BHN35jdzA3dSQrNG5BXyQ7biQ5SS1KNUNJMWhsTWdTPVh8
cjw/KXVLRWVyTk8KenlaNW5sWWtFZ3xtejx+Y19Wa0FJTCtRciF0IzV0eVgzdzBEWX19OE1iQEdz
NG1nak5EKGN8UmYjZGIjRiNOJUdaCnpRUjNoTU0qMHMjTG5DbzhtK2B6Q25+OTAxaD59QCYwYjda
VEltRjIjJmlAdS1wYjZXdDRLRVN9X2MzLTRHVV5oSwp6dy1iPnxpT0khYD01amxsODtIO3FSeiY5
JHNtfkt4UGdyclMhYldUJj95OEMxRGE3cUhNRDlGZHgwZExZKmk4fD0KejYxI3NTZFohWTwqQXUl
cDVKYDczKCRnJmpLYTF5eHMjVX43NzgmYl5sQz43elVNRjVSKTdTU0xsdzw/JHB5V1RJCnpMPyl1
bEJlaVFaIThPYmNvU1IjaWRxIWJ5O2RKJUdCWGc3a00rMkhUKyVsYWo0a3l5aWwofFEtUUs4bSR4
RW17Rgp6Q2hwWTlVbDdpYElHQXZyMldLc0MpJmdnTGFRNFA7STRAdzwhVHErUkBNTFN4KzNNc1Yq
PyUkclhMQXNTYF4wcyUKeiNtUE9Mb1pRS35vIT9eND9AO0dBX31BPFktKjY3JXtOe0s1MlhnKWNi
ODt7ejJYa15UQ2tKektGZWVCNUgjciF7CnpDJiskK1dDI3JBK3h7IzA/KDtnbmJEaFdjbUBEeyhZ
Q0dTVXpsI0hrc15sbT1sLXxsZld1ITdlMmBkUkByWlFXWgp6dVBqczZDfGlfZnJCJklkOTkwOHFm
IWEmJHVhPklnKVg4ZDBvdSlSYlAzalZMd1lveyZzaXhJLV5eb1MjXjBsNT8KektXJklNTXdfSGYo
SGdXe18jUyhhd289PW0/YSs0OShAJTY9Jihub290UGojaD1AYSNecDNyQ052LVNEPEdKVER7CnpN
UV8keV4/bXdMU0hNLV4+Z0RTMURzXyE+Tz9KZ3goX0Q/TkNmNT96WVMkKiRQRkxGMT9tQT82akNg
WX4oYSN1Uwp6ajQ+dHxRO1lgVjdVTTJzaytJVSlWQypuPDgqUm9YWnJ6PmQ3VmN2QUFvblF1TTBj
ZS08LVc7MSpTKX5+c0MldEAKenQ5eklHOXJ1MEBKZUB0PUohZzNhQEg0X1EtYyM8V15+fl94O2tu
UUF1OyojZFgzd2poN1NEJkMhKE59YW80M2UmCnpvX0NtY3RvSkghanJWJSpaUWlAUmlAaV5KSCtv
PDg/KHgzd3tuVGdweTg0Mj96UGBifShZYEJ2NSNNI2JufDw/cQp6M3c8a20+d1ZqT1p9e0h6OXFf
Q0U5RGZnZ1p+czk1TmRFK1gqcWB2dl53MExzX2I+Q1dAbyhgcmAmPDN7ezZfPFUKekt0WjVhcG5z
cT1GZks0VDVEUUVUR3pPWGlPOUhDe24qdXVuPXxGcW5QJHk1UHs3eVlQXjx5QDBuc1YkTntRe1A9
CnpoWFJrJVFCdSlhU3pfeG8yeFlZYD51bDMoJVAhPEFkdS1YRGUhcU9XdG03NXNrUyF+RyVlfkUo
Umsrb2NZKnxCJgp6K0hBYEArcWA0VEY4SXxCRX11ZEQkRkBGKV4xcDAzbXYlbjA8dmkkYCVEcWpJ
VHM+dWhYNG8+dnFBI3soanp4ZGUKem1OXiFFdHUxcGJgZmdrMVNvQnN+PTItTWtaOC0tWG07NGA3
K1JzSTJtJmNhI3NMdi1PQ1R7VXExaTF3ZnZKNFZECnpFNjVIb0VxO3J6RyRzVCE1JFhpYkQ4R35C
NVkqWHF5KUE3NmR6b1l4cSp5ODw/YDl+PWIoUzR6QlN6TU9BZzhDNgp6cikqek9ZdF9+cnJMNzJr
c0haa1dTejN2KVVtdUhtYkYzYExaYi0xNXluQlopPHlIQHE/MXBPZ0cwNj1RV2JgQnsKelJyMjA3
RUxFfmMhcz1tQ3BSKEZqdjBQelVsM2EpK2J5NlJ2MT9rSUZ0RFBLVyh5fSsheEAoeUJxLVN5ejwh
bUYhCno5ZzRGZyVPbUpUZ3NyM3BAP09YOG5WcXJXV0V6IUdVJmVNKCtMMUZ7TzslSHF4Xmx+VUo+
X2cpSXElMihFYW9ncQp6OCZSXkFPdE8mVm19Rzx8U2dvYiFTKzdnelgkaEAkd0M9Y21lTEs3TVYp
OXI7TUlAOTZSaXc7QlFpS3d3TkpVSXgKek1uJkA0SStsNzF2IVRNUU9eS29saGdRXzNPYzlFT01Y
KXk1VGh2RllEPFVFcGlQd3V6dmNpbXxgaC1wRURrPkI0CnpzQVopKmxyKEZxVmBqMHFFTk5FTyly
aVY/TFpyLU9zeWJGQkQma1NIWHNjN3pAdDg8WE97VUNmdlJJNXcjS1V6Sgp6Vz59T0A3MzFVS3Vv
d31GQnd9VkYrbW50QkZEbnllcD1lenFSREVWcmxxY2YjTiFIcG5pLSQoYz1zMl5ndHxwWTIKenp+
TTtLQ0ItRXxzXnhpe3UwdihGbVBPfCZfPHd5MHpJYk43e0RnSHBMMjduMCRsU29wO3NoY1hIM3o5
dyQhX15GCnord3Q0UGJvXzY1anlHQnlONkIhIWpVMld7YUAxeSM9X1l4TWNhcjBGa0hyXlROY1Ao
emktIyFyaG13Nkx4cmJSKwp6Kjs9eVZwMGdObStuQXJkaCNoI3o7eTNPal5ZSnh1QXw9bzliJkto
Xm8xRHIkV0sqV2VYX1BGLUh1NUZrdz5YcF4KemthX25KX1RpdHtrQmBhbktac0FQeEpoPjdJJiRT
NkNhPiomaXw0cjZWbWR4Z00mMmZ9QDBPRW13fUF8fV48PlI4CnprIWcxP3hwd28mdWJnQUNGUEQ7
d19iT1IqJnlxPjZEIU0tQXZlQmN9az5qPH0zckV3c1gwaF5mcHBlZ35lR1UhSApCY0BoOHMKCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Z3RrL2ZvbnRzL0ZvbnRXaXRoTm9WYWxpZEVuY29kaW5nLmZvbiBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZ3RrL2ZvbnRzL0ZvbnRXaXRoTm9WYWxpZEVuY29kaW5nLmZvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
ZmZmN2Q5YzFmNGE1YzYzZmZhMGIxMWU1ZWFhMTQwZDI3ZTU4NjE4CkdJVCBiaW5hcnkgcGF0Y2gK
bGl0ZXJhbCA4MzY4CnpjbWVJJVBpcXJGN3t+RjZSJUAkbVc3U3J4UE56amdwQCs2OGgoYzhgMTtQ
SElFZWFrNlZ6UVdrTz1eLXRAaH04QAp6MTc1dCZzfUx6Mzx7a0pKI3k4Kz1uRTJoYnR3ITEmSmN1
b2AlViMkO3poYCRSUGY3QE07cElSc0N4cXhocno2QlIKej1YODZOOVM9WFdpM2k4TzQybjtFVW5q
UDYmJVJFcVJqTigzK15Efjk2eFVVJFNnWH1yPlEkbHxuPkFJZnNWN1VUCnpZUTBgZzJLc084LUZV
SFpEKShgQl5uVWxudWslQXpAPF9aQkFLNkZLZz1RO0ZTRFM0O0opKmFyT15YckhDemkhKgp6SGhw
R2laZGBvTlAzTT19S1p9MUpkKl8hSCpQYzlHOEoofSFTfSZAdCUzfVJfQGxDWntzRm12RllWQ0Rh
XiZsLTsKekRYZ2xRPkZLR04qXklpYzQhREZXYj9lXlVuTERiSEc7amFARnAqPFQ7PjJldSM2ckU8
UWwoMDxRN3BCUk1wRzNWCnppRTMzNm04YDRnK2Y3RE9EJW1PfTghZElTQFZLPHVOPnM1e1IrQWYo
UTtJd0dpIUp0bi1GdHQ/aTlHeEhecUBONQp6I0IhRWM5K1BoMmZPViRYS1ZRcDk5LTBeN1dNMFVn
eXFKVEFmcmFDdl5xZi14QClSfURGdEJqJjIjfX1BcDwhVSoKejsxTTh1JClSQ2o7b3VQPCZ5WWpJ
enswXkpLPXpTQyFAJEQ5QlM3fChMJkx6ciE2UUpQQzVNS0FnQFo/Y0pWeT08CnowfUJVXzA2OVBv
NEZkfVlqe3JHSDRoO2hmMmFmPGJMPUZ1REoweWhMTG9JVjIwV3djNUd6QEg+VEZ4b1k+KEdVMwp6
bjN3Iz8lfFhNISFvZWUpN2VXcUdnU2xaTGJjUn5TMXtNdzswckNRTSZAaXhZQENjOT4kKVJDajtv
dVA8Rk9mc1QKenp7MF5KSyNxX0AhQCREOUJTNE9sTCZMenIhNlFJa0NXblRCZ0BaP2N5aDA4UTB9
QlVfMDY5aHU0RmR9WWp7dGQ8Cno5MnkxfDRqdXZXOGFYciFFRjMlbjxhS2dyNys1JVgxVn44Xmpy
TiFqQThgMkFpQ2dTST5fRl41Pl9GXjU+X0ZeNQp6PzcpJWdLLWFIM1J7clBzTldHYzMqd30mQ2Zu
KEt5dUo1Q0wyRkwybiN5MWw/NUlZYiVAVjZie2A/MmZOS2dWNVIKZTlLO1U5NCNXPGA0I1c9cHph
N307Q3g2JH1BXio0RHNydiFzJU94Zk4KCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZ3RrL2ZvbnRzL2ZvbnRzLmNvbmYgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2d0ay9mb250cy9mb250cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxZWE2YzZl
Y2U1OTZhMGFkMWI0NTNmMDY0ZTAwOWE4N2Y2MmIzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL2d0ay9mb250cy9mb250cy5jb25mCkBAIC0wLDAgKzEsNDE5IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBmb250Y29uZmlnIFNZU1RFTSAiZm9u
dHMuZHRkIj4KKzxmb250Y29uZmlnPgorCisgICAgPCEtLSBEdWUgdG8gcGF0ZW50IChodHRwOi8v
ZnJlZXR5cGUuc291cmNlZm9yZ2UubmV0L3BhdGVudHMuaHRtbCkKKyAgICAgICAgIGlzc3VlcyBo
aW50aW5nIGdpdmVzIGRpZmZlcmVudCByZXN1bHRzIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgICAg
IGZyZWV0eXBlIHZlcnNpb24gb2YgdGhlIGxpbnV4IGRpc3RyaWJ1dGlvbiwgYXZvaWRpbmcgaGlu
dGluZworICAgICAgICAgZ2l2ZXMgbW9yZSBjb25zaXN0ZW50IHJlc3VsdHMuIFdoZW4gYWxsIHRo
ZSBkaXN0cmlidXRpb25zCisgICAgICAgICByZWxlYXNlIGZyZWV0eXBlIHRoZSAyLjQsIHdoaWNo
IGVuYWJsZXMgYnkgZGVmYXVsdCB0aGUKKyAgICAgICAgIGhpbnRpbmcgbWV0aG9kIHRoYXQgd2Fz
IHBhdGVudGVkLCB3ZSBjb3VsZCB1bmRvIHRoaXMgY2hhbmdlCisgICAgICAgICBhbmQgdHJ5IHRo
ZSBoaW50aW5nIGFnYWluLiAtLT4KKyAgICA8bWF0Y2ggdGFyZ2V0PSJmb250Ij4KKyAgICAgICAg
PGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAgICAgIDxib29sPmZh
bHNlPC9ib29sPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4KKworICAgIDwhLS0gVGhp
cyBzeXN0ZW0gbWF5IGhhdmUgdHVybmVkIG9mZiBzZWxlY3Rpb24gb2YgYml0bWFwIGZvbnRzLCBi
dXQKKyAgICAgICAgIHdlIG11c3QgdHVybiBpdCBvbiBhZ2FpbiwgYmVjYXVzZSB3ZSB3YW50IHRv
IGJlIGFibGUgdG8gdGVzdCB0aGF0CisgICAgICAgICBiaXRtYXAgZm9udHMgd2l0aCBubyB2YWxp
ZCBlbmNvZGluZ3MgYXJlICpuZXZlciogc2VsZWN0ZWQgcmVnYXJkbGVzcworICAgICAgICAgb2Yg
dGhlIEZvbnRjb25maWcgc2V0dGluZ3MuIFNvIGZvcmNlIEZvbnRjb25maWcgdG8gc2VsZWN0IG91
ciBjcnVkZHkKKyAgICAgICAgIGJpdG1hcCBmb250IC0tPgorICAgIDxzZWxlY3Rmb250PgorICAg
ICAgICA8YWNjZXB0Zm9udD4KKyAgICAgICAgICAgIDxwYXR0ZXJuPgorICAgICAgICAgICAgICAg
IDxwYXRlbHQgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAgICAgICAgICAgPHN0cmluZz5Gb250
V2l0aE5vVmFsaWRFbmNvZGluZzwvc3RyaW5nPgorICAgICAgICAgICAgICAgIDwvcGF0ZWx0Pgor
ICAgICAgICAgICAgPC9wYXR0ZXJuPgorICAgICAgICA8L2FjY2VwdGZvbnQ+CisgICAgPC9zZWxl
Y3Rmb250PgorCisgICAgPCEtLSBUaGUgc2Fucy1zZXJpZiBmb250IHNob3VsZCBiZSBMaWJlcmF0
aW9uIFNlcmlmIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVz
dCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAgICAgICAgICA8c3RyaW5nPnNlcmlmPC9z
dHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2Rl
PSJhc3NpZ24iPgorICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIFNlcmlmPC9zdHJpbmc+
CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRl
cm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAgICAgICAg
ICA8c3RyaW5nPlRpbWVzPC9zdHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVkaXQg
bmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0
aW9uIFNlcmlmPC9zdHJpbmc+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAgIDxt
YXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5hbWU9ImZh
bWlseSI+CisgICAgICAgICAgICA8c3RyaW5nPlRpbWVzIE5ldyBSb21hbjwvc3RyaW5nPgorICAg
ICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4K
KyAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBTZXJpZjwvc3RyaW5nPgorICAgICAgICA8
L2VkaXQ+CisgICAgPC9tYXRjaD4KKworICAgIDwhLS0gVW50aWwgd2UgZmluZCBnb29kIGZvbnRz
IHRvIHVzZSBmb3IgY3Vyc2l2ZSBhbmQgZmFudGFzeQorICAgICAgICAganVzdCB1c2Ugb3VyIHNl
cmlmIGZvbnQuIC0tPgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVz
dCBxdWFsPSJhbnkiIG5hbWU9ImZhbWlseSI+CisgICAgICAgICAgICA8c3RyaW5nPmN1cnNpdmU8
L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1v
ZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8c3RyaW5nPkxpYmVyYXRpb24gU2VyaWY8L3N0cmlu
Zz4KKyAgICAgICAgPC9lZGl0PgorICAgIDwvbWF0Y2g+CisgICAgPG1hdGNoIHRhcmdldD0icGF0
dGVybiI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAg
ICAgIDxzdHJpbmc+ZmFudGFzeTwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxl
ZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAgICAgIDxzdHJpbmc+TGli
ZXJhdGlvbiBTZXJpZjwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4KKwor
ICAgIDwhLS0gVGhlIHNhbnMtc2VyaWYgZm9udCBzaG91bGQgYmUgTGliZXJhdGlvbiBTYW5zIC0t
PgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBxdWFsPSJhbnki
IG5hbWU9ImZhbWlseSI+CisgICAgICAgICAgICA8c3RyaW5nPnNhbnMgc2VyaWY8L3N0cmluZz4K
KyAgICAgICAgPC90ZXN0PgorICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2ln
biI+CisgICAgICAgICAgICA8c3RyaW5nPkxpYmVyYXRpb24gU2Fuczwvc3RyaW5nPgorICAgICAg
ICA8L2VkaXQ+CisgICAgPC9tYXRjaD4KKyAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KKyAg
ICAgICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJmYW1pbHkiPgorICAgICAgICAgICAgPHN0cmlu
Zz5zYW5zPC9zdHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iZmFt
aWx5IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIFNhbnM8
L3N0cmluZz4KKyAgICAgICAgPC9lZGl0PgorICAgIDwvbWF0Y2g+CisgICAgPCEtLSBXZSBuZWVk
IHRvIGVuc3VyZSB0aGF0IGxheW91dCB0ZXN0cyB0aGF0IHVzZSAiSGVsdmV0aWNhIiBkb24ndAor
ICAgICAgICBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgc2VyaWYgZm9udCAtLT4KKyAgICA8bWF0
Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KKyAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5
Ij4KKyAgICAgICAgPHN0cmluZz5IZWx2ZXRpY2E8L3N0cmluZz4KKyAgICAgIDwvdGVzdD4KKyAg
ICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAgPHN0cmluZz5M
aWJlcmF0aW9uIFNhbnM8L3N0cmluZz4KKyAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAg
IDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgPHRlc3QgcXVhbD0iYW55IiBuYW1lPSJm
YW1pbHkiPgorICAgICAgICA8c3RyaW5nPkFyaWFsPC9zdHJpbmc+CisgICAgICA8L3Rlc3Q+Cisg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgIDxzdHJpbmc+
TGliZXJhdGlvbiBTYW5zPC9zdHJpbmc+CisgICAgICA8L2VkaXQ+CisgICAgPC9tYXRjaD4KKyAg
ICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KKyAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0i
ZmFtaWx5Ij4KKyAgICAgICAgPHN0cmluZz5MdWNpZGEgR3JhbmRlPC9zdHJpbmc+CisgICAgICA8
L3Rlc3Q+CisgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+CisgICAgICAg
IDxzdHJpbmc+TGliZXJhdGlvbiBTYW5zPC9zdHJpbmc+CisgICAgICA8L2VkaXQ+CisgICAgPC9t
YXRjaD4KKworICAgIDwhLS0gVGhlIE1vbm9zcGFjZSBmb250IHNob3VsZCBiZSBMaWJlcmF0aW9u
IE1vbm8gLS0+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+CisgICAgICAgIDx0ZXN0IHF1
YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAgIDxzdHJpbmc+bW9ub3NwYWNlPC9z
dHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2Rl
PSJhc3NpZ24iPgorICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIE1vbm88L3N0cmluZz4K
KyAgICAgICAgPC9lZGl0PgorICAgIDwvbWF0Y2g+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVy
biI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5Ij4KKyAgICAgICAgICAg
IDxzdHJpbmc+bW9ubzwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5h
bWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlv
biBNb25vPC9zdHJpbmc+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAgIDwhLS0g
V2UgbmVlZCB0byBlbnN1cmUgdGhhdCBsYXlvdXQgdGVzdHMgdGhhdCB1c2UgIkNvdXJpZXIiLCAi
Q291cmllciBOZXciLAorICAgICAgICAgYW5kICJNb25hY28iIChhbGwgbW9ub3NwYWNlIGZvbnRz
KSBkb24ndCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgIHNlcmlmIGZvbnQgLS0+
CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+CisgICAgICA8dGVzdCBxdWFsPSJhbnkiIG5h
bWU9ImZhbWlseSI+CisgICAgICAgIDxzdHJpbmc+Q291cmllcjwvc3RyaW5nPgorICAgICAgPC90
ZXN0PgorICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICA8
c3RyaW5nPkxpYmVyYXRpb24gTW9ubzwvc3RyaW5nPgorICAgICAgPC9lZGl0PgorICAgIDwvbWF0
Y2g+CisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+CisgICAgICA8dGVzdCBxdWFsPSJhbnki
IG5hbWU9ImZhbWlseSI+CisgICAgICAgIDxzdHJpbmc+Q291cmllciBOZXc8L3N0cmluZz4KKyAg
ICAgIDwvdGVzdD4KKyAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KKyAg
ICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIE1vbm88L3N0cmluZz4KKyAgICAgIDwvZWRpdD4KKyAg
ICA8L21hdGNoPgorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgPHRlc3QgcXVh
bD0iYW55IiBuYW1lPSJmYW1pbHkiPgorICAgICAgICA8c3RyaW5nPk1vbmFjbzwvc3RyaW5nPgor
ICAgICAgPC90ZXN0PgorICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgor
ICAgICAgICA8c3RyaW5nPkxpYmVyYXRpb24gTW9ubzwvc3RyaW5nPgorICAgICAgPC9lZGl0Pgor
ICAgIDwvbWF0Y2g+CisKKyAgICA8IS0tIFRoZSBmb2xsb3dpbmcgaGludGluZyBzcGVjaWFsaXph
dGlvbnMgYXJlIGFkYXB0ZWQgZnJvbSB0aG9zZSBpbiB0aGUKKyAgICAgICAgIENocm9taXVtIHRl
c3Rfc2hlbGwuICBXZSB0cnkgdG8gZHVwbGljYXRlIHRoZWlyIGluY3JlZGlibHkgdGhvcm91Z2gK
KyAgICAgICAgIHRlc3RpbmcgaGVyZSAtLT4KKyAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4K
KyAgICAgICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+CisgICAgICAgICAgICA8
c3RyaW5nPk5vbkFudGlBbGlhc2VkU2Fuczwvc3RyaW5nPgorICAgICAgICA8L3Rlc3Q+CisgICAg
ICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAgICAgIDxzdHJp
bmc+TGliZXJhdGlvbiBTYW5zPC9zdHJpbmc+CisgICAgICAgIDwvZWRpdD4KKyAgICAgICAgPGVk
aXQgbmFtZT0iYW50aWFsaWFzIiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPGJvb2w+ZmFs
c2U8L2Jvb2w+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAgIAorICAgIDxtYXRj
aCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9
ImVxIj4KKyAgICAgICAgICAgIDxzdHJpbmc+U2xpZ2h0SGludGVkU2VyaWY8L3N0cmluZz4KKyAg
ICAgICAgPC90ZXN0PgorICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+
CisgICAgICAgICAgICA8c3RyaW5nPkxpYmVyYXRpb24gU2VyaWY8L3N0cmluZz4KKyAgICAgICAg
PC9lZGl0PgorICAgICAgICA8ZWRpdCBuYW1lPSJoaW50aW5nIiBtb2RlPSJhc3NpZ24iPgorICAg
ICAgICAgICAgPGJvb2w+dHJ1ZTwvYm9vbD4KKyAgICAgICAgPC9lZGl0PgorICAgICAgICA8ZWRp
dCBuYW1lPSJoaW50c3R5bGUiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8Y29uc3Q+aGlu
dHNsaWdodDwvY29uc3Q+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAgIAorICAg
IDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNv
bXBhcmU9ImVxIj4KKyAgICAgICAgICAgIDxzdHJpbmc+Tm9uSGludGVkU2Fuczwvc3RyaW5nPgor
ICAgICAgICA8L3Rlc3Q+CisgICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWdu
Ij4KKyAgICAgICAgICAgIDxzdHJpbmc+TGliZXJhdGlvbiBTYW5zPC9zdHJpbmc+CisgICAgICAg
IDwvZWRpdD4KKyAgICAgICAgPCEtLSBUaGVzZSBkZWxpYmVyYXRlbHkgY29udHJhZGljdCBlYWNo
IG90aGVyLiBUaGUgJ2hpbnRpbmcnIHByZWZlcmVuY2UKKyAgICAgICAgICAgICBzaG91bGQgdGFr
ZSBwcmlvcml0eSAtLT4KKyAgICAgICAgPGVkaXQgbmFtZT0iaGludHN0eWxlIiBtb2RlPSJhc3Np
Z24iPgorICAgICAgICAgICAgPGNvbnN0PmhpbnRmdWxsPC9jb25zdD4KKyAgICAgICAgPC9lZGl0
PgorICAgICAgICA8ZWRpdCBuYW1lPSJoaW50aW5nIiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAg
ICAgPGJvb2w+ZmFsc2U8L2Jvb2w+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAg
IAorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4iPgorICAgICAgICA8dGVzdCBuYW1lPSJmYW1p
bHkiIGNvbXBhcmU9ImVxIj4KKyAgICAgICAgICAgIDxzdHJpbmc+QXV0b2hpbnRlZFNlcmlmPC9z
dHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iZmFtaWx5IiBtb2Rl
PSJhc3NpZ24iPgorICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9uIFNlcmlmPC9zdHJpbmc+
CisgICAgICAgIDwvZWRpdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iaGludGluZyIgbW9kZT0iYXNz
aWduIj4KKyAgICAgICAgICAgIDxib29sPnRydWU8L2Jvb2w+CisgICAgICAgIDwvZWRpdD4KKyAg
ICAgICAgPGVkaXQgbmFtZT0iYXV0b2hpbnQiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8
Ym9vbD50cnVlPC9ib29sPgorICAgICAgICA8L2VkaXQ+CisgICAgICAgIDxlZGl0IG5hbWU9Imhp
bnRzdHlsZSIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAgICAgIDxjb25zdD5oaW50bWVkaXVtPC9j
b25zdD4KKyAgICAgICAgPC9lZGl0PgorICAgIDwvbWF0Y2g+CisgICAgCisgICAgPG1hdGNoIHRh
cmdldD0icGF0dGVybiI+CisgICAgICAgIDx0ZXN0IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEi
PgorICAgICAgICAgICAgPHN0cmluZz5IaW50ZWRTZXJpZjwvc3RyaW5nPgorICAgICAgICA8L3Rl
c3Q+CisgICAgICAgIDxlZGl0IG5hbWU9ImZhbWlseSIgbW9kZT0iYXNzaWduIj4KKyAgICAgICAg
ICAgIDxzdHJpbmc+TGliZXJhdGlvbiBTZXJpZjwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+Cisg
ICAgICAgIDxlZGl0IG5hbWU9ImhpbnRpbmciIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8
Ym9vbD50cnVlPC9ib29sPgorICAgICAgICA8L2VkaXQ+CisgICAgICAgIDxlZGl0IG5hbWU9ImF1
dG9oaW50IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPGJvb2w+ZmFsc2U8L2Jvb2w+Cisg
ICAgICAgIDwvZWRpdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iaGludHN0eWxlIiBtb2RlPSJhc3Np
Z24iPgorICAgICAgICAgICAgPGNvbnN0PmhpbnRtZWRpdW08L2NvbnN0PgorICAgICAgICA8L2Vk
aXQ+CisgICAgPC9tYXRjaD4KKyAgICAKKyAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4KKyAg
ICAgICAgPHRlc3QgbmFtZT0iZmFtaWx5IiBjb21wYXJlPSJlcSI+CisgICAgICAgICAgICA8c3Ry
aW5nPkZ1bGxBbmRBdXRvSGludGVkU2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0PgorICAg
ICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8c3Ry
aW5nPkxpYmVyYXRpb24gU2VyaWY8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0PgorICAgICAgICA8
ZWRpdCBuYW1lPSJoaW50aW5nIiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPGJvb2w+dHJ1
ZTwvYm9vbD4KKyAgICAgICAgPC9lZGl0PgorICAgICAgICA8ZWRpdCBuYW1lPSJhdXRvaGludCIg
bW9kZT0iYXNzaWduIj4KKyAgICAgICAgICAgIDxib29sPnRydWU8L2Jvb2w+CisgICAgICAgIDwv
ZWRpdD4KKyAgICAgICAgPGVkaXQgbmFtZT0iaGludHN0eWxlIiBtb2RlPSJhc3NpZ24iPgorICAg
ICAgICAgICAgPGNvbnN0PmhpbnRmdWxsPC9jb25zdD4KKyAgICAgICAgPC9lZGl0PgorICAgIDwv
bWF0Y2g+CisgICAgCisgICAgPG1hdGNoIHRhcmdldD0icGF0dGVybiI+CisgICAgICAgIDx0ZXN0
IG5hbWU9ImZhbWlseSIgY29tcGFyZT0iZXEiPgorICAgICAgICAgICAgPHN0cmluZz5TdWJwaXhl
bEVuYWJsZWRTYW5zPC9zdHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVkaXQgbmFt
ZT0iZmFtaWx5IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPHN0cmluZz5MaWJlcmF0aW9u
IFNhbnM8L3N0cmluZz4KKyAgICAgICAgPC9lZGl0PgorICAgICAgICA8ZWRpdCBuYW1lPSJyZ2Jh
IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPGNvbnN0PnJnYjwvY29uc3Q+CisgICAgICAg
IDwvZWRpdD4KKyAgICA8L21hdGNoPgorICAgIAorICAgIDxtYXRjaCB0YXJnZXQ9InBhdHRlcm4i
PgorICAgICAgICA8dGVzdCBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KKyAgICAgICAgICAg
IDxzdHJpbmc+U3VicGl4ZWxEaXNhYmxlZFNhbnM8L3N0cmluZz4KKyAgICAgICAgPC90ZXN0Pgor
ICAgICAgICA8ZWRpdCBuYW1lPSJmYW1pbHkiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8
c3RyaW5nPkxpYmVyYXRpb24gU2Fuczwvc3RyaW5nPgorICAgICAgICA8L2VkaXQ+CisgICAgICAg
IDxlZGl0IG5hbWU9InJnYmEiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8Y29uc3Q+bm9u
ZTwvY29uc3Q+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorCisgICAgPCEtLSBXZSBu
ZWVkIHRvIGVuYWJsZSBzaW11bGF0ZWQgYm9sZCB0byBmb3IgRGVqYVZ1IFNlcmlmIHRvIGVuc3Vy
ZSB0aGF0IHdlIGludGVycHJldAorICAgICAgICAgdGhpcyBwcm9wZXJ0eSBjb3JyZWN0bHkgaW46
IHBsYXRmb3JtL2d0ay9mb250cy9mb250Y29uZmlnLXN5bnRoZXRpYy1ib2xkLmh0bWwgLS0+Cisg
ICAgPG1hdGNoIHRhcmdldD0iZm9udCI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0i
ZmFtaWx5Ij4KKyAgICAgICAgICAgIDxzdHJpbmc+RGVqYVZ1IFNlcmlmPC9zdHJpbmc+CisgICAg
ICAgIDwvdGVzdD4KKyAgICAgICAgPHRlc3QgbmFtZT0id2VpZ2h0IiBjb21wYXJlPSJsZXNzX2Vx
Ij4KKyAgICAgICAgICAgIDxjb25zdD5tZWRpdW08L2NvbnN0PgorICAgICAgICA8L3Rlc3Q+Cisg
ICAgICAgIDx0ZXN0IHRhcmdldD0icGF0dGVybiIgbmFtZT0id2VpZ2h0IiBjb21wYXJlPSJtb3Jl
Ij4KKyAgICAgICAgICAgIDxjb25zdD5tZWRpdW08L2NvbnN0PgorICAgICAgICA8L3Rlc3Q+Cisg
ICAgICAgIDxlZGl0IG5hbWU9ImVtYm9sZGVuIiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAg
PGJvb2w+dHJ1ZTwvYm9vbD4KKyAgICAgICAgPC9lZGl0PgorICAgICAgICA8ZWRpdCBuYW1lPSJ3
ZWlnaHQiIG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8Y29uc3Q+Ym9sZDwvY29uc3Q+Cisg
ICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorCisgICAgPCEtLSBXZSBuZWVkIHRvIGVuYWJs
ZSBzaW11bGF0ZWQgb2JsaXF1ZSB0byBmb3IgRGVqYVZ1IFNlcmlmIHRvIGVuc3VyZSB0aGF0IHdl
IGludGVycHJldAorICAgICAgICAgdGhpcyBwcm9wZXJ0eSBjb3JyZWN0bHkgaW46IHBsYXRmb3Jt
L2d0ay9mb250cy9mb250Y29uZmlnLXN5bnRoZXRpYy1vYmxpcXVlLmh0bWwgLS0+CisgICAgPG1h
dGNoIHRhcmdldD0iZm9udCI+CisgICAgICAgIDx0ZXN0IHF1YWw9ImFueSIgbmFtZT0iZmFtaWx5
Ij4KKyAgICAgICAgICAgIDxzdHJpbmc+RGVqYVZ1IFNlcmlmPC9zdHJpbmc+CisgICAgICAgIDwv
dGVzdD4KKyAgICAgICAgPHRlc3QgbmFtZT0ic2xhbnQiPgorICAgICAgICAgICAgPGNvbnN0PnJv
bWFuPC9jb25zdD4KKyAgICAgICAgPC90ZXN0PgorICAgICAgICA8dGVzdCB0YXJnZXQ9InBhdHRl
cm4iIG5hbWU9InNsYW50IiBjb21wYXJlPSJub3RfZXEiPgorICAgICAgICAgICAgPGNvbnN0PnJv
bWFuPC9jb25zdD4KKyAgICAgICAgPC90ZXN0PgorICAgICAgICA8ZWRpdCBuYW1lPSJtYXRyaXgi
IG1vZGU9ImFzc2lnbiI+CisgICAgICAgICAgICA8dGltZXM+CisgICAgICAgICAgICAgICAgPG5h
bWU+bWF0cml4PC9uYW1lPgorICAgICAgICAgICAgICAgIDxtYXRyaXg+PGRvdWJsZT4xPC9kb3Vi
bGU+PGRvdWJsZT4wLjI8L2RvdWJsZT4KKyAgICAgICAgICAgICAgICAgICAgPGRvdWJsZT4wPC9k
b3VibGU+PGRvdWJsZT4xPC9kb3VibGU+CisgICAgICAgICAgICAgICAgPC9tYXRyaXg+CisgICAg
ICAgICAgICA8L3RpbWVzPgorICAgICAgICA8L2VkaXQ+CisgICAgICAgIDxlZGl0IG5hbWU9InNs
YW50IiBtb2RlPSJhc3NpZ24iPgorICAgICAgICAgICAgPGNvbnN0Pm9ibGlxdWU8L2NvbnN0Pgor
ICAgICAgICA8L2VkaXQ+CisgICAgICAgIDxlZGl0IG5hbWU9ImVtYmVkZGVkYml0bWFwIiBtb2Rl
PSJhc3NpZ24iPgorICAgICAgICAgICAgPGJvb2w+ZmFsc2U8L2Jvb2w+CisgICAgICAgIDwvZWRp
dD4KKyAgICA8L21hdGNoPgorCisgICAgPCEtLSBJZiB0aGlzIGZvbnQgZG9lc24ndCBoYXZlIGEg
ZmFtaWx5IG5hbWUgd2UgYXJlIGZhbGxpbmcgYmFjay4gVGhlIGZhbGxiYWNrCisgICAgICAgICBm
b250IHdpbGwgY2VydGFpbmx5IGJlIG9uZSBvZiB0aGUgRGVqYVZ1IGZvbnRzIHRoYXQgd2UgaGF2
ZSBpbiBvdXIKKyAgICAgICAgIGNvbGxlY3Rpb24gc2luY2UgdGhleSBoYXZlIGEgd2lkZSByYW5n
ZSBvZiBjaGFyYWN0ZXJzLiBGb250Y29uZmlnIG1pZ2h0CisgICAgICAgICBjaG9vc2UgRGVqYVZ1
IFNhbnMgb3IgRGVqYVZ1IFNlcmlmIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtLCBzbyB3ZSBmb3Jj
ZQorICAgICAgICAgdGhlIHVzZSBvZiBEZWphVnUgU2FucyBpbiB0aGVzZSBzaXR1YXRpb25zIHRv
IG1haW50YWluIGNvbnNpc3RlbmN5LiAtLT4KKyAgICA8bWF0Y2ggdGFyZ2V0PSJwYXR0ZXJuIj4K
KyAgICAgICAgPHRlc3QgcXVhbD0iYWxsIiBuYW1lPSJmYW1pbHkiIGNvbXBhcmU9ImVxIj4KKyAg
ICAgICAgICAgIDxzdHJpbmc+PC9zdHJpbmc+CisgICAgICAgIDwvdGVzdD4KKyAgICAgICAgPGVk
aXQgbmFtZT0iZmFtaWx5IiBtb2RlPSJhcHBlbmRfbGFzdCI+CisgICAgICAgICAgICA8c3RyaW5n
PkRlamFWdSBTYW5zPC9zdHJpbmc+CisgICAgICAgIDwvZWRpdD4KKyAgICA8L21hdGNoPgorCisg
ICAgPGNvbmZpZz4KKyAgICAgICAgPCEtLSBUaGVzZSBhcmUgdGhlIGRlZmF1bHQgVW5pY29kZSBj
aGFycyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBibGFuaworICAgICAgICAgICAgIGluIGZvbnRz
LiBBbGwgb3RoZXIgYmxhbmsgY2hhcnMgYXJlIGFzc3VtZWQgdG8gYmUgYnJva2VuIGFuZCB3b24n
dAorICAgICAgICAgICAgIGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIGNoYXJzZXRzIC0tPgorICAg
ICAgICA8Ymxhbms+CisgICAgICAgICAgICA8aW50PjB4MDAyMDwvaW50PiAgICA8IS0tIFNQQUNF
IC0tPgorICAgICAgICAgICAgPGludD4weDAwQTA8L2ludD4gICAgPCEtLSBOTy1CUkVBSyBTUEFD
RSAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgwMEFEPC9pbnQ+ICAgIDwhLS0gU09GVCBIWVBIRU4g
LS0+CisgICAgICAgICAgICA8aW50PjB4MDM0RjwvaW50PiAgICA8IS0tIENPTUJJTklORyBHUkFQ
SEVNRSBKT0lORVIgLS0+CisgICAgICAgICAgICA8aW50PjB4MDYwMDwvaW50PiAgICA8IS0tIEFS
QUJJQyBOVU1CRVIgU0lHTiAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgwNjAxPC9pbnQ+ICAgIDwh
LS0gQVJBQklDIFNJR04gU0FOQUggLS0+CisgICAgICAgICAgICA8aW50PjB4MDYwMjwvaW50PiAg
ICA8IS0tIEFSQUJJQyBGT09UTk9URSBNQVJLRVIgLS0+CisgICAgICAgICAgICA8aW50PjB4MDYw
MzwvaW50PiAgICA8IS0tIEFSQUJJQyBTSUdOIFNBRkhBIC0tPgorICAgICAgICAgICAgPGludD4w
eDA2REQ8L2ludD4gICAgPCEtLSBBUkFCSUMgRU5EIE9GIEFZQUggLS0+CisgICAgICAgICAgICA8
aW50PjB4MDcwRjwvaW50PiAgICA8IS0tIFNZUklBQyBBQkJSRVZJQVRJT04gTUFSSyAtLT4KKyAg
ICAgICAgICAgIDxpbnQ+MHgxMTVGPC9pbnQ+ICAgIDwhLS0gSEFOR1VMIENIT1NFT05HIEZJTExF
UiAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgxMTYwPC9pbnQ+ICAgIDwhLS0gSEFOR1VMIEpVTkdT
RU9ORyBGSUxMRVIgLS0+CisgICAgICAgICAgICA8aW50PjB4MTY4MDwvaW50PiAgICA8IS0tIE9H
SEFNIFNQQUNFIE1BUksgLS0+CisgICAgICAgICAgICA8aW50PjB4MTdCNDwvaW50PiAgICA8IS0t
IEtITUVSIFZPV0VMIElOSEVSRU5UIEFRIC0tPgorICAgICAgICAgICAgPGludD4weDE3QjU8L2lu
dD4gICAgPCEtLSBLSE1FUiBWT1dFTCBJTkhFUkVOVCBBQSAtLT4KKyAgICAgICAgICAgIDxpbnQ+
MHgxODBFPC9pbnQ+ICAgIDwhLS0gTU9OR09MSUFOIFZPV0VMIFNFUEFSQVRPUiAtLT4KKyAgICAg
ICAgICAgIDxpbnQ+MHgyMDAwPC9pbnQ+ICAgIDwhLS0gRU4gUVVBRCAtLT4KKyAgICAgICAgICAg
IDxpbnQ+MHgyMDAxPC9pbnQ+ICAgIDwhLS0gRU0gUVVBRCAtLT4KKyAgICAgICAgICAgIDxpbnQ+
MHgyMDAyPC9pbnQ+ICAgIDwhLS0gRU4gU1BBQ0UgLS0+CisgICAgICAgICAgICA8aW50PjB4MjAw
MzwvaW50PiAgICA8IS0tIEVNIFNQQUNFIC0tPgorICAgICAgICAgICAgPGludD4weDIwMDQ8L2lu
dD4gICAgPCEtLSBUSFJFRS1QRVItRU0gU1BBQ0UgLS0+CisgICAgICAgICAgICA8aW50PjB4MjAw
NTwvaW50PiAgICA8IS0tIEZPVVItUEVSLUVNIFNQQUNFIC0tPgorICAgICAgICAgICAgPGludD4w
eDIwMDY8L2ludD4gICAgPCEtLSBTSVgtUEVSLUVNIFNQQUNFIC0tPgorICAgICAgICAgICAgPGlu
dD4weDIwMDc8L2ludD4gICAgPCEtLSBGSUdVUkUgU1BBQ0UgLS0+CisgICAgICAgICAgICA8aW50
PjB4MjAwODwvaW50PiAgICA8IS0tIFBVTkNUVUFUSU9OIFNQQUNFIC0tPgorICAgICAgICAgICAg
PGludD4weDIwMDk8L2ludD4gICAgPCEtLSBUSElOIFNQQUNFIC0tPgorICAgICAgICAgICAgPGlu
dD4weDIwMEE8L2ludD4gICAgPCEtLSBIQUlSIFNQQUNFIC0tPgorICAgICAgICAgICAgPGludD4w
eDIwMEI8L2ludD4gICAgPCEtLSBaRVJPIFdJRFRIIFNQQUNFIC0tPgorICAgICAgICAgICAgPGlu
dD4weDIwMEM8L2ludD4gICAgPCEtLSBaRVJPIFdJRFRIIE5PTi1KT0lORVIgLS0+CisgICAgICAg
ICAgICA8aW50PjB4MjAwRDwvaW50PiAgICA8IS0tIFpFUk8gV0lEVEggSk9JTkVSIC0tPgorICAg
ICAgICAgICAgPGludD4weDIwMEU8L2ludD4gICAgPCEtLSBMRUZULVRPLVJJR0hUIE1BUksgLS0+
CisgICAgICAgICAgICA8aW50PjB4MjAwRjwvaW50PiAgICA8IS0tIFJJR0hULVRPLUxFRlQgTUFS
SyAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgyMDI4PC9pbnQ+ICAgIDwhLS0gTElORSBTRVBBUkFU
T1IgLS0+CisgICAgICAgICAgICA8aW50PjB4MjAyOTwvaW50PiAgICA8IS0tIFBBUkFHUkFQSCBT
RVBBUkFUT1IgLS0+CisgICAgICAgICAgICA8aW50PjB4MjAyQTwvaW50PiAgICA8IS0tIExFRlQt
VE8tUklHSFQgRU1CRURESU5HIC0tPgorICAgICAgICAgICAgPGludD4weDIwMkI8L2ludD4gICAg
PCEtLSBSSUdIVC1UTy1MRUZUIEVNQkVERElORyAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgyMDJD
PC9pbnQ+ICAgIDwhLS0gUE9QIERJUkVDVElPTkFMIEZPUk1BVFRJTkcgLS0+CisgICAgICAgICAg
ICA8aW50PjB4MjAyRDwvaW50PiAgICA8IS0tIExFRlQtVE8tUklHSFQgb3ZlcnJpZGUgLS0+Cisg
ICAgICAgICAgICA8aW50PjB4MjAyRTwvaW50PiAgICA8IS0tIFJJR0hULVRPLUxFRlQgb3ZlcnJp
ZGUgLS0+CisgICAgICAgICAgICA8aW50PjB4MjAyRjwvaW50PiAgICA8IS0tIE5BUlJPVyBOTy1C
UkVBSyBTUEFDRSAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgyMDVGPC9pbnQ+ICAgIDwhLS0gTUVE
SVVNIE1BVEhFTUFUSUNBTCBTUEFDRSAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgyMDYwPC9pbnQ+
ICAgIDwhLS0gV09SRCBKT0lORVIgLS0+CisgICAgICAgICAgICA8aW50PjB4MjA2MTwvaW50PiAg
ICA8IS0tIEZVTkNUSU9OIEFQUExJQ0FUSU9OIC0tPgorICAgICAgICAgICAgPGludD4weDIwNjI8
L2ludD4gICAgPCEtLSBJTlZJU0lCTEUgVElNRVMgLS0+CisgICAgICAgICAgICA8aW50PjB4MjA2
MzwvaW50PiAgICA8IS0tIElOVklTSUJMRSBTRVBBUkFUT1IgLS0+CisgICAgICAgICAgICA8aW50
PjB4MjA2QTwvaW50PiAgICA8IS0tIElOSElCSVQgU1lNTUVUUklDIFNXQVBQSU5HIC0tPgorICAg
ICAgICAgICAgPGludD4weDIwNkI8L2ludD4gICAgPCEtLSBBQ1RJVkFURSBTWU1NRVRSSUMgU1dB
UFBJTkcgLS0+CisgICAgICAgICAgICA8aW50PjB4MjA2QzwvaW50PiAgICA8IS0tIElOSElCSVQg
QVJBQklDIEZPUk0gU0hBUElORyAtLT4KKyAgICAgICAgICAgIDxpbnQ+MHgyMDZEPC9pbnQ+ICAg
IDwhLS0gQUNUSVZBVEUgQVJBQklDIEZPUk0gU0hBUElORyAtLT4KKyAgICAgICAgICAgIDxpbnQ+
MHgyMDZFPC9pbnQ+ICAgIDwhLS0gTkFUSU9OQUwgRElHSVQgU0hBUEVTIC0tPgorICAgICAgICAg
ICAgPGludD4weDIwNkY8L2ludD4gICAgPCEtLSBOT01JTkFMIERJR0lUIFNIQVBFUyAtLT4KKyAg
ICAgICAgICAgIDxpbnQ+MHgzMDAwPC9pbnQ+ICAgIDwhLS0gSURFT0dSQVBISUMgU1BBQ0UgLS0+
CisgICAgICAgICAgICA8aW50PjB4MzE2NDwvaW50PiAgICA8IS0tIEhBTkdVTCBGSUxMRVIgLS0+
CisgICAgICAgICAgICA8aW50PjB4RkVGRjwvaW50PiAgICA8IS0tIFpFUk8gV0lEVEggTk8tQlJF
QUsgU1BBQ0UgLS0+CisgICAgICAgICAgICA8aW50PjB4RkZBMDwvaW50PiAgICA8IS0tIEhBTEZX
SURUSCBIQU5HVUwgRklMTEVSIC0tPgorICAgICAgICAgICAgPGludD4weEZGRjk8L2ludD4gICAg
PCEtLSBJTlRFUkxJTkVBUiBBTk5PVEFUSU9OIEFOQ0hPUiAtLT4KKyAgICAgICAgICAgIDxpbnQ+
MHhGRkZBPC9pbnQ+ICAgIDwhLS0gSU5URVJMSU5FQVIgQU5OT1RBVElPTiBTRVBBUkFUT1IgLS0+
CisgICAgICAgICAgICA8aW50PjB4RkZGQjwvaW50PiAgICA8IS0tIElOVEVSTElORUFSIEFOTk9U
QVRJT04gVEVSTUlOQVRPUiAtLT4KKyAgICAgICAgPC9ibGFuaz4KKyAgICA8L2NvbmZpZz4KKzwv
Zm9udGNvbmZpZz4K
</data>
<flag name="review"
          id="253188"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>