<?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>170903</bug_id>
          
          <creation_ts>2017-04-17 08:57:27 -0700</creation_ts>
          <short_desc>[WK2] Add infrastructure and unit tests for file uploads using data interaction</short_desc>
          <delta_ts>2017-04-19 07:58:19 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1297917</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-04-17 08:57:27 -0700</bug_when>
    <thetext>Work towards &lt;rdar://problem/31314689&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298163</commentid>
    <comment_count>1</comment_count>
      <attachid>307338</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-04-17 21:54:49 -0700</bug_when>
    <thetext>Created attachment 307338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298593</commentid>
    <comment_count>2</comment_count>
      <attachid>307459</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-04-18 20:38:40 -0700</bug_when>
    <thetext>Created attachment 307459
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298603</commentid>
    <comment_count>3</comment_count>
      <attachid>307459</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-04-18 21:22:22 -0700</bug_when>
    <thetext>Comment on attachment 307459
Patch for landing

Clearing flags on attachment: 307459

Committed r215502: &lt;http://trac.webkit.org/changeset/215502&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307338</attachid>
            <date>2017-04-17 21:54:49 -0700</date>
            <delta_ts>2017-04-18 12:35:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170903-20170417215448.patch</filename>
            <type>text/plain</type>
            <size>25486</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1Mzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDAxZmE0YmQyNTk4N2U4
ZDE0ZmJmZjFjZmE5NWRiYTliZGE0ZTk3NC4uYzE0NjMyY2QyNjlhNWNiODliNWY1YWYxYzAyZWQ5
OGU2OWNlMzllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA0LTE3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEFkZCBp
bmZyYXN0cnVjdHVyZSBhbmQgdW5pdCB0ZXN0cyBmb3IgZmlsZSB1cGxvYWRzIHVzaW5nIGRhdGEg
aW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDkwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEzMTQ2ODk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VlIFRvb2xzL0NoYW5nZUxv
ZyBmb3IgbW9yZSBkZXRhaWxzLiBNYWtlcyBhIHNtYWxsIGFkanVzdG1lbnQgdG8gX3NpbXVsYXRl
RGF0YUludGVyYWN0aW9uVXBkYXRlZDogdG8gcmV0dXJuIGEKKyAgICAgICAgQk9PTCBpbmRpY2F0
aW5nIHdoZXRoZXIgb3Igbm90IHRvIGFsbG93IHRoZSBvcGVyYXRpb24gdG8gcHJvY2VlZC4gVGhp
cyBpcyBuZWNlc3NhcnkgZm9yIHRlc3Rpbmcgc2NlbmFyaW9zIHdoZXJlCisgICAgICAgIG11bHRp
cGxlIGZpbGVzIGFyZSBiZWluZyAiZGF0YSBpbnRlcmFjdGVkIiBvbnRvIGFuIGVsZW1lbnQuIFNl
ZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDg4MD4KKyAgICAg
ICAgZm9yIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgY2hhbmdlIHRoaXMgcGF0Y2ggaXMgdGVzdGlu
Zy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uVXBkYXRlZDpdKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorCiAyMDE3LTA0LTE1ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdIFN1
cHBvcnQgRGF0YVRyYW5zZmVyOjpmaWxlcygpIHdoZW4gcGVyZm9ybWluZyBhIERIVE1MIGRhdGEg
aW50ZXJhY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KaW5kZXggZTVkOTZlNjJjNDNmMjU2NThlMjNiNjRkNDZjNjNjNjgwNmQwMDM4Yi4u
MGE1ZmM3OWY4NTU3YTVlMzQxM2Y5NTQxNWVkYjNiNTkzZTc2NjgzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTUzODcsMTAgKzUz
ODcsMTIgQEAgc3RhdGljIFdlYkNvcmU6OlVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb24gdG9V
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKFVJU2UKICNlbmRpZgogfQogCi0tICh2b2lkKV9z
aW11bGF0ZURhdGFJbnRlcmFjdGlvblVwZGF0ZWQ6KGlkKWluZm8KKy0gKEJPT0wpX3NpbXVsYXRl
RGF0YUludGVyYWN0aW9uVXBkYXRlZDooaWQpaW5mbwogewogI2lmIEVOQUJMRShEQVRBX0lOVEVS
QUNUSU9OKQotICAgIFtfY29udGVudFZpZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uVXBkYXRl
ZDppbmZvXTsKKyAgICByZXR1cm4gW19jb250ZW50VmlldyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rp
b25VcGRhdGVkOmluZm9dOworI2Vsc2UKKyAgICByZXR1cm4gTk87CiAjZW5kaWYKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZh
dGUuaAppbmRleCBhMDI4NDNmNGIyNGM3MzJkMWMyNDY5YTFlNDQ4OWU3MmI0MTk2OTJhLi5jMWU1
NTJlZGMzMWI1ZDZjYmI4ZjVkYThmNDgxNGIyNGYwYmY0ODRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMzE5
LDcgKzMxOSw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0ltbWVkaWF0ZUFjdGlv
blR5cGUpIHsKIC0gKE5TRGljdGlvbmFyeSAqKV9wcm9wZXJ0aWVzT2ZMYXllcldpdGhJRDoodW5z
aWduZWQgbG9uZyBsb25nKWxheWVySUQgV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkp
OwogCiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFjdGlvbkVudGVyZWQ6KGlkKWluZm8gV0tf
QVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwotLSAodm9pZClfc2ltdWxhdGVEYXRhSW50
ZXJhY3Rpb25VcGRhdGVkOihpZClpbmZvIFdLX0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEp
KTsKKy0gKEJPT0wpX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uVXBkYXRlZDooaWQpaW5mbyBXS19B
UElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRl
cmFjdGlvblBlcmZvcm1PcGVyYXRpb246KGlkKWluZm8gV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tf
SU9TX1RCQSkpOwogLSAodm9pZClfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25FbmRlZDooaWQpaW5m
byBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7CiAtICh2b2lkKV9zaW11bGF0ZURh
dGFJbnRlcmFjdGlvblNlc3Npb25EaWRFbmQ6KGlkKXNlc3Npb24gV0tfQVBJX0FWQUlMQUJMRShp
b3MoV0tfSU9TX1RCQSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5kZXggZWUyMDVkYjEwMzUyZDQyNThlYTc1
ZmQ4YjViMGQxNzAyOTdhMjc1MC4uOWYzYWRkOTdiYjNjNWZlOWZiOGMzMTcxNDdmNWQyNmJhYWFl
ZDM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCkBAIC0yOTUsNyArMjk1LDcgQEAgc3RydWN0IFdLQXV0b0Nv
cnJlY3Rpb25EYXRhIHsKIC0gKHZvaWQpX2RpZENoYW5nZURhdGFJbnRlcmFjdGlvbkNhcmV0UmVj
dDooQ0dSZWN0KXByZXZpb3VzUmVjdCBjdXJyZW50UmVjdDooQ0dSZWN0KXJlY3Q7CiAKIC0gKHZv
aWQpX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uRW50ZXJlZDooaWQpaW5mbzsKLS0gKHZvaWQpX3Np
bXVsYXRlRGF0YUludGVyYWN0aW9uVXBkYXRlZDooaWQpaW5mbzsKKy0gKEJPT0wpX3NpbXVsYXRl
RGF0YUludGVyYWN0aW9uVXBkYXRlZDooaWQpaW5mbzsKIC0gKHZvaWQpX3NpbXVsYXRlRGF0YUlu
dGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbjooaWQpaW5mbzsKIC0gKHZvaWQpX3NpbXVsYXRlRGF0
YUludGVyYWN0aW9uRW5kZWQ6KGlkKWluZm87CiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFj
dGlvblNlc3Npb25EaWRFbmQ6KGlkKXNlc3Npb247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzZkNzk4MTNhYmRmOTQxOTkxYTAyYWE3ZDkzZmRl
M2NhMWI1Y2RmZi4uZjBlMDZkYzBjMmI2ZDJiNTk4NDA0MGQwZmZjNzgwYTcxNWU3NGM5YyAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU2IEBACisyMDE3LTA0LTE3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgorCisgICAgICAgIFtXSzJdIEFkZCBpbmZyYXN0cnVjdHVyZSBhbmQgdW5pdCB0ZXN0cyBmb3Ig
ZmlsZSB1cGxvYWRzIHVzaW5nIGRhdGEgaW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDkwMworICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzEzMTQ2ODk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyA1IG5ldyB1bml0IHRlc3RzIGNvdmVyaW5nIGRpZmZlcmVudCBjYXNlcyBvZiB1
cGxvYWRpbmcgZmlsZXMgdGhyb3VnaCBkYXRhIGludGVyYWN0aW9uLCBhcyB3ZWxsIGFzCisgICAg
ICAgIGluZnJhc3RydWN0dXJlIGZvciBzaW11bGF0aW5nIFVJSXRlbVByb3ZpZGVycyB0aGF0IGxv
YWQgZmlsZSBkYXRhLiBNYWtlcyBhIGZldyBhZGp1c3RtZW50cyB0byB0aGUKKyAgICAgICAgRGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsb25nIHRoZSB3YXksIGRldGFpbGVkIGluIHRoZSBwZXIt
bWV0aG9kIGFubm90YXRpb25zIGJlbG93LiBTZWUKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzA4ODA+IGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhl
IGNoYW5nZSB0aGlzIHBhdGNoIGlzIHRlc3RpbmcuCisKKyAgICAgICAgTmV3IHRlc3RzOgorICAg
ICAgICBEYXRhSW50ZXJhY3Rpb25UZXN0cy5FeHRlcm5hbFNvdXJjZUltYWdlVG9GaWxlSW5wdXQK
KyAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VIVE1MVG9VcGxvYWRB
cmVhCisgICAgICAgIERhdGFJbnRlcmFjdGlvblRlc3RzLkV4dGVybmFsU291cmNlSW1hZ2VBbmRI
VE1MVG9TaW5nbGVGaWxlSW5wdXQKKyAgICAgICAgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJu
YWxTb3VyY2VJbWFnZUFuZEhUTUxUb011bHRpcGxlRmlsZUlucHV0CisgICAgICAgIERhdGFJbnRl
cmFjdGlvblRlc3RzLkV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9VcGxvYWRBcmVhCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0cy5tbToK
KyAgICAgICAgKHRlc3RJY29uSW1hZ2UpOgorICAgICAgICAodGVtcG9yYXJ5VVJMRm9yRGF0YUlu
dGVyYWN0aW9uRmlsZUxvYWQpOgorICAgICAgICAoY2xlYW5VcERhdGFJbnRlcmFjdGlvblRlbXBv
cmFyeVBhdGgpOgorCisgICAgICAgIENyZWF0ZXMgYW5kIHRlYXJzIGRvd24gdGVtcG9yYXJ5IGZp
bGUgZGlyZWN0b3JpZXMgZm9yIHRlc3RpbmcgZGF0YSBpbnRlcmFjdGlvbi4KKworICAgICAgICAo
LVtVSUl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOndpdGhEYXRhOmZpbGVuYW1lOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLmg6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1t
OgorCisgICAgICAgIE1ha2UgbmVjZXNzYXJ5IGNoYW5nZXMgdG8gYmUgYWJsZSB0byB0ZXN0IHdo
YXQgaGFwcGVucyB3aGVuIGRhdGEgaW50ZXJhY3Rpb24gZW5kcyBvdmVyIGFuIGVsZW1lbnQgd2l0
aCBubworICAgICAgICBvcGVyYXRpb24uIFByZXZpb3VzbHksIHdlIHdvdWxkIGFsd2F5cyBzaW11
bGF0ZSBwZXJmb3JtaW5nIGEgZGF0YSBpbnRlcmFjdGlvbiBvcGVyYXRpb24gd2hlbiBlbmRpbmcg
dGhlCisgICAgICAgIHNpbXVsYXRpb24sIGJ1dCB0aGlzIGNhdXNlcyB1cyB0byB3YWl0IGluZGVm
aW5pdGVseSBmb3IgYSBkYXRhIG9wZXJhdGlvbiByZXNwb25zZSB0byBhcnJpdmUgaW4gdGhlIFVJ
IHByb2Nlc3MuCisgICAgICAgIEluc3RlYWQsIHdlIG5lZWQgdG8gbm90ZSB3aGV0aGVyIG9yIG5v
dCB0aGUgY29udGVudCB2aWV3IGlzIGFsbG93aW5nIGRhdGEgaW50ZXJhY3Rpb24sIGFuZCBvbmx5
IHBlcmZvcm0gYW4KKyAgICAgICAgb3BlcmF0aW9uIGFuZCB3YWl0IGZvciB0aGUgLWRpZFBlcmZv
cm0gY2FsbCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBhbGxvd2VkLiBPdGhlcndpc2UsIHdlIGltbWVk
aWF0ZWx5IHRyYW5zaXRpb24KKyAgICAgICAgdGhlIHBoYXNlIHRvIENhbmNlbGxlZCBhbmQgZW5k
IHRoZSBydW4uCisKKyAgICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIF9yZXNldFNp
bXVsYXRlZFN0YXRlXSk6CisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5G
cm9tOnRvOl0pOgorICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgX2NvbmNsdWRl
RGF0YUludGVyYWN0aW9uQW5kUGVyZm9ybU9wZXJhdGlvbklmTmVjZXNzYXJ5XSk6CisgICAgICAg
ICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBfYWR2YW5jZVByb2dyZXNzXSk6CisgICAgICAg
ICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBleHRlcm5hbEl0ZW1Qcm92aWRlcnNdKToKKyAg
ICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVy
czpdKToKKworICAgICAgICBQcmV2aW91c2x5LCB3ZSBoYXJkLWNvZGVkIERhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciB0byBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgZXh0ZXJuYWwgaXRlbSBwcm92aWRl
ci4gSW4gb3JkZXIgdG8KKyAgICAgICAgdGVzdCB0aGUgc2NlbmFyaW8gd2hlcmUgbXVsdGlwbGUg
ZmlsZXMgYXJlIGJlaW5nICJkYXRhIGludGVyYWN0ZWQiIGludG8gYSBmaWxlLXR5cGUgaW5wdXQs
IHdlIGdlbmVyYWxpemUgdGhpcyB0bworICAgICAgICB0YWtlIG11bHRpcGxlIGl0ZW0gcHJvdmlk
ZXJzLgorCisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBleHRlcm5hbEl0ZW1Q
cm92aWRlcl0pOiBEZWxldGVkLgorICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
c2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXI6XSk6IERlbGV0ZWQuCisKIDIwMTctMDQtMTQgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBhcmNoaXRlY3R1cmVz
IGluIHhjY29uZmlnIGZpbGVzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L2lvcy9EYXRhSW50ZXJhY3Rpb25UZXN0cy5tbQppbmRleCBmZmM1YWQ1NWJkMDM1ZmE1NDVlNWFh
MGU1ZTAyODE1YmJmZDJlNmFmLi4wZjMyYjdjZDBiM2JlZTE4ZmM4YjljOGRhNGU1Y2QzZTFhMjUw
NzdmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJh
Y3Rpb25UZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50
ZXJhY3Rpb25UZXN0cy5tbQpAQCAtMzcsNiArMzcsNDcgQEAKICNpbXBvcnQgPFdlYktpdC9XS1dl
YlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L19XS1Byb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oPgogCit0eXBlZGVmIHZvaWQgKF5GaWxlTG9hZENvbXBsZXRpb25C
bG9jaykoTlNVUkwgKiwgQk9PTCwgTlNFcnJvciAqKTsKKworc3RhdGljIFVJSW1hZ2UgKnRlc3RJ
Y29uSW1hZ2UoKQoreworICAgIHJldHVybiBbVUlJbWFnZSBpbWFnZU5hbWVkOkAiVGVzdFdlYktp
dEFQSS5yZXNvdXJjZXMvaWNvbi5wbmciXTsKK30KKworc3RhdGljIE5TVVJMICp0ZW1wb3JhcnlV
UkxGb3JEYXRhSW50ZXJhY3Rpb25GaWxlTG9hZChOU1N0cmluZyAqdGVtcG9yYXJ5RmlsZU5hbWUp
Cit7CisgICAgTlNTdHJpbmcgKnRlbXBvcmFyeURpcmVjdG9yeVBhdGggPSBbTlNUZW1wb3JhcnlE
aXJlY3RvcnkoKSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJkYXRhLWludGVyYWN0
aW9uIl07CisgICAgaWYgKCFbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlz
dHNBdFBhdGg6dGVtcG9yYXJ5RGlyZWN0b3J5UGF0aF0pCisgICAgICAgIFtbTlNGaWxlTWFuYWdl
ciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRQYXRoOnRlbXBvcmFyeURpcmVjdG9y
eVBhdGggd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJv
cjpuaWxdOworICAgIHJldHVybiBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOlt0ZW1wb3JhcnlEaXJl
Y3RvcnlQYXRoIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDp0ZW1wb3JhcnlGaWxlTmFt
ZV1dOworfQorCitzdGF0aWMgdm9pZCBjbGVhblVwRGF0YUludGVyYWN0aW9uVGVtcG9yYXJ5UGF0
aCgpCit7CisgICAgTlNBcnJheSAqdGVtcG9yYXJ5RGlyZWN0b3J5Q29udGVudHMgPSBbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvbnRlbnRzT2ZEaXJlY3RvcnlBdFVSTDpbTlNVUkwg
ZmlsZVVSTFdpdGhQYXRoOk5TVGVtcG9yYXJ5RGlyZWN0b3J5KCldIGluY2x1ZGluZ1Byb3BlcnRp
ZXNGb3JLZXlzOm5pbCBvcHRpb25zOjAgZXJyb3I6bmlsXTsKKyAgICBmb3IgKE5TVVJMICp1cmwg
aW4gdGVtcG9yYXJ5RGlyZWN0b3J5Q29udGVudHMpIHsKKyAgICAgICAgaWYgKFt1cmwubGFzdFBh
dGhDb21wb25lbnQgcmFuZ2VPZlN0cmluZzpAImRhdGEtaW50ZXJhY3Rpb24iXS5sb2NhdGlvbiAh
PSBOU05vdEZvdW5kKQorICAgICAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSByZW1vdmVJdGVtQXRVUkw6dXJsIGVycm9yOm5pbF07CisgICAgfQorfQorCitAaW1wbGVtZW50
YXRpb24gVUlJdGVtUHJvdmlkZXIgKERhdGFJbnRlcmFjdGlvblRlc3RzKQorCistICh2b2lkKXJl
Z2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopdHlw
ZUlkZW50aWZpZXIgd2l0aERhdGE6KE5TRGF0YSAqKWRhdGEgZmlsZW5hbWU6KE5TU3RyaW5nICop
ZmlsZW5hbWUKK3sKKyAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXRhaW5lZERhdGEgPSBkYXRhOwor
ICAgIFJldGFpblB0cjxOU1VSTD4gcmV0YWluZWRUZW1wb3JhcnlVUkwgPSB0ZW1wb3JhcnlVUkxG
b3JEYXRhSW50ZXJhY3Rpb25GaWxlTG9hZChmaWxlbmFtZSk7CisgICAgW3NlbGYgcmVnaXN0ZXJG
aWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp0eXBlSWRlbnRpZmllciBmaWxlT3B0
aW9uczowIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlB
bGwgbG9hZEhhbmRsZXI6IFtyZXRhaW5lZERhdGEsIHJldGFpbmVkVGVtcG9yYXJ5VVJMXSAoRmls
ZUxvYWRDb21wbGV0aW9uQmxvY2sgYmxvY2spIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAgICAgIFty
ZXRhaW5lZERhdGEgd3JpdGVUb0ZpbGU6W3JldGFpbmVkVGVtcG9yYXJ5VVJMIHBhdGhdIGF0b21p
Y2FsbHk6WUVTXTsKKyAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSwgW3JldGFpbmVkVGVtcG9yYXJ5VVJMLCBjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2NrUHRy
KGJsb2NrKV0geworICAgICAgICAgICAgY2FwdHVyZWRCbG9jayhyZXRhaW5lZFRlbXBvcmFyeVVS
TC5nZXQoKSwgTk8sIG5pbCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gbmlsOworICAg
IH1dOworfQorCitAZW5kCisKIEBpbXBsZW1lbnRhdGlvbiBUZXN0V0tXZWJWaWV3IChEYXRhSW50
ZXJhY3Rpb25UZXN0cykKIAogLSAoQk9PTCllZGl0b3JDb250YWluc0ltYWdlRWxlbWVudApAQCAt
MjczLDYgKzMxNCwxMTggQEAgVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRW50ZXJBbmRMZWF2
ZUV2ZW50cykKICAgICBjaGVja1NlbGVjdGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgXSwgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7CiB9CiAKK1RFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VUb0ZpbGVJbnB1dCkKK3sKKyAg
ICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Cisg
ICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRp
bmciXTsKKworICAgIFJldGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gc2ltdWxhdGVkSW1hZ2VJdGVt
UHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBO
U0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFn
ZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdp
dGhEYXRhOmltYWdlRGF0YSBmaWxlbmFtZTpAImltYWdlLnBuZyJdOworCisgICAgUmV0YWluUHRy
PERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRv
cHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Ondl
YlZpZXcuZ2V0KCldKTsKKyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsKKyAg
ICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAxMDAp
IHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFsdWUg
PSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVlIl07
CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmlu
Zyk7CisKKyAgICBjbGVhblVwRGF0YUludGVyYWN0aW9uVGVtcG9yYXJ5UGF0aCgpOworfQorCitU
RVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUhUTUxUb1VwbG9hZEFyZWEp
Cit7CisgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUt
dXBsb2FkaW5nIl07CisKKyAgICBSZXRhaW5QdHI8VUlJdGVtUHJvdmlkZXI+IHNpbXVsYXRlZEhU
TUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
KyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4i
IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbc2ltdWxhdGVk
SFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlm
aWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhIGZpbGVuYW1lOkAi
aW5kZXguaHRtbCJdOworCisgICAgUmV0YWluUHRyPERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4g
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbZGF0YUlu
dGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRI
VE1MSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Ig
cnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsK
KworICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoInRleHQv
aHRtbCIsIG91dHB1dFZhbHVlLlVURjhTdHJpbmcpOworCisgICAgY2xlYW5VcERhdGFJbnRlcmFj
dGlvblRlbXBvcmFyeVBhdGgoKTsKK30KKworVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0
ZXJuYWxTb3VyY2VJbWFnZUFuZEhUTUxUb1NpbmdsZUZpbGVJbnB1dCkKK3sKKyAgICBSZXRhaW5Q
dHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKwor
ICAgIFJldGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gc2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmlt
YWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdEljb25JbWFnZSgpLCAwLjUp
OworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRh
dGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVKUEVHIHdpdGhEYXRhOmlt
YWdlRGF0YSBmaWxlbmFtZTpAImltYWdlLnBuZyJdOworCisgICAgUmV0YWluUHRyPFVJSXRlbVBy
b3ZpZGVyPiBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3Zp
ZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9IFtAIjxib2R5IGNvbnRl
bnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGlu
Z107CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50
YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpo
dG1sRGF0YSBmaWxlbmFtZTpAImluZGV4Lmh0bWwiXTsKKworICAgIFJldGFpblB0cjxEYXRhSW50
ZXJhY3Rpb25TaW11bGF0b3I+IGRhdGFJbnRlcmFjdGlvblNpbXVsYXRvciA9IGFkb3B0TlMoW1tE
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3Lmdl
dCgpXSk7CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwgc2ltdWxhdGVkSW1hZ2VJ
dGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDEwMCldOworCisg
ICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgiIiwgb3V0cHV0
VmFsdWUuVVRGOFN0cmluZyk7CisKKyAgICBjbGVhblVwRGF0YUludGVyYWN0aW9uVGVtcG9yYXJ5
UGF0aCgpOworfQorCitURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUlt
YWdlQW5kSFRNTFRvTXVsdGlwbGVGaWxlSW5wdXQpCit7CisgICAgUmV0YWluUHRyPFRlc3RXS1dl
YlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAImZpbGUtdXBsb2FkaW5nIl07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImlucHV0LnNldEF0dHJpYnV0ZSgnbXVsdGlw
bGUnLCAnJykiXTsKKworICAgIFJldGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gc2ltdWxhdGVkSW1h
Z2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsK
KyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVzdElj
b25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdpc3Rl
ckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVK
UEVHIHdpdGhEYXRhOmltYWdlRGF0YSBmaWxlbmFtZTpAImltYWdlLnBuZyJdOworCisgICAgUmV0
YWluUHRyPFVJSXRlbVByb3ZpZGVyPiBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHRO
UyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CisgICAgTlNEYXRhICpodG1sRGF0YSA9
IFtAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107CisgICAgW3NpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgcmVnaXN0
ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKilrVVRUeXBl
SFRNTCB3aXRoRGF0YTpodG1sRGF0YSBmaWxlbmFtZTpAImluZGV4Lmh0bWwiXTsKKworICAgIFJl
dGFpblB0cjxEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3I+IGRhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlldzp3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlci5nZXQoKSwg
c2ltdWxhdGVkSW1hZ2VJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CisgICAgW2RhdGFJbnRlcmFjdGlv
blNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwgMTAwKSB0bzpDR1BvaW50TWFrZSgx
MDAsIDEwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1ZSJdOworICAgIEVYUEVDVF9XS19T
VFJFUSgiaW1hZ2UvanBlZywgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7CisK
KyAgICBjbGVhblVwRGF0YUludGVyYWN0aW9uVGVtcG9yYXJ5UGF0aCgpOworfQorCitURVNUKERh
dGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvVXBsb2FkQXJl
YSkKK3sKKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmls
ZS11cGxvYWRpbmciXTsKKworICAgIFJldGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gc2ltdWxhdGVk
SW1hZ2VJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKKyAgICBOU0RhdGEgKmltYWdlRGF0YSA9IFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVz
dEljb25JbWFnZSgpLCAwLjUpOworICAgIFtzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciByZWdp
c3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5
cGVKUEVHIHdpdGhEYXRhOmltYWdlRGF0YSBmaWxlbmFtZTpAImltYWdlLnBuZyJdOworCisgICAg
UmV0YWluUHRyPFVJSXRlbVByb3ZpZGVyPiBmaXJzdFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmZp
cnN0SFRNTERhdGEgPSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5n
RW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtmaXJzdFNpbXVsYXRlZEhUTUxJ
dGVtUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjoo
TlNTdHJpbmcgKilrVVRUeXBlSFRNTCB3aXRoRGF0YTpmaXJzdEhUTUxEYXRhIGZpbGVuYW1lOkAi
aW5kZXguaHRtbCJdOworCisgICAgUmV0YWluUHRyPFVJSXRlbVByb3ZpZGVyPiBzZWNvbmRTaW11
bGF0ZWRIVE1MSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBp
bml0XSk7CisgICAgTlNEYXRhICpzZWNvbmRIVE1MRGF0YSA9IFtAIjxodG1sPjxib2R5PmhlbGxv
IHdvcmxkPC9ib2R5PjwvaHRtbD4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29k
aW5nXTsKKyAgICBbc2Vjb25kU2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVS
ZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdp
dGhEYXRhOnNlY29uZEhUTUxEYXRhIGZpbGVuYW1lOkAiaW5kZXguaHRtbCJdOworCisgICAgUmV0
YWluUHRyPERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJW
aWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSwg
Zmlyc3RTaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpLCBzZWNvbmRTaW11bGF0ZWRIVE1M
SXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50TWFrZSgyMDAsIDMwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKKwor
ICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImltYWdlL2pw
ZWcsIHRleHQvaHRtbCwgdGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRGOFN0cmluZyk7CisKKyAg
ICBjbGVhblVwRGF0YUludGVyYWN0aW9uVGVtcG9yYXJ5UGF0aCgpOworfQorCiBURVNUKERhdGFJ
bnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZVVURjhQbGFpblRleHRPbmx5KQogewogICAg
IFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKQEAg
LTI4Niw3ICs0MzksNyBAQCBURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJj
ZVVURjhQbGFpblRleHRPbmx5KQogICAgICAgICBjb21wbGV0aW9uQmxvY2soW3RleHRQYXlsb2Fk
IGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSwgbmlsKTsKICAgICAgICAg
cmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRlUHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAw
XTsKICAgICB9XTsKLSAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRl
bVByb3ZpZGVyOnNpbXVsYXRlZEl0ZW1Qcm92aWRlci5nZXQoKV07CisgICAgW2RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVBy
b3ZpZGVyLmdldCgpIF1dOwogICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpD
R1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAzMDApXTsKICAgICBFWFBF
Q1RfV0tfU1RSRVEodGV4dFBheWxvYWQuVVRGOFN0cmluZywgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImVkaXRvci50ZXh0Q29udGVudCJdLlVURjhTdHJpbmcpOwogICAg
IGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAx
LCAxOTM2LCAyMjcpIF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25S
ZWN0c10pOwpAQCAtMjk3LDE1ICs0NTAsMTQgQEAgVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywg
RXh0ZXJuYWxTb3VyY2VKUEVHT25seSkKICAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRU
ZXN0UGFnZU5hbWVkOkAiYXV0b2ZvY3VzLWNvbnRlbnRlZGl0YWJsZSJdOwogCi0gICAgVUlJbWFn
ZSAqdGVzdEltYWdlID0gW1VJSW1hZ2UgaW1hZ2VOYW1lZDpAIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzL2ljb24ucG5nIl07CiAgICAgUmV0YWluUHRyPERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4g
ZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKICAgICBSZXRhaW5Q
dHI8VUlJdGVtUHJvdmlkZXI+IHNpbXVsYXRlZEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwogICAgIFtzaW11bGF0ZWRJdGVtUHJvdmlkZXIgcmVn
aXN0ZXJEYXRhUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooX19icmlkZ2UgTlNTdHJp
bmcgKilrVVRUeXBlSlBFRyBvcHRpb25zOm5pbCBsb2FkSGFuZGxlcjpeTlNQcm9ncmVzcyAqKFVJ
SXRlbVByb3ZpZGVyRGF0YUxvYWRDb21wbGV0aW9uQmxvY2sgY29tcGxldGlvbkJsb2NrKQogICAg
IHsKLSAgICAgICAgY29tcGxldGlvbkJsb2NrKFVJSW1hZ2VKUEVHUmVwcmVzZW50YXRpb24odGVz
dEltYWdlLCAwLjUpLCBuaWwpOworICAgICAgICBjb21wbGV0aW9uQmxvY2soVUlJbWFnZUpQRUdS
ZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSksIG5pbCk7CiAgICAgICAgIHJldHVy
biBbTlNQcm9ncmVzcyBkaXNjcmV0ZVByb2dyZXNzV2l0aFRvdGFsVW5pdENvdW50OjEwMF07CiAg
ICAgfV07Ci0gICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcjpzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCldOworICAgIFtkYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEl0ZW1Qcm92aWRl
ci5nZXQoKSBdXTsKICAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2lu
dE1ha2UoMzAwLCA0MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMzAwKV07CiAgICAgRVhQRUNUX1RS
VUUoW3dlYlZpZXcgZWRpdG9yQ29udGFpbnNJbWFnZUVsZW1lbnRdKTsKICAgICBjaGVja1NlbGVj
dGlvblJlY3RzV2l0aExvZ2dpbmcoQFsgbWFrZUNHUmVjdFZhbHVlKDEsIDIwMSwgMjE1LCAxNzQp
IF0sIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZmluYWxTZWxlY3Rpb25SZWN0c10pOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9y
LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaApp
bmRleCAzMzZiZGZkODkxNTU2YzMxMTc2ODgzNjU3MmJjMDU1YjZlYzE3ZmVmLi5iMmNhNDdlNmQz
YThjMmQ4OTdkMjQzNjI1OTNmOTY2MGNhOGIzNTVkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaApAQCAtNTQsMTIgKzU0LDEzIEBA
IHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIERhdGFJbnRlcmFjdGlvblBoYXNlKSB7CiAgICAg
UmV0YWluUHRyPE1vY2tEYXRhSW50ZXJhY3Rpb25TZXNzaW9uPiBfZGF0YUludGVyYWN0aW9uU2Vz
c2lvbjsKICAgICBSZXRhaW5QdHI8TW9ja0RhdGFPcGVyYXRpb25TZXNzaW9uPiBfZGF0YU9wZXJh
dGlvblNlc3Npb247CiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBfb2JzZXJ2ZWRFdmVu
dE5hbWVzOwotICAgIFJldGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gX2V4dGVybmFsSXRlbVByb3Zp
ZGVyOworICAgIFJldGFpblB0cjxOU0FycmF5PiBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJzOwogICAg
IFJldGFpblB0cjxOU0FycmF5ICo+IF9zb3VyY2VJdGVtUHJvdmlkZXJzOwogICAgIFJldGFpblB0
cjxOU0FycmF5ICo+IF9maW5hbFNlbGVjdGlvblJlY3RzOwogICAgIENHUG9pbnQgX3N0YXJ0TG9j
YXRpb247CiAgICAgQ0dQb2ludCBfZW5kTG9jYXRpb247CiAKKyAgICBCT09MIF9zaG91bGRQZXJm
b3JtT3BlcmF0aW9uOwogICAgIGRvdWJsZSBfY3VycmVudFByb2dyZXNzOwogICAgIGJvb2wgX2lz
RG9uZVdpdGhDdXJyZW50UnVuOwogICAgIERhdGFJbnRlcmFjdGlvblBoYXNlIF9waGFzZTsKQEAg
LTcxLDcgKzcyLDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgRGF0YUludGVyYWN0aW9u
UGhhc2UpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHNob3VsZEVuc3VyZVVJQXBwbGlj
YXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYykgQmxvY2tQdHI8Qk9PTChfV0tBY3RpdmF0ZWRF
bGVtZW50SW5mbyAqKT4gc2hvd0N1c3RvbUFjdGlvblNoZWV0QmxvY2s7CiBAcHJvcGVydHkgKG5v
bmF0b21pYykgQmxvY2tQdHI8TlNBcnJheSAqKE5TQXJyYXkgKik+IGNvbnZlcnRJdGVtUHJvdmlk
ZXJzQmxvY2s7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBVSUl0ZW1Qcm92aWRlciAq
ZXh0ZXJuYWxJdGVtUHJvdmlkZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgc3Ryb25nKSBOU0Fy
cmF5ICpleHRlcm5hbEl0ZW1Qcm92aWRlcnM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIE5TQXJyYXkgKnNvdXJjZUl0ZW1Qcm92aWRlcnM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TQXJyYXkgKm9ic2VydmVkRXZlbnROYW1lczsKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSkgTlNBcnJheSAqZmluYWxTZWxlY3Rpb25SZWN0czsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbQppbmRleCBh
ZTE2YzlkODg0NjQ2NWJkNmE1M2EwNDg5MDEyODYwYTQwNzBiZmI4Li5hNTY0NTE3ZWM4YWYzNTA3
Y2VkZWJjNTZlNjgwMGEzNWU0MmQ5ZjA0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9pb3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tCkBAIC0xMDEsNiArMTAxLDcgQEAgc3Rh
dGljIE5TQXJyYXkgKmRhdGFJbnRlcmFjdGlvbkV2ZW50TmFtZXMoKQogICAgIF9maW5hbFNlbGVj
dGlvblJlY3RzID0gQFsgXTsKICAgICBfZGF0YUludGVyYWN0aW9uU2Vzc2lvbiA9IG5pbDsKICAg
ICBfZGF0YU9wZXJhdGlvblNlc3Npb24gPSBuaWw7CisgICAgX3Nob3VsZFBlcmZvcm1PcGVyYXRp
b24gPSBOTzsKIH0KIAogLSAoTlNBcnJheSAqKW9ic2VydmVkRXZlbnROYW1lcwpAQCAtMTM5LDgg
KzE0MCw4IEBAIHN0YXRpYyBOU0FycmF5ICpkYXRhSW50ZXJhY3Rpb25FdmVudE5hbWVzKCkKICAg
ICBfc3RhcnRMb2NhdGlvbiA9IHN0YXJ0TG9jYXRpb247CiAgICAgX2VuZExvY2F0aW9uID0gZW5k
TG9jYXRpb247CiAKLSAgICBpZiAoc2VsZi5leHRlcm5hbEl0ZW1Qcm92aWRlcikgewotICAgICAg
ICBfZGF0YU9wZXJhdGlvblNlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0RhdGFPcGVyYXRpb25TZXNz
aW9uIGFsbG9jXSBpbml0V2l0aFByb3ZpZGVyOnNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXIgbG9j
YXRpb246X3N0YXJ0TG9jYXRpb24gd2luZG93Oltfd2ViVmlldyB3aW5kb3ddXSk7CisgICAgaWYg
KHNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzLmNvdW50KSB7CisgICAgICAgIF9kYXRhT3BlcmF0
aW9uU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2NrRGF0YU9wZXJhdGlvblNlc3Npb24gYWxsb2NdIGlu
aXRXaXRoUHJvdmlkZXJzOnNlbGYuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGxvY2F0aW9uOl9zdGFy
dExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcgd2luZG93XV0pOwogICAgICAgICBfcGhhc2UgPSBE
YXRhSW50ZXJhY3Rpb25CZWdhbjsKICAgICAgICAgW3NlbGYgX2FkdmFuY2VQcm9ncmVzc107CiAg
ICAgfSBlbHNlIHsKQEAgLTE2OCw2ICsxNjksMjIgQEAgc3RhdGljIE5TQXJyYXkgKmRhdGFJbnRl
cmFjdGlvbkV2ZW50TmFtZXMoKQogICAgIHJldHVybiBfZmluYWxTZWxlY3Rpb25SZWN0cy5nZXQo
KTsKIH0KIAorLSAodm9pZClfY29uY2x1ZGVEYXRhSW50ZXJhY3Rpb25BbmRQZXJmb3JtT3BlcmF0
aW9uSWZOZWNlc3NhcnkKK3sKKyAgICBpZiAoX3Nob3VsZFBlcmZvcm1PcGVyYXRpb24pIHsKKyAg
ICAgICAgW193ZWJWaWV3IF9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb246
X2RhdGFPcGVyYXRpb25TZXNzaW9uLmdldCgpXTsKKyAgICAgICAgX3BoYXNlID0gRGF0YUludGVy
YWN0aW9uUGVyZm9ybWluZzsKKyAgICB9IGVsc2UgeworICAgICAgICBfaXNEb25lV2l0aEN1cnJl
bnRSdW4gPSBZRVM7CisgICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkNhbmNlbGxlZDsK
KyAgICB9CisKKyAgICBbX3dlYlZpZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uRW5kZWQ6X2Rh
dGFPcGVyYXRpb25TZXNzaW9uLmdldCgpXTsKKworICAgIGlmIChfZGF0YUludGVyYWN0aW9uU2Vz
c2lvbikKKyAgICAgICAgW193ZWJWaWV3IF9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblNlc3Npb25E
aWRFbmQ6X2RhdGFJbnRlcmFjdGlvblNlc3Npb24uZ2V0KCldOworfQorCiAtICh2b2lkKV9hZHZh
bmNlUHJvZ3Jlc3MKIHsKICAgICBfY3VycmVudFByb2dyZXNzICs9IHByb2dyZXNzSW5jcmVtZW50
U3RlcDsKQEAgLTE3NiwxMyArMTkzLDggQEAgc3RhdGljIE5TQXJyYXkgKmRhdGFJbnRlcmFjdGlv
bkV2ZW50TmFtZXMoKQogICAgIFtfZGF0YU9wZXJhdGlvblNlc3Npb24gc2V0TW9ja0xvY2F0aW9u
SW5XaW5kb3c6bG9jYXRpb25JbldpbmRvd107CiAKICAgICBpZiAoX2N1cnJlbnRQcm9ncmVzcyA+
PSAxKSB7Ci0gICAgICAgIFtfd2ViVmlldyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25QZXJmb3Jt
T3BlcmF0aW9uOl9kYXRhT3BlcmF0aW9uU2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIFtfd2ViVmll
dyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25FbmRlZDpfZGF0YU9wZXJhdGlvblNlc3Npb24uZ2V0
KCldOwotICAgICAgICBpZiAoX2RhdGFJbnRlcmFjdGlvblNlc3Npb24pCi0gICAgICAgICAgICBb
X3dlYlZpZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uU2Vzc2lvbkRpZEVuZDpfZGF0YUludGVy
YWN0aW9uU2Vzc2lvbi5nZXQoKV07Ci0KLSAgICAgICAgX3BoYXNlID0gRGF0YUludGVyYWN0aW9u
UGVyZm9ybWluZzsKICAgICAgICAgX2N1cnJlbnRQcm9ncmVzcyA9IDE7CisgICAgICAgIFtzZWxm
IF9jb25jbHVkZURhdGFJbnRlcmFjdGlvbkFuZFBlcmZvcm1PcGVyYXRpb25JZk5lY2Vzc2FyeV07
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIwMCw3ICsyMTIsNyBAQCBzdGF0aWMgTlNB
cnJheSAqZGF0YUludGVyYWN0aW9uRXZlbnROYW1lcygpCiAgICAgICAgIGZvciAoV0tEYXRhSW50
ZXJhY3Rpb25JdGVtICppdGVtIGluIGl0ZW1zKQogICAgICAgICAgICAgW2l0ZW1Qcm92aWRlcnMg
YWRkT2JqZWN0Oml0ZW0uaXRlbVByb3ZpZGVyXTsKIAotICAgICAgICBfZGF0YU9wZXJhdGlvblNl
c3Npb24gPSBhZG9wdE5TKFtbTW9ja0RhdGFPcGVyYXRpb25TZXNzaW9uIGFsbG9jXSBpbml0V2l0
aFByb3ZpZGVyOml0ZW1Qcm92aWRlcnMuZmlyc3RPYmplY3QgbG9jYXRpb246c2VsZi5fY3VycmVu
dExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcgd2luZG93XV0pOworICAgICAgICBfZGF0YU9wZXJh
dGlvblNlc3Npb24gPSBhZG9wdE5TKFtbTW9ja0RhdGFPcGVyYXRpb25TZXNzaW9uIGFsbG9jXSBp
bml0V2l0aFByb3ZpZGVyczppdGVtUHJvdmlkZXJzIGxvY2F0aW9uOnNlbGYuX2N1cnJlbnRMb2Nh
dGlvbiB3aW5kb3c6W193ZWJWaWV3IHdpbmRvd11dKTsKICAgICAgICAgW19kYXRhSW50ZXJhY3Rp
b25TZXNzaW9uIHNldEl0ZW1zOml0ZW1zXTsKICAgICAgICAgX3NvdXJjZUl0ZW1Qcm92aWRlcnMg
PSBpdGVtUHJvdmlkZXJzOwogICAgICAgICBpZiAoc2VsZi5zaG93Q3VzdG9tQWN0aW9uU2hlZXRC
bG9jaykgewpAQCAtMjE3LDcgKzIyOSw3IEBAIHN0YXRpYyBOU0FycmF5ICpkYXRhSW50ZXJhY3Rp
b25FdmVudE5hbWVzKCkKICAgICAgICAgX3BoYXNlID0gRGF0YUludGVyYWN0aW9uRW50ZXJlZDsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEYXRhSW50ZXJhY3Rpb25FbnRlcmVkOgotICAgICAg
ICBbX3dlYlZpZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uVXBkYXRlZDpfZGF0YU9wZXJhdGlv
blNlc3Npb24uZ2V0KCldOworICAgICAgICBfc2hvdWxkUGVyZm9ybU9wZXJhdGlvbiA9IFtfd2Vi
VmlldyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOl9kYXRhT3BlcmF0aW9uU2Vzc2lv
bi5nZXQoKV07CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpA
QCAtMjQ0LDE0ICsyNTYsMTQgQEAgc3RhdGljIE5TQXJyYXkgKmRhdGFJbnRlcmFjdGlvbkV2ZW50
TmFtZXMoKQogICAgIHJldHVybiBfc291cmNlSXRlbVByb3ZpZGVycy5nZXQoKTsKIH0KIAotLSAo
VUlJdGVtUHJvdmlkZXIgKilleHRlcm5hbEl0ZW1Qcm92aWRlcgorLSAoTlNBcnJheSAqKWV4dGVy
bmFsSXRlbVByb3ZpZGVycwogewotICAgIHJldHVybiBfZXh0ZXJuYWxJdGVtUHJvdmlkZXIuZ2V0
KCk7CisgICAgcmV0dXJuIF9leHRlcm5hbEl0ZW1Qcm92aWRlcnMuZ2V0KCk7CiB9CiAKLS0gKHZv
aWQpc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXI6KFVJSXRlbVByb3ZpZGVyICopZXh0ZXJuYWxJdGVt
UHJvdmlkZXIKKy0gKHZvaWQpc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOihOU0FycmF5ICopZXh0
ZXJuYWxJdGVtUHJvdmlkZXJzCiB7Ci0gICAgX2V4dGVybmFsSXRlbVByb3ZpZGVyID0gZXh0ZXJu
YWxJdGVtUHJvdmlkZXI7CisgICAgX2V4dGVybmFsSXRlbVByb3ZpZGVycyA9IGFkb3B0TlMoW2V4
dGVybmFsSXRlbVByb3ZpZGVycyBjb3B5XSk7CiB9CiAKIC0gKERhdGFJbnRlcmFjdGlvblBoYXNl
KXBoYXNlCg==
</data>
<flag name="review"
          id="328622"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307459</attachid>
            <date>2017-04-18 20:38:40 -0700</date>
            <delta_ts>2017-04-18 21:22:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-170903-20170418203840.patch</filename>
            <type>text/plain</type>
            <size>25521</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDYzYjRmMTYwMWJlOGUy
N2JhZmI4MzEzMTJmMDFjNTAxNmYxMzdkZS4uYjI5NGIwM2EzYzA4ZDUxNDc3NjQ5NDRlY2NiMGIy
YmNiZDU2NmQyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE3LTA0LTE3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtXSzJdIEFkZCBp
bmZyYXN0cnVjdHVyZSBhbmQgdW5pdCB0ZXN0cyBmb3IgZmlsZSB1cGxvYWRzIHVzaW5nIGRhdGEg
aW50ZXJhY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MDkwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzEzMTQ2ODk+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBTZWUgVG9vbHMvQ2hhbmdlTG9nIGZv
ciBtb3JlIGRldGFpbHMuIE1ha2VzIGEgc21hbGwgYWRqdXN0bWVudCB0byBfc2ltdWxhdGVEYXRh
SW50ZXJhY3Rpb25VcGRhdGVkOiB0byByZXR1cm4gYQorICAgICAgICBCT09MIGluZGljYXRpbmcg
d2hldGhlciBvciBub3QgdG8gYWxsb3cgdGhlIG9wZXJhdGlvbiB0byBwcm9jZWVkLiBUaGlzIGlz
IG5lY2Vzc2FyeSBmb3IgdGVzdGluZyBzY2VuYXJpb3Mgd2hlcmUKKyAgICAgICAgbXVsdGlwbGUg
ZmlsZXMgYXJlIGJlaW5nICJkYXRhIGludGVyYWN0ZWQiIG9udG8gYW4gZWxlbWVudC4gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwODgwPgorICAgICAgICBm
b3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjaGFuZ2UgdGhpcyBwYXRjaCBpcyB0ZXN0aW5nLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgt
W1dLV2ViVmlldyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOl0pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmg6CisKIDIwMTctMDQtMTggIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl0gU3VwcG9y
dCBEYXRhVHJhbnNmZXI6OmZpbGVzKCkgd2hlbiBwZXJmb3JtaW5nIGEgREhUTUwgZGF0YSBpbnRl
cmFjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbQppbmRleCBhZWVjMjYwMWNlZmM1ZTkwMmI5MTM0NzlmYzUyZjdiNWVhMTBmNDgzLi4yNzBh
ZmRmNzI0YWVjYjRiZDMyODE4ZDMwMzkzMGYxN2QyMGExOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpAQCAtNTQwOSwxMCArNTQwOSwx
MiBAQCBzdGF0aWMgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB0b1VzZXJJ
bnRlcmZhY2VMYXlvdXREaXJlY3Rpb24oVUlTZQogI2VuZGlmCiB9CiAKLS0gKHZvaWQpX3NpbXVs
YXRlRGF0YUludGVyYWN0aW9uVXBkYXRlZDooaWQpaW5mbworLSAoQk9PTClfc2ltdWxhdGVEYXRh
SW50ZXJhY3Rpb25VcGRhdGVkOihpZClpbmZvCiB7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJ
T04pCi0gICAgW19jb250ZW50VmlldyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOmlu
Zm9dOworICAgIHJldHVybiBbX2NvbnRlbnRWaWV3IF9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblVw
ZGF0ZWQ6aW5mb107CisjZWxzZQorICAgIHJldHVybiBOTzsKICNlbmRpZgogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5o
CmluZGV4IGQwZTVmYzAzMDBkOWJmYWYyM2Y3NzRkMWY1NzVmMmY1NjZjOTA2YjYuLjMwODRkODY4
N2NhNDU3OTMxOWJkNTczMzI4NmY4ZTA0YTUxODcwOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCkBAIC0zMjgsNyAr
MzI4LDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLSW1tZWRpYXRlQWN0aW9uVHlw
ZSkgewogLSAoTlNEaWN0aW9uYXJ5ICopX3Byb3BlcnRpZXNPZkxheWVyV2l0aElEOih1bnNpZ25l
ZCBsb25nIGxvbmcpbGF5ZXJJRCBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7CiAK
IC0gKHZvaWQpX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uRW50ZXJlZDooaWQpaW5mbyBXS19BUElf
QVZBSUxBQkxFKGlvcyhXS19JT1NfVEJBKSk7Ci0tICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFj
dGlvblVwZGF0ZWQ6KGlkKWluZm8gV0tfQVBJX0FWQUlMQUJMRShpb3MoV0tfSU9TX1RCQSkpOwor
LSAoQk9PTClfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOihpZClpbmZvIFdLX0FQSV9B
VkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3NpbXVsYXRlRGF0YUludGVyYWN0
aW9uUGVyZm9ybU9wZXJhdGlvbjooaWQpaW5mbyBXS19BUElfQVZBSUxBQkxFKGlvcyhXS19JT1Nf
VEJBKSk7CiAtICh2b2lkKV9zaW11bGF0ZURhdGFJbnRlcmFjdGlvbkVuZGVkOihpZClpbmZvIFdL
X0FQSV9BVkFJTEFCTEUoaW9zKFdLX0lPU19UQkEpKTsKIC0gKHZvaWQpX3NpbXVsYXRlRGF0YUlu
dGVyYWN0aW9uU2Vzc2lvbkRpZEVuZDooaWQpc2Vzc2lvbiBXS19BUElfQVZBSUxBQkxFKGlvcyhX
S19JT1NfVEJBKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCBlZTIwNWRiMTAzNTJkNDI1OGVhNzVmZDhi
NWIwZDE3MDI5N2EyNzUwLi45ZjNhZGQ5N2JiM2M1ZmU5ZmI4YzMxNzE0N2Y1ZDI2YmFhYWVkMzVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLmgKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVj
dGlvbkRhdGEgewogLSAodm9pZClfZGlkQ2hhbmdlRGF0YUludGVyYWN0aW9uQ2FyZXRSZWN0OihD
R1JlY3QpcHJldmlvdXNSZWN0IGN1cnJlbnRSZWN0OihDR1JlY3QpcmVjdDsKIAogLSAodm9pZClf
c2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25FbnRlcmVkOihpZClpbmZvOwotLSAodm9pZClfc2ltdWxh
dGVEYXRhSW50ZXJhY3Rpb25VcGRhdGVkOihpZClpbmZvOworLSAoQk9PTClfc2ltdWxhdGVEYXRh
SW50ZXJhY3Rpb25VcGRhdGVkOihpZClpbmZvOwogLSAodm9pZClfc2ltdWxhdGVEYXRhSW50ZXJh
Y3Rpb25QZXJmb3JtT3BlcmF0aW9uOihpZClpbmZvOwogLSAodm9pZClfc2ltdWxhdGVEYXRhSW50
ZXJhY3Rpb25FbmRlZDooaWQpaW5mbzsKIC0gKHZvaWQpX3NpbXVsYXRlRGF0YUludGVyYWN0aW9u
U2Vzc2lvbkRpZEVuZDooaWQpc2Vzc2lvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MWFiMjgwMjRiOTlmN2MzYmViMWZmMTRmZmU1ZDdmYjQx
NTk0MmE3Li5mNmY2YjllZDNhZjQ5Mzc0ZTYyNmE2ZmZlZTdhZWQ3ZjRlNDkzZDU3IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTctMDQtMTcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisK
KyAgICAgICAgW1dLMl0gQWRkIGluZnJhc3RydWN0dXJlIGFuZCB1bml0IHRlc3RzIGZvciBmaWxl
IHVwbG9hZHMgdXNpbmcgZGF0YSBpbnRlcmFjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
MTMxNDY4OT4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFk
ZHMgNSBuZXcgdW5pdCB0ZXN0cyBjb3ZlcmluZyBkaWZmZXJlbnQgY2FzZXMgb2YgdXBsb2FkaW5n
IGZpbGVzIHRocm91Z2ggZGF0YSBpbnRlcmFjdGlvbiwgYXMgd2VsbCBhcworICAgICAgICBpbmZy
YXN0cnVjdHVyZSBmb3Igc2ltdWxhdGluZyBVSUl0ZW1Qcm92aWRlcnMgdGhhdCBsb2FkIGZpbGUg
ZGF0YS4gTWFrZXMgYSBmZXcgYWRqdXN0bWVudHMgdG8gdGhlCisgICAgICAgIERhdGFJbnRlcmFj
dGlvblNpbXVsYXRvciBhbG9uZyB0aGUgd2F5LCBkZXRhaWxlZCBpbiB0aGUgcGVyLW1ldGhvZCBh
bm5vdGF0aW9ucyBiZWxvdy4gU2VlCisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTcwODgwPiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjaGFuZ2Ug
dGhpcyBwYXRjaCBpcyB0ZXN0aW5nLgorCisgICAgICAgIE5ldyB0ZXN0czoKKyAgICAgICAgRGF0
YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VJbWFnZVRvRmlsZUlucHV0CisgICAgICAg
IERhdGFJbnRlcmFjdGlvblRlc3RzLkV4dGVybmFsU291cmNlSFRNTFRvVXBsb2FkQXJlYQorICAg
ICAgICBEYXRhSW50ZXJhY3Rpb25UZXN0cy5FeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvU2lu
Z2xlRmlsZUlucHV0CisgICAgICAgIERhdGFJbnRlcmFjdGlvblRlc3RzLkV4dGVybmFsU291cmNl
SW1hZ2VBbmRIVE1MVG9NdWx0aXBsZUZpbGVJbnB1dAorICAgICAgICBEYXRhSW50ZXJhY3Rpb25U
ZXN0cy5FeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRNTFRvVXBsb2FkQXJlYQorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9pb3MvRGF0YUludGVyYWN0aW9uVGVzdHMubW06CisgICAgICAg
ICh0ZXN0SWNvbkltYWdlKToKKyAgICAgICAgKHRlbXBvcmFyeVVSTEZvckRhdGFJbnRlcmFjdGlv
bkZpbGVMb2FkKToKKyAgICAgICAgKGNsZWFuVXBEYXRhSW50ZXJhY3Rpb25UZW1wb3JhcnlQYXRo
KToKKworICAgICAgICBDcmVhdGVzIGFuZCB0ZWFycyBkb3duIHRlbXBvcmFyeSBmaWxlIGRpcmVj
dG9yaWVzIGZvciB0ZXN0aW5nIGRhdGEgaW50ZXJhY3Rpb24uCisKKyAgICAgICAgKC1bVUlJdGVt
UHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp3aXRo
RGF0YTpmaWxlbmFtZTpdKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5tbToKKworICAg
ICAgICBNYWtlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvIGJlIGFibGUgdG8gdGVzdCB3aGF0IGhhcHBl
bnMgd2hlbiBkYXRhIGludGVyYWN0aW9uIGVuZHMgb3ZlciBhbiBlbGVtZW50IHdpdGggbm8KKyAg
ICAgICAgb3BlcmF0aW9uLiBQcmV2aW91c2x5LCB3ZSB3b3VsZCBhbHdheXMgc2ltdWxhdGUgcGVy
Zm9ybWluZyBhIGRhdGEgaW50ZXJhY3Rpb24gb3BlcmF0aW9uIHdoZW4gZW5kaW5nIHRoZQorICAg
ICAgICBzaW11bGF0aW9uLCBidXQgdGhpcyBjYXVzZXMgdXMgdG8gd2FpdCBpbmRlZmluaXRlbHkg
Zm9yIGEgZGF0YSBvcGVyYXRpb24gcmVzcG9uc2UgdG8gYXJyaXZlIGluIHRoZSBVSSBwcm9jZXNz
LgorICAgICAgICBJbnN0ZWFkLCB3ZSBuZWVkIHRvIG5vdGUgd2hldGhlciBvciBub3QgdGhlIGNv
bnRlbnQgdmlldyBpcyBhbGxvd2luZyBkYXRhIGludGVyYWN0aW9uLCBhbmQgb25seSBwZXJmb3Jt
IGFuCisgICAgICAgIG9wZXJhdGlvbiBhbmQgd2FpdCBmb3IgdGhlIC1kaWRQZXJmb3JtIGNhbGwg
aWYgdGhlIG9wZXJhdGlvbiB3YXMgYWxsb3dlZC4gT3RoZXJ3aXNlLCB3ZSBpbW1lZGlhdGVseSB0
cmFuc2l0aW9uCisgICAgICAgIHRoZSBwaGFzZSB0byBDYW5jZWxsZWQgYW5kIGVuZCB0aGUgcnVu
LgorCisgICAgICAgICgtW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBfcmVzZXRTaW11bGF0ZWRT
dGF0ZV0pOgorICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTp0bzpd
KToKKyAgICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIF9jb25jbHVkZURhdGFJbnRl
cmFjdGlvbkFuZFBlcmZvcm1PcGVyYXRpb25JZk5lY2Vzc2FyeV0pOgorICAgICAgICAoLVtEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgX2FkdmFuY2VQcm9ncmVzc10pOgorICAgICAgICAoLVtEYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgZXh0ZXJuYWxJdGVtUHJvdmlkZXJzXSk6CisgICAgICAgICgt
W0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6XSk6CisK
KyAgICAgICAgUHJldmlvdXNseSwgd2UgaGFyZC1jb2RlZCBEYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgdG8gb25seSBzdXBwb3J0IGEgc2luZ2xlIGV4dGVybmFsIGl0ZW0gcHJvdmlkZXIuIEluIG9y
ZGVyIHRvCisgICAgICAgIHRlc3QgdGhlIHNjZW5hcmlvIHdoZXJlIG11bHRpcGxlIGZpbGVzIGFy
ZSBiZWluZyAiZGF0YSBpbnRlcmFjdGVkIiBpbnRvIGEgZmlsZS10eXBlIGlucHV0LCB3ZSBnZW5l
cmFsaXplIHRoaXMgdG8KKyAgICAgICAgdGFrZSBtdWx0aXBsZSBpdGVtIHByb3ZpZGVycy4KKwor
ICAgICAgICAoLVtEYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgZXh0ZXJuYWxJdGVtUHJvdmlkZXJd
KTogRGVsZXRlZC4KKyAgICAgICAgKC1bRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVy
bmFsSXRlbVByb3ZpZGVyOl0pOiBEZWxldGVkLgorCiAyMDE3LTA0LTE4ICBKb2huIFdpbGFuZGVy
ICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgV2ViQ29yZTo6dG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbigpIHJldHVybiAibG9jYWxob3N0IiBmb3IgbG9jYWxob3N0CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL2lvcy9EYXRhSW50ZXJhY3Rpb25U
ZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRl
c3RzLm1tCmluZGV4IGZmYzVhZDU1YmQwMzVmYTU0NWU1YWEwZTVlMDI4MTViYmZkMmU2YWYuLjBm
MzJiN2NkMGIzYmVlMThmYzhiOWM4ZGE0ZTVjZDNlMWEyNTA3N2YgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvaW9zL0RhdGFJbnRlcmFjdGlvblRlc3RzLm1tCkBAIC0z
Nyw2ICszNyw0NyBAQAogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld0NvbmZpZ3VyYXRpb25Qcml2
YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmg+CiAK
K3R5cGVkZWYgdm9pZCAoXkZpbGVMb2FkQ29tcGxldGlvbkJsb2NrKShOU1VSTCAqLCBCT09MLCBO
U0Vycm9yICopOworCitzdGF0aWMgVUlJbWFnZSAqdGVzdEljb25JbWFnZSgpCit7CisgICAgcmV0
dXJuIFtVSUltYWdlIGltYWdlTmFtZWQ6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcy9pY29uLnBu
ZyJdOworfQorCitzdGF0aWMgTlNVUkwgKnRlbXBvcmFyeVVSTEZvckRhdGFJbnRlcmFjdGlvbkZp
bGVMb2FkKE5TU3RyaW5nICp0ZW1wb3JhcnlGaWxlTmFtZSkKK3sKKyAgICBOU1N0cmluZyAqdGVt
cG9yYXJ5RGlyZWN0b3J5UGF0aCA9IFtOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpAImRhdGEtaW50ZXJhY3Rpb24iXTsKKyAgICBpZiAoIVtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp0ZW1wb3JhcnlEaXJl
Y3RvcnlQYXRoXSkKKyAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVh
dGVEaXJlY3RvcnlBdFBhdGg6dGVtcG9yYXJ5RGlyZWN0b3J5UGF0aCB3aXRoSW50ZXJtZWRpYXRl
RGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CisgICAgcmV0dXJuIFtO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6W3RlbXBvcmFyeURpcmVjdG9yeVBhdGggc3RyaW5nQnlBcHBl
bmRpbmdQYXRoQ29tcG9uZW50OnRlbXBvcmFyeUZpbGVOYW1lXV07Cit9CisKK3N0YXRpYyB2b2lk
IGNsZWFuVXBEYXRhSW50ZXJhY3Rpb25UZW1wb3JhcnlQYXRoKCkKK3sKKyAgICBOU0FycmF5ICp0
ZW1wb3JhcnlEaXJlY3RvcnlDb250ZW50cyA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdl
cl0gY29udGVudHNPZkRpcmVjdG9yeUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6TlNUZW1w
b3JhcnlEaXJlY3RvcnkoKV0gaW5jbHVkaW5nUHJvcGVydGllc0ZvcktleXM6bmlsIG9wdGlvbnM6
MCBlcnJvcjpuaWxdOworICAgIGZvciAoTlNVUkwgKnVybCBpbiB0ZW1wb3JhcnlEaXJlY3RvcnlD
b250ZW50cykgeworICAgICAgICBpZiAoW3VybC5sYXN0UGF0aENvbXBvbmVudCByYW5nZU9mU3Ry
aW5nOkAiZGF0YS1pbnRlcmFjdGlvbiJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAg
ICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDp1cmwg
ZXJyb3I6bmlsXTsKKyAgICB9Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBVSUl0ZW1Qcm92aWRlciAo
RGF0YUludGVyYWN0aW9uVGVzdHMpCisKKy0gKHZvaWQpcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRp
b25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJpbmcgKil0eXBlSWRlbnRpZmllciB3aXRoRGF0YToo
TlNEYXRhICopZGF0YSBmaWxlbmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZQoreworICAgIFJldGFp
blB0cjxOU0RhdGE+IHJldGFpbmVkRGF0YSA9IGRhdGE7CisgICAgUmV0YWluUHRyPE5TVVJMPiBy
ZXRhaW5lZFRlbXBvcmFyeVVSTCA9IHRlbXBvcmFyeVVSTEZvckRhdGFJbnRlcmFjdGlvbkZpbGVM
b2FkKGZpbGVuYW1lKTsKKyAgICBbc2VsZiByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOnR5cGVJZGVudGlmaWVyIGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0
ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjogW3JldGFp
bmVkRGF0YSwgcmV0YWluZWRUZW1wb3JhcnlVUkxdIChGaWxlTG9hZENvbXBsZXRpb25CbG9jayBi
bG9jaykgLT4gTlNQcm9ncmVzcyAqIHsKKyAgICAgICAgW3JldGFpbmVkRGF0YSB3cml0ZVRvRmls
ZTpbcmV0YWluZWRUZW1wb3JhcnlVUkwgcGF0aF0gYXRvbWljYWxseTpZRVNdOworICAgICAgICBk
aXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbcmV0YWluZWRUZW1wb3Jh
cnlVUkwsIGNhcHR1cmVkQmxvY2sgPSBtYWtlQmxvY2tQdHIoYmxvY2spXSB7CisgICAgICAgICAg
ICBjYXB0dXJlZEJsb2NrKHJldGFpbmVkVGVtcG9yYXJ5VVJMLmdldCgpLCBOTywgbmlsKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfV07Cit9CisKK0BlbmQKKwogQGlt
cGxlbWVudGF0aW9uIFRlc3RXS1dlYlZpZXcgKERhdGFJbnRlcmFjdGlvblRlc3RzKQogCiAtIChC
T09MKWVkaXRvckNvbnRhaW5zSW1hZ2VFbGVtZW50CkBAIC0yNzMsNiArMzE0LDExOCBAQCBURVNU
KERhdGFJbnRlcmFjdGlvblRlc3RzLCBFbnRlckFuZExlYXZlRXZlbnRzKQogICAgIGNoZWNrU2Vs
ZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhAWyBdLCBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGZp
bmFsU2VsZWN0aW9uUmVjdHNdKTsKIH0KIAorVEVTVChEYXRhSW50ZXJhY3Rpb25UZXN0cywgRXh0
ZXJuYWxTb3VyY2VJbWFnZVRvRmlsZUlucHV0KQoreworICAgIFJldGFpblB0cjxUZXN0V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgUmV0YWluUHRy
PFVJSXRlbVByb3ZpZGVyPiBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tV
SUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJ
bWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVs
YXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhIGZpbGVu
YW1lOkAiaW1hZ2UucG5nIl07CisKKyAgICBSZXRhaW5QdHI8RGF0YUludGVyYWN0aW9uU2ltdWxh
dG9yPiBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtk
YXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVs
YXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpIF1dOworICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11
bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgyMDAsIDEwMCkgdG86Q0dQb2ludE1ha2UoMTAwLCAx
MDApXTsKKworICAgIE5TU3RyaW5nICpvdXRwdXRWYWx1ZSA9IFt3ZWJWaWV3IHN0cmluZ0J5RXZh
bHVhdGluZ0phdmFTY3JpcHQ6QCJvdXRwdXQudmFsdWUiXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
ImltYWdlL2pwZWciLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKKworICAgIGNsZWFuVXBEYXRh
SW50ZXJhY3Rpb25UZW1wb3JhcnlQYXRoKCk7Cit9CisKK1RFU1QoRGF0YUludGVyYWN0aW9uVGVz
dHMsIEV4dGVybmFsU291cmNlSFRNTFRvVXBsb2FkQXJlYSkKK3sKKyAgICBSZXRhaW5QdHI8VGVz
dFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVkOkAiZmlsZS11cGxvYWRpbmciXTsKKworICAgIFJl
dGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0
TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaHRtbERhdGEg
PSBbQCI8Ym9keSBjb250ZW50ZWRpdGFibGU+PC9ib2R5PiIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lz
dGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlw
ZUhUTUwgd2l0aERhdGE6aHRtbERhdGEgZmlsZW5hbWU6QCJpbmRleC5odG1sIl07CisKKyAgICBS
ZXRhaW5QdHI8RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yPiBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0
RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkg
XV07CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIw
MCwgMzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1
dFZhbHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52
YWx1ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgidGV4dC9odG1sIiwgb3V0cHV0VmFsdWUuVVRG
OFN0cmluZyk7CisKKyAgICBjbGVhblVwRGF0YUludGVyYWN0aW9uVGVtcG9yYXJ5UGF0aCgpOwor
fQorCitURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUltYWdlQW5kSFRN
TFRvU2luZ2xlRmlsZUlucHV0KQoreworICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0
TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRl
c3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAgUmV0YWluUHRyPFVJSXRlbVBy
b3ZpZGVyPiBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRhID0gVUlJbWFnZUpQRUdS
ZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAgW3NpbXVsYXRlZEltYWdl
SXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlkZW50aWZpZXI6
KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRhIGZpbGVuYW1lOkAiaW1h
Z2UucG5nIl07CisKKyAgICBSZXRhaW5QdHI8VUlJdGVtUHJvdmlkZXI+IHNpbXVsYXRlZEhUTUxJ
dGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAg
ICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRhYmxlPjwvYm9keT4iIGRh
dGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAgICBbc2ltdWxhdGVkSFRN
TEl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVy
OihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRhIGZpbGVuYW1lOkAiaW5k
ZXguaHRtbCJdOworCisgICAgUmV0YWluUHRyPERhdGFJbnRlcmFjdGlvblNpbXVsYXRvcj4gZGF0
YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRlcmFjdGlvblNpbXVsYXRv
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKKyAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRIVE1M
SXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlci5nZXQoKSBdXTsK
KyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMjAwLCAx
MDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0cmluZyAqb3V0cHV0VmFs
dWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAib3V0cHV0LnZhbHVl
Il07CisgICAgRVhQRUNUX1dLX1NUUkVRKCIiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKKwor
ICAgIGNsZWFuVXBEYXRhSW50ZXJhY3Rpb25UZW1wb3JhcnlQYXRoKCk7Cit9CisKK1RFU1QoRGF0
YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9NdWx0aXBsZUZp
bGVJbnB1dCkKK3sKKyAgICBSZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwg
MzIwLCA1MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5hbWVk
OkAiZmlsZS11cGxvYWRpbmciXTsKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiaW5wdXQuc2V0QXR0cmlidXRlKCdtdWx0aXBsZScsICcnKSJdOworCisgICAgUmV0
YWluUHRyPFVJSXRlbVByb3ZpZGVyPiBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFkb3B0
TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VEYXRh
ID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7CisgICAg
W3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9y
VHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VEYXRh
IGZpbGVuYW1lOkAiaW1hZ2UucG5nIl07CisKKyAgICBSZXRhaW5QdHI8VUlJdGVtUHJvdmlkZXI+
IHNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIgPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKmh0bWxEYXRhID0gW0AiPGJvZHkgY29udGVudGVkaXRh
YmxlPjwvYm9keT4iIGRhdGFVc2luZ0VuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXTsKKyAg
ICBbc2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZv
clR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1MIHdpdGhEYXRhOmh0bWxEYXRh
IGZpbGVuYW1lOkAiaW5kZXguaHRtbCJdOworCisgICAgUmV0YWluUHRyPERhdGFJbnRlcmFjdGlv
blNpbXVsYXRvcj4gZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yID0gYWRvcHROUyhbW0RhdGFJbnRl
cmFjdGlvblNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsK
KyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyczpA
WyBzaW11bGF0ZWRIVE1MSXRlbVByb3ZpZGVyLmdldCgpLCBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92
aWRlci5nZXQoKSBdXTsKKyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHJ1bkZyb206Q0dQ
b2ludE1ha2UoMjAwLCAxMDApIHRvOkNHUG9pbnRNYWtlKDEwMCwgMTAwKV07CisKKyAgICBOU1N0
cmluZyAqb3V0cHV0VmFsdWUgPSBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAib3V0cHV0LnZhbHVlIl07CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpbWFnZS9qcGVnLCB0ZXh0
L2h0bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKKworICAgIGNsZWFuVXBEYXRhSW50ZXJh
Y3Rpb25UZW1wb3JhcnlQYXRoKCk7Cit9CisKK1RFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4
dGVybmFsU291cmNlSW1hZ2VBbmRIVE1MVG9VcGxvYWRBcmVhKQoreworICAgIFJldGFpblB0cjxU
ZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBbd2ViVmlldyBz
eW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJmaWxlLXVwbG9hZGluZyJdOworCisgICAg
UmV0YWluUHRyPFVJSXRlbVByb3ZpZGVyPiBzaW11bGF0ZWRJbWFnZUl0ZW1Qcm92aWRlciA9IGFk
b3B0TlMoW1tVSUl0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqaW1hZ2VE
YXRhID0gVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SWNvbkltYWdlKCksIDAuNSk7Cisg
ICAgW3NpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUpQRUcgd2l0aERhdGE6aW1hZ2VE
YXRhIGZpbGVuYW1lOkAiaW1hZ2UucG5nIl07CisKKyAgICBSZXRhaW5QdHI8VUlJdGVtUHJvdmlk
ZXI+IGZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciA9IGFkb3B0TlMoW1tVSUl0ZW1Qcm92
aWRlciBhbGxvY10gaW5pdF0pOworICAgIE5TRGF0YSAqZmlyc3RIVE1MRGF0YSA9IFtAIjxib2R5
IGNvbnRlbnRlZGl0YWJsZT48L2JvZHk+IiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107CisgICAgW2ZpcnN0U2ltdWxhdGVkSFRNTEl0ZW1Qcm92aWRlciByZWdpc3RlckZp
bGVSZXByZXNlbnRhdGlvbkZvclR5cGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWtVVFR5cGVIVE1M
IHdpdGhEYXRhOmZpcnN0SFRNTERhdGEgZmlsZW5hbWU6QCJpbmRleC5odG1sIl07CisKKyAgICBS
ZXRhaW5QdHI8VUlJdGVtUHJvdmlkZXI+IHNlY29uZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIg
PSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKKyAgICBOU0RhdGEgKnNl
Y29uZEhUTUxEYXRhID0gW0AiPGh0bWw+PGJvZHk+aGVsbG8gd29ybGQ8L2JvZHk+PC9odG1sPiIg
ZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOworICAgIFtzZWNvbmRTaW11
bGF0ZWRIVE1MSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRmlsZVJlcHJlc2VudGF0aW9uRm9yVHlwZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopa1VUVHlwZUhUTUwgd2l0aERhdGE6c2Vjb25kSFRNTERhdGEg
ZmlsZW5hbWU6QCJpbmRleC5odG1sIl07CisKKyAgICBSZXRhaW5QdHI8RGF0YUludGVyYWN0aW9u
U2ltdWxhdG9yPiBkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IgPSBhZG9wdE5TKFtbRGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwor
ICAgIFtkYXRhSW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBb
IHNpbXVsYXRlZEltYWdlSXRlbVByb3ZpZGVyLmdldCgpLCBmaXJzdFNpbXVsYXRlZEhUTUxJdGVt
UHJvdmlkZXIuZ2V0KCksIHNlY29uZFNpbXVsYXRlZEhUTUxJdGVtUHJvdmlkZXIuZ2V0KCkgXV07
CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDIwMCwg
MzAwKSB0bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOworCisgICAgTlNTdHJpbmcgKm91dHB1dFZh
bHVlID0gW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm91dHB1dC52YWx1
ZSJdOworICAgIEVYUEVDVF9XS19TVFJFUSgiaW1hZ2UvanBlZywgdGV4dC9odG1sLCB0ZXh0L2h0
bWwiLCBvdXRwdXRWYWx1ZS5VVEY4U3RyaW5nKTsKKworICAgIGNsZWFuVXBEYXRhSW50ZXJhY3Rp
b25UZW1wb3JhcnlQYXRoKCk7Cit9CisKIFRFU1QoRGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVy
bmFsU291cmNlVVRGOFBsYWluVGV4dE9ubHkpCiB7CiAgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZp
ZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFt
ZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwpAQCAtMjg2LDcgKzQzOSw3IEBAIFRFU1Qo
RGF0YUludGVyYWN0aW9uVGVzdHMsIEV4dGVybmFsU291cmNlVVRGOFBsYWluVGV4dE9ubHkpCiAg
ICAgICAgIGNvbXBsZXRpb25CbG9jayhbdGV4dFBheWxvYWQgZGF0YVVzaW5nRW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddLCBuaWwpOwogICAgICAgICByZXR1cm4gW05TUHJvZ3Jlc3MgZGlz
Y3JldGVQcm9ncmVzc1dpdGhUb3RhbFVuaXRDb3VudDoxMDBdOwogICAgIH1dOwotICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXI6c2ltdWxhdGVkSXRl
bVByb3ZpZGVyLmdldCgpXTsKKyAgICBbZGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIHNldEV4dGVy
bmFsSXRlbVByb3ZpZGVyczpAWyBzaW11bGF0ZWRJdGVtUHJvdmlkZXIuZ2V0KCkgXV07CiAgICAg
W2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDMwMCwgNDAwKSB0
bzpDR1BvaW50TWFrZSgxMDAsIDMwMCldOwogICAgIEVYUEVDVF9XS19TVFJFUSh0ZXh0UGF5bG9h
ZC5VVEY4U3RyaW5nLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZWRp
dG9yLnRleHRDb250ZW50Il0uVVRGOFN0cmluZyk7CiAgICAgY2hlY2tTZWxlY3Rpb25SZWN0c1dp
dGhMb2dnaW5nKEBbIG1ha2VDR1JlY3RWYWx1ZSgxLCAyMDEsIDE5MzYsIDIyNykgXSwgW2RhdGFJ
bnRlcmFjdGlvblNpbXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7CkBAIC0yOTcsMTUgKzQ1
MCwxNCBAQCBURVNUKERhdGFJbnRlcmFjdGlvblRlc3RzLCBFeHRlcm5hbFNvdXJjZUpQRUdPbmx5
KQogICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJhdXRvZm9j
dXMtY29udGVudGVkaXRhYmxlIl07CiAKLSAgICBVSUltYWdlICp0ZXN0SW1hZ2UgPSBbVUlJbWFn
ZSBpbWFnZU5hbWVkOkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMvaWNvbi5wbmciXTsKICAgICBS
ZXRhaW5QdHI8RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yPiBkYXRhSW50ZXJhY3Rpb25TaW11bGF0
b3IgPSBhZG9wdE5TKFtbRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdl
YlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIFJldGFpblB0cjxVSUl0ZW1Qcm92aWRlcj4gc2lt
dWxhdGVkSXRlbVByb3ZpZGVyID0gYWRvcHROUyhbW1VJSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0
XSk7CiAgICAgW3NpbXVsYXRlZEl0ZW1Qcm92aWRlciByZWdpc3RlckRhdGFSZXByZXNlbnRhdGlv
bkZvclR5cGVJZGVudGlmaWVyOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVKUEVHIG9wdGlv
bnM6bmlsIGxvYWRIYW5kbGVyOl5OU1Byb2dyZXNzICooVUlJdGVtUHJvdmlkZXJEYXRhTG9hZENv
bXBsZXRpb25CbG9jayBjb21wbGV0aW9uQmxvY2spCiAgICAgewotICAgICAgICBjb21wbGV0aW9u
QmxvY2soVUlJbWFnZUpQRUdSZXByZXNlbnRhdGlvbih0ZXN0SW1hZ2UsIDAuNSksIG5pbCk7Cisg
ICAgICAgIGNvbXBsZXRpb25CbG9jayhVSUltYWdlSlBFR1JlcHJlc2VudGF0aW9uKHRlc3RJY29u
SW1hZ2UoKSwgMC41KSwgbmlsKTsKICAgICAgICAgcmV0dXJuIFtOU1Byb2dyZXNzIGRpc2NyZXRl
UHJvZ3Jlc3NXaXRoVG90YWxVbml0Q291bnQ6MTAwXTsKICAgICB9XTsKLSAgICBbZGF0YUludGVy
YWN0aW9uU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVByb3ZpZGVyOnNpbXVsYXRlZEl0ZW1Qcm92
aWRlci5nZXQoKV07CisgICAgW2RhdGFJbnRlcmFjdGlvblNpbXVsYXRvciBzZXRFeHRlcm5hbEl0
ZW1Qcm92aWRlcnM6QFsgc2ltdWxhdGVkSXRlbVByb3ZpZGVyLmdldCgpIF1dOwogICAgIFtkYXRh
SW50ZXJhY3Rpb25TaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgzMDAsIDQwMCkgdG86Q0dQ
b2ludE1ha2UoMTAwLCAzMDApXTsKICAgICBFWFBFQ1RfVFJVRShbd2ViVmlldyBlZGl0b3JDb250
YWluc0ltYWdlRWxlbWVudF0pOwogICAgIGNoZWNrU2VsZWN0aW9uUmVjdHNXaXRoTG9nZ2luZyhA
WyBtYWtlQ0dSZWN0VmFsdWUoMSwgMjAxLCAyMTUsIDE3NCkgXSwgW2RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvciBmaW5hbFNlbGVjdGlvblJlY3RzXSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25TaW11bGF0b3IuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvaW9zL0RhdGFJbnRlcmFjdGlvblNpbXVsYXRvci5oCmluZGV4IDMzNmJkZmQ4OTE1NTZjMzEx
NzY4ODM2NTcyYmMwNTViNmVjMTdmZWYuLmIyY2E0N2U2ZDNhOGMyZDg5N2QyNDM2MjU5M2Y5NjYw
Y2E4YjM1NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFj
dGlvblNpbXVsYXRvci5oCkBAIC01NCwxMiArNTQsMTMgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50
ZWdlciwgRGF0YUludGVyYWN0aW9uUGhhc2UpIHsKICAgICBSZXRhaW5QdHI8TW9ja0RhdGFJbnRl
cmFjdGlvblNlc3Npb24+IF9kYXRhSW50ZXJhY3Rpb25TZXNzaW9uOwogICAgIFJldGFpblB0cjxN
b2NrRGF0YU9wZXJhdGlvblNlc3Npb24+IF9kYXRhT3BlcmF0aW9uU2Vzc2lvbjsKICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlQXJyYXk+IF9vYnNlcnZlZEV2ZW50TmFtZXM7Ci0gICAgUmV0YWluUHRy
PFVJSXRlbVByb3ZpZGVyPiBfZXh0ZXJuYWxJdGVtUHJvdmlkZXI7CisgICAgUmV0YWluUHRyPE5T
QXJyYXk+IF9leHRlcm5hbEl0ZW1Qcm92aWRlcnM7CiAgICAgUmV0YWluUHRyPE5TQXJyYXkgKj4g
X3NvdXJjZUl0ZW1Qcm92aWRlcnM7CiAgICAgUmV0YWluUHRyPE5TQXJyYXkgKj4gX2ZpbmFsU2Vs
ZWN0aW9uUmVjdHM7CiAgICAgQ0dQb2ludCBfc3RhcnRMb2NhdGlvbjsKICAgICBDR1BvaW50IF9l
bmRMb2NhdGlvbjsKIAorICAgIEJPT0wgX3Nob3VsZFBlcmZvcm1PcGVyYXRpb247CiAgICAgZG91
YmxlIF9jdXJyZW50UHJvZ3Jlc3M7CiAgICAgYm9vbCBfaXNEb25lV2l0aEN1cnJlbnRSdW47CiAg
ICAgRGF0YUludGVyYWN0aW9uUGhhc2UgX3BoYXNlOwpAQCAtNzEsNyArNzIsNyBAQCB0eXBlZGVm
IE5TX0VOVU0oTlNJbnRlZ2VyLCBEYXRhSW50ZXJhY3Rpb25QaGFzZSkgewogQHByb3BlcnR5IChu
b25hdG9taWMpIEJPT0wgc2hvdWxkRW5zdXJlVUlBcHBsaWNhdGlvbjsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljKSBCbG9ja1B0cjxCT09MKF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICopPiBzaG93Q3Vz
dG9tQWN0aW9uU2hlZXRCbG9jazsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCbG9ja1B0cjxOU0Fy
cmF5ICooTlNBcnJheSAqKT4gY29udmVydEl0ZW1Qcm92aWRlcnNCbG9jazsKLUBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBzdHJvbmcpIFVJSXRlbVByb3ZpZGVyICpleHRlcm5hbEl0ZW1Qcm92aWRlcjsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBzdHJvbmcpIE5TQXJyYXkgKmV4dGVybmFsSXRlbVByb3Zp
ZGVyczsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheSAqc291cmNlSXRl
bVByb3ZpZGVyczsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheSAqb2Jz
ZXJ2ZWRFdmVudE5hbWVzOwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5
ICpmaW5hbFNlbGVjdGlvblJlY3RzOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9p
b3MvRGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3Mv
RGF0YUludGVyYWN0aW9uU2ltdWxhdG9yLm1tCmluZGV4IGFlMTZjOWQ4ODQ2NDY1YmQ2YTUzYTA0
ODkwMTI4NjBhNDA3MGJmYjguLmE1NjQ1MTdlYzhhZjM1MDdjZWRlYmM1NmU2ODAwYTM1ZTQyZDlm
MDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RhdGFJbnRlcmFjdGlvblNp
bXVsYXRvci5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EYXRhSW50ZXJhY3Rpb25T
aW11bGF0b3IubW0KQEAgLTEwMSw2ICsxMDEsNyBAQCBzdGF0aWMgTlNBcnJheSAqZGF0YUludGVy
YWN0aW9uRXZlbnROYW1lcygpCiAgICAgX2ZpbmFsU2VsZWN0aW9uUmVjdHMgPSBAWyBdOwogICAg
IF9kYXRhSW50ZXJhY3Rpb25TZXNzaW9uID0gbmlsOwogICAgIF9kYXRhT3BlcmF0aW9uU2Vzc2lv
biA9IG5pbDsKKyAgICBfc2hvdWxkUGVyZm9ybU9wZXJhdGlvbiA9IE5POwogfQogCiAtIChOU0Fy
cmF5ICopb2JzZXJ2ZWRFdmVudE5hbWVzCkBAIC0xMzksOCArMTQwLDggQEAgc3RhdGljIE5TQXJy
YXkgKmRhdGFJbnRlcmFjdGlvbkV2ZW50TmFtZXMoKQogICAgIF9zdGFydExvY2F0aW9uID0gc3Rh
cnRMb2NhdGlvbjsKICAgICBfZW5kTG9jYXRpb24gPSBlbmRMb2NhdGlvbjsKIAotICAgIGlmIChz
ZWxmLmV4dGVybmFsSXRlbVByb3ZpZGVyKSB7Ci0gICAgICAgIF9kYXRhT3BlcmF0aW9uU2Vzc2lv
biA9IGFkb3B0TlMoW1tNb2NrRGF0YU9wZXJhdGlvblNlc3Npb24gYWxsb2NdIGluaXRXaXRoUHJv
dmlkZXI6c2VsZi5leHRlcm5hbEl0ZW1Qcm92aWRlciBsb2NhdGlvbjpfc3RhcnRMb2NhdGlvbiB3
aW5kb3c6W193ZWJWaWV3IHdpbmRvd11dKTsKKyAgICBpZiAoc2VsZi5leHRlcm5hbEl0ZW1Qcm92
aWRlcnMuY291bnQpIHsKKyAgICAgICAgX2RhdGFPcGVyYXRpb25TZXNzaW9uID0gYWRvcHROUyhb
W01vY2tEYXRhT3BlcmF0aW9uU2Vzc2lvbiBhbGxvY10gaW5pdFdpdGhQcm92aWRlcnM6c2VsZi5l
eHRlcm5hbEl0ZW1Qcm92aWRlcnMgbG9jYXRpb246X3N0YXJ0TG9jYXRpb24gd2luZG93Oltfd2Vi
VmlldyB3aW5kb3ddXSk7CiAgICAgICAgIF9waGFzZSA9IERhdGFJbnRlcmFjdGlvbkJlZ2FuOwog
ICAgICAgICBbc2VsZiBfYWR2YW5jZVByb2dyZXNzXTsKICAgICB9IGVsc2UgewpAQCAtMTY4LDYg
KzE2OSwyMiBAQCBzdGF0aWMgTlNBcnJheSAqZGF0YUludGVyYWN0aW9uRXZlbnROYW1lcygpCiAg
ICAgcmV0dXJuIF9maW5hbFNlbGVjdGlvblJlY3RzLmdldCgpOwogfQogCistICh2b2lkKV9jb25j
bHVkZURhdGFJbnRlcmFjdGlvbkFuZFBlcmZvcm1PcGVyYXRpb25JZk5lY2Vzc2FyeQoreworICAg
IGlmIChfc2hvdWxkUGVyZm9ybU9wZXJhdGlvbikgeworICAgICAgICBbX3dlYlZpZXcgX3NpbXVs
YXRlRGF0YUludGVyYWN0aW9uUGVyZm9ybU9wZXJhdGlvbjpfZGF0YU9wZXJhdGlvblNlc3Npb24u
Z2V0KCldOworICAgICAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25QZXJmb3JtaW5nOworICAg
IH0gZWxzZSB7CisgICAgICAgIF9pc0RvbmVXaXRoQ3VycmVudFJ1biA9IFlFUzsKKyAgICAgICAg
X3BoYXNlID0gRGF0YUludGVyYWN0aW9uQ2FuY2VsbGVkOworICAgIH0KKworICAgIFtfd2ViVmll
dyBfc2ltdWxhdGVEYXRhSW50ZXJhY3Rpb25FbmRlZDpfZGF0YU9wZXJhdGlvblNlc3Npb24uZ2V0
KCldOworCisgICAgaWYgKF9kYXRhSW50ZXJhY3Rpb25TZXNzaW9uKQorICAgICAgICBbX3dlYlZp
ZXcgX3NpbXVsYXRlRGF0YUludGVyYWN0aW9uU2Vzc2lvbkRpZEVuZDpfZGF0YUludGVyYWN0aW9u
U2Vzc2lvbi5nZXQoKV07Cit9CisKIC0gKHZvaWQpX2FkdmFuY2VQcm9ncmVzcwogewogICAgIF9j
dXJyZW50UHJvZ3Jlc3MgKz0gcHJvZ3Jlc3NJbmNyZW1lbnRTdGVwOwpAQCAtMTc2LDEzICsxOTMs
OCBAQCBzdGF0aWMgTlNBcnJheSAqZGF0YUludGVyYWN0aW9uRXZlbnROYW1lcygpCiAgICAgW19k
YXRhT3BlcmF0aW9uU2Vzc2lvbiBzZXRNb2NrTG9jYXRpb25JbldpbmRvdzpsb2NhdGlvbkluV2lu
ZG93XTsKIAogICAgIGlmIChfY3VycmVudFByb2dyZXNzID49IDEpIHsKLSAgICAgICAgW193ZWJW
aWV3IF9zaW11bGF0ZURhdGFJbnRlcmFjdGlvblBlcmZvcm1PcGVyYXRpb246X2RhdGFPcGVyYXRp
b25TZXNzaW9uLmdldCgpXTsKLSAgICAgICAgW193ZWJWaWV3IF9zaW11bGF0ZURhdGFJbnRlcmFj
dGlvbkVuZGVkOl9kYXRhT3BlcmF0aW9uU2Vzc2lvbi5nZXQoKV07Ci0gICAgICAgIGlmIChfZGF0
YUludGVyYWN0aW9uU2Vzc2lvbikKLSAgICAgICAgICAgIFtfd2ViVmlldyBfc2ltdWxhdGVEYXRh
SW50ZXJhY3Rpb25TZXNzaW9uRGlkRW5kOl9kYXRhSW50ZXJhY3Rpb25TZXNzaW9uLmdldCgpXTsK
LQotICAgICAgICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25QZXJmb3JtaW5nOwogICAgICAgICBf
Y3VycmVudFByb2dyZXNzID0gMTsKKyAgICAgICAgW3NlbGYgX2NvbmNsdWRlRGF0YUludGVyYWN0
aW9uQW5kUGVyZm9ybU9wZXJhdGlvbklmTmVjZXNzYXJ5XTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMjAwLDcgKzIxMiw3IEBAIHN0YXRpYyBOU0FycmF5ICpkYXRhSW50ZXJhY3Rpb25F
dmVudE5hbWVzKCkKICAgICAgICAgZm9yIChXS0RhdGFJbnRlcmFjdGlvbkl0ZW0gKml0ZW0gaW4g
aXRlbXMpCiAgICAgICAgICAgICBbaXRlbVByb3ZpZGVycyBhZGRPYmplY3Q6aXRlbS5pdGVtUHJv
dmlkZXJdOwogCi0gICAgICAgIF9kYXRhT3BlcmF0aW9uU2Vzc2lvbiA9IGFkb3B0TlMoW1tNb2Nr
RGF0YU9wZXJhdGlvblNlc3Npb24gYWxsb2NdIGluaXRXaXRoUHJvdmlkZXI6aXRlbVByb3ZpZGVy
cy5maXJzdE9iamVjdCBsb2NhdGlvbjpzZWxmLl9jdXJyZW50TG9jYXRpb24gd2luZG93Oltfd2Vi
VmlldyB3aW5kb3ddXSk7CisgICAgICAgIF9kYXRhT3BlcmF0aW9uU2Vzc2lvbiA9IGFkb3B0TlMo
W1tNb2NrRGF0YU9wZXJhdGlvblNlc3Npb24gYWxsb2NdIGluaXRXaXRoUHJvdmlkZXJzOml0ZW1Q
cm92aWRlcnMgbG9jYXRpb246c2VsZi5fY3VycmVudExvY2F0aW9uIHdpbmRvdzpbX3dlYlZpZXcg
d2luZG93XV0pOwogICAgICAgICBbX2RhdGFJbnRlcmFjdGlvblNlc3Npb24gc2V0SXRlbXM6aXRl
bXNdOwogICAgICAgICBfc291cmNlSXRlbVByb3ZpZGVycyA9IGl0ZW1Qcm92aWRlcnM7CiAgICAg
ICAgIGlmIChzZWxmLnNob3dDdXN0b21BY3Rpb25TaGVldEJsb2NrKSB7CkBAIC0yMTcsNyArMjI5
LDcgQEAgc3RhdGljIE5TQXJyYXkgKmRhdGFJbnRlcmFjdGlvbkV2ZW50TmFtZXMoKQogICAgICAg
ICBfcGhhc2UgPSBEYXRhSW50ZXJhY3Rpb25FbnRlcmVkOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIERhdGFJbnRlcmFjdGlvbkVudGVyZWQ6Ci0gICAgICAgIFtfd2ViVmlldyBfc2ltdWxhdGVE
YXRhSW50ZXJhY3Rpb25VcGRhdGVkOl9kYXRhT3BlcmF0aW9uU2Vzc2lvbi5nZXQoKV07CisgICAg
ICAgIF9zaG91bGRQZXJmb3JtT3BlcmF0aW9uID0gW193ZWJWaWV3IF9zaW11bGF0ZURhdGFJbnRl
cmFjdGlvblVwZGF0ZWQ6X2RhdGFPcGVyYXRpb25TZXNzaW9uLmdldCgpXTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0yNDQsMTQgKzI1NiwxNCBAQCBz
dGF0aWMgTlNBcnJheSAqZGF0YUludGVyYWN0aW9uRXZlbnROYW1lcygpCiAgICAgcmV0dXJuIF9z
b3VyY2VJdGVtUHJvdmlkZXJzLmdldCgpOwogfQogCi0tIChVSUl0ZW1Qcm92aWRlciAqKWV4dGVy
bmFsSXRlbVByb3ZpZGVyCistIChOU0FycmF5ICopZXh0ZXJuYWxJdGVtUHJvdmlkZXJzCiB7Ci0g
ICAgcmV0dXJuIF9leHRlcm5hbEl0ZW1Qcm92aWRlci5nZXQoKTsKKyAgICByZXR1cm4gX2V4dGVy
bmFsSXRlbVByb3ZpZGVycy5nZXQoKTsKIH0KIAotLSAodm9pZClzZXRFeHRlcm5hbEl0ZW1Qcm92
aWRlcjooVUlJdGVtUHJvdmlkZXIgKilleHRlcm5hbEl0ZW1Qcm92aWRlcgorLSAodm9pZClzZXRF
eHRlcm5hbEl0ZW1Qcm92aWRlcnM6KE5TQXJyYXkgKilleHRlcm5hbEl0ZW1Qcm92aWRlcnMKIHsK
LSAgICBfZXh0ZXJuYWxJdGVtUHJvdmlkZXIgPSBleHRlcm5hbEl0ZW1Qcm92aWRlcjsKKyAgICBf
ZXh0ZXJuYWxJdGVtUHJvdmlkZXJzID0gYWRvcHROUyhbZXh0ZXJuYWxJdGVtUHJvdmlkZXJzIGNv
cHldKTsKIH0KIAogLSAoRGF0YUludGVyYWN0aW9uUGhhc2UpcGhhc2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>