<?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>61974</bug_id>
          
          <creation_ts>2011-06-02 15:38:12 -0700</creation_ts>
          <short_desc>[EFL] DRT: Add LayoutTestControllerEfl.</short_desc>
          <delta_ts>2011-07-04 05:18:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62034</dependson>
    
    <dependson>62877</dependson>
          <blocked>61962</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Leandro Pereira">leandro</reporter>
          <assigned_to name="Leandro Pereira">leandro</assigned_to>
          <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>414507</commentid>
    <comment_count>0</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-02 15:38:12 -0700</bug_when>
    <thetext>[EFL] DRT: Add LayoutTestControllerEfl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414509</commentid>
    <comment_count>1</comment_count>
      <attachid>95824</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-02 15:43:49 -0700</bug_when>
    <thetext>Created attachment 95824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418837</commentid>
    <comment_count>2</comment_count>
      <attachid>95824</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-10 12:27:40 -0700</bug_when>
    <thetext>Comment on attachment 95824
Patch

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

Smart pointers would make this patch infinitely better.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:91
&gt; +    free(idAsString);

Can&apos;t we use some sort of smart pointer here?

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:95
&gt; +    JSRetainPtr&lt;JSStringRef&gt; returnValue(Adopt, JSStringCreateWithUTF8CString(counterValue));
&gt; +    free(counterValue);
&gt; +    return returnValue;

A smart pointer here would turn these 3 lines into 1. :)

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:127
&gt; +    int pageNumber = ewk_frame_page_number_by_element_id_get(mainFrame, idAsString, pageWidth, pageHeight);
&gt; +    free(idAsString);
&gt; +    return pageNumber;

Again, a smart pointer turns 3 lines into 1...

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:155
&gt; +    Ewk_History* history;

WebKit avoids this old C-style declare-at-top-of-block, but maybe EFL recommends it?  Again, this is a c++ file, not c.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:156
&gt; +    int count;

This isn&apos;t needed.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:158
&gt; +    history = ewk_view_history_get(browser);

I woudl have declared history on the same line as you initialized this.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:163
&gt; +    count = ewk_history_back_list_length(history) + ewk_history_forward_list_length(history);
&gt; +    return count;

The local doesn&apos;t buy you anything here.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:176
&gt; +    waitForPolicy = false;

What scope is waitForPolicy?  Is that a global?  Or a member?

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:212
&gt; +    Ewk_Cookie_Policy policy;
&gt; +
&gt; +    if (alwaysAcceptCookies)
&gt; +        policy = EWK_COOKIE_JAR_ACCEPT_ALWAYS;
&gt; +    else
&gt; +        policy = EWK_COOKIE_JAR_ACCEPT_NEVER;

This could easily all be a single-line ternary expression.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:275
&gt; +    free(userStyleSheet);

Huh?  I take it userStyleSheet is a global?  Can&apos;t we use a smart pointer here so we don&apos;t have to manually free... and possibly double-free?

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:303
&gt; +    waitToDumpWatchdog = 0;

Does it need to be deleted/freed as well?

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:359
&gt; +    // FIXME: implement

We often use the notImplemented(); function instead, but this is fine.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:416
&gt; +        const char* tmpDirEnv = static_cast&lt;const char*&gt;(getenv(&quot;TMPDIR&quot;));
&gt; +        if (!tmpDirEnv) {
&gt; +            tmpDirEnv = static_cast&lt;const char*&gt;(getenv(&quot;TEMP&quot;));
&gt; +            if (!tmpDirEnv)
&gt; +                tmpDirEnv = &quot;/tmp&quot;;

Do we have to free the result of getenv?

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:469
&gt; +    Eina_Bool caseSensitive = EINA_TRUE;
&gt; +    Eina_Bool forward = EINA_TRUE;
&gt; +    Eina_Bool wrap = EINA_FALSE;

Do we really need our own bool?  I suspect EFL is a C-API, and C doesn&apos;t have a &quot;bool&quot; type, but since we&apos;re writing c++, can&apos;t we just use bool and true/false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424561</commentid>
    <comment_count>3</comment_count>
      <attachid>98011</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-21 10:55:04 -0700</bug_when>
    <thetext>Created attachment 98011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425274</commentid>
    <comment_count>4</comment_count>
      <attachid>98178</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-22 09:02:15 -0700</bug_when>
    <thetext>Created attachment 98178
Fix the return value for some functions which return JSValueRefs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426048</commentid>
    <comment_count>5</comment_count>
      <attachid>98178</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-23 02:42:14 -0700</bug_when>
    <thetext>Comment on attachment 98178
Fix the return value for some functions which return JSValueRefs

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

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:57
&gt; +void LayoutTestController::addDisallowedURL(JSStringRef url)

We usually omit argument names if they are not used in the function body.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:401
&gt; +    char* tmpDirEnv = getenv(&quot;TMPDIR&quot;);
&gt; +    if (!tmpDirEnv)
&gt; +        tmpDirEnv = getenv(&quot;TEMP&quot;);
&gt; +    if (!tmpDirEnv)
&gt; +        tmpDirEnv = const_cast&lt;char*&gt;(&quot;/tmp&quot;);

It&apos;s a bad code.  We must not cast a string literal to char*.
The first patch used &quot;const char*&quot; for tmpDirEnv. It was better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427921</commentid>
    <comment_count>6</comment_count>
      <attachid>98722</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-27 07:28:34 -0700</bug_when>
    <thetext>Created attachment 98722
New patch following Kent&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427931</commentid>
    <comment_count>7</comment_count>
      <attachid>98722</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-06-27 07:52:37 -0700</bug_when>
    <thetext>Comment on attachment 98722
New patch following Kent&apos;s suggestions

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

&gt; Tools/ChangeLog:11
&gt; +        [EFL] DRT: Add LayoutTestControllerEfl.
&gt; +        Only the core features are implemented. Most functions are actually
&gt; +        stubs and will be implemented as soon as its features are needed.
&gt; +        Build system changes will be made as soon as DRT is completely
&gt; +        upstreamed.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=61974
&gt; +

Typical ChangeLog format is:

  Reviewed by ...

  &lt;Summary&gt;
  &lt;Bug URL&gt;

  &lt;Descption&gt;

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:179
&gt; +    WTF::String absoluteUrl = WTF::String::fromUTF8(ewk_frame_uri_get(mainFrame));
&gt; +    absoluteUrl.append(url-&gt;characters(), url-&gt;length());
&gt; +    WTF::String targetString(target-&gt;characters(), target-&gt;length());

We don&apos;t need to add WTF:: prefix to String like OwnFastMallocPtr&lt;&gt; doesn&apos;t need WTF::.

&gt; Tools/DumpRenderTree/efl/LayoutTestControllerEfl.cpp:404
&gt; +    WTF::String databasePath;
&gt; +
&gt; +    if (getenv(&quot;TMPDIR&quot;))
&gt; +        databasePath = WTF::String::fromUTF8(getenv(&quot;TMPDIR&quot;));
&gt; +    else if (getenv(&quot;TEMP&quot;))
&gt; +        databasePath = WTF::String::fromUTF8(getenv(&quot;TEMP&quot;));
&gt; +    else
&gt; +        databasePath = WTF::String::fromUTF8(&quot;/tmp&quot;);

ditto.  WTF:: is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427936</commentid>
    <comment_count>8</comment_count>
      <attachid>98725</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-27 07:58:09 -0700</bug_when>
    <thetext>Created attachment 98725
Replace WTF::String with String, improve the ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428122</commentid>
    <comment_count>9</comment_count>
      <attachid>98754</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-27 11:23:25 -0700</bug_when>
    <thetext>Created attachment 98754
Make it build after the recent changes to LayoutTestController.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431881</commentid>
    <comment_count>10</comment_count>
      <attachid>98754</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-04 05:18:47 -0700</bug_when>
    <thetext>Comment on attachment 98754
Make it build after the recent changes to LayoutTestController.h

Clearing flags on attachment: 98754

Committed r90361: &lt;http://trac.webkit.org/changeset/90361&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431882</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-04 05:18:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95824</attachid>
            <date>2011-06-02 15:43:49 -0700</date>
            <delta_ts>2011-06-21 10:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61974-20110602194347.patch</filename>
            <type>text/plain</type>
            <size>30496</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg3OTYxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTM4IEBACisyMDExLTA2LTAyICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lv
bi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtFRkxdIERSVDogQWRkIExheW91dFRlc3RDb250cm9sbGVyRWZsLgorICAgICAgICBPbmx5IHRo
ZSBjb3JlIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZC4gTW9zdCBmdW5jdGlvbnMgYXJlIGFjdHVh
bGx5CisgICAgICAgIHN0dWJzIGFuZCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIHNvb24gYXMgaXRz
IGZlYXR1cmVzIGFyZSBuZWVkZWQuCisgICAgICAgIEJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHdpbGwg
YmUgbWFkZSBhcyBzb29uIGFzIERSVCBpcyBjb21wbGV0ZWx5CisgICAgICAgIHVwc3RyZWFtZWQu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTk3NAor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsOiBBZGRlZC4KKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2FsbG93ZWRVUkwpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpjb3B5RW5jb2RlZEhvc3ROYW1lKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmRpc3BsYXkpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
dW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjprZWVwV2ViSGlzdG9yeSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29tcHV0
ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpub2Rlc0Zyb21SZWN0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpsYXll
clRyZWVBc1RleHQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJG
b3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQ
YWdlcyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjppc1BhZ2VCb3hWaXNpYmxlKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnF1ZXVlTG9hZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWNjZXB0
c0VkaXRpbmcpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2Vw
dENvb2tpZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGlj
eURlbGVnYXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5
RGVsZWdhdGUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBv
bGljeSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hp
dGVsaXN0RW50cnkpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbik6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZSk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCk6CisgICAgICAg
ICh3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0V2FpdFRvRHVtcCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2luZG93
Q291bnQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRD
YW5BY2Nlc3NDbGlwYm9hcmQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhT
U0F1ZGl0b3JFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFt
ZUZsYXR0ZW5pbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24pOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcik6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1Nw
ZWVjaElucHV0UmVzdWx0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29u
RGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZh
U2NyaXB0UHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
Ojppc0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRD
YWNoZU1vZGVsKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0ZW50
VXNlclN0eWxlU2hlZXRMb2NhdGlvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmlnaW4p
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURp
c2tVc2FnZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJB
bGxEYXRhYmFzZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFiYXNl
UXVvdGEpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0
b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFn
ZUZvck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c3luY0xvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9t
YWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Z29CYWNrKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRE
ZWZlcnNMb2FkaW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNo
ZU1heGltdW1TaXplKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpzYW1wbGVTVkdBbmltYXRpb25Gb3JFbGVtZW50QXRUaW1lKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcik6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTCk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVt
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hhZG93UHNldWRvSWQpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24pOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhhdmlvcik6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2hhZG93Um9vdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZW5zdXJlU2hhZG93Um9vdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVt
b3ZlU2hhZG93Um9vdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2Rh
bCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0dyYW1tYXJNYXJrZXIpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24pOgorCiAyMDEx
LTA2LTAyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHJldmlz
aW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJF
ZmwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOdWFudGkgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8
am1hbG9uem9AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgQ29sbGFib3Jh
IEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgi
CisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPGNzdGRpbz4KKworTGF5b3V0VGVzdENvbnRyb2xs
ZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5n
UmVmIHVybCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkKK3sKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2Rl
ZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAor
ICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29w
eUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlz
cGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZv
ciB0ZXN0aW5nIGZpeCBmb3IgNjcyNzQ5NQorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkaXNwbGF5KCkKK3sKKyAgICBkaXNwbGF5V2ViVmlldygpOworfQorCitKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvdW50ZXJWYWx1ZUZvckVsZW1lbnRC
eUlkKEpTU3RyaW5nUmVmIGlkKQoreworICAgIGNoYXIqIGlkQXNTdHJpbmcgPSBKU1N0cmluZ0Nv
cHlVVEY4Q1N0cmluZyhpZCk7CisgICAgY2hhciogY291bnRlclZhbHVlOworCisgICAgY291bnRl
clZhbHVlID0gZXdrX2ZyYW1lX2NvdW50ZXJfdmFsdWVfYnlfZWxlbWVudF9pZF9nZXQobWFpbkZy
YW1lLCBpZEFzU3RyaW5nKTsKKyAgICBmcmVlKGlkQXNTdHJpbmcpOworCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHJldHVyblZhbHVlKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhjb3VudGVyVmFsdWUpKTsKKyAgICBmcmVlKGNvdW50ZXJWYWx1ZSk7CisgICAgcmV0
dXJuIHJldHVyblZhbHVlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2Vi
SGlzdG9yeSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitKU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzLgorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgaW50IHgsIGludCB5LCB1bnNpZ25l
ZCB0b3AsIHVuc2lnbmVkIHJpZ2h0LCB1bnNpZ25lZCBib3R0b20sIHVuc2lnbmVkIGxlZnQsIGJv
b2wgaWdub3JlQ2xpcHBpbmcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVy
biAwOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmcoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCIiKSk7CisgICAgcmV0dXJuIHN0cmluZzsKK30KKworaW50IExheW91dFRl
c3RDb250cm9sbGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWQsIGZs
b2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBjaGFyKiBpZEFzU3RyaW5n
ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoaWQpOworICAgIGludCBwYWdlTnVtYmVyID0gZXdr
X2ZyYW1lX3BhZ2VfbnVtYmVyX2J5X2VsZW1lbnRfaWRfZ2V0KG1haW5GcmFtZSwgaWRBc1N0cmlu
ZywgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKKyAgICBmcmVlKGlkQXNTdHJpbmcpOworICAgIHJl
dHVybiBwYWdlTnVtYmVyOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
UGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAgIHJldHVybiBl
d2tfZnJhbWVfcGFnZV9udW1iZXJfZ2V0KG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0
KTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpw
YWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJlcikgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VOdW1iZXIpIGNv
bnN0Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFu
ZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZU51bWJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJnaW5Cb3R0b20sIGludCBtYXJn
aW5MZWZ0KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gMDsK
K30KKworc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkK
K3sKKyAgICBFd2tfSGlzdG9yeSogaGlzdG9yeTsKKyAgICBpbnQgY291bnQ7CisKKyAgICBoaXN0
b3J5ID0gZXdrX3ZpZXdfaGlzdG9yeV9nZXQoYnJvd3Nlcik7CisgICAgaWYgKCFoaXN0b3J5KQor
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICBjb3VudCA9IGV3a19oaXN0b3J5X2JhY2tfbGlzdF9s
ZW5ndGgoaGlzdG9yeSkgKyBld2tfaGlzdG9yeV9mb3J3YXJkX2xpc3RfbGVuZ3RoKGhpc3Rvcnkp
OworICAgIHJldHVybiBjb3VudDsKK30KKwordW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXdrX3V0aWxfd29ya2Vy
X3RocmVhZF9jb3VudCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlE
b25lKCkKK3sKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdv
cmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCisgICAgICAgIGR1bXAoKTsKKyAgICBtX3dhaXRU
b0R1bXAgPSBmYWxzZTsKKyAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Cit9CisKK0pTU3RyaW5n
UmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgLy8gRnVuY3Rpb24gaW50cm9kdWNl
ZCBpbiByMjg2OTAuIFRoaXMgbWF5IG5lZWQgc3BlY2lhbC1jYXNpbmcgb24gV2luZG93cy4KKyAg
ICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsgLy8gRG8gbm90aGluZyBvbiBVbml4LgorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBK
U1N0cmluZ1JlZiB0YXJnZXQpCit7CisgICAgY2hhciogcmVsYXRpdmVVUkw7CisgICAgY2hhciog
YWJzb2x1dGVDU3RyaW5nOworCisgICAgcmVsYXRpdmVVUkwgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0
cmluZyh1cmwpOworICAgIGlmIChhc3ByaW50ZigmYWJzb2x1dGVDU3RyaW5nLCAiJXMlcyIsIGV3
a19mcmFtZV91cmlfZ2V0KG1haW5GcmFtZSksIHJlbGF0aXZlVVJMKSA+IDApIHsKKyAgICAgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFic29sdXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhhYnNvbHV0ZUNTdHJpbmcpKTsKKyAgICAgICAgZnJlZShhYnNvbHV0
ZUNTdHJpbmcpOworCisgICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2Fk
SXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CisgICAgfQorICAgIGZyZWUocmVsYXRp
dmVVUkwpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGlu
Zyhib29sIGFjY2VwdHNFZGl0aW5nKQoreworICAgIGV3a192aWV3X2VkaXRhYmxlX3NldChicm93
c2VyLCBhY2NlcHRzRWRpdGluZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQoreworICAgIEV3
a19Db29raWVfUG9saWN5IHBvbGljeTsKKworICAgIGlmIChhbHdheXNBY2NlcHRDb29raWVzKQor
ICAgICAgICBwb2xpY3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOworICAgIGVsc2UK
KyAgICAgICAgcG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOworCisgICAgZXdr
X2Nvb2tpZXNfcG9saWN5X3NldChwb2xpY3kpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1p
c3NpdmUpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAgIHdhaXRGb3JQb2xpY3kg
PSB0cnVlOworICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlvbiwgSlNT
dHJpbmdSZWYgcG9saWN5KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJp
bmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwgSlNTdHJpbmdSZWYgaG9z
dCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpT
U3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJ
c0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVt
ZW50cyhib29sIGN5Y2xlcykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sIGZs
YWcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit7Cisg
ICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitzdGF0aWMgY2hhciogdXNlclN0eWxlU2hlZXQg
PSAwOworc3RhdGljIGJvb2wgdXNlclN0eWxlU2hlZXRFbmFibGVkID0gdHJ1ZTsKKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZmxhZykK
K3sKKyAgICB1c2VyU3R5bGVTaGVldEVuYWJsZWQgPSBmbGFnOworCisgICAgZXdrX3ZpZXdfc2V0
dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KGJyb3dzZXIsIHVzZXJTdHlsZVNoZWV0KTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0
cmluZ1JlZiBwYXRoKQoreworICAgIGZyZWUodXNlclN0eWxlU2hlZXQpOworICAgIHVzZXJTdHls
ZVNoZWV0ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcocGF0aCk7CisgICAgaWYgKHVzZXJTdHls
ZVNoZWV0RW5hYmxlZCkKKyAgICAgICAgc2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKHRydWUpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCit7
CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBtb2RlKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93
SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChi
b29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCitzdGF0aWMgRWluYV9C
b29sIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKHZvaWQqKQoreworICAgIHdhaXRUb0R1bXBXYXRj
aGRvZyA9IDA7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dU
aW1lckZpcmVkKCk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRpbERvbmUp
Cit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lb3V0U2Vjb25kcyA9IDMwOworCisgICAg
bV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICF3
YWl0VG9EdW1wV2F0Y2hkb2cpCisgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IGVjb3JlX3Rp
bWVyX2FkZCh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDApOworfQor
CitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sKKyAgICByZXR1cm4g
MTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5n
X3NldChicm93c2VyLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9y
RW5hYmxlZChib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGJvb2wgZmxh
ZykKK3sKKyAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX3NldChi
cm93c2VyLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0aW5nX3Nw
YXRpYWxfbmF2aWdhdGlvbl9zZXQoYnJvd3NlciwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxh
ZykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCit7CisgICAg
Ly8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
dXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IGlt
cGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRvZmlsbGVkKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIGJvb2wgaXNBdXRvZmls
bGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgdGVzdGluZyBmaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzg5NgorICAgIC8vIEFsc28gbmVlZCB0byBtYWtlIHN1cmUgaW1hZ2UgbG9hZGluZyBp
cyByZS1lbmFibGVkIGZvciBlYWNoIG5ldyB0ZXN0LgorfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCBjYW5Qcm92aWRlQWxwaGEsIGRv
dWJsZSBhbHBoYSwgYm9vbCBjYW5Qcm92aWRlQmV0YSwgZG91YmxlIGJldGEsIGJvb2wgY2FuUHJv
dmlkZUdhbW1hLCBkb3VibGUgZ2FtbWEpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
RGV2aWNlT3JpZW50YXRpb24gbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzMzUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwgSlNTdHJpbmdSZWYg
bWVzc2FnZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlv
dXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yODI2NC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
R2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHNldEdlb2xvY2F0aW9uUGVybWlzc2lvbkNv
bW1vbihhbGxvdyk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5k
aW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICByZXR1cm4gLTE7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdChKU1N0
cmluZ1JlZiByZXN1bHQsIGRvdWJsZSBjb25maWRlbmNlLCBKU1N0cmluZ1JlZiBsYW5ndWFnZSkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3Rz
LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0
ODUuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEljb25EYXRhYmFzZUVuYWJs
ZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIHRtcERpckVudiA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnZXRlbnYoIlRNUERJUiIp
KTsKKyAgICAgICAgaWYgKCF0bXBEaXJFbnYpIHsKKyAgICAgICAgICAgIHRtcERpckVudiA9IHN0
YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnZXRlbnYoIlRFTVAiKSk7CisgICAgICAgICAgICBpZiAo
IXRtcERpckVudikKKyAgICAgICAgICAgICAgICB0bXBEaXJFbnYgPSAiL3RtcCI7CisgICAgICAg
IH0KKyAgICAgICAgY2hhciogZGF0YWJhc2VQYXRoOworICAgICAgICBpZiAoYXNwcmludGYoJmRh
dGFiYXNlUGF0aCwgIiVzL0R1bXBSZW5kZXJUcmVlL0ljb25EYXRhYmFzZSIsIHRtcERpckVudikg
PiAwKSB7CisgICAgICAgICAgICBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3NldChk
YXRhYmFzZVBhdGgpOworICAgICAgICAgICAgZnJlZShkYXRhYmFzZVBhdGgpOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX3BhdGhfc2V0
KDApOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0UHJvZmls
aW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFi
bGVkKGJvb2wgZmxhZykKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9wbHVnaW5zX3NldChicm93c2VyLCBmbGFnKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5n
UmVmIGlkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5h
bWUsIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
Ym9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkpCit7CisgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBKU1ZhbHVlUmVmIGxlbmd0
aFZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0
aFByb3BlcnR5TmFtZS5nZXQoKSwgMCk7CisgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4
dCwgbGVuZ3RoVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjaGFyKiB0YXJn
ZXRTdHJpbmcgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyh0YXJnZXQpOworCisgICAgRWluYV9C
b29sIGNhc2VTZW5zaXRpdmUgPSBFSU5BX1RSVUU7CisgICAgRWluYV9Cb29sIGZvcndhcmQgPSBF
SU5BX1RSVUU7CisgICAgRWluYV9Cb29sIHdyYXAgPSBFSU5BX0ZBTFNFOworICAgIHNpemVfdCBs
ZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5n
dGhWYWx1ZSwgMCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNv
bnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CisgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5n
KGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5
KGNvbnRleHQsIHZhbHVlLCAwKSk7CisKKyAgICAgICAgaWYgKEpTU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcob3B0aW9uTmFtZS5nZXQoKSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQorICAgICAgICAg
ICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGlmIChKU1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG9wdGlvbk5hbWUuZ2V0KCksICJCYWNrd2FyZHMiKSkKKyAgICAgICAg
ICAgIGZvcndhcmQgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoSlNTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhvcHRpb25OYW1lLmdldCgpLCAiV3JhcEFyb3VuZCIpKQorICAgICAgICAgICAg
d3JhcCA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCByZXR1cm5WYWx1ZSA9ICEhZXdrX3ZpZXdf
dGV4dF9zZWFyY2goYnJvd3NlciwgdGFyZ2V0U3RyaW5nLCBjYXNlU2Vuc2l0aXZlLCBmb3J3YXJk
LCB3cmFwKTsKKyAgICBmcmVlKHRhcmdldFN0cmluZyk7CisKKyAgICByZXR1cm4gcmV0dXJuVmFs
dWU7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNT
dHJpbmdSZWYgbmFtZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQZXJzaXN0
ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBqc1VSTCkKK3sKKyAgICAvLyBG
SVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVy
c2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBx
dW90YXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3Rhcy4KK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9w
YXF1ZUpTU3RyaW5nKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVs
ZXRpbmcgYWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgorfQorCitsb25nIGxv
bmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihK
U1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KKyAg
ICByZXR1cm4gMDsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2lu
c1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNh
Y2hlcy4KKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK2xv
bmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZv
ck9yaWdpbihKU1N0cmluZ1JlZiBuYW1lKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAgLy8gRklYTUU6
IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1
b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50
Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxT
dG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklY
TUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2Nh
bFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3luY0xv
Y2FsU3RvcmFnZSgpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KGJvb2wsIEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRt
bAorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24t
d2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkKK3sKKyAg
ICBld2tfc2V0dGluZ3NfY2FjaGVfY2FwYWNpdHlfc2V0KHNpemUpOworfQorCitib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0
cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElk
KQoreworICAgIGNoYXIqIG5hbWUgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhhbmltYXRpb25O
YW1lKTsKKyAgICBjaGFyKiBlbGVtZW50ID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoZWxlbWVu
dElkKTsKKyAgICBib29sIHJldHVyblZhbHVlID0gZXdrX2ZyYW1lX2FuaW1hdGlvbl9wYXVzZSht
YWluRnJhbWUsIG5hbWUsIGVsZW1lbnQsIHRpbWUpOworICAgIGZyZWUobmFtZSk7CisgICAgZnJl
ZShlbGVtZW50KTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmlu
Z1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7
CisgICAgY2hhciogbmFtZSA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKHByb3BlcnR5TmFtZSk7
CisgICAgY2hhciogZWxlbWVudCA9IEpTU3RyaW5nQ29weVVURjhDU3RyaW5nKGVsZW1lbnRJZCk7
CisgICAgYm9vbCByZXR1cm5WYWx1ZSA9IGV3a19mcmFtZV90cmFuc2l0aW9uX3BhdXNlKG1haW5G
cmFtZSwgbmFtZSwgZWxlbWVudCwgdGltZSk7CisgICAgZnJlZShuYW1lKTsKKyAgICBmcmVlKGVs
ZW1lbnQpOworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxlbWVudEF0VGltZShKU1N0cmluZ1JlZiBh
bmltYXRpb25JZCwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICBj
aGFyKiBuYW1lID0gSlNTdHJpbmdDb3B5VVRGOENTdHJpbmcoYW5pbWF0aW9uSWQpOworICAgIGNo
YXIqIGVsZW1lbnQgPSBKU1N0cmluZ0NvcHlVVEY4Q1N0cmluZyhlbGVtZW50SWQpOworICAgIGJv
b2wgcmV0dXJuVmFsdWUgPSBld2tfZnJhbWVfc3ZnX2FuaW1hdGlvbl9wYXVzZShtYWluRnJhbWUs
IG5hbWUsIGVsZW1lbnQsIHRpbWUpOworICAgIGZyZWUobmFtZSk7CisgICAgZnJlZShlbGVtZW50
KTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7Cit9CisKK3Vuc2lnbmVkIExheW91dFRlc3RDb250
cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBl
d2tfZnJhbWVfYW5pbWF0aW9uX2FjdGl2ZV9udW1iZXJfZ2V0KG1haW5GcmFtZSk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKK3sKKyAg
ICBld2tfZnJhbWVfYW5pbWF0aW9uX3N1c3BlbmQobWFpbkZyYW1lKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgZXdrX2Zy
YW1lX2FuaW1hdGlvbl9yZXN1bWUobWFpbkZyYW1lKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYg
dmFsdWUpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBy
dW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykKK3sKKyAgICBwcmludGYoIkxheW91dFRlc3RDb250
cm9sbGVyOjphZGRVc2VyU2NyaXB0IG5vdCBpbXBsZW1lbnRlZC5cbiIpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2Us
IGJvb2wgYWxsRnJhbWVzKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICAvLyBGSVhN
RTogbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uIHdoeSB1c2Vyc2NyaXB0cy91c2VyLXN0eWxlLXRv
cC1mcmFtZS1vbmx5Lmh0bWwgZmFpbHMgd2hlbiBhbGxGcmFtZXMgaXMgZmFsc2UuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNf
c2V0KGJyb3dzZXIsIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcy4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dl
Ykluc3BlY3RvcigpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09i
amVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQor
Citib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcoKQor
eworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNT
dHJpbmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCit7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9D
dXJyZW50QmFja0ZvcndhcmRJdGVtKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXZWJWaWV3RWRpdGFibGUoYm9vbCkKK3sK
KyAgICBld2tfZnJhbWVfZWRpdGFibGVfc2V0KG1haW5GcmFtZSwgRUlOQV9UUlVFKTsKK30KKwor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0
Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiAwOworfQorCitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1BzZXVk
b0lkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBjaGFyKiBl
ZGl0aW5nQmVoYXZpb3IpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworSlNWYWx1
ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hhZG93Um9vdChKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNWYWx1ZVJlZiBlbGVtZW50KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAg
cmV0dXJuIDA7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNo
YWRvd1Jvb3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCkKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpyZW1vdmVTaGFkb3dSb290KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIGVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudC4KK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIo
aW50IGZyb20sIGludCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc0dyYW1tYXJN
YXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBD
b25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGRldmljZURQSSwgaW50IGRldmljZVdpZHRoLCBp
bnQgZGV2aWNlSGVpZ2h0LCBpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBpZiBuZWVkZWQgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDc1OC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVy
SW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lckludGVydmFsKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQuCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rp
b24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
Cg==
</data>
<flag name="review"
          id="89393"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98011</attachid>
            <date>2011-06-21 10:55:04 -0700</date>
            <delta_ts>2011-06-22 09:02:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61974-20110621145826.patch</filename>
            <type>text/plain</type>
            <size>29509</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzNjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MTE3OTAyMmQ3NTFlZjhlZWM4NGI1Y2I2NGJkYzk4ZjNl
YzQzMTQyLi5lMDU5MWE2NmVlYjFjMGRlYTg1YjFiYjYwZWZlN2Q1OTViMmNmZDRlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM3
IEBACisyMDExLTA2LTIxICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2Jp
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtFRkxd
IERSVDogQWRkIExheW91dFRlc3RDb250cm9sbGVyRWZsLgorICAgICAgICBPbmx5IHRoZSBjb3Jl
IGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZC4gTW9zdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5Cisg
ICAgICAgIHN0dWJzIGFuZCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIHNvb24gYXMgaXRzIGZlYXR1
cmVzIGFyZSBuZWVkZWQuCisgICAgICAgIEJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHdpbGwgYmUgbWFk
ZSBhcyBzb29uIGFzIERSVCBpcyBjb21wbGV0ZWx5CisgICAgICAgIHVwc3RyZWFtZWQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTk3NAorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDogQWRk
ZWQuCisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVy
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZSk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZSk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQ
cm9wZXJ0eSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdlQm94VmlzaWJs
ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291
bnQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFjY2VwdHNFZGl0aW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2FpdEZvclBvbGljeURlbGVnYXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3kpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxp
dHlNb2RlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9y
VXNlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZl
YXR1cmUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQpOgorICAgICAgICAod2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXApOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndpbmRvd0NvdW50KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZCk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJy
b3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9y
aWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxlbWVu
dEF0VGltZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VV
UkwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJh
Y2tGb3J3YXJkSXRlbSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmll
d0VkaXRhYmxlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1BzZXVkb0lk
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFib3J0TW9kYWwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxs
aW5nTWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpoYXNHcmFtbWFyTWFy
a2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVI
VFRQTG9hZHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0
aW9uKToKKwogMjAxMS0wNi0yMCAgRG1pdHJ5IExvbW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDg3
NzVlZTdmOTJjNDVjZTZkMzc2ZjI4YzNiZjQ0NGZmZTdjYmU0NQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKQEAg
LTAsMCArMSw3NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmlj
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSwyMDExIENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQ
cm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCIKKworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiSlNTdHJp
bmdVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT3duRmFz
dE1hbGxvY1B0ci5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorI2luY2x1ZGUgIldvcmtRdWV1
ZUl0ZW1FZmwuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3Bh
cXVlSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91
dFRlc3RDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
RGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdSZWYgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAg
ZGlzcGxheVdlYlZpZXcoKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRl
c3RDb250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZCkK
K3sKKyAgICBPd25GYXN0TWFsbG9jUHRyPGNoYXI+IGNvdW50ZXJWYWx1ZShld2tfZnJhbWVfY291
bnRlcl92YWx1ZV9ieV9lbGVtZW50X2lkX2dldChtYWluRnJhbWUsIGlkLT51c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOworICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvdW50ZXJWYWx1ZS5nZXQoKSkpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250
cm9sbGVyOjpub2Rlc0Zyb21SZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcCwgdW5zaWduZWQgcmlnaHQsIHVuc2lnbmVk
IGJvdHRvbSwgdW5zaWduZWQgbGVmdCwgYm9vbCBpZ25vcmVDbGlwcGluZykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworfQorCitpbnQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZCwg
ZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAgIHJldHVybiBld2tfZnJh
bWVfcGFnZV9udW1iZXJfYnlfZWxlbWVudF9pZF9nZXQobWFpbkZyYW1lLCBpZC0+dXN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Cit9CisKK2ludCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VI
ZWlnaHQpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX251bWJlcl9nZXQobWFpbkZyYW1l
LCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5h
bWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzUGFnZUJveFZpc2li
bGUoaW50IHBhZ2VOdW1iZXIpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VOdW1iZXIsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFy
Z2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitzaXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhp
c3RvcnlJdGVtQ291bnQoKQoreworICAgIGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdr
X3ZpZXdfaGlzdG9yeV9nZXQoYnJvd3Nlcik7CisgICAgaWYgKCFoaXN0b3J5KQorICAgICAgICBy
ZXR1cm4gLTE7CisKKyAgICByZXR1cm4gZXdrX2hpc3RvcnlfYmFja19saXN0X2xlbmd0aChoaXN0
b3J5KSArIGV3a19oaXN0b3J5X2ZvcndhcmRfbGlzdF9sZW5ndGgoaGlzdG9yeSk7Cit9CisKK3Vu
c2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCit7CisgICAgaWYgKG1fd2FpdFRvRHVt
cCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQor
ICAgICAgICBkdW1wKCk7CisgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7CisgICAgd2FpdEZvclBv
bGljeSA9IGZhbHNlOworfQorCitKU1N0cmluZ1JlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF0
aFRvTG9jYWxSZXNvdXJjZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdXJsKQor
eworICAgIC8vIEZ1bmN0aW9uIGludHJvZHVjZWQgaW4gcjI4NjkwLiBUaGlzIG1heSBuZWVkIHNw
ZWNpYWwtY2FzaW5nIG9uIFdpbmRvd3MuCisgICAgcmV0dXJuIEpTU3RyaW5nUmV0YWluKHVybCk7
IC8vIERvIG5vdGhpbmcgb24gVW5peC4KK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQoreworICAgIFdU
Rjo6U3RyaW5nIGFic29sdXRlVXJsID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGV3a19mcmFtZV91
cmlfZ2V0KG1haW5GcmFtZSkpOworICAgIGFic29sdXRlVXJsLmFwcGVuZCh1cmwtPmNoYXJhY3Rl
cnMoKSwgdXJsLT5sZW5ndGgoKSk7CisgICAgV1RGOjpTdHJpbmcgdGFyZ2V0U3RyaW5nKHRhcmdl
dC0+Y2hhcmFjdGVycygpLCB0YXJnZXQtPmxlbmd0aCgpKTsKKworICAgIFdvcmtRdWV1ZTo6c2hh
cmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVybCwgdGFyZ2V0U3RyaW5nKSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNj
ZXB0c0VkaXRpbmcpCit7CisgICAgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KGJyb3dzZXIsIGFjY2Vw
dHNFZGl0aW5nKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNj
ZXB0Q29va2llcyhib29sIGFsd2F5c0FjY2VwdENvb2tpZXMpCit7CisgICAgZXdrX2Nvb2tpZXNf
cG9saWN5X3NldChhbHdheXNBY2NlcHRDb29raWVzID8gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FM
V0FZUyA6IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUik7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgc2V0RGVsZWdhdGUsIGJv
b2wgcGVybWlzc2l2ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAgIHdhaXRGb3JQ
b2xpY3kgPSB0cnVlOworICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiBvcmllbnRhdGlv
biwgSlNTdHJpbmdSZWYgcG9saWN5KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpT
U3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVm
IGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVs
aXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBwcm90b2NvbCwg
SlNTdHJpbmdSZWYgaG9zdCwgYm9vbCBpbmNsdWRlU3ViZG9tYWlucykKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNYWluRnJhbWVJ
c0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVu
dHMoYm9vbCBjeWNsZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wgZmxhZykK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sIGZsYWcpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIENTdHJpbmcgZ1VzZXJTdHlsZVNoZWV0Oworc3Rh
dGljIGJvb2wgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IHRydWU7CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcpCit7CisgICAg
Z1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7CisgICAgZXdrX3ZpZXdfc2V0dGluZ191c2Vy
X3N0eWxlc2hlZXRfc2V0KGJyb3dzZXIsIGZsYWcgPyBnVXNlclN0eWxlU2hlZXQuZGF0YSgpIDog
MCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKK3sKKyAgICBnVXNlclN0eWxlU2hlZXQgPSBwYXRoLT51
c3RyaW5nKCkudXRmOCgpOworCisgICAgaWYgKGdVc2VyU3R5bGVTaGVldEVuYWJsZWQpCisgICAg
ICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0
dXJlKEpTU3RyaW5nUmVmIG1vZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCB3aW5kb3dJc0tleSkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQo
dm9pZCopCit7CisgICAgd2FpdFRvRHVtcFdhdGNoZG9nID0gMDsKKyAgICBnTGF5b3V0VGVzdENv
bnRyb2xsZXItPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICByZXR1cm4gRUNP
UkVfQ0FMTEJBQ0tfQ0FOQ0VMOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRX
YWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9uZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHRpbWVvdXRTZWNvbmRzID0gMzA7CisKKyAgICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25l
OworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXdhaXRUb0R1bXBXYXRjaGRvZykKKyAgICAgICAg
d2FpdFRvRHVtcFdhdGNoZG9nID0gZWNvcmVfdGltZXJfYWRkKHRpbWVvdXRTZWNvbmRzLCB3YWl0
VG9EdW1wV2F0Y2hkb2dGaXJlZCwgMCk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2luZG93Q291bnQoKQoreworICAgIHJldHVybiAxOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tf
dmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdfc2V0KGJyb3dzZXIsIGZsYWcpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJk
KGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoYnJvd3NlciwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcpCit7
CisgICAgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KGJyb3dzZXIsIGZs
YWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFj
Y2Vzc0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzKGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2Jq
ZWN0LCBib29sIGlzQXV0b2ZpbGxlZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkaXNhYmxlSW1hZ2VMb2FkaW5nKCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciB0ZXN0aW5nIGZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI3ODk2CisgICAgLy8gQWxzbyBuZWVkIHRvIG1ha2Ugc3Vy
ZSBpbWFnZSBsb2FkaW5nIGlzIHJlLWVuYWJsZWQgZm9yIGVhY2ggbmV3IHRlc3QuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0Rl
dmljZU9yaWVudGF0aW9uKGJvb2wgY2FuUHJvdmlkZUFscGhhLCBkb3VibGUgYWxwaGEsIGJvb2wg
Y2FuUHJvdmlkZUJldGEsIGRvdWJsZSBiZXRhLCBib29sIGNhblByb3ZpZGVHYW1tYSwgZG91Ymxl
IGdhbW1hKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9u
IGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMwMzM1LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVk
ZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5KQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlv
bkVycm9yKGludCBjb2RlLCBKU1N0cmluZ1JlZiBtZXNzYWdlKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbihib29sIGFsbG93KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xv
Y2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICBzZXRHZW9sb2NhdGlvblBlcm1pc3Npb25Db21tb24o
YWxsb3cpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgcmV0dXJuIC0xOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdS
ZWYgcmVzdWx0LCBkb3VibGUgY29uZmlkZW5jZSwgSlNTdHJpbmdSZWYgbGFuZ3VhZ2UpCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KKyAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmICghZW5hYmxlZCkg
eworICAgICAgICBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3NldCgwKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNoYXIqIHRtcERpckVudiA9IGdldGVudigiVE1QRElS
Iik7CisgICAgaWYgKCF0bXBEaXJFbnYpCisgICAgICAgIHRtcERpckVudiA9IGdldGVudigiVEVN
UCIpOworICAgIGlmICghdG1wRGlyRW52KQorICAgICAgICB0bXBEaXJFbnYgPSBjb25zdF9jYXN0
PGNoYXIqPigiL3RtcCIpOworCisgICAgY29uc3QgV1RGOjpTdHJpbmcgZGF0YWJhc2VQYXRoID0g
V1RGOjpTdHJpbmc6OmZvcm1hdCgiJXMvRHVtcFJlbmRlclRyZWUvSWNvbkRhdGFiYXNlIiwgdG1w
RGlyRW52KTsKKyAgICBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3NldChkYXRhYmFz
ZVBhdGgudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGlu
Z1doaXRlc3BhY2VFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChi
b29sIGZsYWcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGV3a192aWV3
X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KGJyb3dzZXIsIGZsYWcpOworfQorCitib29sIExh
eW91dFRlc3RDb250cm9sbGVyOjplbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRo
SWQoSlNTdHJpbmdSZWYgaWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3Ry
aW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5KQor
eworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgSlNWYWx1ZVJl
ZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHkoY29udGV4dCwgb3B0aW9uc0FycmF5
LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOworICAgIGlmICghSlNWYWx1ZUlzTnVtYmVy
KGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZTsKKyAgICBib29sIGZvcndhcmQgPSB0cnVlOworICAgIGJv
b2wgd3JhcCA9IGZhbHNlOworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9
IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7
CisgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcHRpb25O
YW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIHZhbHVlLCAwKSk7CisKKyAg
ICAgICAgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQ2FzZUluc2Vuc2l0aXZlIikpCisgICAgICAg
ICAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRp
b25OYW1lLCAiQmFja3dhcmRzIikpCisgICAgICAgICAgICBmb3J3YXJkID0gZmFsc2U7CisgICAg
ICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiV3JhcEFyb3VuZCIpKQorICAgICAgICAg
ICAgd3JhcCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuICEhZXdrX3ZpZXdfdGV4dF9zZWFy
Y2goYnJvd3NlciwgdGFyZ2V0LT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY2FzZVNlbnNpdGl2
ZSwgZm9yd2FyZCwgd3JhcCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29t
bWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hlTW9kZWwoaW50IGNhY2hlTW9kZWwp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYganNVUkwp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsQXBwbGljYXRpb25D
YWNoZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNhdGlv
biBjYWNoZSBxdW90YXMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKHVuc2lnbmVkIGxv
bmcgbG9uZyBxdW90YSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBw
bGljYXRpb24gY2FjaGUgcXVvdGFzLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihPcGFx
dWVKU1N0cmluZyopCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGRlbGV0
aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4KKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFn
ZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0
ZXMgZm9yIGFuIG9yaWdpbi4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0
aW9uQ2FjaGUoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBnZXQgb3JpZ2lucyB0aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVzLgorICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVE
aXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERh
dGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRo
TG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxv
Y2FsU3RvcmFnZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW5JZGVudGlmaWVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2Vy
dmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnModW5zaWduZWQgbnVtYmVyKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN5bmNMb2Nh
bFN0b3JhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9v
bCwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRv
IGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAorICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERl
ZmVyc0xvYWRpbmcoYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBs
b2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmctbG9hZHMuaHRtbAorICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcENhY2hlTWF4
aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUpCit7CisgICAgZXdrX3NldHRpbmdzX2Nh
Y2hlX2NhcGFjaXR5X3NldChzaXplKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICByZXR1cm4g
ZXdrX2ZyYW1lX2FuaW1hdGlvbl9wYXVzZShtYWluRnJhbWUsIGFuaW1hdGlvbk5hbWUtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0
aW1lKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUs
IEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RyYW5zaXRp
b25fcGF1c2UobWFpbkZyYW1lLCBwcm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKK30KKworYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxlbWVudEF0VGltZShK
U1N0cmluZ1JlZiBhbmltYXRpb25JZCwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJ
ZCkKK3sKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3N2Z19hbmltYXRpb25fcGF1c2UobWFpbkZyYW1l
LCBhbmltYXRpb25JZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXdr
X2ZyYW1lX2FuaW1hdGlvbl9hY3RpdmVfbnVtYmVyX2dldChtYWluRnJhbWUpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAg
ZXdrX2ZyYW1lX2FuaW1hdGlvbl9zdXNwZW5kKG1haW5GcmFtZSk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGV3a19mcmFt
ZV9hbmltYXRpb25fcmVzdW1lKG1haW5GcmFtZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZh
bHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQs
IGJvb2wgYWxsRnJhbWVzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNvdXJjZSwg
Ym9vbCBhbGxGcmFtZXMpCit7CisgICAgLy8gRklYTUU6IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlv
biB3aHkgdXNlcnNjcmlwdHMvdXNlci1zdHlsZS10b3AtZnJhbWUtb25seS5odG1sIGZhaWxzIHdo
ZW4gYWxsRnJhbWVzIGlzIGZhbHNlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQoreworICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0
KGJyb3dzZXIsIGVuYWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
c3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3Io
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2Fs
bElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
dW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBz
Y3JpcHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZp
ZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJM
KEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1Rv
Q3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmlld0VkaXRhYmxlKGJvb2wpCit7Cisg
ICAgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChtYWluRnJhbWUsIEVJTkFfVFJVRSk7Cit9CisKK0pT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZv
ckxpc3RJdGVtKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpzaGFkb3dQc2V1ZG9JZChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBK
U1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgY2hhciogZWRpdGluZ0JlaGF2
aW9yKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNoYWRvd1Jvb3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
ZWxlbWVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitK
U1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjplbnN1cmVTaGFkb3dSb290KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3Zl
U2hhZG93Um9vdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFi
b3J0TW9kYWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpoYXNHcmFtbWFyTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBkZXZp
Y2VEUEksIGludCBkZXZpY2VXaWR0aCwgaW50IGRldmljZUhlaWdodCwgaW50IGF2YWlsYWJsZVdp
ZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaWYgbmVlZGVkIGZvciBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NTguCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91
YmxlIG1pbmltdW1UaW1lckludGVydmFsKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYg
ZGlyZWN0aW9uKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98178</attachid>
            <date>2011-06-22 09:02:15 -0700</date>
            <delta_ts>2011-06-27 07:28:27 -0700</delta_ts>
            <desc>Fix the return value for some functions which return JSValueRefs</desc>
            <filename>bug-61974-20110622130537.patch</filename>
            <type>text/plain</type>
            <size>29605</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk0MzQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2YjhiY2JhZTY2ZTNjOGQ2YmU5NGUxMjE2MmNiN2U3ZjNi
ZjRkOWY4Li41MzI2ZTM3OWU3ZGFlYTIzM2M5NThhMDkyNTIwZWQ4ZDkyMjU2YjRjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM3
IEBACisyMDExLTA2LTIyICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2Jp
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtFRkxd
IERSVDogQWRkIExheW91dFRlc3RDb250cm9sbGVyRWZsLgorICAgICAgICBPbmx5IHRoZSBjb3Jl
IGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZC4gTW9zdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5Cisg
ICAgICAgIHN0dWJzIGFuZCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIHNvb24gYXMgaXRzIGZlYXR1
cmVzIGFyZSBuZWVkZWQuCisgICAgICAgIEJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHdpbGwgYmUgbWFk
ZSBhcyBzb29uIGFzIERSVCBpcyBjb21wbGV0ZWx5CisgICAgICAgIHVwc3RyZWFtZWQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTk3NAorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDogQWRk
ZWQuCisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVy
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZSk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZSk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQ
cm9wZXJ0eSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdlQm94VmlzaWJs
ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291
bnQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFjY2VwdHNFZGl0aW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2FpdEZvclBvbGljeURlbGVnYXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3kpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxp
dHlNb2RlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9y
VXNlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZl
YXR1cmUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQpOgorICAgICAgICAod2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXApOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndpbmRvd0NvdW50KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZCk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJy
b3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9y
aWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxlbWVu
dEF0VGltZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VV
UkwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJh
Y2tGb3J3YXJkSXRlbSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmll
d0VkaXRhYmxlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1BzZXVkb0lk
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFib3J0TW9kYWwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxs
aW5nTWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpoYXNHcmFtbWFyTWFy
a2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVI
VFRQTG9hZHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0
aW9uKToKKwogMjAxMS0wNi0yMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDA4MzJmN2E4NzQ3MTIxM2YzODZjNTBlOGFhYzRiZjI0YWZkNzY5NwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxl
ckVmbC5jcHAKQEAgLTAsMCArMSw3NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMg
U2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwyMDExIENvbGxhYm9yYSBMdGQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcworICogQ29weXJpZ2h0IChDKSAy
MDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF5
b3V0VGVzdENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5j
bHVkZSAiSlNTdHJpbmdVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiT3duRmFzdE1hbGxvY1B0ci5oIgorI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgorI2luY2x1
ZGUgIldvcmtRdWV1ZUl0ZW1FZmwuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgPEVXZWJLaXQuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitMYXlvdXRUZXN0Q29udHJv
bGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkKK3sKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9y
d2FyZExpc3QoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTU3RyaW5nUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmIG5hbWUp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNTdHJpbmdS
ZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvcHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYg
bmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxh
eSgpCit7CisgICAgZGlzcGxheVdlYlZpZXcoKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZChKU1N0
cmluZ1JlZiBpZCkKK3sKKyAgICBPd25GYXN0TWFsbG9jUHRyPGNoYXI+IGNvdW50ZXJWYWx1ZShl
d2tfZnJhbWVfY291bnRlcl92YWx1ZV9ieV9lbGVtZW50X2lkX2dldChtYWluRnJhbWUsIGlkLT51
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvdW50ZXJWYWx1ZS5n
ZXQoKSkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29tcHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitKU1ZhbHVlUmVmIExh
eW91dFRlc3RDb250cm9sbGVyOjpub2Rlc0Zyb21SZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIHZhbHVlLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIHRvcCwgdW5zaWduZWQgcmln
aHQsIHVuc2lnbmVkIGJvdHRvbSwgdW5zaWduZWQgbGVmdCwgYm9vbCBpZ25vcmVDbGlwcGluZykK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250
cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpw
YWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWQsIGZsb2F0IHBhZ2VXaWR0aCwg
ZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2VfbnVtYmVyX2J5
X2VsZW1lbnRfaWRfZ2V0KG1haW5GcmFtZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBw
YWdlV2lkdGgsIHBhZ2VIZWlnaHQpOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51
bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAgIHJl
dHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJfZ2V0KG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdl
SGVpZ2h0KTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51bWJl
cikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCiti
b29sIExheW91dFRlc3RDb250cm9sbGVyOjppc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlTnVtYmVy
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VTaXpl
QW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlTnVtYmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1h
cmdpbkxlZnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworc2l6ZV90IExheW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkK
K3sKKyAgICBjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0
KGJyb3dzZXIpOworICAgIGlmICghaGlzdG9yeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAg
cmV0dXJuIGV3a19oaXN0b3J5X2JhY2tfbGlzdF9sZW5ndGgoaGlzdG9yeSkgKyBld2tfaGlzdG9y
eV9mb3J3YXJkX2xpc3RfbGVuZ3RoKGhpc3RvcnkpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBld2tf
dXRpbF93b3JrZXJfdGhyZWFkX2NvdW50KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om5vdGlmeURvbmUoKQoreworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExvYWRpbmdG
cmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgZHVtcCgpOwor
ICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOworICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKK30K
KworSlNTdHJpbmdSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2Uo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBGdW5jdGlv
biBpbnRyb2R1Y2VkIGluIHIyODY5MC4gVGhpcyBtYXkgbmVlZCBzcGVjaWFsLWNhc2luZyBvbiBX
aW5kb3dzLgorICAgIHJldHVybiBKU1N0cmluZ1JldGFpbih1cmwpOyAvLyBEbyBub3RoaW5nIG9u
IFVuaXguCit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmlu
Z1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKK3sKKyAgICBXVEY6OlN0cmluZyBhYnNvbHV0
ZVVybCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChtYWluRnJhbWUp
KTsKKyAgICBhYnNvbHV0ZVVybC5hcHBlbmQodXJsLT5jaGFyYWN0ZXJzKCksIHVybC0+bGVuZ3Ro
KCkpOworICAgIFdURjo6U3RyaW5nIHRhcmdldFN0cmluZyh0YXJnZXQtPmNoYXJhY3RlcnMoKSwg
dGFyZ2V0LT5sZW5ndGgoKSk7CisKKyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcg
TG9hZEl0ZW0oYWJzb2x1dGVVcmwsIHRhcmdldFN0cmluZykpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQorewor
ICAgIGV3a192aWV3X2VkaXRhYmxlX3NldChicm93c2VyLCBhY2NlcHRzRWRpdGluZyk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBh
bHdheXNBY2NlcHRDb29raWVzKQoreworICAgIGV3a19jb29raWVzX3BvbGljeV9zZXQoYWx3YXlz
QWNjZXB0Q29va2llcyA/IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVMgOiBFV0tfQ09PS0lF
X0pBUl9BQ0NFUFRfTkVWRVIpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRD
dXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIHNldERlbGVnYXRlLCBib29sIHBlcm1pc3NpdmUpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2FpdEZvclBvbGljeURlbGVnYXRlKCkKK3sKKyAgICB3YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKKyAg
ICBzZXRXYWl0VG9EdW1wKHRydWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3koSlNTdHJpbmdSZWYgb3JpZW50YXRpb24sIEpTU3RyaW5nUmVmIHBv
bGljeSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VP
cmlnaW4sIEpTU3RyaW5nUmVmIHByb3RvY29sLCBKU1N0cmluZ1JlZiBob3N0LCBib29sIGluY2x1
ZGVTdWJkb21haW5zKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5n
UmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgcHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3Qs
IGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihi
b29sIGZsYWcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wgY3ljbGVzKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlRGFzaGJvYXJk
Q29tcGF0aWJpbGl0eU1vZGUoYm9vbCBmbGFnKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3N0YXRpYyBDU3RyaW5nIGdVc2VyU3R5bGVTaGVldDsKK3N0YXRpYyBib29sIGdVc2VyU3R5
bGVTaGVldEVuYWJsZWQgPSB0cnVlOworCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRV
c2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGdVc2VyU3R5bGVTaGVldEVu
YWJsZWQgPSBmbGFnOworICAgIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChi
cm93c2VyLCBmbGFnID8gZ1VzZXJTdHlsZVNoZWV0LmRhdGEoKSA6IDApOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVm
IHBhdGgpCit7CisgICAgZ1VzZXJTdHlsZVNoZWV0ID0gcGF0aC0+dXN0cmluZygpLnV0ZjgoKTsK
KworICAgIGlmIChnVXNlclN0eWxlU2hlZXRFbmFibGVkKQorICAgICAgICBzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZh
bHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0LCBK
U1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRWaWV3TW9kZU1lZGlhRmVhdHVyZShKU1N0cmluZ1JlZiBt
b2RlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgd2luZG93SXNLZXkpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitz
dGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKHZvaWQqKQoreworICAgIHdh
aXRUb0R1bXBXYXRjaGRvZyA9IDA7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdh
aXRVbnRpbERvbmUpCit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lb3V0U2Vjb25kcyA9
IDMwOworCisgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKKyAgICBpZiAobV93YWl0
VG9EdW1wICYmICF3YWl0VG9EdW1wV2F0Y2hkb2cpCisgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRv
ZyA9IGVjb3JlX3RpbWVyX2FkZCh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmly
ZWQsIDApOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sK
KyAgICByZXR1cm4gMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19wcml2
YXRlX2Jyb3dzaW5nX3NldChicm93c2VyLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
WFNTQXVkaXRvckVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQo
Ym9vbCBmbGFnKQoreworICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5p
bmdfc2V0KGJyb3dzZXIsIGZsYWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGV3a192aWV3X3Nl
dHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChicm93c2VyLCBmbGFnKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMo
Ym9vbCBmbGFnKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGZsYWcpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgYm9vbCBpc0F1dG9m
aWxsZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBmb3IgdGVzdGluZyBmaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzg5NgorICAgIC8vIEFsc28gbmVlZCB0byBtYWtlIHN1cmUgaW1hZ2UgbG9hZGluZyBp
cyByZS1lbmFibGVkIGZvciBlYWNoIG5ldyB0ZXN0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihi
b29sIGNhblByb3ZpZGVBbHBoYSwgZG91YmxlIGFscGhhLCBib29sIGNhblByb3ZpZGVCZXRhLCBk
b3VibGUgYmV0YSwgYm9vbCBjYW5Qcm92aWRlR2FtbWEsIGRvdWJsZSBnYW1tYSkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBsYXlvdXQgdGVzdHMuCisg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDMzNS4K
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1
ZGUsIGRvdWJsZSBhY2N1cmFjeSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9s
b2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25FcnJvcihpbnQgY29kZSwg
SlNTdHJpbmdSZWYgbWVzc2FnZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9s
b2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBhbGxv
dykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVz
dHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30KKworaW50
IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24g
bGF5b3V0IHRlc3RzLgorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmIHJlc3VsdCwgZG91Ymxl
IGNvbmZpZGVuY2UsIEpTU3RyaW5nUmVmIGxhbmd1YWdlKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgZXdrX3Nl
dHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjaGFyKiB0bXBEaXJFbnYgPSBnZXRlbnYoIlRNUERJUiIpOworICAgIGlmICghdG1w
RGlyRW52KQorICAgICAgICB0bXBEaXJFbnYgPSBnZXRlbnYoIlRFTVAiKTsKKyAgICBpZiAoIXRt
cERpckVudikKKyAgICAgICAgdG1wRGlyRW52ID0gY29uc3RfY2FzdDxjaGFyKj4oIi90bXAiKTsK
KworICAgIGNvbnN0IFdURjo6U3RyaW5nIGRhdGFiYXNlUGF0aCA9IFdURjo6U3RyaW5nOjpmb3Jt
YXQoIiVzL0R1bXBSZW5kZXJUcmVlL0ljb25EYXRhYmFzZSIsIHRtcERpckVudik7CisgICAgZXdr
X3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0UHJvZmls
aW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxl
ZChib29sIGZsYWcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBs
dWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9w
bHVnaW5zX3NldChicm93c2VyLCBmbGFnKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGlk
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0
cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmlu
Z1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKK3sKKyAgICBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOworICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBK
U09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlO
YW1lLmdldCgpLCAwKTsKKyAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhW
YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9
IHRydWU7CisgICAgYm9vbCBmb3J3YXJkID0gdHJ1ZTsKKyAgICBib29sIHdyYXAgPSBmYWxzZTsK
KyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3Bl
cnR5QXRJbmRleChjb250ZXh0LCBvcHRpb25zQXJyYXksIGksIDApOworICAgICAgICBpZiAoIUpT
VmFsdWVJc1N0cmluZyhjb250ZXh0LCB2YWx1ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOworCisgICAgICAgIGlmIChlcXVhbHMo
b3B0aW9uTmFtZSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQorICAgICAgICAgICAgY2FzZVNlbnNpdGl2
ZSA9IGZhbHNlOworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkJhY2t3YXJk
cyIpKQorICAgICAgICAgICAgZm9yd2FyZCA9IGZhbHNlOworICAgICAgICBlbHNlIGlmIChlcXVh
bHMob3B0aW9uTmFtZSwgIldyYXBBcm91bmQiKSkKKyAgICAgICAgICAgIHdyYXAgPSB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiAhIWV3a192aWV3X3RleHRfc2VhcmNoKGJyb3dzZXIsIHRhcmdl
dC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGNhc2VTZW5zaXRpdmUsIGZvcndhcmQsIHdyYXAp
OworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3Ry
aW5nUmVmIG5hbWUpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRDYWNoZU1vZGVsKGludCBjYWNoZU1vZGVsKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRV
c2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGpzVVJMKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVu
dFVzZXJTdHlsZVNoZWV0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0aW9uIGNhY2hlIHF1
b3Rhcy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGluZyBhbGwgYXBwbGljYXRp
b24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworbG9u
ZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VEaXNrVXNhZ2VGb3JPcmln
aW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBhbiBvcmlnaW4u
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSlNWYWx1ZVJlZiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEpTQ29udGV4
dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gZ2V0IG9yaWdpbnMg
dGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworbG9uZyBsb25n
IExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdlRm9yT3JpZ2lu
KEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitKU1Zh
bHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0Nv
bnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmln
aW4oSlNTdHJpbmdSZWYgb3JpZ2luSWRlbnRpZmllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJO
b3RpZmljYXRpb25zKHVuc2lnbmVkIG51bWJlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmdvQmFjaygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25h
dmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wp
Cit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRpb24t
d2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVk
IGxvbmcgbG9uZyBzaXplKQoreworICAgIGV3a19zZXR0aW5nc19jYWNoZV9jYXBhY2l0eV9zZXQo
c2l6ZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
LCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9hbmltYXRp
b25fcGF1c2UobWFpbkZyYW1lLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Cit9CisKK2Jvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVt
ZW50SWQpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV90cmFuc2l0aW9uX3BhdXNlKG1haW5GcmFt
ZSwgcHJvcGVydHlOYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNhbXBsZVNWR0FuaW1hdGlvbkZvckVsZW1lbnRBdFRpbWUoSlNTdHJpbmdSZWYgYW5pbWF0
aW9uSWQsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgcmV0dXJu
IGV3a19mcmFtZV9zdmdfYW5pbWF0aW9uX3BhdXNlKG1haW5GcmFtZSwgYW5pbWF0aW9uSWQtPnVz
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCB0aW1lKTsKK30KKwordW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9hbmltYXRpb25f
YWN0aXZlX251bWJlcl9nZXQobWFpbkZyYW1lKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGV3a19mcmFtZV9hbmltYXRp
b25fc3VzcGVuZChtYWluRnJhbWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpy
ZXN1bWVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3Jlc3Vt
ZShtYWluRnJhbWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVBy
ZWZlcmVuY2UoSlNTdHJpbmdSZWYga2V5LCBKU1N0cmluZ1JlZiB2YWx1ZSkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2Ny
aXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW1lcykK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQor
eworICAgIC8vIEZJWE1FOiBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24gd2h5IHVzZXJzY3JpcHRz
L3VzZXItc3R5bGUtdG9wLWZyYW1lLW9ubHkuaHRtbCBmYWlscyB3aGVuIGFsbEZyYW1lcyBpcyBm
YWxzZS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBld2tf
dmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChicm93c2VyLCBlbmFibGVk
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3Bl
Y3RvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgSlNTdHJpbmdSZWYg
c2NyaXB0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4
RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2Fy
ZEl0ZW0oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQoreworICAgIGV3a19mcmFtZV9lZGl0
YWJsZV9zZXQobWFpbkZyYW1lLCBFSU5BX1RSVUUpOworfQorCitKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hhZG93UHNldWRvSWQoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50
aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
RWRpdGluZ0JlaGF2aW9yKGNvbnN0IGNoYXIqIGVkaXRpbmdCZWhhdmlvcikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpzaGFk
b3dSb290KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jv
b3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlU2hhZG93Um9vdChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1Nw
ZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpo
YXNHcmFtbWFyTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBkZXZpY2VEUEksIGludCBkZXZpY2VX
aWR0aCwgaW50IGRldmljZUhlaWdodCwgaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxl
SGVpZ2h0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2Fkcyhib29sKQoreworICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgaWYgbmVlZGVkIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTA3NTguCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIG1pbmltdW1UaW1lcklu
dGVydmFsKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYgZGlyZWN0aW9uKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98722</attachid>
            <date>2011-06-27 07:28:34 -0700</date>
            <delta_ts>2011-06-27 07:58:03 -0700</delta_ts>
            <desc>New patch following Kent&apos;s suggestions</desc>
            <filename>bug-61974-20110627113157.patch</filename>
            <type>text/plain</type>
            <size>28698</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk4MTUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NTYxZGJhYmUyNjM0OThkY2EzZGQ0OThlZTBhODA0YzZi
YzRiNGQwLi42NDAwNzQyNTdiOGUwOTA2YmFlM2VjNzFlY2I1NDEwMjc1NWRkMWU2IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM3
IEBACisyMDExLTA2LTI3ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1c2lvbi5t
b2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtF
RkxdIERSVDogQWRkIExheW91dFRlc3RDb250cm9sbGVyRWZsLgorICAgICAgICBPbmx5IHRoZSBj
b3JlIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZC4gTW9zdCBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5
CisgICAgICAgIHN0dWJzIGFuZCB3aWxsIGJlIGltcGxlbWVudGVkIGFzIHNvb24gYXMgaXRzIGZl
YXR1cmVzIGFyZSBuZWVkZWQuCisgICAgICAgIEJ1aWxkIHN5c3RlbSBjaGFuZ2VzIHdpbGwgYmUg
bWFkZSBhcyBzb29uIGFzIERSVCBpcyBjb21wbGV0ZWx5CisgICAgICAgIHVwc3RyZWFtZWQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTk3NAorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDog
QWRkZWQuCisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9s
bGVyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZSk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZSk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
Z2VQcm9wZXJ0eSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdlQm94Vmlz
aWJsZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5z
SW5QaXhlbHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVt
Q291bnQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFjY2VwdHNFZGl0aW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRBbHdheXNBY2NlcHRDb29raWVzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6d2FpdEZvclBvbGljeURlbGVnYXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTY3JvbGxiYXJQb2xpY3kpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFk
ZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGli
aWxpdHlNb2RlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldEVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVl
Rm9yVXNlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRp
YUZlYXR1cmUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVu
YWJsZWQpOgorICAgICAgICAod2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXApOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OndpbmRvd0NvdW50KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVV
UkxzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxl
ZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9u
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3Np
dGlvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9u
RXJyb3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVy
bWlzc2lvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5n
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50
V2l0aElkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZv
ck9yaWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlz
a1VzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5z
V2l0aEFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFw
cGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpv
cmlnaW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxl
bWVudEF0VGltZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5p
bWF0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9u
cyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJh
c2VVUkwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVu
dEJhY2tGb3J3YXJkSXRlbSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2Vi
Vmlld0VkaXRhYmxlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0
Rm9yTGlzdEl0ZW0pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1BzZXVk
b0lkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9u
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlbW92ZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFib3J0TW9kYWwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1Nw
ZWxsaW5nTWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpoYXNHcmFtbWFy
TWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlv
bkZvclZpZXdwb3J0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxp
emVIVFRQTG9hZHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1U
aW1lckludGVydmFsKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGly
ZWN0aW9uKToKKwogMjAxMS0wNi0yNyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmNzI3
MWVjNzgwYjJhZGZmM2YzZjk2MzY2MjY0ODgwYTMwYTY4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCkBAIC0w
LDAgKzEsNzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksMjAxMSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJv
RlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCisKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5n
VXRpbHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk93bkZhc3RN
YWxsb2NQdHIuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJ
dGVtRWZsLmgiCisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1
ZUpTU3RyaW5nLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRU
ZXN0Q29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERp
c2FsbG93ZWRVUkwoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3Bh
dGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
dGVzdGluZyBmaXggZm9yIDY3Mjc0OTUKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3sKKyAgICBkaXNwbGF5V2ViVmlldygp
OworfQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
dW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkKQoreworICAgIE93bkZhc3RN
YWxsb2NQdHI8Y2hhcj4gY291bnRlclZhbHVlKGV3a19mcmFtZV9jb3VudGVyX3ZhbHVlX2J5X2Vs
ZW1lbnRfaWRfZ2V0KG1haW5GcmFtZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoY291bnRlclZhbHVlLmdldCgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVk
aW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vZGVzRnJvbVJlY3Qo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYsIGludCwgaW50LCB1bnNpZ25lZCwgdW5z
aWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQo
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsK
K30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQo
SlNTdHJpbmdSZWYgaWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAg
ICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2VfbnVtYmVyX2J5X2VsZW1lbnRfaWRfZ2V0KG1haW5GcmFt
ZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOwor
fQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdp
ZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV9udW1i
ZXJfZ2V0KG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKK30KKworSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3Qg
Y2hhciosIGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc1BhZ2VCb3hWaXNpYmxlKGludCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFu
ZE1hcmdpbnNJblBpeGVscyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc2l6ZV90IExh
eW91dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3sKKyAgICBjb25zdCBF
d2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXIpOworICAg
IGlmICghaGlzdG9yeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGV3a19oaXN0
b3J5X2JhY2tfbGlzdF9sZW5ndGgoaGlzdG9yeSkgKyBld2tfaGlzdG9yeV9mb3J3YXJkX2xpc3Rf
bGVuZ3RoKGhpc3RvcnkpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29y
a2VyVGhyZWFkQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBld2tfdXRpbF93b3JrZXJfdGhy
ZWFkX2NvdW50KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUo
KQoreworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1
ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgZHVtcCgpOworICAgIG1fd2FpdFRvRHVt
cCA9IGZhbHNlOworICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKK30KKworSlNTdHJpbmdSZWYg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBGdW5jdGlvbiBpbnRyb2R1Y2VkIGlu
IHIyODY5MC4gVGhpcyBtYXkgbmVlZCBzcGVjaWFsLWNhc2luZyBvbiBXaW5kb3dzLgorICAgIHJl
dHVybiBKU1N0cmluZ1JldGFpbih1cmwpOyAvLyBEbyBub3RoaW5nIG9uIFVuaXguCit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3Ry
aW5nUmVmIHRhcmdldCkKK3sKKyAgICBXVEY6OlN0cmluZyBhYnNvbHV0ZVVybCA9IFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChtYWluRnJhbWUpKTsKKyAgICBhYnNvbHV0
ZVVybC5hcHBlbmQodXJsLT5jaGFyYWN0ZXJzKCksIHVybC0+bGVuZ3RoKCkpOworICAgIFdURjo6
U3RyaW5nIHRhcmdldFN0cmluZyh0YXJnZXQtPmNoYXJhY3RlcnMoKSwgdGFyZ2V0LT5sZW5ndGgo
KSk7CisKKyAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1
dGVVcmwsIHRhcmdldFN0cmluZykpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBY2NlcHRzRWRpdGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQoreworICAgIGV3a192aWV3X2Vk
aXRhYmxlX3NldChicm93c2VyLCBhY2NlcHRzRWRpdGluZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29r
aWVzKQoreworICAgIGV3a19jb29raWVzX3BvbGljeV9zZXQoYWx3YXlzQWNjZXB0Q29va2llcyA/
IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVMgOiBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfTkVW
RVIpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZShib29sLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit7CisgICAgd2FpdEZv
clBvbGljeSA9IHRydWU7CisgICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmLCBKU1N0cmlu
Z1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYsIEpTU3RyaW5nUmVmLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIGJvb2wpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFp
bkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVt
ZW50cyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURh
c2hib2FyZENvbXBhdGliaWxpdHlNb2RlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworc3RhdGljIENTdHJpbmcgZ1VzZXJTdHlsZVNoZWV0Oworc3RhdGljIGJvb2wgZ1VzZXJT
dHlsZVNoZWV0RW5hYmxlZCA9IHRydWU7CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZ1VzZXJTdHlsZVNoZWV0
RW5hYmxlZCA9IGZsYWc7CisgICAgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0
KGJyb3dzZXIsIGZsYWcgPyBnVXNlclN0eWxlU2hlZXQuZGF0YSgpIDogMCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdS
ZWYgcGF0aCkKK3sKKyAgICBnVXNlclN0eWxlU2hlZXQgPSBwYXRoLT51c3RyaW5nKCkudXRmOCgp
OworCisgICAgaWYgKGdVc2VyU3R5bGVTaGVldEVuYWJsZWQpCisgICAgICAgIHNldFVzZXJTdHls
ZVNoZWV0RW5hYmxlZCh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
Vmlld01vZGVNZWRpYUZlYXR1cmUoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKHZvaWQq
KQoreworICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IDA7CisgICAgZ0xheW91dFRlc3RDb250cm9s
bGVyLT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgcmV0dXJuIEVDT1JFX0NB
TExCQUNLX0NBTkNFTDsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRv
RHVtcChib29sIHdhaXRVbnRpbERvbmUpCit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1l
b3V0U2Vjb25kcyA9IDMwOworCisgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKKyAg
ICBpZiAobV93YWl0VG9EdW1wICYmICF3YWl0VG9EdW1wV2F0Y2hkb2cpCisgICAgICAgIHdhaXRU
b0R1bXBXYXRjaGRvZyA9IGVjb3JlX3RpbWVyX2FkZCh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVt
cFdhdGNoZG9nRmlyZWQsIDApOworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRv
d0NvdW50KCkKK3sKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdf
c2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChicm93c2VyLCBmbGFnKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29s
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRl
bmluZ19zZXQoYnJvd3NlciwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdf
c2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KGJyb3dzZXIsIGZsYWcpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJM
cyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhv
ckFuZFVzZXJTdHlsZXNFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYs
IEpTVmFsdWVSZWYsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCBmb3IgdGVzdGluZyBmaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNzg5NgorICAgIC8vIEFsc28gbmVlZCB0byBtYWtlIHN1cmUgaW1h
Z2UgbG9hZGluZyBpcyByZS1lbmFibGVkIGZvciBlYWNoIG5ldyB0ZXN0LgorICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VP
cmllbnRhdGlvbihib29sLCBkb3VibGUsIGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0
cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMw
MzM1LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgor
ICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQu
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoaW50LCBKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24oYm9vbCBhbGxvdykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBH
ZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29t
bW9uKGFsbG93KTsKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRp
bmdHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHJldHVybiAtMTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3Ry
aW5nUmVmLCBkb3VibGUsIEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
Zm9yIHNwZWVjaCBpbnB1dCBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJv
b2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgZXdrX3NldHRpbmdz
X2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBXVEY6OlN0cmluZyBkYXRhYmFzZVBhdGg7CisKKyAgICBpZiAoZ2V0ZW52KCJUTVBESVIiKSkK
KyAgICAgICAgZGF0YWJhc2VQYXRoID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KGdldGVudigiVE1Q
RElSIikpOworICAgIGVsc2UgaWYgKGdldGVudigiVEVNUCIpKQorICAgICAgICBkYXRhYmFzZVBh
dGggPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZ2V0ZW52KCJURU1QIikpOworICAgIGVsc2UKKyAg
ICAgICAgZGF0YWJhc2VQYXRoID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KCIvdG1wIik7CisKKyAg
ICBkYXRhYmFzZVBhdGguYXBwZW5kKCIvRHVtcFJlbmRlclRyZWUvSWNvbkRhdGFiYXNlIik7CisK
KyAgICBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3NldChkYXRhYmFzZVBhdGgudXRm
OCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3Jp
cHRQcm9maWxpbmdFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0Vu
YWJsZWQoYm9vbCBmbGFnKQoreworICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNf
c2V0KGJyb3dzZXIsIGZsYWcpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjplbGVt
ZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpmaW5k
U3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0
UmVmIG9wdGlvbnNBcnJheSkKK3sKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3Ro
UHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3Ro
IikpOworICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNv
bnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVydHlOYW1lLmdldCgpLCAwKTsKKyAgICBp
ZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWU7CisgICAgYm9vbCBmb3J3
YXJkID0gdHJ1ZTsKKyAgICBib29sIHdyYXAgPSBmYWxzZTsKKyAgICBzaXplX3QgbGVuZ3RoID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUs
IDApKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IEpTVmFsdWVSZWYgdmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBv
cHRpb25zQXJyYXksIGksIDApOworICAgICAgICBpZiAoIUpTVmFsdWVJc1N0cmluZyhjb250ZXh0
LCB2YWx1ZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0
LCB2YWx1ZSwgMCkpOworCisgICAgICAgIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkNhc2VJbnNl
bnNpdGl2ZSIpKQorICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlOworICAgICAgICBl
bHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkJhY2t3YXJkcyIpKQorICAgICAgICAgICAgZm9y
d2FyZCA9IGZhbHNlOworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIldyYXBB
cm91bmQiKSkKKyAgICAgICAgICAgIHdyYXAgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiAh
IWV3a192aWV3X3RleHRfc2VhcmNoKGJyb3dzZXIsIHRhcmdldC0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGNhc2VTZW5zaXRpdmUsIGZvcndhcmQsIHdyYXApOworfQorCitib29sIExheW91dFRl
c3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRDYWNoZU1v
ZGVsKGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1Jl
ZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlv
bkNhY2hlcygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxpY2F0
aW9uIGNhY2hlIHF1b3Rhcy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEodW5zaWduZWQg
bG9uZyBsb25nKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBhcHBsaWNh
dGlvbiBjYWNoZSBxdW90YXMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKE9wYXF1ZUpT
U3RyaW5nKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZGVsZXRpbmcg
YWxsIGFwcGxpY2F0aW9uIGNhY2hlcyBmb3IgYW4gb3JpZ2luLgorICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK2xvbmcgbG9uZyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlz
a1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gc3VwcG9ydCBnZXR0aW5nIGRpc2sgdXNhZ2UgaW4gYnl0ZXMgZm9yIGFuIG9yaWdpbi4KKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU1ZhbHVlUmVmIExheW91
dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0UmVm
IGNvbnRleHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0aGF0
IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVzLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitsb25nIGxvbmcgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNT
dHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERhdGFi
YXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9y
YWdlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpkZWxldGVBbGxMb2NhbFN0b3JhZ2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUxvY2FsU3RvcmFn
ZUZvck9yaWdpbihKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3RpZmljYXRp
b25zKHVuc2lnbmVkKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25G
b3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Z29CYWNrKCkKK3sKKyAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1k
ZWZlcnJpbmctbG9hZHMuaHRtbAorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCkKK3sKKyAgICAvLyBGSVhN
RTogaW1wbGVtZW50IHRvIGVuYWJsZSBsb2FkZXIvbmF2aWdhdGlvbi13aGlsZS1kZWZlcnJpbmct
bG9hZHMuaHRtbAorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25nIHNpemUp
Cit7CisgICAgZXdrX3NldHRpbmdzX2NhY2hlX2NhcGFjaXR5X3NldChzaXplKTsKK30KKworYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRo
SWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVs
ZW1lbnRJZCkKK3sKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2FuaW1hdGlvbl9wYXVzZShtYWluRnJh
bWUsIGFuaW1hdGlvbk5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVz
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIHBy
b3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3RyYW5zaXRpb25fcGF1c2UobWFpbkZyYW1lLCBwcm9wZXJ0eU5hbWUt
PnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCB0aW1lKTsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5p
bWF0aW9uRm9yRWxlbWVudEF0VGltZShKU1N0cmluZ1JlZiBhbmltYXRpb25JZCwgZG91YmxlIHRp
bWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKK3sKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3N2Z19h
bmltYXRpb25fcGF1c2UobWFpbkZyYW1lLCBhbmltYXRpb25JZC0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworfQorCit1
bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2FuaW1hdGlvbl9hY3RpdmVfbnVtYmVyX2dl
dChtYWluRnJhbWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5p
bWF0aW9ucygpIGNvbnN0Cit7CisgICAgZXdrX2ZyYW1lX2FuaW1hdGlvbl9zdXNwZW5kKG1haW5G
cmFtZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMo
KSBjb25zdAoreworICAgIGV3a19mcmFtZV9hbmltYXRpb25fcmVzdW1lKG1haW5GcmFtZSk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0cmlu
Z1JlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiwgYm9vbCwgYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphZGRVc2VyU3R5bGVTaGVldChKU1N0cmluZ1JlZiwgYm9vbCkKK3sKKyAgICAvLyBGSVhN
RTogbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uIHdoeSB1c2Vyc2NyaXB0cy91c2VyLXN0eWxlLXRv
cC1mcmFtZS1vbmx5Lmh0bWwgZmFpbHMgd2hlbiBhbGxGcmFtZXMgaXMgZmFsc2UuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxv
cGVyRXh0cmFzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19l
bmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoYnJvd3NlciwgZW5hYmxlZCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2hvd1dlYkluc3BlY3RvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5XZWJJbnNwZWN0b3IobG9uZywgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVB
bGxWaXNpdGVkTGlua3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYsIEpT
U3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRlbSgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2Vi
Vmlld0VkaXRhYmxlKGJvb2wpCit7CisgICAgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChtYWluRnJh
bWUsIEVJTkFfVFJVRSk7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJl
ZikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1BzZXVk
b0lkKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphdXRo
ZW50aWNhdGVTZXNzaW9uKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IGNoYXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1Jvb3QoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK0pTVmFsdWVSZWYg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jvb3QoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnJlbW92ZVNoYWRvd1Jvb3QoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9k
YWwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpo
YXNHcmFtbWFyTWFya2VyKGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmln
dXJhdGlvbkZvclZpZXdwb3J0KGludCwgaW50LCBpbnQsIGludCwgaW50KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlcmlhbGl6
ZUhUVFBMb2Fkcyhib29sKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaWYgbmVlZGVkIGZv
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA3NTguCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWluaW11
bVRpbWVySW50ZXJ2YWwoZG91YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98725</attachid>
            <date>2011-06-27 07:58:09 -0700</date>
            <delta_ts>2011-06-27 11:23:17 -0700</delta_ts>
            <desc>Replace WTF::String with String, improve the ChangeLog</desc>
            <filename>bug-61974-20110627120133.patch</filename>
            <type>text/plain</type>
            <size>28660</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk4MTUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NTYxZGJhYmUyNjM0OThkY2EzZGQ0OThlZTBhODA0YzZi
YzRiNGQwLi42YWNhNjA1MmY5ODJiOTI4OTMwZmFlMzFlMGZhNDQxM2E1ODgyNWI2IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM4
IEBACisyMDExLTA2LTI3ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1c2lvbi5t
b2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtF
RkxdIEFkZCBMYXlvdXRUZXN0Q29udHJvbGxlckVmbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxOTc0CisKKyAgICAgICAgT25seSB0aGUgY29yZSBm
ZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQuIE1vc3QgZnVuY3Rpb25zIGFyZSBhY3R1YWxseQorICAg
ICAgICBzdHVicyBhbmQgd2lsbCBiZSBpbXBsZW1lbnRlZCBhcyBzb29uIGFzIGl0cyBmZWF0dXJl
cyBhcmUgbmVlZGVkLgorICAgICAgICBCdWlsZCBzeXN0ZW0gY2hhbmdlcyB3aWxsIGJlIG1hZGUg
YXMgc29vbiBhcyBEUlQgaXMgY29tcGxldGVseQorICAgICAgICB1cHN0cmVhbWVkLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDogQWRk
ZWQuCisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVy
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZSk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZSk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQ
cm9wZXJ0eSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdlQm94VmlzaWJs
ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5Q
aXhlbHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291
bnQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEFjY2VwdHNFZGl0aW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRBbHdheXNBY2NlcHRDb29raWVzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d2FpdEZvclBvbGljeURlbGVnYXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRTY3JvbGxiYXJQb2xpY3kpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxp
dHlNb2RlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVl
dEVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9y
VXNlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZl
YXR1cmUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQpOgorICAgICAgICAod2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXApOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndpbmRvd0NvdW50KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQ
cml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxz
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVz
RW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZCk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzYWJsZUltYWdlTG9hZGluZyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0RldmljZU9yaWVudGF0aW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uRXJy
b3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEdlb2xvY2F0aW9uUGVybWlz
c2lvbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2Vv
bG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SWNvbkRhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5zRW5hYmxlZCk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Q2FjaGVNb2RlbCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24pOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9y
aWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bG9jYWxTdG9yYWdlRGlza1Vz
YWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmlnaW5zV2l0
aEFwcGxpY2F0aW9uQ2FjaGUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwcGxp
Y2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpzZXREYXRhYmFzZVF1b3RhKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvcmln
aW5zV2l0aExvY2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVs
ZXRlQWxsTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkZWxl
dGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNhdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN5bmNMb2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmdvQmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxlbWVu
dEF0VGltZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdXNwZW5kQW5pbWF0
aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucyk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VV
UkwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJh
Y2tGb3J3YXJkSXRlbSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2ViVmll
d0VkaXRhYmxlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1BzZXVkb0lk
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmVuc3VyZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZVNoYWRvd1Jvb3QpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFib3J0TW9kYWwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxs
aW5nTWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpoYXNHcmFtbWFyTWFy
a2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZXJpYWxpemVI
VFRQTG9hZHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0
aW9uKToKKwogMjAxMS0wNi0yNyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MDIxOTM0
M2ZlNGQ1Y2IyYWZiYTRiZDQ2NGQ3MDhjMDc3NGI4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCkBAIC0wLDAg
KzEsNzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksMjAxMSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVT
SU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0
cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVy
LmgiCisKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkpTU3RyaW5nVXRp
bHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk93bkZhc3RNYWxs
b2NQdHIuaCIKKyNpbmNsdWRlICJXb3JrUXVldWUuaCIKKyNpbmNsdWRlICJXb3JrUXVldWVJdGVt
RWZsLmgiCisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpT
U3RyaW5nLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0
Q29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZERpc2Fs
bG93ZWRVUkwoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpj
b3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpj
b3B5RW5jb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BhdGNo
UGVuZGluZ0xvYWRSZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgdGVz
dGluZyBmaXggZm9yIDY3Mjc0OTUKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KCkKK3sKKyAgICBkaXNwbGF5V2ViVmlldygpOwor
fQorCitKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvdW50
ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkKQoreworICAgIE93bkZhc3RNYWxs
b2NQdHI8Y2hhcj4gY291bnRlclZhbHVlKGV3a19mcmFtZV9jb3VudGVyX3ZhbHVlX2J5X2VsZW1l
bnRfaWRfZ2V0KG1haW5GcmFtZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAg
cmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoY291bnRlclZhbHVlLmdldCgpKSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmtlZXBXZWJIaXN0b3J5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpjb21wdXRlZFN0eWxlSW5jbHVkaW5n
VmlzaXRlZEluZm8oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK0pTVmFsdWVSZWYgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vZGVzRnJvbVJlY3QoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYsIGludCwgaW50LCB1bnNpZ25lZCwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKK30K
KworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQoSlNT
dHJpbmdSZWYgaWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3BhZ2VfbnVtYmVyX2J5X2VsZW1lbnRfaWRfZ2V0KG1haW5GcmFtZSwg
aWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOworfQor
CitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRo
LCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJf
Z2V0KG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKK30KKworSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hh
ciosIGludCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc1BhZ2VCb3hWaXNpYmxlKGludCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlU2l6ZUFuZE1h
cmdpbnNJblBpeGVscyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc2l6ZV90IExheW91
dFRlc3RDb250cm9sbGVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKK3sKKyAgICBjb25zdCBFd2tf
SGlzdG9yeSogaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXIpOworICAgIGlm
ICghaGlzdG9yeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIGV3a19oaXN0b3J5
X2JhY2tfbGlzdF9sZW5ndGgoaGlzdG9yeSkgKyBld2tfaGlzdG9yeV9mb3J3YXJkX2xpc3RfbGVu
Z3RoKGhpc3RvcnkpOworfQorCit1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2Vy
VGhyZWFkQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBld2tfdXRpbF93b3JrZXJfdGhyZWFk
X2NvdW50KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQor
eworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVl
OjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICAgICAgZHVtcCgpOworICAgIG1fd2FpdFRvRHVtcCA9
IGZhbHNlOworICAgIHdhaXRGb3JQb2xpY3kgPSBmYWxzZTsKK30KKworSlNTdHJpbmdSZWYgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhdGhUb0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTU3RyaW5nUmVmIHVybCkKK3sKKyAgICAvLyBGdW5jdGlvbiBpbnRyb2R1Y2VkIGluIHIy
ODY5MC4gVGhpcyBtYXkgbmVlZCBzcGVjaWFsLWNhc2luZyBvbiBXaW5kb3dzLgorICAgIHJldHVy
biBKU1N0cmluZ1JldGFpbih1cmwpOyAvLyBEbyBub3RoaW5nIG9uIFVuaXguCit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5n
UmVmIHRhcmdldCkKK3sKKyAgICBTdHJpbmcgYWJzb2x1dGVVcmwgPSBTdHJpbmc6OmZyb21VVEY4
KGV3a19mcmFtZV91cmlfZ2V0KG1haW5GcmFtZSkpOworICAgIGFic29sdXRlVXJsLmFwcGVuZCh1
cmwtPmNoYXJhY3RlcnMoKSwgdXJsLT5sZW5ndGgoKSk7CisgICAgU3RyaW5nIHRhcmdldFN0cmlu
Zyh0YXJnZXQtPmNoYXJhY3RlcnMoKSwgdGFyZ2V0LT5sZW5ndGgoKSk7CisKKyAgICBXb3JrUXVl
dWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVcmwsIHRhcmdldFN0cmlu
ZykpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyhi
b29sIGFjY2VwdHNFZGl0aW5nKQoreworICAgIGV3a192aWV3X2VkaXRhYmxlX3NldChicm93c2Vy
LCBhY2NlcHRzRWRpdGluZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
d2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQoreworICAgIGV3a19j
b29raWVzX3BvbGljeV9zZXQoYWx3YXlzQWNjZXB0Q29va2llcyA/IEVXS19DT09LSUVfSkFSX0FD
Q0VQVF9BTFdBWVMgOiBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVIpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sLCBib29sKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCit7CisgICAgd2FpdEZvclBvbGljeSA9IHRydWU7Cisg
ICAgc2V0V2FpdFRvRHVtcCh0cnVlKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0U2Nyb2xsYmFyUG9saWN5KEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVm
LCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmLCBK
U1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3Bv
bmRlcihib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZURhc2hib2FyZENvbXBhdGliaWxp
dHlNb2RlKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIENTdHJp
bmcgZ1VzZXJTdHlsZVNoZWV0Oworc3RhdGljIGJvb2wgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9
IHRydWU7CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChib29sIGZsYWcpCit7CisgICAgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7Cisg
ICAgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KGJyb3dzZXIsIGZsYWcgPyBn
VXNlclN0eWxlU2hlZXQuZGF0YSgpIDogMCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgcGF0aCkKK3sKKyAgICBn
VXNlclN0eWxlU2hlZXQgPSBwYXRoLT51c3RyaW5nKCkudXRmOCgpOworCisgICAgaWYgKGdVc2Vy
U3R5bGVTaGVldEVuYWJsZWQpCisgICAgICAgIHNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZCh0cnVl
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29u
dGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Vmlld01vZGVNZWRpYUZlYXR1
cmUoSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGF0aWMg
RWluYV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKHZvaWQqKQoreworICAgIHdhaXRUb0R1
bXBXYXRjaGRvZyA9IDA7CisgICAgZ0xheW91dFRlc3RDb250cm9sbGVyLT53YWl0VG9EdW1wV2F0
Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2FpdFRvRHVtcChib29sIHdhaXRVbnRp
bERvbmUpCit7CisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW1lb3V0U2Vjb25kcyA9IDMwOwor
CisgICAgbV93YWl0VG9EdW1wID0gd2FpdFVudGlsRG9uZTsKKyAgICBpZiAobV93YWl0VG9EdW1w
ICYmICF3YWl0VG9EdW1wV2F0Y2hkb2cpCisgICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IGVj
b3JlX3RpbWVyX2FkZCh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmlyZWQsIDAp
OworfQorCitpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndpbmRvd0NvdW50KCkKK3sKKyAgICBy
ZXR1cm4gMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jy
b3dzaW5nX3NldChicm93c2VyLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JF
bmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChib29sIGZsYWcpCit7Cisg
ICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoYnJvd3Nlciwg
ZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25h
dmlnYXRpb25fc2V0KGJyb3dzZXIsIGZsYWcpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93
RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXV0b2ZpbGxlZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZGlzYWJsZUltYWdlTG9hZGluZygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Ig
dGVzdGluZyBmaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Nzg5NgorICAgIC8vIEFsc28gbmVlZCB0byBtYWtlIHN1cmUgaW1hZ2UgbG9hZGluZyBpcyByZS1l
bmFibGVkIGZvciBlYWNoIG5ldyB0ZXN0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbihib29sLCBk
b3VibGUsIGJvb2wsIGRvdWJsZSwgYm9vbCwgZG91YmxlKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgZm9yIERldmljZU9yaWVudGF0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMzM1LgorICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyNjQuCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9u
RXJyb3IoaW50LCBKU1N0cmluZ1JlZikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBH
ZW9sb2NhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yODI2NC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBh
bGxvdykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBHZW9sb2NhdGlvbiBsYXlvdXQg
dGVzdHMuCisgICAgc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKK30KKwor
aW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0cygpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRp
b24gbGF5b3V0IHRlc3RzLgorICAgIHJldHVybiAtMTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KEpTU3RyaW5nUmVmLCBkb3VibGUsIEpT
U3RyaW5nUmVmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHNwZWVjaCBpbnB1dCBs
YXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zOTQ4NS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0
aF9zZXQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgZGF0YWJhc2VQ
YXRoOworCisgICAgaWYgKGdldGVudigiVE1QRElSIikpCisgICAgICAgIGRhdGFiYXNlUGF0aCA9
IFN0cmluZzo6ZnJvbVVURjgoZ2V0ZW52KCJUTVBESVIiKSk7CisgICAgZWxzZSBpZiAoZ2V0ZW52
KCJURU1QIikpCisgICAgICAgIGRhdGFiYXNlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoZ2V0ZW52
KCJURU1QIikpOworICAgIGVsc2UKKyAgICAgICAgZGF0YWJhc2VQYXRoID0gU3RyaW5nOjpmcm9t
VVRGOCgiL3RtcCIpOworCisgICAgZGF0YWJhc2VQYXRoLmFwcGVuZCgiL0R1bXBSZW5kZXJUcmVl
L0ljb25EYXRhYmFzZSIpOworCisgICAgZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9z
ZXQoZGF0YWJhc2VQYXRoLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZChib29sKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFNlbGVjdFRy
YWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9wbHVnaW5zX3NldChicm93c2VyLCBmbGFnKTsKK30KKworYm9vbCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkKEpT
U3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiwg
SlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdS
ZWYgdGFyZ2V0LCBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkpCit7CisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBKU1ZhbHVlUmVmIGxlbmd0aFZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eShjb250ZXh0LCBvcHRpb25zQXJyYXksIGxlbmd0aFByb3BlcnR5TmFt
ZS5nZXQoKSwgMCk7CisgICAgaWYgKCFKU1ZhbHVlSXNOdW1iZXIoY29udGV4dCwgbGVuZ3RoVmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGNhc2VTZW5zaXRpdmUgPSB0
cnVlOworICAgIGJvb2wgZm9yd2FyZCA9IHRydWU7CisgICAgYm9vbCB3cmFwID0gZmFsc2U7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0
eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKKyAgICAgICAgaWYgKCFKU1Zh
bHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsKKworICAgICAgICBpZiAoZXF1YWxzKG9w
dGlvbk5hbWUsICJDYXNlSW5zZW5zaXRpdmUiKSkKKyAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUg
PSBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJCYWNrd2FyZHMi
KSkKKyAgICAgICAgICAgIGZvcndhcmQgPSBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxz
KG9wdGlvbk5hbWUsICJXcmFwQXJvdW5kIikpCisgICAgICAgICAgICB3cmFwID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gISFld2tfdmlld190ZXh0X3NlYXJjaChicm93c2VyLCB0YXJnZXQt
PnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjYXNlU2Vuc2l0aXZlLCBmb3J3YXJkLCB3cmFwKTsK
K30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmlu
Z1JlZiBuYW1lKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0Q2FjaGVNb2RlbChpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xlYXJQZXJzaXN0ZW50VXNlclN0eWxlU2hlZXQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gc3VwcG9ydCBhcHBsaWNhdGlvbiBjYWNoZSBxdW90YXMuCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZykKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRvIHN1cHBvcnQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGFzLgorICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbihPcGFxdWVKU1N0cmluZyopCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
byBzdXBwb3J0IGRlbGV0aW5nIGFsbCBhcHBsaWNhdGlvbiBjYWNoZXMgZm9yIGFuIG9yaWdpbi4K
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitsb25nIGxvbmcgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVz
IGZvciBhbiBvcmlnaW4uCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlv
bkNhY2hlKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dG8gZ2V0IG9yaWdpbnMgdGhhdCBjb250YWluIGFwcGxpY2F0aW9uIGNhY2hlcy4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNhY2hlRGlz
a1VzYWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQWxsRGF0
YWJhc2VzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZykKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpv
cmlnaW5zV2l0aExvY2FsU3RvcmFnZShKU0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlQWxsTG9jYWxTdG9yYWdlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpkZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JzZXJ2ZVN0b3Jh
Z2VUcmFja2VyTm90aWZpY2F0aW9ucyh1bnNpZ25lZCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzeW5jTG9jYWxTdG9yYWdlKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wsIEpTU3RyaW5nUmVm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmdvQmFjaygpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVy
L25hdmlnYXRpb24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJv
b2wpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudCB0byBlbmFibGUgbG9hZGVyL25hdmlnYXRp
b24td2hpbGUtZGVmZXJyaW5nLWxvYWRzLmh0bWwKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2ln
bmVkIGxvbmcgbG9uZyBzaXplKQoreworICAgIGV3a19zZXR0aW5nc19jYWNoZV9jYXBhY2l0eV9z
ZXQoc2l6ZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKEpTU3RyaW5nUmVmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0
aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9hbmlt
YXRpb25fcGF1c2UobWFpbkZyYW1lLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Cit9CisKK2Jv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBl
bGVtZW50SWQpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV90cmFuc2l0aW9uX3BhdXNlKG1haW5G
cmFtZSwgcHJvcGVydHlOYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNhbXBsZVNWR0FuaW1hdGlvbkZvckVsZW1lbnRBdFRpbWUoSlNTdHJpbmdSZWYgYW5p
bWF0aW9uSWQsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCit7CisgICAgcmV0
dXJuIGV3a19mcmFtZV9zdmdfYW5pbWF0aW9uX3BhdXNlKG1haW5GcmFtZSwgYW5pbWF0aW9uSWQt
PnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCB0aW1lKTsKK30KKwordW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9hbmltYXRp
b25fYWN0aXZlX251bWJlcl9nZXQobWFpbkZyYW1lKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGV3a19mcmFtZV9hbmlt
YXRpb25fc3VzcGVuZChtYWluRnJhbWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpyZXN1bWVBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3Jl
c3VtZShtYWluRnJhbWUpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlk
ZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYsIGJvb2wsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYsIGJv
b2wpCit7CisgICAgLy8gRklYTUU6IG5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbiB3aHkgdXNlcnNj
cmlwdHMvdXNlci1zdHlsZS10b3AtZnJhbWUtb25seS5odG1sIGZhaWxzIHdoZW4gYWxsRnJhbWVz
IGlzIGZhbHNlLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAg
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KGJyb3dzZXIsIGVu
YWJsZWQpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBc3luY2hyb25vdXNT
cGVsbENoZWNraW5nRW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2Vi
SW5zcGVjdG9yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcsIEpTU3RyaW5nUmVmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNT
dHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpjYWxsU2hvdWxkQ2xvc2VPbldl
YlZpZXcoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNl
VVJMKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9y
d2FyZEl0ZW0oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJsZShib29sKQoreworICAgIGV3a19mcmFtZV9l
ZGl0YWJsZV9zZXQobWFpbkZyYW1lLCBFSU5BX1RSVUUpOworfQorCitKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0Nv
bnRleHRSZWYsIEpTVmFsdWVSZWYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250
cm9sbGVyOjpzaGFkb3dQc2V1ZG9JZChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXV0aGVudGljYXRlU2Vzc2lvbihKU1N0cmluZ1JlZiwgSlNTdHJpbmdS
ZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBjaGFyKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVy
OjpzaGFkb3dSb290KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVyOjplbnN1cmVTaGFkb3dSb290
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVTaGFkb3dSb290KEpTQ29udGV4dFJlZiwgSlNW
YWx1ZVJlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphYm9ydE1vZGFsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6aGFzR3JhbW1hck1hcmtlcihpbnQsIGludCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQsIGludCwgaW50LCBpbnQs
IGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMoYm9vbCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGlmIG5lZWRlZCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUwNzU4LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKGRvdWJsZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUZXh0RGlyZWN0
aW9uKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98754</attachid>
            <date>2011-06-27 11:23:25 -0700</date>
            <delta_ts>2011-07-04 05:18:47 -0700</delta_ts>
            <desc>Make it build after the recent changes to LayoutTestController.h</desc>
            <filename>bug-61974-20110627152647.patch</filename>
            <type>text/plain</type>
            <size>27883</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk4MzIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2ZjVjN2UyNGI2Yjg3NDY0ZWQzMjgwNzE2ZDRmOTYzZWM3
MWY1MjRmLi4zZmU3YWRkNjA3ZjJhMzk3ZDkwZDJjMDMwMmE0YjZjMTg3MzU5ZTY1IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM0
IEBACisyMDExLTA2LTI3ICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2Jp
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtFRkxd
IEFkZCBMYXlvdXRUZXN0Q29udHJvbGxlckVmbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYxOTc0CisKKyAgICAgICAgT25seSB0aGUgY29yZSBmZWF0
dXJlcyBhcmUgaW1wbGVtZW50ZWQuIE1vc3QgZnVuY3Rpb25zIGFyZSBhY3R1YWxseQorICAgICAg
ICBzdHVicyBhbmQgd2lsbCBiZSBpbXBsZW1lbnRlZCBhcyBzb29uIGFzIGl0cyBmZWF0dXJlcyBh
cmUgbmVlZGVkLgorICAgICAgICBCdWlsZCBzeXN0ZW0gY2hhbmdlcyB3aWxsIGJlIG1hZGUgYXMg
c29vbiBhcyBEUlQgaXMgY29tcGxldGVseQorICAgICAgICB1cHN0cmVhbWVkLgorCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDogQWRkZWQu
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckJhY2tGb3J3YXJkTGlzdCk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZSk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZSk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpkaXNwbGF5KToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvbXB1dGVkU3R5bGVJbmNsdWRpbmdWaXNpdGVkSW5mbyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpw
YWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9w
ZXJ0eSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdlQm94VmlzaWJsZSk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhl
bHMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNlKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpxdWV1ZUxvYWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldEFjY2VwdHNFZGl0aW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRB
bHdheXNBY2NlcHRDb29raWVzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRD
dXN0b21Qb2xpY3lEZWxlZ2F0ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2Fp
dEZvclBvbGljeURlbGVnYXRlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRT
Y3JvbGxiYXJQb2xpY3kpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE9yaWdp
bkFjY2Vzc1doaXRlbGlzdEVudHJ5KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpy
ZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcik6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZSk6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVk
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRWYWx1ZUZvclVzZXIpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleSk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKToKKyAg
ICAgICAgKHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRXYWl0VG9EdW1wKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp3
aW5kb3dDb3VudCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNj
cmlwdENhbkFjY2Vzc0NsaXBib2FyZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0WFNTQXVkaXRvckVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyk6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1dG9maWxsZWQpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxvYWRpbmcpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tEZXZpY2VPcmllbnRhdGlvbik6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24pOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24pOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RzKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphZGRN
b2NrU3BlZWNoSW5wdXRSZXN1bHQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEljb25EYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEphdmFTY3JpcHRQcm9maWxpbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c2V0UGx1Z2luc0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldENhY2hlTW9kZWwpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFBlcnNp
c3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpjbGVhclBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcyk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4pOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmxvY2FsU3RvcmFnZURpc2tVc2FnZUZvck9y
aWdpbik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhBcHBsaWNh
dGlvbkNhY2hlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphcHBsaWNhdGlvbkNh
Y2hlRGlza1VzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpj
bGVhckFsbERhdGFiYXNlcyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0
YWJhc2VRdW90YSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhM
b2NhbFN0b3JhZ2UpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExv
Y2FsU3RvcmFnZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxT
dG9yYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpvYnNlcnZl
U3RvcmFnZVRyYWNrZXJOb3RpZmljYXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzeW5jTG9jYWxTdG9yYWdlKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpnb0JhY2spOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFw
cENhY2hlTWF4aW11bVNpemUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNhbXBsZVNWR0FuaW1hdGlvbkZvckVsZW1lbnRBdFRpbWUp
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om92ZXJyaWRlUHJlZmVyZW5jZSk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKToKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcik6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphcGlUZXN0R29Ub0N1cnJlbnRCYWNrRm9yd2Fy
ZEl0ZW0pOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdlYlZpZXdFZGl0YWJs
ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVt
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjphdXRoZW50aWNhdGVTZXNzaW9uKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpoYXNHcmFtbWFyTWFya2VyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRTZXJpYWxpemVIVFRQTG9hZHMpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldE1pbmltdW1UaW1lckludGVydmFsKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRUZXh0RGlyZWN0aW9uKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjphbGxvd1JvdW5kaW5nSGFja3MpOgorCiAyMDExLTA2LTI3ICBDaGFuZyBTaHUgIDxjc2h1
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3Bw
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMDdiNjg3OWI2OThkZGNkYTI0YzY3MGI1MjRmNmY2MDE4YmNhMjU1Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9s
bGVyRWZsLmNwcApAQCAtMCwwICsxLDc0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJp
YyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkg
THRkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1hbG9uem9A
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgQ29sbGFib3JhIEx0ZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJM
YXlvdXRUZXN0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKyNp
bmNsdWRlICJKU1N0cmluZ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJPd25GYXN0TWFsbG9jUHRyLmgiCisjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCisjaW5j
bHVkZSAiV29ya1F1ZXVlSXRlbUVmbC5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCisjaW5j
bHVkZSA8RVdlYktpdC5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK0xheW91dFRlc3RDb250
cm9sbGVyOjp+TGF5b3V0VGVzdENvbnRyb2xsZXIoKQoreworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjphZGREaXNhbGxvd2VkVVJMKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsZWFyQmFja0Zvcndh
cmRMaXN0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitKU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29weURlY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitKU1N0cmluZ1JlZiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29weUVuY29kZWRIb3N0TmFtZShKU1N0cmluZ1JlZikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciA2NzI3NDk1CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCit7CisgICAg
ZGlzcGxheVdlYlZpZXcoKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRl
c3RDb250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZCkK
K3sKKyAgICBPd25GYXN0TWFsbG9jUHRyPGNoYXI+IGNvdW50ZXJWYWx1ZShld2tfZnJhbWVfY291
bnRlcl92YWx1ZV9ieV9lbGVtZW50X2lkX2dldChtYWluRnJhbWUsIGlkLT51c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOworICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQs
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvdW50ZXJWYWx1ZS5nZXQoKSkpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1Zh
bHVlUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworfQorCitKU1ZhbHVlUmVmIExheW91dFRlc3RDb250cm9sbGVy
Ojpub2Rlc0Zyb21SZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmLCBpbnQsIGlu
dCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCIiKSk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZU51bWJl
ckZvckVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkLCBmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBh
Z2VIZWlnaHQpCit7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX251bWJlcl9ieV9lbGVtZW50
X2lkX2dldChtYWluRnJhbWUsIGlkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcGFnZVdpZHRo
LCBwYWdlSGVpZ2h0KTsKK30KKworaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBh
Z2VzKGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICByZXR1cm4gZXdr
X2ZyYW1lX3BhZ2VfbnVtYmVyX2dldChtYWluRnJhbWUsIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7
Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFn
ZVByb3BlcnR5KGNvbnN0IGNoYXIqLCBpbnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNQYWdl
Qm94VmlzaWJsZShpbnQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK0pTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6cGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50LCBpbnQsIGludCwgaW50LCBpbnQs
IGludCwgaW50KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3NpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgp
Cit7CisgICAgY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tfdmlld19oaXN0b3J5X2dl
dChicm93c2VyKTsKKyAgICBpZiAoIWhpc3RvcnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAg
IHJldHVybiBld2tfaGlzdG9yeV9iYWNrX2xpc3RfbGVuZ3RoKGhpc3RvcnkpICsgZXdrX2hpc3Rv
cnlfZm9yd2FyZF9saXN0X2xlbmd0aChoaXN0b3J5KTsKK30KKwordW5zaWduZWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZXdr
X3V0aWxfd29ya2VyX3RocmVhZF9jb3VudCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpub3RpZnlEb25lKCkKK3sKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BMb2FkaW5n
RnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCisgICAgICAgIGR1bXAoKTsK
KyAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKKyAgICB3YWl0Rm9yUG9saWN5ID0gZmFsc2U7Cit9
CisKK0pTU3RyaW5nUmVmIExheW91dFRlc3RDb250cm9sbGVyOjpwYXRoVG9Mb2NhbFJlc291cmNl
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiB1cmwpCit7CisgICAgLy8gRnVuY3Rp
b24gaW50cm9kdWNlZCBpbiByMjg2OTAuIFRoaXMgbWF5IG5lZWQgc3BlY2lhbC1jYXNpbmcgb24g
V2luZG93cy4KKyAgICByZXR1cm4gSlNTdHJpbmdSZXRhaW4odXJsKTsgLy8gRG8gbm90aGluZyBv
biBVbml4LgorfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpxdWV1ZUxvYWQoSlNTdHJp
bmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCit7CisgICAgU3RyaW5nIGFic29sdXRlVXJs
ID0gU3RyaW5nOjpmcm9tVVRGOChld2tfZnJhbWVfdXJpX2dldChtYWluRnJhbWUpKTsKKyAgICBh
YnNvbHV0ZVVybC5hcHBlbmQodXJsLT5jaGFyYWN0ZXJzKCksIHVybC0+bGVuZ3RoKCkpOworICAg
IFN0cmluZyB0YXJnZXRTdHJpbmcodGFyZ2V0LT5jaGFyYWN0ZXJzKCksIHRhcmdldC0+bGVuZ3Ro
KCkpOworCisgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGFic29s
dXRlVXJsLCB0YXJnZXRTdHJpbmcpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKK3sKKyAgICBld2tfdmlld19l
ZGl0YWJsZV9zZXQoYnJvd3NlciwgYWNjZXB0c0VkaXRpbmcpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBbHdheXNBY2NlcHRDb29raWVzKGJvb2wgYWx3YXlzQWNjZXB0Q29v
a2llcykKK3sKKyAgICBld2tfY29va2llc19wb2xpY3lfc2V0KGFsd2F5c0FjY2VwdENvb2tpZXMg
PyBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTIDogRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05F
VkVSKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q3VzdG9tUG9saWN5RGVs
ZWdhdGUoYm9vbCwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjp3YWl0Rm9yUG9saWN5RGVsZWdhdGUoKQoreworICAgIHdhaXRG
b3JQb2xpY3kgPSB0cnVlOworICAgIHNldFdhaXRUb0R1bXAodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYsIEpTU3Ry
aW5nUmVmLCBKU1N0cmluZ1JlZiwgYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShKU1N0cmluZ1JlZiwgSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBib29sKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1h
aW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmlsaXR5TW9kZShib29sKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGdVc2VyU3R5bGVTaGVl
dDsKK3N0YXRpYyBib29sIGdVc2VyU3R5bGVTaGVldEVuYWJsZWQgPSB0cnVlOworCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBmbGFnKQor
eworICAgIGdVc2VyU3R5bGVTaGVldEVuYWJsZWQgPSBmbGFnOworICAgIGV3a192aWV3X3NldHRp
bmdfdXNlcl9zdHlsZXNoZWV0X3NldChicm93c2VyLCBmbGFnID8gZ1VzZXJTdHlsZVNoZWV0LmRh
dGEoKSA6IDApOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIHBhdGgpCit7CisgICAgZ1VzZXJTdHlsZVNoZWV0ID0g
cGF0aC0+dXN0cmluZygpLnV0ZjgoKTsKKworICAgIGlmIChnVXNlclN0eWxlU2hlZXRFbmFibGVk
KQorICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYsIEpTVmFsdWVS
ZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFZpZXdNb2RlTWVkaWFGZWF0dXJlKEpTU3RyaW5nUmVmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFdpbmRvd0lzS2V5KGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCB3YWl0VG9E
dW1wV2F0Y2hkb2dGaXJlZCh2b2lkKikKK3sKKyAgICB3YWl0VG9EdW1wV2F0Y2hkb2cgPSAwOwor
ICAgIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgp
OworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFdhaXRUb0R1bXAoYm9vbCB3YWl0VW50aWxEb25lKQoreworICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgdGltZW91dFNlY29uZHMgPSAzMDsKKworICAgIG1fd2FpdFRvRHVt
cCA9IHdhaXRVbnRpbERvbmU7CisgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhd2FpdFRvRHVtcFdh
dGNoZG9nKQorICAgICAgICB3YWl0VG9EdW1wV2F0Y2hkb2cgPSBlY29yZV90aW1lcl9hZGQodGlt
ZW91dFNlY29uZHMsIHdhaXRUb0R1bXBXYXRjaGRvZ0ZpcmVkLCAwKTsKK30KKworaW50IExheW91
dFRlc3RDb250cm9sbGVyOjp3aW5kb3dDb3VudCgpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBm
bGFnKQoreworICAgIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19zZXQoYnJvd3Nl
ciwgZmxhZyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEphdmFTY3JpcHRD
YW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KGJyb3dzZXIsIGZsYWcpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBm
bGFnKQoreworICAgIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChicm93
c2VyLCBmbGFnKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWxsb3dVbml2
ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEF1
dG9maWxsZWQoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmLCBib29sKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc2FibGVJbWFnZUxv
YWRpbmcoKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZvciBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc4OTYKKyAgICAvLyBBbHNv
IG5lZWQgdG8gbWFrZSBzdXJlIGltYWdlIGxvYWRpbmcgaXMgcmUtZW5hYmxlZCBmb3IgZWFjaCBu
ZXcgdGVzdC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24oYm9vbCwgZG91YmxlLCBib29sLCBkb3Vi
bGUsIGJvb2wsIGRvdWJsZSkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VP
cmllbnRhdGlvbiBsYXlvdXQgdGVzdHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMDMzNS4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUsIGRvdWJsZSwgZG91YmxlKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xv
Y2F0aW9uIGxheW91dCB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI4MjY0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldE1vY2tHZW9sb2NhdGlvbkVycm9yKGludCwgSlNTdHJp
bmdSZWYpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0
IHRlc3RzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgyNjQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBmb3IgR2VvbG9jYXRpb24gbGF5b3V0IHRlc3RzLgorICAgIHNldEdl
b2xvY2F0aW9uUGVybWlzc2lvbkNvbW1vbihhbGxvdyk7Cit9CisKK2ludCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bnVtYmVyT2ZQZW5kaW5nR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIEdlb2xvY2F0aW9uIGxheW91dCB0ZXN0cy4K
KyAgICByZXR1cm4gLTE7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tT
cGVlY2hJbnB1dFJlc3VsdChKU1N0cmluZ1JlZiwgZG91YmxlLCBKU1N0cmluZ1JlZikKK3sKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2ggaW5wdXQgbGF5b3V0IHRlc3RzLgorICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
SWNvbkRhdGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFlbmFibGVkKSB7
CisgICAgICAgIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX3BhdGhfc2V0KDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIGRhdGFiYXNlUGF0aDsKKworICAgIGlmIChn
ZXRlbnYoIlRNUERJUiIpKQorICAgICAgICBkYXRhYmFzZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4
KGdldGVudigiVE1QRElSIikpOworICAgIGVsc2UgaWYgKGdldGVudigiVEVNUCIpKQorICAgICAg
ICBkYXRhYmFzZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4KGdldGVudigiVEVNUCIpKTsKKyAgICBl
bHNlCisgICAgICAgIGRhdGFiYXNlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgoIi90bXAiKTsKKwor
ICAgIGRhdGFiYXNlUGF0aC5hcHBlbmQoIi9EdW1wUmVuZGVyVHJlZS9JY29uRGF0YWJhc2UiKTsK
KworICAgIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX3BhdGhfc2V0KGRhdGFiYXNlUGF0aC51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0SmF2YVNj
cmlwdFByb2ZpbGluZ0VuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRQbHVnaW5z
RW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2lu
c19zZXQoYnJvd3NlciwgZmxhZyk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZp
bmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwgSlNPYmpl
Y3RSZWYgb3B0aW9uc0FycmF5KQoreworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5n
dGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5n
dGgiKSk7CisgICAgSlNWYWx1ZVJlZiBsZW5ndGhWYWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHko
Y29udGV4dCwgb3B0aW9uc0FycmF5LCBsZW5ndGhQcm9wZXJ0eU5hbWUuZ2V0KCksIDApOworICAg
IGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZTsKKyAgICBib29sIGZv
cndhcmQgPSB0cnVlOworICAgIGJvb2wgd3JhcCA9IGZhbHNlOworICAgIHNpemVfdCBsZW5ndGgg
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1
ZSwgMCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQs
IG9wdGlvbnNBcnJheSwgaSwgMCk7CisgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRl
eHQsIHZhbHVlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBvcHRpb25OYW1lKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRl
eHQsIHZhbHVlLCAwKSk7CisKKyAgICAgICAgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQ2FzZUlu
c2Vuc2l0aXZlIikpCisgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID0gZmFsc2U7CisgICAgICAg
IGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQmFja3dhcmRzIikpCisgICAgICAgICAgICBm
b3J3YXJkID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiV3Jh
cEFyb3VuZCIpKQorICAgICAgICAgICAgd3JhcCA9IHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
ICEhZXdrX3ZpZXdfdGV4dF9zZWFyY2goYnJvd3NlciwgdGFyZ2V0LT51c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgY2FzZVNlbnNpdGl2ZSwgZm9yd2FyZCwgd3JhcCk7Cit9CisKK2Jvb2wgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhY2hl
TW9kZWwoaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFBlcnNpc3RlbnRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5n
UmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmNsZWFyUGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0KCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbEFwcGxpY2F0
aW9uQ2FjaGVzKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIHN1cHBvcnQgYXBwbGlj
YXRpb24gY2FjaGUgcXVvdGFzLgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSh1bnNpZ25l
ZCBsb25nIGxvbmcpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBzdXBwb3J0IGFwcGxp
Y2F0aW9uIGNhY2hlIHF1b3Rhcy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVl
SlNTdHJpbmcqKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdG8gc3VwcG9ydCBkZWxldGlu
ZyBhbGwgYXBwbGljYXRpb24gY2FjaGVzIGZvciBhbiBvcmlnaW4uCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworbG9uZyBsb25nIExheW91dFRlc3RDb250cm9sbGVyOjpsb2NhbFN0b3JhZ2VE
aXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0byBzdXBwb3J0IGdldHRpbmcgZGlzayB1c2FnZSBpbiBieXRlcyBmb3IgYW4gb3JpZ2luLgor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0pTVmFsdWVSZWYgTGF5
b3V0VGVzdENvbnRyb2xsZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShKU0NvbnRleHRS
ZWYgY29udGV4dCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRvIGdldCBvcmlnaW5zIHRo
YXQgY29udGFpbiBhcHBsaWNhdGlvbiBjYWNoZXMuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK2xvbmcgbG9uZyBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihK
U1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQor
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbGVhckFsbERhdGFiYXNlcygpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGF0
YWJhc2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworSlNWYWx1ZVJlZiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3JpZ2luc1dpdGhMb2NhbFN0
b3JhZ2UoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmRlbGV0ZUFsbExvY2FsU3RvcmFnZSgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGVsZXRlTG9jYWxTdG9y
YWdlRm9yT3JpZ2luKEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9ic2VydmVTdG9yYWdlVHJhY2tlck5vdGlmaWNh
dGlvbnModW5zaWduZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3luY0xvY2FsU3RvcmFnZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpnb0JhY2soKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxl
LWRlZmVycmluZy1sb2Fkcy5odG1sCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sKQoreworICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgdG8gZW5hYmxlIGxvYWRlci9uYXZpZ2F0aW9uLXdoaWxlLWRlZmVycmlu
Zy1sb2Fkcy5odG1sCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6
ZSkKK3sKKyAgICBld2tfc2V0dGluZ3NfY2FjaGVfY2FwYWNpdHlfc2V0KHNpemUpOworfQorCiti
b29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdp
dGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYg
ZWxlbWVudElkKQoreworICAgIHJldHVybiBld2tfZnJhbWVfYW5pbWF0aW9uX3BhdXNlKG1haW5G
cmFtZSwgYW5pbWF0aW9uTmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+
dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworfQorCitib29sIExheW91dFRlc3RDb250
cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreworICAg
IHJldHVybiBld2tfZnJhbWVfdHJhbnNpdGlvbl9wYXVzZShtYWluRnJhbWUsIHByb3BlcnR5TmFt
ZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIHRpbWUpOworfQorCitib29sIExheW91dFRlc3RDb250cm9sbGVyOjpzYW1wbGVTVkdB
bmltYXRpb25Gb3JFbGVtZW50QXRUaW1lKEpTU3RyaW5nUmVmIGFuaW1hdGlvbklkLCBkb3VibGUg
dGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQoreworICAgIHJldHVybiBld2tfZnJhbWVfc3Zn
X2FuaW1hdGlvbl9wYXVzZShtYWluRnJhbWUsIGFuaW1hdGlvbklkLT51c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7Cit9CisK
K3Vuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
KSBjb25zdAoreworICAgIHJldHVybiBld2tfZnJhbWVfYW5pbWF0aW9uX2FjdGl2ZV9udW1iZXJf
Z2V0KG1haW5GcmFtZSk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRB
bmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3N1c3BlbmQobWFp
bkZyYW1lKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9u
cygpIGNvbnN0Cit7CisgICAgZXdrX2ZyYW1lX2FuaW1hdGlvbl9yZXN1bWUobWFpbkZyYW1lKTsK
K30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3Ry
aW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmLCBib29sLCBi
b29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmLCBib29sKQoreworICAgIC8vIEZJ
WE1FOiBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24gd2h5IHVzZXJzY3JpcHRzL3VzZXItc3R5bGUt
dG9wLWZyYW1lLW9ubHkuaHRtbCBmYWlscyB3aGVuIGFsbEZyYW1lcyBpcyBmYWxzZS4KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXREZXZl
bG9wZXJFeHRyYXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChicm93c2VyLCBlbmFibGVkKTsKK30KKwordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzaG93V2ViSW5zcGVjdG9yKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3RvcigpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYkluc3BlY3Rvcihsb25nLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiwg
SlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6YXBpVGVzdEdvVG9DdXJyZW50QmFja0ZvcndhcmRJdGVtKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRX
ZWJWaWV3RWRpdGFibGUoYm9vbCkKK3sKKyAgICBld2tfZnJhbWVfZWRpdGFibGVfc2V0KG1haW5G
cmFtZSwgRUlOQV9UUlVFKTsKK30KKworSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRl
c3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmLCBKU1ZhbHVl
UmVmKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmF1dGhlbnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdS
ZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3Qg
Y2hhciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWJvcnRNb2RhbCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50LCBpbnQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTGF5b3V0
VGVzdENvbnRyb2xsZXI6Omhhc0dyYW1tYXJNYXJrZXIoaW50LCBpbnQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50LCBpbnQsIGludCwgaW50LCBp
bnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKGJvb2wpCit7CisgICAgLy8gRklYTUU6IEltcGxl
bWVudCBpZiBuZWVkZWQgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01MDc1OC4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGV4dERpcmVjdGlv
bihKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphbGxvd1JvdW5kaW5nSGFja3MoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>