<?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>120638</bug_id>
          
          <creation_ts>2013-09-03 10:08:24 -0700</creation_ts>
          <short_desc>[ATK] Implement new API in AtkText: atk_text_get_string_at_offset()</short_desc>
          <delta_ts>2013-10-09 07:15:12 -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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>gustavo</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>924063</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-03 10:08:24 -0700</bug_when>
    <thetext>New API for AtkText has been introduced in ATK 2.9.4 (see release notes in [1]) after the work started during GUADEC as part of GNOME bug 705580 [2], so now implementors such as WebKitGTK+ should provide an implementation for this new function atk_text_get_string_at_offset(), which should provide exactly the same semantics than the old atk_text_get_text_at_offset() for ATK_TEXT_BOUNDARY_*_START boundaries.

We can&apos;t just remove the implementation of the other functions yet because we can&apos;t raise the ATK dependency up to 2.9.4 yet, and also because we can&apos;t expect systems were WebKitGTK+ is running to have a new enough version of the AT-SPI2 subsystem (we would need at least AT-SPI 2.9.90 for that, see [3]), but we can add some conditional code (and tests) now so we are sure once the moment comes WebKitGTK+ will be ready to provide the requested information.

Of course, once we are sure we can assume modern enough versions of ATK and AT-SPI, we should do some cleaning in WebKitAccessibleInterfaceText.cpp and get rid of a lot of code we won&apos;t longer need, that is, the implementation of atk_text_get_text_*_offset() and the need to consider ATK_TEXT_BOUNDARY_*_END boundaries.

[1] https://mail.gnome.org/archives/gnome-accessibility-devel/2013-August/msg00021.html
[2] https://bugzilla.gnome.org/show_bug.cgi?id=705580
[3] https://mail.gnome.org/archives/gnome-accessibility-devel/2013-August/msg00022.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924073</commentid>
    <comment_count>1</comment_count>
      <attachid>210383</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-09-03 10:27:39 -0700</bug_when>
    <thetext>Created attachment 210383
Patch proposal plus new Unit tests

Here comes the patch. As commented before, part of the code that is being added here is based/depending on the one for the previous API, which will eventually be removed once we can assume modern enough versions of ATK and AT-SPI, so don&apos;t be scared of it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937837</commentid>
    <comment_count>2</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-09 01:19:48 -0700</bug_when>
    <thetext>I think it would be specially interesting to get this reviewed by other GTK guys, so I&apos;m adding Gustavo, Martin and Xan to cc as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937881</commentid>
    <comment_count>3</comment_count>
      <attachid>210383</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-10-09 04:37:28 -0700</bug_when>
    <thetext>Comment on attachment 210383
Patch proposal plus new Unit tests

View in context: https://bugs.webkit.org/attachment.cgi?id=210383&amp;action=review

Looks sane to me =)

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:1106
&gt; +static gchar* webkitAccessibleTextGetStringAtOffset(AtkText* text, gint offset, AtkTextGranularity granularity, gint* startOffset, gint* endOffset)

Nit: we have been using gints elsewhere in the a11y implementation, but I&apos;d rather use the regular types where possible to avoid confusion.

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:1110
&gt; +    // ATK_TEXT_BOUNDARY_*_END boundaries, so for now we just need to translate the

s/END/START/

&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:1140
&gt; +        g_assert_not_reached();

ASSERT_NOT_REACHED() instead?

&gt; Source/WebKit/gtk/tests/testatk.c:1402
&gt; +    webkit_web_view_set_settings(webView, settings);

This should not be needed since you&apos;re using a settings object you got from the view instead of creating a new one. Out of curiosity, why do you have to enable caret browsing here? I thought you were not using the caret to decide where to get text from.

&gt; Source/WebKit/gtk/tests/testatk.c:1450
&gt; +    webkit_web_view_set_settings(webView, settings);

Ditto.

&gt; Tools/gtk/jhbuild.modules:234
&gt; -    &lt;branch module=&quot;pub/GNOME/sources/atk/2.8/atk-2.8.0.tar.xz&quot; version=&quot;2.8.0&quot;
&gt; +    &lt;branch module=&quot;pub/GNOME/sources/atk/2.9/atk-2.9.4.tar.xz&quot; version=&quot;2.9.4&quot;
&gt;              repo=&quot;ftp.gnome.org&quot;
&gt; -            hash=&quot;sha256:b22519176226f3e07cf6d932b77852e6b6be4780977770704b32d0f4e0686df4&quot;/&gt;
&gt; +            hash=&quot;sha256:755c9582ca7cf01e5eaa0ac972376877eb365902f388262c21ea3425e0c4d631&quot;/&gt;

This will help with testing I assume? Do we not need new versions of the at-spi stuff as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937885</commentid>
    <comment_count>4</comment_count>
      <attachid>210383</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-09 05:41:24 -0700</bug_when>
    <thetext>Comment on attachment 210383
Patch proposal plus new Unit tests

View in context: https://bugs.webkit.org/attachment.cgi?id=210383&amp;action=review

Thanks for the review! See some comments below...

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:1106
&gt;&gt; +static gchar* webkitAccessibleTextGetStringAtOffset(AtkText* text, gint offset, AtkTextGranularity granularity, gint* startOffset, gint* endOffset)
&gt; 
&gt; Nit: we have been using gints elsewhere in the a11y implementation, but I&apos;d rather use the regular types where possible to avoid confusion.

This the implementation of a function from AtkText&apos;s public API, which explicitly uses gint in the signature so, while I agree with your comment, I guess in this case it&apos;s better to leave that one.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:1110
&gt;&gt; +    // ATK_TEXT_BOUNDARY_*_END boundaries, so for now we just need to translate the
&gt; 
&gt; s/END/START/

Good catch. Thanks.

&gt;&gt; Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp:1140
&gt;&gt; +        g_assert_not_reached();
&gt; 
&gt; ASSERT_NOT_REACHED() instead?

Probably yes.

&gt;&gt; Source/WebKit/gtk/tests/testatk.c:1402
&gt;&gt; +    webkit_web_view_set_settings(webView, settings);
&gt; 
&gt; This should not be needed since you&apos;re using a settings object you got from the view instead of creating a new one. Out of curiosity, why do you have to enable caret browsing here? I thought you were not using the caret to decide where to get text from.

You are right about the webkit_web_view_set_settings() part.

About the caret browsing, that&apos;s a very good point. It&apos;s just here in this patch just because these &quot;new&quot; tests are basically new versions of the ones that are already present, which probably don&apos;t need this mode to be enabled anyway other than for testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces. In other words, it might very well a nasty side effect of copy&amp;past that passed overlooked until now. I will remove this and test it locally before landing.

&gt;&gt; Source/WebKit/gtk/tests/testatk.c:1450
&gt;&gt; +    webkit_web_view_set_settings(webView, settings);
&gt; 
&gt; Ditto.

Yep

&gt;&gt; Tools/gtk/jhbuild.modules:234
&gt;&gt; +            hash=&quot;sha256:755c9582ca7cf01e5eaa0ac972376877eb365902f388262c21ea3425e0c4d631&quot;/&gt;
&gt; 
&gt; This will help with testing I assume? Do we not need new versions of the at-spi stuff as well?

It&apos;s really not needed strictly speaking, since the tests here use only ATK and not AT-SPI.

However, raising to a version of AT-SPI that do support the new API (2.9.90, featuring atspi_text_get_string_at_offset) might be a good idea anyway for two reasons:

  1. It keeps the versions of ATK and AT-SPI closer, which is usually a good idea since they use to be released (almost) together
  2. It paves the way for when we move to testing all these things from WebKit2 directly, since we do not have other way to do it there than using at-spi

I will add those bits in the patch before landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937913</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-09 07:15:12 -0700</bug_when>
    <thetext>Committed r157165: &lt;http://trac.webkit.org/changeset/157165&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210383</attachid>
            <date>2013-09-03 10:27:39 -0700</date>
            <delta_ts>2013-10-09 05:41:24 -0700</delta_ts>
            <desc>Patch proposal plus new Unit tests</desc>
            <filename>0001-2013-09-03-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>31698</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA2OTJhYTgwYTJiNGRhM2NhNWIyNGVmNGI1ZGRjM2RmOTZjNTVlNmYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogVHVlLCAzIFNlcCAyMDEzIDE1OjM5OjIwICswMTAwClN1YmplY3Q6IFtQ
QVRDSF0gMjAxMy0wOS0wMyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1
bmcuY29tPgoKICAgICAgICBbQVRLXSBJbXBsZW1lbnQgbmV3IEFQSSBpbiBBdGtUZXh0OiBhdGtf
dGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCgpCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMDYzOAoKICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KCiAgICAgICAgSW1wbGVtZW50ZWQgbmV3IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zm
c2V0KCkgQVBJLCBpbnRyb2R1Y2VkIGluCiAgICAgICAgQVRLIDIuOS40IHRvIHNpbXBsaWZ5IGhv
dyB0ZXh0IGF0IGEgZ2l2ZW4gb2Zmc2V0IGlzIHJldHJpZXZlZC4KCiAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHA6CiAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVUZXh0R2V0U3RyaW5nQXRPZmZzZXQpOiBOZXcgZnVuY3Rpb24gaW1wbGVt
ZW50aW5nCiAgICAgICAgdGhlIG5ldyBBUEksIHdoaWNoIGJhc2ljYWxseSB0cmFuc2xhdGVzIGNh
bGxzIHRvIHRoZSBuZXcgQVBJIHRvCiAgICAgICAgY2FsbHMgdG8gdGhlIG9sZCBBUEkgdXNpbmcg
J2F0JyBwb3NpdGlvbnMgYW5kIFNUQVJUIGJvdW5kYXJpZXMuCiAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUZXh0SW50ZXJmYWNlSW5pdCk6IEhvb2sgdGhlIG5ldyBmdW5jdGlvbi4KCjIwMTMtMDkt
MDMgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KCiAgICAg
ICAgW0FUS10gSW1wbGVtZW50IG5ldyBBUEkgaW4gQXRrVGV4dDogYXRrX3RleHRfZ2V0X3N0cmlu
Z19hdF9vZmZzZXQoKQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjA2MzgKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAg
IFVwZGF0ZSBBVEsgdW5pdCB0ZXN0IHRvIGNoZWNrIHRoZSBuZXcgQVBJIGFzIHdlbGwgaWYgdGhl
IHZlcnNpb24KICAgICAgICBvZiBBVEsgaXMgbmV3IGVub3VnaC4KCiAgICAgICAgKiB0ZXN0cy90
ZXN0YXRrLmM6CiAgICAgICAgKHRlc3RHZXRTdHJpbmdGdW5jdGlvbik6IE5ldyBoZWxwZXIgZnVu
Y3Rpb24sIHRvIGNoZWNrIHRoZSBuZXcgQVBJLgogICAgICAgIChydW5HZXRTdHJpbmdUZXN0cyk6
IERpdHRvLgogICAgICAgICh0ZXN0V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZzZXQpOiBOZXcgdW5p
dCB0ZXN0LCBzaW1pbGFyIHRvIHRoZQogICAgICAgIG9uZSBhbHJlYWR5IHByZXNlbnQgdG8gY2hl
Y2sgdGhlIG9sZCBBUEkgYnV0IGZvY3VzZWQgaW4gdGhlIG5ldyBvbmUuCiAgICAgICAgKHRlc3RX
ZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldE5ld2xpbmVzKTogRGl0dG8uCiAgICAgICAgKHRlc3RX
ZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldFRleHRhcmVhKTogRGl0dG8uCiAgICAgICAgKHRlc3RX
ZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldFRleHRJbnB1dCk6IERpdHRvLgogICAgICAgICh0ZXN0
V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZzZXRXaXRoUHJlZm9ybWF0dGVkVGV4dCk6IERpdHRvLgog
ICAgICAgICh0ZXN0V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZzZXRXaXRoU3BlY2lhbENoYXJhY3Rl
cnMpOiBEaXR0by4KICAgICAgICAodGVzdFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aFdy
YXBwZWRMaW5lcyk6IERpdHRvLgogICAgICAgICh0ZXN0V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZz
ZXRXaXRoRW1iZWRkZWRPYmplY3RzKTogRGl0dG8uCiAgICAgICAgKHRlc3RXZWJraXRBdGtHZXRF
eHRlbnRzKTogQWRkIGNoZWNrcyBmb3IgdGhlIG5ldyBBUEksIGlmIHBvc3NpYmxlLgogICAgICAg
ICh0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKTogRGl0dG8uCiAgICAgICAgKG1h
aW4pOiBBZGQgdGhlIG5ldyB1bml0IHRlc3RzIHRvIGNoZWNrIHRoZSBuZXcgQVBJLCBpZiBwb3Nz
aWJsZS4KCjIwMTMtMDktMDMgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gSW1wbGVtZW50IG5ldyBBUEkgaW4gQXRrVGV4dDogYXRr
X3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoKQogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2MzgKCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCgogICAgICAgICogZ3RrL2poYnVpbGQubW9kdWxlczogUmFpc2VkIEFUSyB2ZXJzaW9u
IHRvIDIuOS40LCBzbyB3ZSBjYW4KICAgICAgICBjaGVjayBib3RoIHRoZSBvbGQgYW5kIG5ldyBB
UElzIHRvIHJldHJpZXZlIHRleHQgYXQgYSBnaXZlbiBvZmZzZXQuCi0tLQogU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKIC4uLi9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwICAgICAgICAgIHwgICA0NiArKysKIFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiAr
KwogU291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jICAgICAgICAgICAgICAgICAgfCAg
NDA4ICsrKysrKysrKysrKysrKysrKystCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKwogVG9vbHMvZ3RrL2poYnVpbGQubW9kdWxlcyAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiA2IGZpbGVzIGNoYW5nZWQsIDUwNyBp
bnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOGIxODQyLi5jNTFk
NzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTMtMDktMDMgIE1hcmlvIFNhbmNo
ZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbQVRLXSBJbXBs
ZW1lbnQgbmV3IEFQSSBpbiBBdGtUZXh0OiBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCgp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2MzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnRlZCBuZXcgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoKSBBUEksIGludHJvZHVjZWQg
aW4KKyAgICAgICAgQVRLIDIuOS40IHRvIHNpbXBsaWZ5IGhvdyB0ZXh0IGF0IGEgZ2l2ZW4gb2Zm
c2V0IGlzIHJldHJpZXZlZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0U3RyaW5nQXRPZmZzZXQpOiBOZXcgZnVuY3Rpb24gaW1wbGVtZW50aW5nCisgICAgICAgIHRo
ZSBuZXcgQVBJLCB3aGljaCBiYXNpY2FsbHkgdHJhbnNsYXRlcyBjYWxscyB0byB0aGUgbmV3IEFQ
SSB0bworICAgICAgICBjYWxscyB0byB0aGUgb2xkIEFQSSB1c2luZyAnYXQnIHBvc2l0aW9ucyBh
bmQgU1RBUlQgYm91bmRhcmllcy4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJm
YWNlSW5pdCk6IEhvb2sgdGhlIG5ldyBmdW5jdGlvbi4KKwogMjAxMy0wOS0wMyAgWmFuIERvYmVy
c2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTU0OTY3
KTogaHR0cCBhcHBjYWNoZSB0ZXN0cyBjcmFzaGluZyBvbiBXSzEKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VUZXh0LmNwcAppbmRleCBmMTdjZGMxLi4wMzE5ZGJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRleHQuY3BwCkBAIC0xMTAyLDYgKzExMDIsNDggQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2lu
dCBvZmZzZXQpCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKKyNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigy
LCA5LCA0KQorc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFN0cmluZ0F0T2Zm
c2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBBdGtUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGdpbnQqIHN0YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCit7CisgICAgLy8gVGhp
cyBuZXcgQVBJIGhhcyBiZWVuIGRlc2lnbmVkIHRvIHNpbXBsaWZ5IHRoZSBBdGtUZXh0IGludGVy
ZmFjZSBhbmQgaXQgaGFzIGJlZW4KKyAgICAvLyBkZXNpZ25lZCB0byBrZWVwIGV4YWN0bHkgdGhl
IHNhbWUgYmVoYXZpb3VyIHRoZSBhdGtfdGV4dF9nZXRfdGV4dF9hdF90ZXh0KCkgZm9yCisgICAg
Ly8gQVRLX1RFWFRfQk9VTkRBUllfKl9FTkQgYm91bmRhcmllcywgc28gZm9yIG5vdyB3ZSBqdXN0
IG5lZWQgdG8gdHJhbnNsYXRlIHRoZQorICAgIC8vIGdyYW51bGFyaXR5IHRvIHRoZSByaWdodCBv
bGQgYm91bmRhcnkgYW5kIHJldXNlIHRoZSBjb2RlIGZvciB0aGUgb2xkIEFQSS4KKyAgICAvLyBI
b3dldmVyLCB0aGlzIHNob3VsZCBiZSBzaW1wbGlmaWVkIGxhdGVyIG9uIChhbmQgYSBsb3Qgb2Yg
Y29kZSByZW1vdmVkKSBvbmNlCisgICAgLy8gV2ViS2l0R1RLKyBkZXBlbmRzIG9uIEFUSyA+PSAy
LjkuNCAqYW5kKiBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IGEgdmVyc2lvbiBvZgorICAgIC8vIEFU
LVNQSTIgbmV3IGVub3VnaCBub3QgdG8gaW5jbHVkZSB0aGUgb2xkIEFQSXMgaXMgYmVpbmcgdXNl
ZC4gQnV0IHVudGlsIHRoZW4sCisgICAgLy8gd2Ugd2lsbCBoYXZlIHRvIGxpdmUgd2l0aCBib3Ro
IHRoZSBvbGQgYW5kIG5ldyBBUElzIGltcGxlbWVudGVkIGhlcmUuCisgICAgQXRrVGV4dEJvdW5k
YXJ5IGJvdW5kYXJ5VHlwZSA9IEFUS19URVhUX0JPVU5EQVJZX0NIQVI7CisgICAgc3dpdGNoIChn
cmFudWxhcml0eSkgeworICAgIGNhc2UgQVRLX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUjoKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIEFUS19URVhUX0dSQU5VTEFSSVRZX1dPUkQ6CisgICAgICAg
IGJvdW5kYXJ5VHlwZSA9IEFUS19URVhUX0JPVU5EQVJZX1dPUkRfU1RBUlQ7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBBVEtfVEVYVF9HUkFOVUxBUklUWV9TRU5URU5DRToKKyAgICAgICAg
Ym91bmRhcnlUeXBlID0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQ7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FOgorICAgICAgICBi
b3VuZGFyeVR5cGUgPSBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJUOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgQVRLX1RFWFRfR1JBTlVMQVJJVFlfUEFSQUdSQVBIOgorICAgICAgICAv
LyBGSVhNRTogVGhpcyBoYXMgbm90IGJlZW4gYSBuZWVkIHdpdGggdGhlIG9sZCBBdGtUZXh0IEFQ
SSwgd2hpY2ggbWVhbnMgQVRzIHdvbid0CisgICAgICAgIC8vIG5lZWQgaXQgeWV0IGZvciBzb21l
IHRpbWUsIHNvIHdlIGNhbiBza2lwIGl0IGZvciBub3cuCisgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgICAgIHJldHVybiBnX3N0cmR1cCgiIik7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIHJldHVybiB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFRleHRGb3JPZmZzZXQodGV4dCwgb2Zmc2V0LCBib3VuZGFyeVR5cGUsIEdl
dFRleHRQb3NpdGlvbkF0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKK30KKyNlbmRpZgorCiB2
b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJmYWNlSW5pdChBdGtUZXh0SWZhY2UqIGlmYWNl
KQogewogICAgIGlmYWNlLT5nZXRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dDsK
QEAgLTExMjIsNiArMTE2NCwxMCBAQCB2b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJmYWNl
SW5pdChBdGtUZXh0SWZhY2UqIGlmYWNlKQogICAgIGlmYWNlLT5yZW1vdmVfc2VsZWN0aW9uID0g
d2Via2l0QWNjZXNzaWJsZVRleHRSZW1vdmVTZWxlY3Rpb247CiAgICAgaWZhY2UtPnNldF9zZWxl
Y3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbjsKICAgICBpZmFjZS0+c2V0
X2NhcmV0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0Q2FyZXRPZmZzZXQ7CisKKyNp
ZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCA5LCA0KQorICAgIGlmYWNlLT5nZXRfc3RyaW5nX2F0X29m
ZnNldCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U3RyaW5nQXRPZmZzZXQ7CisjZW5kaWYKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMWEyZDVkMi4uNjhkZGM1MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTA5LTAzICBNYXJpbyBTYW5jaGV6IFByYWRh
ICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gSW1wbGVtZW50IG5l
dyBBUEkgaW4gQXRrVGV4dDogYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNjM4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEFUSyB1bml0
IHRlc3QgdG8gY2hlY2sgdGhlIG5ldyBBUEkgYXMgd2VsbCBpZiB0aGUgdmVyc2lvbgorICAgICAg
ICBvZiBBVEsgaXMgbmV3IGVub3VnaC4KKworICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKKyAg
ICAgICAgKHRlc3RHZXRTdHJpbmdGdW5jdGlvbik6IE5ldyBoZWxwZXIgZnVuY3Rpb24sIHRvIGNo
ZWNrIHRoZSBuZXcgQVBJLgorICAgICAgICAocnVuR2V0U3RyaW5nVGVzdHMpOiBEaXR0by4KKyAg
ICAgICAgKHRlc3RXZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldCk6IE5ldyB1bml0IHRlc3QsIHNp
bWlsYXIgdG8gdGhlCisgICAgICAgIG9uZSBhbHJlYWR5IHByZXNlbnQgdG8gY2hlY2sgdGhlIG9s
ZCBBUEkgYnV0IGZvY3VzZWQgaW4gdGhlIG5ldyBvbmUuCisgICAgICAgICh0ZXN0V2Via2l0QXRr
R2V0U3RyaW5nQXRPZmZzZXROZXdsaW5lcyk6IERpdHRvLgorICAgICAgICAodGVzdFdlYmtpdEF0
a0dldFN0cmluZ0F0T2Zmc2V0VGV4dGFyZWEpOiBEaXR0by4KKyAgICAgICAgKHRlc3RXZWJraXRB
dGtHZXRTdHJpbmdBdE9mZnNldFRleHRJbnB1dCk6IERpdHRvLgorICAgICAgICAodGVzdFdlYmtp
dEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aFByZWZvcm1hdHRlZFRleHQpOiBEaXR0by4KKyAgICAg
ICAgKHRlc3RXZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldFdpdGhTcGVjaWFsQ2hhcmFjdGVycyk6
IERpdHRvLgorICAgICAgICAodGVzdFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aFdyYXBw
ZWRMaW5lcyk6IERpdHRvLgorICAgICAgICAodGVzdFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0
V2l0aEVtYmVkZGVkT2JqZWN0cyk6IERpdHRvLgorICAgICAgICAodGVzdFdlYmtpdEF0a0dldEV4
dGVudHMpOiBBZGQgY2hlY2tzIGZvciB0aGUgbmV3IEFQSSwgaWYgcG9zc2libGUuCisgICAgICAg
ICh0ZXN0V2Via2l0QXRrTGlua3NXaXRoSW5saW5lSW1hZ2VzKTogRGl0dG8uCisgICAgICAgICht
YWluKTogQWRkIHRoZSBuZXcgdW5pdCB0ZXN0cyB0byBjaGVjayB0aGUgbmV3IEFQSSwgaWYgcG9z
c2libGUuCisKIDIwMTMtMDktMDIgIEJyaWFuIEhvbHQgIDxicmlhbi5ob2x0QHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtBVEtdIExlYWs6IExlYWtzIGluIHRlc3RhdGsuYwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvdGVzdGF0ay5jIGIvU291cmNlL1dlYktpdC9ndGsvdGVz
dHMvdGVzdGF0ay5jCmluZGV4IDdlODY4NzkuLjA3NDNiYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay90ZXN0cy90
ZXN0YXRrLmMKQEAgLTExMzksNiArMTEzOSwzNjUgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0
a0dldFRleHRBdE9mZnNldFdpdGhFbWJlZGRlZE9iamVjdHMoKQogICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXcpOwogfQogCisjaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgOSwgNCkKK3R5cGVkZWYg
Z2NoYXIqICgqQXRrR2V0U3RyaW5nRnVuY3Rpb24pIChBdGtUZXh0KiwgZ2ludCwgQXRrVGV4dEdy
YW51bGFyaXR5LCBnaW50KiwgZ2ludCopOworCitzdGF0aWMgdm9pZCB0ZXN0R2V0U3RyaW5nRnVu
Y3Rpb24oQXRrVGV4dCogdGV4dE9iamVjdCwgQXRrR2V0U3RyaW5nRnVuY3Rpb24gZm4sIEF0a1Rl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgZ2ludCBvZmZzZXQsIGNvbnN0IGNoYXIqIHRleHRS
ZXN1bHQsIGdpbnQgc3RhcnRPZmZzZXRSZXN1bHQsIGdpbnQgZW5kT2Zmc2V0UmVzdWx0KQorewor
ICAgIGdpbnQgc3RhcnRPZmZzZXQ7CisgICAgZ2ludCBlbmRPZmZzZXQ7CisgICAgY2hhciogdGV4
dCA9IGZuKHRleHRPYmplY3QsIG9mZnNldCwgZ3JhbnVsYXJpdHksICZzdGFydE9mZnNldCwgJmVu
ZE9mZnNldCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCB0ZXh0UmVzdWx0KTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCBzdGFydE9mZnNldFJlc3VsdCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIGVuZE9mZnNldFJlc3VsdCk7CisgICAg
Z19mcmVlKHRleHQpOworfQorCitzdGF0aWMgdm9pZCBydW5HZXRTdHJpbmdUZXN0cyhBdGtUZXh0
KiB0ZXh0T2JqZWN0KQoreworICAgIGNoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0
T2JqZWN0LCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiVGhpcyBpcyBh
IHRlc3QuIFRoaXMgaXMgdGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLiIp
OworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIC8qIEFUS19URVhUX0dSQU5VTEFSSVRZX0NIQVIg
Ki8KKyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3N0
cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX0NIQVIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAiVCIsIDAsIDEpOworCisgICAgLyogQVRLX1RFWFRfR1JBTlVMQVJJVFlf
V09SRCAqLworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9n
ZXRfc3RyaW5nX2F0X29mZnNldCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfV09SRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICJUaGlzICIsIDAsIDUpOworCisgICAgdGVzdEdldFN0cmluZ0Z1
bmN0aW9uKHRleHRPYmplY3QsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9HUkFOVUxBUklUWV9XT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgNCwgIlRoaXMgIiwg
MCwgNSk7CisKKyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRf
Z2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX1dPUkQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAxMCwgInRlc3QuICIsIDEwLCAxNik7CisKKyAgICB0ZXN0R2V0U3Ry
aW5nRnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFU
S19URVhUX0dSQU5VTEFSSVRZX1dPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICA1OCwgInRo
aXJkLiIsIDU4LCA2NCk7CisKKyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24odGV4dE9iamVjdCwg
YXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX1dPUkQs
CisgICAgICAgICAgICAgICAgICAgICAgICA2NCwgInRoaXJkLiIsIDU4LCA2NCk7CisKKyAgICAv
KiBBVEtfVEVYVF9HUkFOVUxBUklUWV9TRU5URU5DRSAqLworICAgIHRlc3RHZXRTdHJpbmdGdW5j
dGlvbih0ZXh0T2JqZWN0LCBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCwgQVRLX1RFWFRf
R1JBTlVMQVJJVFlfU0VOVEVOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiVGhpcyBp
cyBhIHRlc3QuICIsIDAsIDE2KTsKKworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbih0ZXh0T2Jq
ZWN0LCBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlf
U0VOVEVOQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAxNSwgIlRoaXMgaXMgYSB0ZXN0LiAi
LCAwLCAxNik7CisKKyAgICAvKiBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FICovCisgICAgLyog
SXQncyB0cmlja3kgdG8gdGVzdCB0aGVzZSBwcm9wZXJseSByaWdodCBub3csIHNpbmNlIG91ciBh
MTF5CisgICAgICAgaW1wbGVtZW50YXRpb24gc3BsaXRzIGRpZmZlcmVudCBsaW5lcyBpbiBkaWZm
ZXJlbnQgYTExeSBpdGVtcy4gKi8KKyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24odGV4dE9iamVj
dCwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJ
TkUsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAiVGhpcyBpcyBhIHRlc3QuIFRoaXMgaXMg
dGhlIHNlY29uZCBzZW50ZW5jZS4gQW5kIHRoaXMgdGhlIHRoaXJkLiIsIDAsIDY0KTsKKworICAg
IC8qIEZvciBvYmplY3RzIGltcGxlbWVudGluZyBBdGtFZGl0YWJsZVRleHQsIHRyeSB0byBjaGFu
Z2UgdGhlCisgICAgICAgZXhwb3NlZCB0ZXh0IGFuZCByZXRyaWV2ZSBpdCBhZ2FpbiBhcyBhIGZ1
bGwgbGluZS4KKyAgICAgICAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MjgzMCkgKi8KKyAgICBpZiAoQVRLX0lTX0VESVRBQkxFX1RFWFQodGV4dE9iamVjdCkp
IHsKKyAgICAgICAgYXRrX2VkaXRhYmxlX3RleHRfc2V0X3RleHRfY29udGVudHMoQVRLX0VESVRB
QkxFX1RFWFQodGV4dE9iamVjdCksICJmb28gYmFyIGJheiIpOworICAgICAgICB0ZXN0R2V0U3Ry
aW5nRnVuY3Rpb24odGV4dE9iamVjdCwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFU
S19URVhUX0dSQU5VTEFSSVRZX0xJTkUsIDAsICJmb28gYmFyIGJheiIsIDAsIDExKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldCgpCit7Cisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtp
dF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50cywgMCwgMCwgMCk7CisKKyAg
ICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLworICAgIEF0a09iamVjdCog
b2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3Qp
OworICAgIG9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAw
KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrVGV4dCogdGV4dE9iamVjdCA9IEFU
S19URVhUKG9iamVjdCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iamVjdCkpOwor
CisgICAgcnVuR2V0U3RyaW5nVGVzdHModGV4dE9iamVjdCk7CisKKyAgICBnX29iamVjdF91bnJl
ZihvYmplY3QpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZzZXROZXdsaW5lcygpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkp
OworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2Nh
dGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmll
d19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c1dpdGhOZXdsaW5lcywgMCwgMCwgMCk7CisK
KyAgICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLworICAgIEF0a09iamVj
dCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmpl
Y3QpOworICAgIG9iamVjdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0
LCAwKTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisgICAgQXRrVGV4dCogdGV4dE9iamVjdCA9
IEFUS19URVhUKG9iamVjdCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQodGV4dE9iamVjdCkp
OworCisgICAgcnVuR2V0U3RyaW5nVGVzdHModGV4dE9iamVjdCk7CisKKyAgICBnX29iamVjdF91
bnJlZihvYmplY3QpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZzZXRUZXh0YXJlYSgpCit7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3
KCkpOworICAgIGdfb2JqZWN0X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24g
YWxsb2NhdGlvbiA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxs
b2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJf
dmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjb250ZW50c0luVGV4dGFyZWEsIDAsIDAsIDApOwor
CisgICAgLyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmpl
Y3QqIG9iamVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2Jq
ZWN0KTsKKyAgICBBdGtPYmplY3QqIGNoaWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9j
aGlsZChvYmplY3QsIDApOworICAgIGdfYXNzZXJ0KGNoaWxkKTsKKyAgICBBdGtPYmplY3QqIGdy
YW5kY2hpbGQgPSBhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGNoaWxkLCAwKTsKKyAg
ICBnX2Fzc2VydChncmFuZGNoaWxkKTsKKworICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtf
VEVYVChncmFuZGNoaWxkKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqZWN0KSk7
CisKKyAgICBydW5HZXRTdHJpbmdUZXN0cyh0ZXh0T2JqZWN0KTsKKworICAgIGdfb2JqZWN0X3Vu
cmVmKGNoaWxkKTsKKyAgICBnX29iamVjdF91bnJlZihncmFuZGNoaWxkKTsKKyAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFN0cmlu
Z0F0T2Zmc2V0VGV4dElucHV0KCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Np
bmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAs
IDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcp
LCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcs
IGNvbnRlbnRzSW5UZXh0SW5wdXQsIDAsIDAsIDApOworCisgICAgLyogR2V0IHRvIHRoZSBpbm5l
ciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdldFdlYkFyZWFP
YmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKyAgICBBdGtPYmplY3QqIGNo
aWxkID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDApOworICAgIGdf
YXNzZXJ0KGNoaWxkKTsKKyAgICBBdGtPYmplY3QqIGdyYW5kY2hpbGQgPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKGNoaWxkLCAwKTsKKyAgICBnX2Fzc2VydChncmFuZGNoaWxkKTsK
KworICAgIEF0a1RleHQqIHRleHRPYmplY3QgPSBBVEtfVEVYVChncmFuZGNoaWxkKTsKKyAgICBn
X2Fzc2VydChBVEtfSVNfVEVYVCh0ZXh0T2JqZWN0KSk7CisKKyAgICBydW5HZXRTdHJpbmdUZXN0
cyh0ZXh0T2JqZWN0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkKTsKKyAgICBnX29iamVj
dF91bnJlZihncmFuZGNoaWxkKTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aFByZWZvcm1hdHRl
ZFRleHQoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3KTsK
KyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAsIDAsIDgwMCwgNjAwIH07CisgICAg
Z3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQod2ViVmlldyksICZhbGxvY2F0aW9u
KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY29udGVudHNXaXRo
UHJlZm9ybWF0dGVkVGV4dCwgMCwgMCwgMCk7CisKKyAgICBBdGtPYmplY3QqIG9iamVjdCA9IGdl
dFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsKKworICAgIEF0
a09iamVjdCogcHJlZm9ybWF0dGVkVGV4dCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqZWN0LCAwKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfT0JKRUNUKHByZWZvcm1hdHRlZFRl
eHQpKTsKKyAgICBnX2Fzc2VydChhdGtfb2JqZWN0X2dldF9yb2xlKHByZWZvcm1hdHRlZFRleHQp
ID09IEFUS19ST0xFX1BBTkVMKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChwcmVmb3JtYXR0
ZWRUZXh0KSk7CisgICAgY2hhciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBy
ZWZvcm1hdHRlZFRleHQpLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
XHRcblx0Zmlyc3QgbGluZVxuXHRzZWNvbmQgbGluZVxuIik7CisgICAgZ19mcmVlKHRleHQpOwor
CisgICAgLyogVHJ5IHJldHJpZXZpbmcgYWxsIHRoZSBsaW5lcyBpbmRpY2F0aW5nIHRoZSBwb3Np
dGlvbiBvZiB0aGUgb2Zmc2V0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggb2YgdGhlbS4gKi8K
KyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24oQVRLX1RFWFQocHJlZm9ybWF0dGVkVGV4dCksIGF0
a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAw
LCAiXHRcbiIsIDAsIDIpOworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbihBVEtfVEVYVChwcmVm
b3JtYXR0ZWRUZXh0KSwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dS
QU5VTEFSSVRZX0xJTkUsIDIsICJcdGZpcnN0IGxpbmVcbiIsIDIsIDE0KTsKKyAgICB0ZXN0R2V0
U3RyaW5nRnVuY3Rpb24oQVRLX1RFWFQocHJlZm9ybWF0dGVkVGV4dCksIGF0a190ZXh0X2dldF9z
dHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAxNCwgIlx0c2Vjb25k
IGxpbmVcbiIsIDE0LCAyNyk7CisKKyAgICBnX29iamVjdF91bnJlZihwcmVmb3JtYXR0ZWRUZXh0
KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdl
YmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aFNwZWNpYWxDaGFyYWN0ZXJzKCkKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19u
ZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0a193aWRnZXRfc2l6ZV9h
bGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2NhdGlvbik7CisgICAgd2Via2l0X3dl
Yl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRlbnRzV2l0aFNwZWNpYWxDaGFycywgMCwg
MCwgMCk7CisKKyAgICAvKiBHZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLworICAg
IEF0a09iamVjdCogb2JqZWN0ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fz
c2VydChvYmplY3QpOworCisgICAgQXRrT2JqZWN0KiBwYXJhZ3JhcGggPSBhdGtfb2JqZWN0X3Jl
Zl9hY2Nlc3NpYmxlX2NoaWxkKG9iamVjdCwgMCk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQo
cGFyYWdyYXBoKSk7CisKKyAgICBnY2hhciogZXhwZWN0ZWRUZXh0ID0gZ19zdHJkdXAoIlwzMDJc
MjUzXDMwMlwyNDBUaGlzIGlzIGEgcGFyYWdyYXBoIHdpdGggXDM0MlwyMDBcMjM0c3BlY2lhbFwz
NDJcMjAwXDIzNSBjaGFyYWN0ZXJzIGluc2lkZS5cMzAyXDI0MFwzMDJcMjczIik7CisgICAgY2hh
ciogdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIC0xKTsK
KyAgICBnX2Fzc2VydF9jbXBzdHIodGV4dCwgPT0sIGV4cGVjdGVkVGV4dCk7CisgICAgZ19mcmVl
KHRleHQpOworCisgICAgLyogQ2hlY2sgdGhhdCBnZXR0aW5nIHRoZSB0ZXh0IHdpdGggQVRLX1RF
WFRfQk9VTkRBUllfTElORV9TVEFSVCBkb2VzIG5vdCBjcmFzaAorICAgICAgIGJlY2F1c2Ugb2Yg
bm90IHByb3Blcmx5IGhhbmRsaW5nIGNoYXJhY3RlcnMgaW5zaWRlIHRoZSBVVEYtOCBzdHJpbmcu
ICovCisgICAgdGVzdEdldFN0cmluZ0Z1bmN0aW9uKEFUS19URVhUKHBhcmFncmFwaCksIGF0a190
ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAwLCBl
eHBlY3RlZFRleHQsIDAsIDU3KTsKKyAgICBnX2ZyZWUoZXhwZWN0ZWRUZXh0KTsKKworICAgIEF0
a09iamVjdCogbGlzdCA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAx
KTsKKyAgICBnX2Fzc2VydChBVEtfT0JKRUNUKGxpc3QpKTsKKworICAgIEF0a1RleHQqIGxpc3RJ
dGVtID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChsaXN0LCAwKSk7
CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobGlzdEl0ZW0pKTsKKworICAgIHRleHQgPSBhdGtf
dGV4dF9nZXRfdGV4dChBVEtfVEVYVChsaXN0SXRlbSksIDAsIC0xKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIodGV4dCwgPT0sICJcMzQyXDIwMFwyNDIgTGlzdCBpdGVtIHdpdGggc29tZSB0ZXh0IHRo
YXQgd3JhcHMgYWNyb3NzIGRpZmZlcmVudCBsaW5lcy4iKTsKKyAgICBnX2ZyZWUodGV4dCk7CisK
KyAgICAvKiBDaGVjayB0aGF0IGdldHRpbmcgdGhlIHRleHQgd2l0aCBBVEtfVEVYVF9CT1VOREFS
WV9MSU5FX1NUQVJUCisgICAgICAgYW5kIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfRU5EIGZvciBs
aW5lIGl0ZW1zIHdpdGggYnVsbGV0cworICAgICAgIChzcGVjaWFsIGNoYXJhY3RlcikgYW5kIHdy
YXBwZWQgdGV4dCBhbHdheXMgcmV0dXJuIHRoZSByaWdodAorICAgICAgIHBpZWNlIG9mIHRleHQg
Zm9yIGVhY2ggbGluZS4gKi8KKyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24oQVRLX1RFWFQobGlz
dEl0ZW0pLCBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCwgQVRLX1RFWFRfR1JBTlVMQVJJ
VFlfTElORSwgMywgIlwzNDJcMjAwXDI0MiBMaXN0IGl0ZW0gIiwgMCwgMTIpOworICAgIHRlc3RH
ZXRTdHJpbmdGdW5jdGlvbihBVEtfVEVYVChsaXN0SXRlbSksIGF0a190ZXh0X2dldF9zdHJpbmdf
YXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FLCAxMywgIndpdGggc29tZSAiLCAx
MiwgMjIpOworCisgICAgZ19vYmplY3RfdW5yZWYobGlzdEl0ZW0pOworCisgICAgbGlzdEl0ZW0g
PSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKGxpc3QsIDEpKTsKKyAg
ICBnX2Fzc2VydChBVEtfSVNfVEVYVChsaXN0SXRlbSkpOworCisgICAgLyogQ2hlY2sgdGhhdCBw
bGFjaW5nIHRoZSBzYW1lIHRleHQgaW4gYSBwYXJhZ3JhcGggZG9lc24ndCBicmVhayB0aGluZ3Mu
ICovCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKGxpc3RJdGVtKSwgMCwg
LTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlwzNDJcMjAwXDI0MiBMaXN0IGl0
ZW0gd2l0aCBzb21lIHRleHQgdGhhdCB3cmFwcyBhY3Jvc3MgZGlmZmVyZW50IGxpbmVzLiIpOwor
ICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbihBVEtfVEVYVChs
aXN0SXRlbSksIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxB
UklUWV9MSU5FLCAzLCAiXDM0MlwyMDBcMjQyIExpc3QgaXRlbSAiLCAwLCAxMik7CisgICAgdGVz
dEdldFN0cmluZ0Z1bmN0aW9uKEFUS19URVhUKGxpc3RJdGVtKSwgYXRrX3RleHRfZ2V0X3N0cmlu
Z19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsIDEzLCAid2l0aCBzb21lICIs
IDEyLCAyMik7CisKKyAgICBnX29iamVjdF91bnJlZihsaXN0KTsKKyAgICBnX29iamVjdF91bnJl
ZihsaXN0SXRlbSk7CisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKKyAgICBnX29iamVj
dF91bnJlZih3ZWJWaWV3KTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldFN0cmlu
Z0F0T2Zmc2V0V2l0aFdyYXBwZWRMaW5lcygpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3ZpZXdfbmV3KCkpOworICAgIGdfb2JqZWN0
X3JlZl9zaW5rKHdlYlZpZXcpOworICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jYXRpb24pOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3
ZWJWaWV3LCBjb250ZW50c1dpdGhXcmFwcGVkTGluZXMsIDAsIDAsIDApOworCisgICAgLyogRW5h
YmxlIGNhcmV0IGJyb3dzaW5nLiAqLworICAgIFdlYktpdFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyk7CisgICAgZ19vYmplY3Rfc2V0
KHNldHRpbmdzLCAiZW5hYmxlLWNhcmV0LWJyb3dzaW5nIiwgVFJVRSwgTlVMTCk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X3NldF9zZXR0aW5ncyh3ZWJWaWV3LCBzZXR0aW5ncyk7CisKKyAgICAvKiBH
ZXQgdG8gdGhlIGlubmVyIEF0a1RleHQgb2JqZWN0LiAqLworICAgIEF0a09iamVjdCogb2JqZWN0
ID0gZ2V0V2ViQXJlYU9iamVjdCh3ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChvYmplY3QpOworCisg
ICAgLyogQ2hlY2sgdGhlIHBhcmFncmFwaCB3aXRoIHRoZSB0ZXh0IHdyYXBwZWQgYmVjYXVzZSBv
ZiBtYXgtd2lkdGguICovCisgICAgQXRrVGV4dCogcGFyYWdyYXBoMSA9IEFUS19URVhUKGF0a19v
YmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7CisgICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQocGFyYWdyYXBoMSkpOworCisgICAgZ2NoYXIqIHRleHQgPSBhdGtfdGV4dF9nZXRf
dGV4dChwYXJhZ3JhcGgxLCAwLCAtMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAi
VGhpcyBpcyBvbmUgbGluZSB3cmFwcGVkIGJlY2F1c2Ugb2YgdGhlIG1heGltdW0gd2lkdGggb2Yg
aXRzIGNvbnRhaW5lci4iKTsKKyAgICBnX2ZyZWUodGV4dCk7CisKKyAgICB0ZXN0R2V0U3RyaW5n
RnVuY3Rpb24ocGFyYWdyYXBoMSwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19U
RVhUX0dSQU5VTEFSSVRZX0NIQVIsIDE2LCAiICIsIDE2LCAxNyk7CisgICAgdGVzdEdldFN0cmlu
Z0Z1bmN0aW9uKHBhcmFncmFwaDEsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9HUkFOVUxBUklUWV9XT1JELCAxNiwgImxpbmUgIiwgMTIsIDE3KTsKKyAgICB0ZXN0R2V0
U3RyaW5nRnVuY3Rpb24ocGFyYWdyYXBoMSwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQs
IEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsIDE3LCAid3JhcHBlZCBiZWNhdXNlICIsIDE3LCAz
Myk7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgxKTsKKworICAgIC8qIENoZWNrIHRo
ZSBwYXJhZ3JhcGggd2l0aCB0aGUgdGV4dCB3cmFwcGVkIGJlY2F1c2Ugb2YgPGJyPiBlbGVtZW50
cy4gKi8KKyAgICBBdGtUZXh0KiBwYXJhZ3JhcGgyID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZf
YWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChw
YXJhZ3JhcGgyKSk7CisKKyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHQocGFyYWdyYXBoMiwg
MCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgIlRoaXMgaXMgYW5vdGhlciBs
aW5lIHdyYXBwZWRcbmJlY2F1c2Ugb2Ygb25lIGZvcmNlZFxubGluZSBicmVhayBpbiB0aGUgbWlk
ZGxlLiIpOworICAgIGdfZnJlZSh0ZXh0KTsKKworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbihw
YXJhZ3JhcGgyLCBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCwgQVRLX1RFWFRfR1JBTlVM
QVJJVFlfQ0hBUiwgMjgsICJcbiIsIDI4LCAyOSk7CisgICAgdGVzdEdldFN0cmluZ0Z1bmN0aW9u
KHBhcmFncmFwaDIsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFO
VUxBUklUWV9XT1JELCAyOCwgIndyYXBwZWRcbiIsIDIxLCAyOSk7CisgICAgdGVzdEdldFN0cmlu
Z0Z1bmN0aW9uKHBhcmFncmFwaDIsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9HUkFOVUxBUklUWV9MSU5FLCAzMCwgImJlY2F1c2Ugb2Ygb25lIGZvcmNlZFxuIiwgMjks
IDUxKTsKKworICAgIGdfb2JqZWN0X3VucmVmKHBhcmFncmFwaDIpOworCisgICAgZ19vYmplY3Rf
dW5yZWYod2ViVmlldyk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtHZXRTdHJpbmdB
dE9mZnNldFdpdGhFbWJlZGRlZE9iamVjdHMoKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVj
dF9yZWZfc2luayh3ZWJWaWV3KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IDAs
IDAsIDgwMCwgNjAwIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQo
d2ViVmlldyksICZhbGxvY2F0aW9uKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmco
d2ViVmlldywgY29udGVudHNXaXRoRW1iZWRkZWRPYmplY3RzLCAwLCAwLCAwKTsKKworICAgIC8q
IEVuYWJsZSBjYXJldCBicm93c2luZy4gKi8KKyAgICBXZWJLaXRXZWJTZXR0aW5ncyogc2V0dGlu
Z3MgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpOworICAgIGdfb2JqZWN0
X3NldChzZXR0aW5ncywgImVuYWJsZS1jYXJldC1icm93c2luZyIsIFRSVUUsIE5VTEwpOworICAg
IHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3Mod2ViVmlldywgc2V0dGluZ3MpOworCisgICAg
LyogR2V0IHRvIHRoZSBpbm5lciBBdGtUZXh0IG9iamVjdC4gKi8KKyAgICBBdGtPYmplY3QqIG9i
amVjdCA9IGdldFdlYkFyZWFPYmplY3Qod2ViVmlldyk7CisgICAgZ19hc3NlcnQob2JqZWN0KTsK
KworICAgIC8qIENoZWNrIHRoZSBwYXJhZ3JhcGggd2l0aCB0aGUgdGV4dCB3cmFwcGVkIGJlY2F1
c2Ugb2YgbWF4LXdpZHRoLiAqLworICAgIEF0a1RleHQqIHBhcmFncmFwaCA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqZWN0LCAwKSk7CisgICAgZ19hc3NlcnQo
QVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CisKKyAgICBnY2hhciogdGV4dCA9IGF0a190ZXh0X2dl
dF90ZXh0KHBhcmFncmFwaCwgMCwgLTEpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwg
IlRoaXMgaXMgb25lIGxpbmUgY29udGFpbmluZyB0d28gXDM1N1wyNzdcMjc0IGVtYmVkZGVkIG9i
amVjdHMgXDM1N1wyNzdcMjc0IGluIHRoZSBtaWRkbGUuIik7CisgICAgZ19mcmVlKHRleHQpOwor
CisgICAgLyogQ2hlY2sgcmlnaHQgYmVmb3JlIHRoZSBmaXJzdCBlbWJlZGRlZCBvYmplY3QgKi8K
KyAgICB0ZXN0R2V0U3RyaW5nRnVuY3Rpb24ocGFyYWdyYXBoLCBhdGtfdGV4dF9nZXRfc3RyaW5n
X2F0X29mZnNldCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUiwgMzIsICJcMzU3XDI3N1wyNzQi
LCAzMiwgMzMpOworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0
X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9XT1JELCAzMiwgInR3
byBcMzU3XDI3N1wyNzQgIiwgMjgsIDM0KTsKKworICAgIC8qIENoZWNrIHJpZ2h0IGFmdGVyIHRo
ZSBmaXJzdCBlbWJlZGRlZCBvYmplY3QgKGFuZCBiZWZvcmUgdGhlIGZpcnN0IHdvcmQgYWZ0ZXIg
aXQpICovCisgICAgdGVzdEdldFN0cmluZ0Z1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0
X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX0NIQVIsIDMzLCAiICIsIDMz
LCAzNCk7CisgICAgdGVzdEdldFN0cmluZ0Z1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0
X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX1dPUkQsIDMzLCAidHdvIFwz
NTdcMjc3XDI3NCAiLCAyOCwgMzQpOworCisgICAgLyogQ2hlY2sgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgZmlyc3Qgd29yZCBiZXR3ZWVuIHRoZSB0d28gZW1iZWRkZWQgb2JqZWN0cyAqLworICAg
IHRlc3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9DSEFSLCAzNCwgImUiLCAzNCwgMzUpOworICAg
IHRlc3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRf
b2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9XT1JELCAzNCwgImVtYmVkZGVkICIsIDM0LCA0
Myk7CisKKyAgICAvKiBDaGVjayBhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdCB3b3JkIGJldHdlZW4g
dGhlIHR3byBlbWJlZGRlZCBvYmplY3RzICovCisgICAgdGVzdEdldFN0cmluZ0Z1bmN0aW9uKHBh
cmFncmFwaCwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFS
SVRZX0NIQVIsIDQyLCAiICIsIDQyLCA0Myk7CisgICAgdGVzdEdldFN0cmluZ0Z1bmN0aW9uKHBh
cmFncmFwaCwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQsIEFUS19URVhUX0dSQU5VTEFS
SVRZX1dPUkQsIDQyLCAiZW1iZWRkZWQgIiwgMzQsIDQzKTsKKworICAgIC8qIENoZWNrIHJpZ2h0
IGJlZm9yZSB0aGUgc2Vjb25kIGVtYmVkZGVkIG9iamVjdCAqLworICAgIHRlc3RHZXRTdHJpbmdG
dW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVY
VF9HUkFOVUxBUklUWV9DSEFSLCA1MSwgIlwzNTdcMjc3XDI3NCIsIDUxLCA1Mik7CisgICAgdGVz
dEdldFN0cmluZ0Z1bmN0aW9uKHBhcmFncmFwaCwgYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZz
ZXQsIEFUS19URVhUX0dSQU5VTEFSSVRZX1dPUkQsIDUxLCAib2JqZWN0cyBcMzU3XDI3N1wyNzQg
IiwgNDMsIDUzKTsKKworICAgIC8qIENoZWNrIHJpZ2h0IGFmdGVyIHRoZSBzZWNvbmQgZW1iZWRk
ZWQgb2JqZWN0IChhbmQgYmVmb3JlIHRoZSBmaXJzdCB3b3JkIGFmdGVyIGl0KSAqLworICAgIHRl
c3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zm
c2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9DSEFSLCA1MiwgIiAiLCA1MiwgNTMpOworICAgIHRl
c3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zm
c2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9XT1JELCA1MiwgIm9iamVjdHMgXDM1N1wyNzdcMjc0
ICIsIDQzLCA1Myk7CisKKyAgICAvKiBDaGVjayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJz
dCB3b3JkIGFmdGVyIHRoZSB0d28gZW1iZWRkZWQgb2JqZWN0cyAqLworICAgIHRlc3RHZXRTdHJp
bmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9HUkFOVUxBUklUWV9DSEFSLCA1MywgImkiLCA1MywgNTQpOworICAgIHRlc3RHZXRTdHJp
bmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtf
VEVYVF9HUkFOVUxBUklUWV9XT1JELCA1MywgImluICIsIDUzLCA1Nik7CisKKyAgICAvKiBDaGVj
ayBhdCB0aGUgZW5kIG9mIHRoZSBmaXJzdCB3b3JkIGFmdGVyIHRoZSB0d28gZW1iZWRkZWQgb2Jq
ZWN0cyAqLworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dl
dF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9DSEFSLCA1NSwgIiAiLCA1
NSwgNTYpOworICAgIHRlc3RHZXRTdHJpbmdGdW5jdGlvbihwYXJhZ3JhcGgsIGF0a190ZXh0X2dl
dF9zdHJpbmdfYXRfb2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklUWV9XT1JELCA1NSwgImluICIs
IDUzLCA1Nik7CisKKyAgICBnX29iamVjdF91bnJlZihwYXJhZ3JhcGgpOworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXcpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHRlc3RXZWJraXRBdGtH
ZXRUZXh0SW5QYXJhZ3JhcGhBbmRCb2R5U2ltcGxlKCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CkBAIC0xNzQ0
LDYgKzIxMDMsMTEgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0dldEV4dGVudHMoKQogICAg
IGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRfYXRfb2Zmc2V0KG11bHRpbGluZVRleHQs
IDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNl
dCk7CiAgICAgZ19mcmVlKHRleHQpOwogCisjaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgOSwgNCkK
KyAgICB0ZXh0ID0gYXRrX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQobXVsdGlsaW5lVGV4dCwg
MCwgQVRLX1RFWFRfR1JBTlVMQVJJVFlfTElORSwgJnN0YXJ0T2Zmc2V0LCAmZW5kT2Zmc2V0KTsK
KyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKwogICAgIEF0a1RleHRSZWN0YW5nbGUgZmxpbmVf
d2luZG93OwogICAgIEF0a1RleHRSZWN0YW5nbGUgYWZsaW5lX3dpbmRvdzsKICAgICBhdGtfdGV4
dF9nZXRfcmFuZ2VfZXh0ZW50cyhtdWx0aWxpbmVUZXh0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LCBBVEtfWFlfV0lORE9XLCAmZmxpbmVfd2luZG93KTsKQEAgLTE4MTAsMzYgKzIxNzQsNjggQEAg
c3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a0xpbmtzV2l0aElubGluZUltYWdlcygpCiAgICAgZ19h
c3NlcnQoQVRLX0lTX1RFWFQocGFyYWdyYXBoKSk7CiAgICAgZ2ludCBzdGFydE9mZnNldDsKICAg
ICBnaW50IGVuZE9mZnNldDsKKwogICAgIGdjaGFyKiB0ZXh0ID0gYXRrX3RleHRfZ2V0X3RleHRf
YXRfb2Zmc2V0KEFUS19URVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVf
U1RBUlQsICZzdGFydE9mZnNldCwgJmVuZE9mZnNldCk7CiAgICAgZ19hc3NlcnQodGV4dCk7CiAg
ICAgZ19hc3NlcnRfY21wc3RyKHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKICAgICBnX2Fzc2Vy
dF9jbXBpbnQoc3RhcnRPZmZzZXQsID09LCAwKTsKICAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zm
c2V0LCA9PSwgMTEpOwogICAgIGdfZnJlZSh0ZXh0KTsKKworI2lmIEFUS19DSEVDS19WRVJTSU9O
KDIsIDksIDQpCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19U
RVhUKHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNl
dCwgJmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHRleHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZz
ZXQsID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAg
IGdfZnJlZSh0ZXh0KTsKKyNlbmRpZgorCiAgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsK
IAogICAgIC8qIFNlY29uZCBwYXJhZ3JhcGggKGxpbmsgaW4gdGhlIG1pZGRsZSkuICovCiAgICAg
cGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmplY3QsIDEpOwog
ICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOworCiAgICAgdGV4dCA9IGF0a190
ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9C
T1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwogICAgIGdfYXNz
ZXJ0KHRleHQpOwogICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7
CiAgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CiAgICAgZ19hc3NlcnRf
Y21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKICAgICBnX2ZyZWUodGV4dCk7CisKKyNpZiBBVEtf
Q0hFQ0tfVkVSU0lPTigyLCA5LCA0KQorICAgIHRleHQgPSBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0
X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5F
LCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOworICAgIGdfYXNzZXJ0KHRleHQpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBiYXIgYmF6Iik7CisgICAgZ19hc3NlcnRfY21w
aW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CisgICAgZ19hc3NlcnRfY21waW50KGVuZE9mZnNldCwg
PT0sIDExKTsKKyAgICBnX2ZyZWUodGV4dCk7CisjZW5kaWYKKwogICAgIGdfb2JqZWN0X3VucmVm
KHBhcmFncmFwaCk7CiAKICAgICAvKiBUaGlyZCBwYXJhZ3JhcGggKGxpbmsgYXQgdGhlIGVuZCku
ICovCiAgICAgcGFyYWdyYXBoID0gYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmpl
Y3QsIDIpOwogICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHBhcmFncmFwaCkpOworCiAgICAgdGV4
dCA9IGF0a190ZXh0X2dldF90ZXh0X2F0X29mZnNldChBVEtfVEVYVChwYXJhZ3JhcGgpLCAwLCBB
VEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJULCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwog
ICAgIGdfYXNzZXJ0KHRleHQpOwogICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXh0LCA9PSwgImZvbyBi
YXIgYmF6Iik7CiAgICAgZ19hc3NlcnRfY21waW50KHN0YXJ0T2Zmc2V0LCA9PSwgMCk7CiAgICAg
Z19hc3NlcnRfY21waW50KGVuZE9mZnNldCwgPT0sIDExKTsKICAgICBnX2ZyZWUodGV4dCk7Ci0g
ICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKIAorI2lmIEFUS19DSEVDS19WRVJTSU9OKDIs
IDksIDQpCisgICAgdGV4dCA9IGF0a190ZXh0X2dldF9zdHJpbmdfYXRfb2Zmc2V0KEFUS19URVhU
KHBhcmFncmFwaCksIDAsIEFUS19URVhUX0dSQU5VTEFSSVRZX0xJTkUsICZzdGFydE9mZnNldCwg
JmVuZE9mZnNldCk7CisgICAgZ19hc3NlcnQodGV4dCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRl
eHQsID09LCAiZm9vIGJhciBiYXoiKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhcnRPZmZzZXQs
ID09LCAwKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMTEpOworICAgIGdf
ZnJlZSh0ZXh0KTsKKyNlbmRpZgorCisgICAgZ19vYmplY3RfdW5yZWYocGFyYWdyYXBoKTsKICAg
ICBnX29iamVjdF91bnJlZih3ZWJWaWV3KTsKIH0KIApAQCAtMjIzMCw2ICsyNjI2LDE2IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJr
aXQvYXRrL2dldFRleHRBdE9mZnNldFdpdGhTcGVjaWFsQ2hhcmFjdGVycyIsIHRlc3RXZWJraXRB
dGtHZXRUZXh0QXRPZmZzZXRXaXRoU3BlY2lhbENoYXJhY3RlcnMpOwogICAgIGdfdGVzdF9hZGRf
ZnVuYygiL3dlYmtpdC9hdGsvZ2V0VGV4dEF0T2Zmc2V0V2l0aFdyYXBwZWRMaW5lcyIsIHRlc3RX
ZWJraXRBdGtHZXRUZXh0QXRPZmZzZXRXaXRoV3JhcHBlZExpbmVzKTsKICAgICBnX3Rlc3RfYWRk
X2Z1bmMoIi93ZWJraXQvYXRrL2dldFRleHRBdE9mZnNldFdpdGhFbWJlZGRlZE9iamVjdHMiLCB0
ZXN0V2Via2l0QXRrR2V0VGV4dEF0T2Zmc2V0V2l0aEVtYmVkZGVkT2JqZWN0cyk7CisjaWYgQVRL
X0NIRUNLX1ZFUlNJT04oMiwgOSwgNCkKKyAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRr
L2dldFN0cmluZ0F0T2Zmc2V0IiwgdGVzdFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0KTsKKyAg
ICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFN0cmluZ0F0T2Zmc2V0TmV3bGluZXMi
LCB0ZXN0V2Via2l0QXRrR2V0U3RyaW5nQXRPZmZzZXROZXdsaW5lcyk7CisgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRTdHJpbmdBdE9mZnNldFRleHRhcmVhIiwgdGVzdFdlYmtp
dEF0a0dldFN0cmluZ0F0T2Zmc2V0VGV4dGFyZWEpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvZ2V0U3RyaW5nQXRPZmZzZXRUZXh0SW5wdXQiLCB0ZXN0V2Via2l0QXRrR2V0U3Ry
aW5nQXRPZmZzZXRUZXh0SW5wdXQpOworICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsv
Z2V0U3RyaW5nQXRPZmZzZXRXaXRoUHJlZm9ybWF0dGVkVGV4dCIsIHRlc3RXZWJraXRBdGtHZXRT
dHJpbmdBdE9mZnNldFdpdGhQcmVmb3JtYXR0ZWRUZXh0KTsKKyAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvYXRrL2dldFN0cmluZ0F0T2Zmc2V0V2l0aFNwZWNpYWxDaGFyYWN0ZXJzIiwgdGVz
dFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aFNwZWNpYWxDaGFyYWN0ZXJzKTsKKyAgICBn
X3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFN0cmluZ0F0T2Zmc2V0V2l0aFdyYXBwZWRM
aW5lcyIsIHRlc3RXZWJraXRBdGtHZXRTdHJpbmdBdE9mZnNldFdpdGhXcmFwcGVkTGluZXMpOwor
ICAgIGdfdGVzdF9hZGRfZnVuYygiL3dlYmtpdC9hdGsvZ2V0U3RyaW5nQXRPZmZzZXRXaXRoRW1i
ZWRkZWRPYmplY3RzIiwgdGVzdFdlYmtpdEF0a0dldFN0cmluZ0F0T2Zmc2V0V2l0aEVtYmVkZGVk
T2JqZWN0cyk7CisjZW5kaWYKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRrL2dldFRl
eHRJblBhcmFncmFwaEFuZEJvZHlTaW1wbGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFyYWdy
YXBoQW5kQm9keVNpbXBsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRU
ZXh0SW5QYXJhZ3JhcGhBbmRCb2R5TW9kZXJhdGUiLCB0ZXN0V2Via2l0QXRrR2V0VGV4dEluUGFy
YWdyYXBoQW5kQm9keU1vZGVyYXRlKTsKICAgICBnX3Rlc3RfYWRkX2Z1bmMoIi93ZWJraXQvYXRr
L2dldFRleHRJblRhYmxlIiwgdGVzdFdlYmtpdEF0a0dldFRleHRJblRhYmxlKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjNjk0NzUzLi44ZTll
YzNlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTMtMDktMDMgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5w
cmFkYUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbQVRLXSBJbXBsZW1lbnQgbmV3IEFQSSBpbiBB
dGtUZXh0OiBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCgpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjA2MzgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGd0ay9qaGJ1aWxkLm1vZHVsZXM6IFJh
aXNlZCBBVEsgdmVyc2lvbiB0byAyLjkuNCwgc28gd2UgY2FuCisgICAgICAgIGNoZWNrIGJvdGgg
dGhlIG9sZCBhbmQgbmV3IEFQSXMgdG8gcmV0cmlldmUgdGV4dCBhdCBhIGdpdmVuIG9mZnNldC4K
KwogMjAxMy0wOS0wMyAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbQVhdW0FUS10gQWRkZWQgc3VwcG9ydCBmb3Igc29ydCBhbmQgaGVscCBhdHRyaWJ1
dGVzCmRpZmYgLS1naXQgYS9Ub29scy9ndGsvamhidWlsZC5tb2R1bGVzIGIvVG9vbHMvZ3RrL2po
YnVpbGQubW9kdWxlcwppbmRleCAwZjEyNjgxLi42NmI1M2VjIDEwMDY0NAotLS0gYS9Ub29scy9n
dGsvamhidWlsZC5tb2R1bGVzCisrKyBiL1Rvb2xzL2d0ay9qaGJ1aWxkLm1vZHVsZXMKQEAgLTIy
OSw5ICsyMjksOSBAQAogICA8YXV0b3Rvb2xzIGlkPSJhdGsiCiAgICAgICAgICAgICAgYXV0b2dl
bi1zaD0iY29uZmlndXJlIgogICAgICAgICAgICAgIGF1dG9nZW5hcmdzPSItLWRpc2FibGUtaW50
cm9zcGVjdGlvbiI+Ci0gICAgPGJyYW5jaCBtb2R1bGU9InB1Yi9HTk9NRS9zb3VyY2VzL2F0ay8y
LjgvYXRrLTIuOC4wLnRhci54eiIgdmVyc2lvbj0iMi44LjAiCisgICAgPGJyYW5jaCBtb2R1bGU9
InB1Yi9HTk9NRS9zb3VyY2VzL2F0ay8yLjkvYXRrLTIuOS40LnRhci54eiIgdmVyc2lvbj0iMi45
LjQiCiAgICAgICAgICAgICByZXBvPSJmdHAuZ25vbWUub3JnIgotICAgICAgICAgICAgaGFzaD0i
c2hhMjU2OmIyMjUxOTE3NjIyNmYzZTA3Y2Y2ZDkzMmI3Nzg1MmU2YjZiZTQ3ODA5Nzc3NzA3MDRi
MzJkMGY0ZTA2ODZkZjQiLz4KKyAgICAgICAgICAgIGhhc2g9InNoYTI1Njo3NTVjOTU4MmNhN2Nm
MDFlNWVhYTBhYzk3MjM3Njg3N2ViMzY1OTAyZjM4ODI2MmMyMWVhMzQyNWUwYzRkNjMxIi8+CiAg
IDwvYXV0b3Rvb2xzPgogCiAgIDxhdXRvdG9vbHMgaWQ9ImF0LXNwaTItY29yZSIgCi0tIAoxLjcu
MTAuNAoK
</data>
<flag name="review"
          id="232487"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>