<?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>116334</bug_id>
          
          <creation_ts>2013-05-17 11:04:28 -0700</creation_ts>
          <short_desc>Expose a way to know when forms are added to a page or when form controls are added to a form in the injected bundle</short_desc>
          <delta_ts>2013-05-20 19:09:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jessie Berlin">jberlin</reporter>
          <assigned_to name="Jessie Berlin">jberlin</assigned_to>
          <cc>andersca</cc>
    
    <cc>jberlin</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>890523</commentid>
    <comment_count>0</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-05-17 11:04:28 -0700</bug_when>
    <thetext>We should use the didAssociateFormControls and shouldNotifyOnFormChanges callbacks on ChromeClient.

&lt;rdar://problem/13905067&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890535</commentid>
    <comment_count>1</comment_count>
      <attachid>202124</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-05-17 11:24:22 -0700</bug_when>
    <thetext>Created attachment 202124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>890825</commentid>
    <comment_count>2</comment_count>
      <attachid>202124</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-17 21:54:32 -0700</bug_when>
    <thetext>Comment on attachment 202124
Patch

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

&gt; Source/WebKit2/ChangeLog:26
&gt; +        At this time, there is no known use for the elements themselves, so don&apos;t bother piping
&gt; +        that through to the API.

Hmm. I wonder if checks in injected bundle will be efficient enough without knowing the elements. These calls might be made frequently on certain pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891366</commentid>
    <comment_count>3</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-05-20 15:45:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 202124 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202124&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:26
&gt; &gt; +        At this time, there is no known use for the elements themselves, so don&apos;t bother piping
&gt; &gt; +        that through to the API.
&gt; 
&gt; Hmm. I wonder if checks in injected bundle will be efficient enough without knowing the elements. These calls might be made frequently on certain pages.

Thanks for the review! I discussed this further with you and others, and decided to add the elements. New patch coming momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891367</commentid>
    <comment_count>4</comment_count>
      <attachid>202328</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-05-20 15:47:46 -0700</bug_when>
    <thetext>Created attachment 202328
Patch (version 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891371</commentid>
    <comment_count>5</comment_count>
      <attachid>202328</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-20 15:53:28 -0700</bug_when>
    <thetext>Comment on attachment 202328
Patch (version 2)

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

&gt; Source/WebKit2/ChangeLog:20
&gt; +        (InjectedBundlePageFormClient):

It&apos;s best to remove such unhelpful lines from ChangeLogs (it&apos;s a bug in the tool that it generates them).

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:133
&gt; +    unsigned size = elements.size();

The type should be size_t.

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:135
&gt; +    Vector&lt;RefPtr&lt;APIObject&gt; &gt; elementHandles;

We are now using C++11 &quot;&gt;&gt;&quot; in WebKit2 code (as well as in all Mac code).

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:138
&gt; +    for (unsigned i = 0; i &lt; size; ++i)

size_t

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:59
&gt; +    void didAssociateFormControls(WebPage*, const Vector&lt;RefPtr&lt;WebCore::Element&gt; &gt;&amp;);

Same comment about &quot;&gt;&gt;&quot;.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp:719
&gt; +void WebChromeClient::didAssociateFormControls(const Vector&lt;RefPtr&lt;WebCore::Element&gt; &gt;&amp; elements)

Ditto.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h:173
&gt; +    virtual void didAssociateFormControls(const Vector&lt;RefPtr&lt;WebCore::Element&gt; &gt;&amp;) OVERRIDE;

Ditto.

&gt; Tools/TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:39
&gt; +    virtual void didCreatePage(WKBundleRef, WKBundlePageRef);

OVERRIDE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891385</commentid>
    <comment_count>6</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-05-20 16:14:25 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 202328 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=202328&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:20
&gt; &gt; +        (InjectedBundlePageFormClient):
&gt; 
&gt; It&apos;s best to remove such unhelpful lines from ChangeLogs (it&apos;s a bug in the tool that it generates them).

Done.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:133
&gt; &gt; +    unsigned size = elements.size();
&gt; 
&gt; The type should be size_t.

Done.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:135
&gt; &gt; +    Vector&lt;RefPtr&lt;APIObject&gt; &gt; elementHandles;
&gt; 
&gt; We are now using C++11 &quot;&gt;&gt;&quot; in WebKit2 code (as well as in all Mac code).

I initially had that, but check-webkit-style complained. I fixed this and Filed https://bugs.webkit.org/show_bug.cgi?id=116474

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.cpp:138
&gt; &gt; +    for (unsigned i = 0; i &lt; size; ++i)
&gt; 
&gt; size_t

Done.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageFormClient.h:59
&gt; &gt; +    void didAssociateFormControls(WebPage*, const Vector&lt;RefPtr&lt;WebCore::Element&gt; &gt;&amp;);
&gt; 
&gt; Same comment about &quot;&gt;&gt;”.

Done.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp:719
&gt; &gt; +void WebChromeClient::didAssociateFormControls(const Vector&lt;RefPtr&lt;WebCore::Element&gt; &gt;&amp; elements)
&gt; 
&gt; Ditto.

Done.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h:173
&gt; &gt; +    virtual void didAssociateFormControls(const Vector&lt;RefPtr&lt;WebCore::Element&gt; &gt;&amp;) OVERRIDE;
&gt; 
&gt; Ditto.

Done.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKit2/DidAssociateFormControls_Bundle.cpp:39
&gt; &gt; +    virtual void didCreatePage(WKBundleRef, WKBundlePageRef);
&gt; 
&gt; OVERRIDE?

Done.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>891505</commentid>
    <comment_count>7</comment_count>
      <attachid>202328</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-05-20 19:08:49 -0700</bug_when>
    <thetext>Comment on attachment 202328
Patch (version 2)

Committed with the changes mentioned above in http://trac.webkit.org/changeset/150398</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202124</attachid>
            <date>2013-05-17 11:24:22 -0700</date>
            <delta_ts>2013-05-20 15:47:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Expose-a-way-to-know-when-forms-are-added-to-a-page-.patch</filename>
            <type>text/plain</type>
            <size>27996</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">RnJvbSA1OWFiNTViNjQ4ZTY3NzVjYmRjYjQxYjgyN2VjMzYzMGNiYzliZGZlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXNzaWUgQmVybGluIDxqYmVybGluQHdlYmtpdC5vcmc+CkRh
dGU6IEZyaSwgMTcgTWF5IDIwMTMgMTE6MTg6MzYgLTA3MDAKU3ViamVjdDogW1BBVENIXSBFeHBv
c2UgYSB3YXkgdG8ga25vdyB3aGVuIGZvcm1zIGFyZSBhZGRlZCB0byBhIHBhZ2Ugb3Igd2hlbgog
Zm9ybSBjb250cm9scyBhcmUgYWRkZWQgdG8gYSBmb3JtIGluIHRoZSBpbmplY3RlZCBidW5kbGUK
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYzMzQKClJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgoKU291cmNlL1dlYktpdDI6CgpBZGQgc2hvdWxkTm90aWZ5T25G
b3JtQ2hhbmdlcyBhbmQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIHRvIHRoZSBXS0J1bmRsZVBh
Z2VGb3JtQ2xpZW50LgoKKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZS5oOgpBZGQgdGhlIG5ldyBjYWxsYmFja3MgYXMgcGFydCBvZiB2ZXJzaW9uIDIgb2YgdGhl
IFdLQnVuZGxlUGFnZUZvcm1DbGllbnQuCgoqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHA6CihXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFn
ZUZvcm1DbGllbnQ6OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyk6ClBhc3MgdGhlIG1lc3NhZ2Ug
YWxvbmcgdG8gdGhlIGNsaWVudCBpZiB0aGUgY2xpZW50IGhhcyBhIGhhbmRsZXIuCihXZWJLaXQ6
OkluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OnNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMp
OgpEaXR0by4KKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZv
cm1DbGllbnQuaDoKKEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQpOgoKKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CihXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKVGhlIHRoZSBpbmplY3RlZCBidW5kbGUg
Zm9ybSBjbGllbnQgZm9yIHRoZSBwYWdlLgpBdCB0aGlzIHRpbWUsIHRoZXJlIGlzIG5vIGtub3du
IHVzZSBmb3IgdGhlIGVsZW1lbnRzIHRoZW1zZWx2ZXMsIHNvIGRvbid0IGJvdGhlciBwaXBpbmcK
dGhhdCB0aHJvdWdoIHRvIHRoZSBBUEkuCihXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2hvdWxk
Tm90aWZ5T25Gb3JtQ2hhbmdlcyk6CkRpdHRvLgoqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50Lmg6CihXZWJDaHJvbWVDbGllbnQpOgoKVG9vbHM6CgpBZGQgdGVzdHMg
Zm9yIHRoZSBuZXcgY2FsbGJhY2tzLgoKKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKQWRkIERpZEFzc29jaWF0ZUZvcm1Db250cm9scy9fQnVu
ZGxlLmNwcCBhbmQgYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbAoKKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzLmNwcDogQWRkZWQuCihUZXN0
V2ViS2l0QVBJKToKKFRlc3RXZWJLaXRBUEk6Om51bGxKYXZhU2NyaXB0Q2FsbGJhY2spOgpBICJu
dWxsIiBjYWxsYmFjayB0byBoYW5kbGUgdGhlIGZhY3QgdGhhdCBXS1BhZ2VSdW5KYXZhU2NyaXB0
SW5NYWluRnJhbWUgY2Fubm90IGhhbmRsZSBudWxsCmJlaW5nIHBhc3NlZCBpbiBmb3IgdGhlIGNh
bGxiYWNrLgooVGVzdFdlYktpdEFQSTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUpOgpBZnRlciByZWNlaXZpbmcgdGhlIG1lc3NhZ2UgdGhhdCBkaWRBc3NvY2lhdGVGb3JtQ29u
dHJvbHMgY2FsbGJhY2sgd2FzIGludm9rZWQgZnJvbSBhZGRpbmcKdGhlIGZvcm0gaW4gdGhlIG9u
bG9hZCBoYW5kbGVyLCB0ZWxsIHRoZSBwYWdlIHRvIGFkZCBhIHBhc3N3b3JkIGZpZWxkIHRvIHRo
ZSBmb3JtLCB3aGljaApzaG91bGQgYWxzbyBpbnZva2UgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
IGNhbGxiYWNrLgooVGVzdFdlYktpdEFQSTo6c2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQpOgpSZWdp
c3RlciB0byByZWNlaXZlIG1lc3NhZ2VzLgooVGVzdFdlYktpdEFQSTo6VEVTVCk6CkxvYWQgYXNz
b2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCBhbmQgd2FpdCB1bnRpbCB0aGUgZGlkQXNzb2NpYXRl
Rm9ybUNvbnRyb2xzIGNhbGxiYWNrIGhhcwpiZWVuIGludm9rZWQgZm9yIGJvdGggYWRkaW5nIHRo
ZSBmb3JtIGFuZCBmb3IgYWRkaW5nIGEgcGFzc3dvcmQgZmllbGQgdG8gdGhlIGZvcm0uCgoqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxl
LmNwcDogQWRkZWQuCihUZXN0V2ViS2l0QVBJKToKKERpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rl
c3QpOgooVGVzdFdlYktpdEFQSTo6c2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyk6ClJldHVybiB0
cnVlIHNvIHRoZSBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMgY2FsbGJhY2sgaXMgaW52b2tlZC4K
KFRlc3RXZWJLaXRBUEk6OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyk6ClRlbGwgdGhlIFVJIHBy
b2Nlc3MuCihUZXN0V2ViS2l0QVBJOjpEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0OjpEaWRB
c3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0KToKKFRlc3RXZWJLaXRBUEk6OkRpZEFzc29jaWF0ZUZv
cm1Db250cm9sc1Rlc3Q6OmRpZENyZWF0ZVBhZ2UpOgpSZWdpc3RlciBmb3IgdGhlIHNob3VsZE5v
dGlmeU9uRm9ybUNoYW5nZXMgYW5kIGRpZEFzc29jaWF0ZUZvcm1Db250cm9scyBjYWxsYmFja3Mu
CgoqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9hc3NvY2lhdGUtZm9ybS1jb250cm9scy5o
dG1sOiBBZGRlZC4KQWRkIGEgZm9ybSBpbiByZXNwb25zZSB0byB0aGUgb25sb2FkIGV2ZW50LiBB
ZGQgYSBidXR0b24gdGhhdCB3aWxsIGFkZCB0aGUgcGFzc3dvcmQgZmllbGQKZm9yIG1hbnVhbCB0
ZXN0aW5nLgotLS0KIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgMzEgKysrKysrKysrCiAuLi4vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2UuaCB8ICA0ICsrCiAuLi4vSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVu
dC5jcHAgICAgICAgICAgICAgICB8IDE2ICsrKysrCiAuLi4vSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5oICB8ICAyICsKIC4uLi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgIHwgMTAgKysrCiAuLi4vV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCAgICB8ICAzICsKIFRvb2xzL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNDMgKysrKysrKysrKysrCiAuLi4v
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qICAgICAgICB8IDEyICsrKysK
IC4uLi9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9scy5jcHAgICAgIHwgNzcg
KysrKysrKysrKysrKysrKysrKysrKwogLi4uL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzX0J1bmRsZS5jcHAgICAgfCA3MiArKysrKysrKysrKysrKysrKysrKwogLi4uL1Rlc3RzL1dl
YktpdDIvYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCAgICAgfCAzMSArKysrKysrKysKIDEx
IGZpbGVzIGNoYW5nZWQsIDMwMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9scy5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
RGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvYXNzb2NpYXRlLWZvcm0tY29udHJvbHMu
aHRtbAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCA1NzBlNDU5Li41ZDA4NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzQgQEAKKzIwMTMtMDUtMTcgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4K
KworICAgICAgICBFeHBvc2UgYSB3YXkgdG8ga25vdyB3aGVuIGZvcm1zIGFyZSBhZGRlZCB0byBh
IHBhZ2Ugb3Igd2hlbiBmb3JtIGNvbnRyb2xzIGFyZSBhZGRlZCB0byBhIGZvcm0KKyAgICAgICAg
aW4gdGhlIGluamVjdGVkIGJ1bmRsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE2MzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMgYW5kIGRpZEFzc29j
aWF0ZUZvcm1Db250cm9scyB0byB0aGUgV0tCdW5kbGVQYWdlRm9ybUNsaWVudC4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmg6CisgICAg
ICAgIEFkZCB0aGUgbmV3IGNhbGxiYWNrcyBhcyBwYXJ0IG9mIHZlcnNpb24gMiBvZiB0aGUgV0tC
dW5kbGVQYWdlRm9ybUNsaWVudC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyk6Cisg
ICAgICAgIFBhc3MgdGhlIG1lc3NhZ2UgYWxvbmcgdG8gdGhlIGNsaWVudCBpZiB0aGUgY2xpZW50
IGhhcyBhIGhhbmRsZXIuCisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUZvcm1D
bGllbnQ6OnNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMpOgorICAgICAgICBEaXR0by4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGll
bnQuaDoKKyAgICAgICAgKEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQpOgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyk6Cisg
ICAgICAgIFRoZSB0aGUgaW5qZWN0ZWQgYnVuZGxlIGZvcm0gY2xpZW50IGZvciB0aGUgcGFnZS4K
KyAgICAgICAgQXQgdGhpcyB0aW1lLCB0aGVyZSBpcyBubyBrbm93biB1c2UgZm9yIHRoZSBlbGVt
ZW50cyB0aGVtc2VsdmVzLCBzbyBkb24ndCBib3RoZXIgcGlwaW5nCisgICAgICAgIHRoYXQgdGhy
b3VnaCB0byB0aGUgQVBJLgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNob3Vs
ZE5vdGlmeU9uRm9ybUNoYW5nZXMpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50KToKKwogMjAxMy0wNS0xNiAgWm9sdGFuIEFydmFpICA8emFydmFpQGluZi51LXN6ZWdl
ZC5odT4KIAogICAgICAgICBbV2luXSBVbnJldmlld2VkIGJ1aWxkZml4IGFmdGVyIHIxNTAxNjEu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAppbmRleCA0NTZkNTU1Li5lMTcxZTllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlLmgKQEAgLTMzMiw2ICszMzIsOCBAQCB0eXBlZGVmIGJvb2wgKCpX
S0J1bmRsZVBhZ2VTaG91bGRQZXJmb3JtQWN0aW9uSW5UZXh0RmllbGRDYWxsYmFjaykoV0tCdW5k
bGVQYWdlUgogdHlwZWRlZiB2b2lkICgqV0tCdW5kbGVQYWdlV2lsbFN1Ym1pdEZvcm1DYWxsYmFj
aykoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBodG1sRm9ybUVs
ZW1lbnRIYW5kbGUsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlRnJhbWVSZWYgc291
cmNlRnJhbWUsIFdLRGljdGlvbmFyeVJlZiB2YWx1ZXMsIFdLVHlwZVJlZiogdXNlckRhdGEsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tCdW5kbGVQYWdlV2lsbFNl
bmRTdWJtaXRFdmVudENhbGxiYWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGh0bWxGb3JtRWxlbWVudEhhbmRsZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwg
V0tCdW5kbGVGcmFtZVJlZiBzb3VyY2VGcmFtZSwgV0tEaWN0aW9uYXJ5UmVmIHZhbHVlcywgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpXS0J1bmRsZVBhZ2VEaWRGb2N1
c1RleHRGaWVsZENhbGxiYWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVOb2RlSGFu
ZGxlUmVmIGh0bWxJbnB1dEVsZW1lbnRIYW5kbGUsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiBib29sICgqV0tCdW5kbGVQYWdlU2hvdWxk
Tm90aWZ5T25Gb3JtQ2hhbmdlc0NhbGxiYWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS0J1bmRsZVBhZ2VEaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHNDYWxsYmFjaykoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwogCiBzdHJ1Y3QgV0tCdW5kbGVQYWdlRm9ybUNsaWVudCB7CiAgICAgaW50
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJzaW9uOwpAQCAtMzUwLDYgKzM1Miw4IEBAIHN0cnVjdCBXS0J1bmRsZVBhZ2VG
b3JtQ2xpZW50IHsKIAogICAgIC8vIHZlcnNpb24gMi4KICAgICBXS0J1bmRsZVBhZ2VEaWRGb2N1
c1RleHRGaWVsZENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEZvY3Vz
VGV4dEZpZWxkOworICAgIFdLQnVuZGxlUGFnZVNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXNDYWxs
YmFjayAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlczsKKyAg
ICBXS0J1bmRsZVBhZ2VEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNDYWxsYmFjayAgICAgICAgICAg
ICAgICAgICAgICAgIGRpZEFzc29jaWF0ZUZvcm1Db250cm9sczsKIH07CiB0eXBlZGVmIHN0cnVj
dCBXS0J1bmRsZVBhZ2VGb3JtQ2xpZW50IFdLQnVuZGxlUGFnZUZvcm1DbGllbnQ7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlRm9ybUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwCmluZGV4IGRlYTVlYWIu
LjRiOGY4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50
LmNwcApAQCAtMTI0LDQgKzEyNCwyMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGll
bnQ6OndpbGxTdWJtaXRGb3JtKFdlYlBhZ2UqIHBhZ2UsIEhUTUxGb3JtRWxlbWVudAogICAgIHVz
ZXJEYXRhID0gYWRvcHRSZWYodG9JbXBsKHVzZXJEYXRhVG9QYXNzKSk7CiB9CiAKK3ZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKFdlYlBh
Z2UqIHBhZ2UpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZEFzc29jaWF0ZUZvcm1Db250cm9s
cyh0b0FQSShwYWdlKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK2Jvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlRm9ybUNsaWVudDo6c2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyhXZWJQYWdlKiBw
YWdlKQoreworICAgIGlmICghbV9jbGllbnQuc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZE5vdGlmeU9u
Rm9ybUNoYW5nZXModG9BUEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xp
ZW50LmgKaW5kZXggOTYwNWFjYi4uMDYzYjJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VGb3JtQ2xpZW50LmgKQEAgLTU1LDYgKzU1LDggQEAgcHVibGljOgogICAgIGJvb2wg
c2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxkKFdlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50KiwgV0tJbnB1dEZpZWxkQWN0aW9uVHlwZSwgV2ViRnJhbWUqKTsgICAgCiAgICAg
dm9pZCB3aWxsU3VibWl0Rm9ybShXZWJQYWdlKiwgV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Kiwg
V2ViRnJhbWUqLCBXZWJGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8
U3RyaW5nLCBTdHJpbmc+PiYsIFJlZlB0cjxBUElPYmplY3Q+JiB1c2VyRGF0YSk7CiAgICAgdm9p
ZCB3aWxsU2VuZFN1Ym1pdEV2ZW50KFdlYlBhZ2UqLCBXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQq
LCBXZWJGcmFtZSosIFdlYkZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgVmVjdG9yPHN0ZDo6cGFp
cjxTdHJpbmcsIFN0cmluZz4+Jik7CisgICAgdm9pZCBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMo
V2ViUGFnZSopOworICAgIGJvb2wgc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyhXZWJQYWdlKik7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRl
eCAxODEwNjdlLi5kZWFiN2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC02OTMsNiAr
NjkzLDE2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3Qg
Tm9kZSopCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6
OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyhjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkVs
ZW1lbnQ+ID4mKQoreworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVu
dCgpLmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyhtX3BhZ2UpOworfQorCitib29sIFdlYkNocm9t
ZUNsaWVudDo6c2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcygpCit7CisgICAgcmV0dXJuIG1fcGFn
ZS0+aW5qZWN0ZWRCdW5kbGVGb3JtQ2xpZW50KCkuc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyht
X3BhZ2UpOworfQorCiBib29sIFdlYkNocm9tZUNsaWVudDo6c2VsZWN0SXRlbVdyaXRpbmdEaXJl
Y3Rpb25Jc05hdHVyYWwoKQogewogI2lmIFBMQVRGT1JNKEVGTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CmluZGV4IDkzMDZmZDUuLjY2NjJiMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTcwLDYg
KzE3MCw5IEBAIHByaXZhdGU6CiAgICAgLy8gd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgc28g
aGFuZGxpbmcgc2hvdWxkIGJlIHZlcnkgZmFzdC4KICAgICB2aXJ0dWFsIHZvaWQgZm9ybVN0YXRl
RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwg
dm9pZCBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMoY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJDb3Jl
OjpFbGVtZW50PiA+JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZE5vdGlmeU9u
Rm9ybUNoYW5nZXMoKSBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3RJdGVtV3Jp
dGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzZWxl
Y3RJdGVtQWxpZ25tZW50Rm9sbG93c01lbnVXcml0aW5nRGlyZWN0aW9uKCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBib29sIGhhc09wZW5lZFBvcHVwKCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjcyZDExNS4uZjVj
YmNiOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ2IEBACisyMDEzLTA1LTE3ICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgRXhwb3NlIGEgd2F5IHRvIGtub3cgd2hlbiBmb3JtcyBhcmUgYWRk
ZWQgdG8gYSBwYWdlIG9yIHdoZW4gZm9ybSBjb250cm9scyBhcmUgYWRkZWQgdG8gYSBmb3JtCisg
ICAgICAgIGluIHRoZSBpbmplY3RlZCBidW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjMzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgdGhlIG5ldyBjYWxsYmFja3MuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgQWRkIERpZEFzc29jaWF0ZUZvcm1Db250cm9scy9fQnVuZGxlLmNw
cCBhbmQgYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbAorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9scy5jcHA6IEFkZGVkLgor
ICAgICAgICAoVGVzdFdlYktpdEFQSSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpudWxsSmF2
YVNjcmlwdENhbGxiYWNrKToKKyAgICAgICAgQSAibnVsbCIgY2FsbGJhY2sgdG8gaGFuZGxlIHRo
ZSBmYWN0IHRoYXQgV0tQYWdlUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lIGNhbm5vdCBoYW5kbGUg
bnVsbAorICAgICAgICBiZWluZyBwYXNzZWQgaW4gZm9yIHRoZSBjYWxsYmFjay4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAg
ICAgICAgQWZ0ZXIgcmVjZWl2aW5nIHRoZSBtZXNzYWdlIHRoYXQgZGlkQXNzb2NpYXRlRm9ybUNv
bnRyb2xzIGNhbGxiYWNrIHdhcyBpbnZva2VkIGZyb20gYWRkaW5nCisgICAgICAgIHRoZSBmb3Jt
IGluIHRoZSBvbmxvYWQgaGFuZGxlciwgdGVsbCB0aGUgcGFnZSB0byBhZGQgYSBwYXNzd29yZCBm
aWVsZCB0byB0aGUgZm9ybSwgd2hpY2gKKyAgICAgICAgc2hvdWxkIGFsc28gaW52b2tlIGRpZEFz
c29jaWF0ZUZvcm1Db250cm9scyBjYWxsYmFjay4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnNl
dEluamVjdGVkQnVuZGxlQ2xpZW50KToKKyAgICAgICAgUmVnaXN0ZXIgdG8gcmVjZWl2ZSBtZXNz
YWdlcy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICBMb2FkIGFzc29j
aWF0ZS1mb3JtLWNvbnRyb2xzLmh0bWwgYW5kIHdhaXQgdW50aWwgdGhlIGRpZEFzc29jaWF0ZUZv
cm1Db250cm9scyBjYWxsYmFjayBoYXMKKyAgICAgICAgYmVlbiBpbnZva2VkIGZvciBib3RoIGFk
ZGluZyB0aGUgZm9ybSBhbmQgZm9yIGFkZGluZyBhIHBhc3N3b3JkIGZpZWxkIHRvIHRoZSBmb3Jt
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZv
cm1Db250cm9sc19CdW5kbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEkpOgor
ICAgICAgICAoRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdCk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKToKKyAgICAgICAgUmV0dXJuIHRydWUg
c28gdGhlIGRpZEFzc29jaWF0ZUZvcm1Db250cm9scyBjYWxsYmFjayBpcyBpbnZva2VkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKKyAgICAgICAg
VGVsbCB0aGUgVUkgcHJvY2Vzcy4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRpZEFzc29jaWF0
ZUZvcm1Db250cm9sc1Rlc3Q6OkRpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3QpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6RGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdDo6ZGlkQ3JlYXRl
UGFnZSk6CisgICAgICAgIFJlZ2lzdGVyIGZvciB0aGUgc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdl
cyBhbmQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIGNhbGxiYWNrcy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9hc3NvY2lhdGUtZm9ybS1jb250cm9scy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgQWRkIGEgZm9ybSBpbiByZXNwb25zZSB0byB0aGUgb25sb2FkIGV2ZW50
LiBBZGQgYSBidXR0b24gdGhhdCB3aWxsIGFkZCB0aGUgcGFzc3dvcmQgZmllbGQKKyAgICAgICAg
Zm9yIG1hbnVhbCB0ZXN0aW5nLgorCiAyMDEzLTA1LTE1ICBEb21pbmlrIFLDtnR0c2NoZXMgIDxk
b21pbmlrLnJvdHRzY2hlc0BpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gUmVtb3ZlIEludGVs
IFdrMiBCdWlsZGJvdHMgZnJvbSBNYXN0ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjM2
NTI2ZS4uMTQwMDM3MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwNyw2ICsyMDcsOSBA
QAogCQlGNjYwQUExMTE1QTVGNjMxMDAzQTEyNDMgLyogR2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFs
aXphdGlvblVzZXJEYXRhQ2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NjBBQTBGMTVBNUY2MjQwMDNBMTI0MyAvKiBHZXRJ
bmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja19CdW5kbGUuY3BwICov
OyB9OwogCQlGNjYwQUExMzE1QTYxOUM5MDAzQTEyNDMgLyogSW5qZWN0ZWRCdW5kbGVJbml0aWFs
aXphdGlvblVzZXJEYXRhQ2FsbGJhY2tXaW5zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NjBBQTEyMTVBNjE5QzgwMDNBMTI0MyAvKiBJbmplY3Rl
ZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnMuY3BwICovOyB9OwogCQlG
NjYwQUExNTE1QTYxQUJGMDAzQTEyNDMgLyogSW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVz
ZXJEYXRhQ2FsbGJhY2tXaW5zX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGNjYwQUExNDE1QTYxQUJGMDAzQTEyNDMgLyogSW5qZWN0ZWRC
dW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tXaW5zX0J1bmRsZS5jcHAgKi87IH07
CisJCUY2QjdCRTk0MTc0NjkyMDkwMDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjZCN0JF
OTMxNzQ2OTFFRjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZvcm1Db250cm9scy5jcHAgKi87IH07
CisJCUY2QjdCRTk1MTc0NjkyMTIwMDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNf
QnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY2QjdCRTkyMTc0NjkxRUYwMDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVu
ZGxlLmNwcCAqLzsgfTsKKwkJRjZCN0JFOTcxNzQ2OUI5NjAwOEEzNDQ1IC8qIGFzc29jaWF0ZS1m
b3JtLWNvbnRyb2xzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjZCN0JFOTYxNzQ2OUI3RTAwOEEzNDQ1IC8qIGFzc29jaWF0ZS1mb3Jt
LWNvbnRyb2xzLmh0bWwgKi87IH07CiAJCUY2RjNGMjkxMTMzNDJGRUIwMEE2QkYxOSAvKiBDb29r
aWVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY2RjNGMjkwMTMzNDJGRUIwMEE2QkYxOSAvKiBDb29raWVNYW5hZ2VyLmNwcCAqLzsgfTsK
IAkJRjZGNDlDNjkxNTU0NUM4RTAwMDdGMzlEIC8qIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjZGNDlD
NjcxNTU0NUM4RDAwMDdGMzlEIC8qIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGUuY3BwICovOyB9
OwogCQlGNkY0OUM2QjE1NTQ1Q0E3MDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNo
ZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjZGNDlDNjYxNTU0NUM4RDAwMDdGMzlEIC8qIERPTVdpbmRvd0V4dGVuc2lvbk5vQ2FjaGVf
QnVuZGxlLmNwcCAqLzsgfTsKQEAgLTI0Niw2ICsyNDksNyBAQAogCQkJCUMyQ0Y5NzVCMTZDRUM3
MUIwMDU0RTk5RCAvKiBKU0NvbnRleHRCYWNrRm9yd2FyZENhY2hlMS5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovLAogCQkJCUMyQ0Y5NzVBMTZDRUM3MTQwMDU0RTk5RCAvKiBKU0NvbnRleHRCYWNr
Rm9yd2FyZENhY2hlMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLAogCQkJCTFBOUU1MkM5MTNF
NjVFRjQwMDY5MTdGNSAvKiAxOC1jaGFyYWN0ZXJzLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8s
CisJCQkJRjZCN0JFOTcxNzQ2OUI5NjAwOEEzNDQ1IC8qIGFzc29jaWF0ZS1mb3JtLWNvbnRyb2xz
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJMzc5MDI4QjkxNEZBQzI0QzAwN0U2QjQz
IC8qIGFjY2VwdHNGaXJzdE1vdXNlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQjU1
RjExQkUxNTE5MUEwNjAwOTE1OTE2IC8qIEFoZW0udHRmIGluIENvcHkgUmVzb3VyY2VzICovLAog
CQkJCUI1NUYxMUI3MTUxN0QwMzMwMDkxNTkxNiAvKiBhdHRyaWJ1dGVkU3RyaW5nQ3VzdG9tRm9u
dC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovLApAQCAtNTA3LDYgKzUxMSw5IEBACiAJCUY2NjBB
QTBGMTVBNUY2MjQwMDNBMTI0MyAvKiBHZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNl
ckRhdGFDYWxsYmFja19CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tfQnVu
ZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjY2MEFBMTIxNUE2MTlDODAw
M0ExMjQzIC8qIEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2lu
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGNjYwQUExNDE1QTYxQUJGMDAzQTEyNDMgLyogSW5qZWN0ZWRCdW5kbGVJ
bml0aWFsaXphdGlvblVzZXJEYXRhQ2FsbGJhY2tXaW5zX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNl
ckRhdGFDYWxsYmFja1dpbnNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjZCN0JFOTIxNzQ2OTFFRjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZvcm1Db250cm9sc19C
dW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY2QjdCRTkzMTc0NjkxRUYw
MDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRjZCN0JFOTYxNzQ2OUI3RTAwOEEzNDQ1IC8qIGFzc29jaWF0ZS1mb3JtLWNvbnRyb2xz
Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAiYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2RjNGMjkwMTMzNDJGRUIwMEE2QkYxOSAvKiBDb29raWVN
YW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvb2tpZU1h
bmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNkY0OUM2NjE1NTQ1QzhE
MDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZV9C
dW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNkY0OUM2NzE1NTQ1QzhE
MDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5zaW9uTm9DYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2Miw2ICs2NjksOCBAQAogCQkJCUJDMjQ2RDk4
MTMyRjFGRTEwMEI1NkQ3QyAvKiBDYW5IYW5kbGVSZXF1ZXN0LmNwcCAqLywKIAkJCQlCQzI0NkQ5
NzEzMkYxRkUxMDBCNTZEN0MgLyogQ2FuSGFuZGxlUmVxdWVzdF9CdW5kbGUuY3BwICovLAogCQkJ
CUY2RjNGMjkwMTMzNDJGRUIwMEE2QkYxOSAvKiBDb29raWVNYW5hZ2VyLmNwcCAqLywKKwkJCQlG
NkI3QkU5MzE3NDY5MUVGMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzLmNwcCAq
LywKKwkJCQlGNkI3QkU5MjE3NDY5MUVGMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzX0J1bmRsZS5jcHAgKi8sCiAJCQkJQkNCNjgwM0YxMjZGQkZFMTAwNjQyQTYxIC8qIERvY3Vt
ZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaC5jcHAgKi8sCiAJCQkJQkNCNjgwNDExMjZGQkZG
MTAwNjQyQTYxIC8qIERvY3VtZW50U3RhcnRVc2VyU2NyaXB0QWxlcnRDcmFzaF9CdW5kbGUuY3Bw
ICovLAogCQkJCTUxMzkzRTFFMTUyMzk0NEEwMDVGMzlDNSAvKiBET01XaW5kb3dFeHRlbnNpb25C
YXNpYy5jcHAgKi8sCkBAIC03NzAsNiArNzc5LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJQzA0NUY5NDYxMzg1QzJGODAwQzBGM0NEIC8qIDE4LWNoYXJhY3Rl
cnMuaHRtbCAqLywKKwkJCQlGNkI3QkU5NjE3NDY5QjdFMDA4QTM0NDUgLyogYXNzb2NpYXRlLWZv
cm0tY29udHJvbHMuaHRtbCAqLywKIAkJCQk3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0
by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLywKIAkJCQkyOTBGNDI3NDE3MkExRkRFMDA5MzlGRjAg
LyogY3VzdG9tLXByb3RvY29sLXN5bmMteGhyLmh0bWwgKi8sCiAJCQkJQzVFMUFGRkQxNkIyMjE3
OTAwNkNDMUYyIC8qIGV4ZWNDb3B5Lmh0bWwgKi8sCkBAIC0xMTQ2LDYgKzExNTYsNyBAQAogCQkJ
CTM3RTM4QzM0MTY5QjdEMDEwMDg0QzI4QyAvKiBXZWJWaWV3RGlkUmVtb3ZlRnJhbWVGcm9tSGll
cmFyY2h5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZFMTgyREExNTQ3NTUwMTAwRjFGQUREIC8q
IFdpbGxTZW5kU3VibWl0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVFMjAyNzMxNUIy
MTgxOTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJRjZCN0JFOTQxNzQ2OTIwOTAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZvcm1Db250
cm9scy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzNDNEM3RjE0NTg3QUE2MDAyNUZCNjIgLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cFRlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzNDNEM3
MjE0NTc1QjZBMDAyNUZCNjIgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVUZXN0Lm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5MDFFMjQxNDkyQURDRTAwNzRBNjY3IC8qIFdLQ29ubmVj
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTExODcsNiArMTE5OCw3IEBACiAJCQkJQzU0MjM3
RjExNkI4OTU3RDAwRTYzOEZDIC8qIFBhc3RlYm9hcmROb3RpZmljYXRpb25zX0J1bmRsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzU3NUJEOTEyNkY1OEUyMDA2RjBGMTIgLyogUGxhdGZvcm1V
dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NzVCRTAxMjZGNTkwRDAwNkYwRjEy
IC8qIFBsYXRmb3JtVXRpbGl0aWVzTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRjZCN0JFOTUx
NzQ2OTIxMjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQzBCRDY2OUYxMzFEM0NGRjAwRTE4RjJBIC8qIFJlc3BvbnNpdmVu
ZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
RkNGN0ExMTUzNEIyQTAwMDEwNDQ5MSAvKiBTaG91bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbV9C
dW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMkQzMTkxNERDNjhCOTAwRkZCMUREIC8q
IFVzZXJNZXNzYWdlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250
cm9scy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRkNDkyZAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3Nv
Y2lhdGVGb3JtQ29udHJvbHMuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJUZXN0LmgiCisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworc3RhdGljIGJvb2wgZGlkUmVjZWl2ZUFsbE1lc3NhZ2VzID0gZmFsc2U7
CitzdGF0aWMgYm9vbCByZWNlaXZlZE1lc3NhZ2VGb3JBZGRpbmdGb3JtID0gZmFsc2U7CisKK3N0
YXRpYyB2b2lkIG51bGxKYXZhU2NyaXB0Q2FsbGJhY2soV0tTZXJpYWxpemVkU2NyaXB0VmFsdWVS
ZWYsIFdLRXJyb3JSZWYsIHZvaWQqKQoreworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0NvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VO
YW1lLCBXS1R5cGVSZWYgYm9keSwgY29uc3Qgdm9pZCopCit7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCJEaWRSZWNlaXZlRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIiwgbWVzc2FnZU5hbWUpOworCisg
ICAgaWYgKCFyZWNlaXZlZE1lc3NhZ2VGb3JBZGRpbmdGb3JtKSB7CisgICAgICAgIHJlY2VpdmVk
TWVzc2FnZUZvckFkZGluZ0Zvcm0gPSB0cnVlOworCisgICAgICAgIEVYUEVDVF9FUShXS1BhZ2VH
ZXRUeXBlSUQoKSwgV0tHZXRUeXBlSUQoYm9keSkpOworICAgICAgICBXS1BhZ2VSZWYgcGFnZSA9
IHN0YXRpY19jYXN0PFdLUGFnZVJlZj4oYm9keSk7CisKKyAgICAgICAgV0tQYWdlUnVuSmF2YVNj
cmlwdEluTWFpbkZyYW1lKHBhZ2UsIFV0aWw6OnRvV0soImFkZFBhc3N3b3JkRmllbGRUb0Zvcm0o
KSIpLmdldCgpLCAwLCBudWxsSmF2YVNjcmlwdENhbGxiYWNrKTsKKworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZGlkUmVjZWl2ZUFsbE1lc3NhZ2VzID0gdHJ1ZTsKK30KKworc3RhdGlj
IHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQgaW5qZWN0ZWRCdW5kbGVDbGllbnQ7Cisg
ICAgbWVtc2V0KCZpbmplY3RlZEJ1bmRsZUNsaWVudCwgMCwgc2l6ZW9mKGluamVjdGVkQnVuZGxl
Q2xpZW50KSk7CisgICAgaW5qZWN0ZWRCdW5kbGVDbGllbnQuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUgPSBkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZTsKKwor
ICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KGNvbnRleHQsICZpbmplY3RlZEJ1
bmRsZUNsaWVudCk7Cit9CisKK1RFU1QoV2ViS2l0MiwgRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
KQoreworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dCA9IGFkb3B0V0soVXRp
bDo6Y3JlYXRlQ29udGV4dEZvckluamVjdGVkQnVuZGxlVGVzdCgiRGlkQXNzb2NpYXRlRm9ybUNv
bnRyb2xzVGVzdCIpKTsKKyAgICBzZXRJbmplY3RlZEJ1bmRsZUNsaWVudChjb250ZXh0LmdldCgp
KTsKKworICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOworICAgIFdL
UGFnZUxvYWRVUkwod2ViVmlldy5wYWdlKCksIGFkb3B0V0soVXRpbDo6Y3JlYXRlVVJMRm9yUmVz
b3VyY2UoImFzc29jaWF0ZS1mb3JtLWNvbnRyb2xzIiwgImh0bWwiKSkuZ2V0KCkpOworICAgIFV0
aWw6OnJ1bigmZGlkUmVjZWl2ZUFsbE1lc3NhZ2VzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOTZhYzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzX0J1bmRsZS5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVRlc3QuaCIKKworI2luY2x1ZGUgIlBs
YXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZS5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdlLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
KworY2xhc3MgRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdCA6IHB1YmxpYyBJbmplY3RlZEJ1
bmRsZVRlc3QgeworcHVibGljOgorICAgIERpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3QoY29u
c3Qgc3RkOjpzdHJpbmcmIGlkZW50aWZpZXIpOworCisgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0
ZVBhZ2UoV0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZik7Cit9OworCitzdGF0aWMgSW5qZWN0
ZWRCdW5kbGVUZXN0OjpSZWdpc3RlcjxEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0PiByZWdp
c3RyYXIoIkRpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3QiKTsKKworc3RhdGljIGJvb2wgc2hv
dWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyhXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IHZvaWQqKQorewor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBkaWRBc3NvY2lhdGVGb3JtQ29udHJv
bHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUoKSwgVXRp
bDo6dG9XSygiRGlkUmVjZWl2ZURpZEFzc29jaWF0ZUZvcm1Db250cm9scyIpLmdldCgpLCBwYWdl
KTsKK30KKworRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdDo6RGlkQXNzb2NpYXRlRm9ybUNv
bnRyb2xzVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikKKyAgICA6IEluamVjdGVk
QnVuZGxlVGVzdChpZGVudGlmaWVyKQoreworfQorCit2b2lkIERpZEFzc29jaWF0ZUZvcm1Db250
cm9sc1Rlc3Q6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VGb3JtQ2xpZW50IGZvcm1DbGllbnQ7CisgICAg
bWVtc2V0KCZmb3JtQ2xpZW50LCAwLCBzaXplb2YoZm9ybUNsaWVudCkpOworCisgICAgZm9ybUNs
aWVudC52ZXJzaW9uID0gMjsKKyAgICBmb3JtQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAg
IGZvcm1DbGllbnQuc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyA9IHNob3VsZE5vdGlmeU9uRm9y
bUNoYW5nZXM7CisgICAgZm9ybUNsaWVudC5kaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMgPSBkaWRB
c3NvY2lhdGVGb3JtQ29udHJvbHM7CisKKyAgICBXS0J1bmRsZVBhZ2VTZXRGb3JtQ2xpZW50KHBh
Z2UsICZmb3JtQ2xpZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2Fzc29jaWF0ZS1mb3Jt
LWNvbnRyb2xzLmh0bWwgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvYXNzb2Np
YXRlLWZvcm0tY29udHJvbHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45MDYyNDZhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyL2Fzc29jaWF0ZS1mb3JtLWNvbnRyb2xzLmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPGh0
bWw+Cis8aGVhZD4KKyAgPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBhZGRGb3JtKCkKKyAgICB7Cisg
ICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpOworICAgICAg
ICBmb3JtLmlkID0gImxvZ2luX2Zvcm0iOworCisgICAgICAgIHZhciB1c2VybmFtZUZpZWxkID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICAgICAgdXNlcm5hbWVGaWVsZC5p
ZCA9ICJ1c2VybmFtZSI7CisgICAgICAgIHVzZXJuYW1lRmllbGQudHlwZSA9ICJ0ZXh0IjsKKyAg
ICAgICAgZm9ybS5hcHBlbmRDaGlsZCh1c2VybmFtZUZpZWxkKTsKKworICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZFBhc3N3
b3JkRmllbGRUb0Zvcm0oKQorICAgIHsKKyAgICAgICAgdmFyIHBhc3N3b3JkRmllbGQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICBwYXNzd29yZEZpZWxkLmlkID0g
InBhc3N3b3JkIjsKKyAgICAgICAgcGFzc3dvcmRGaWVsZC50eXBlID0gInBhc3N3b3JkIjsKKwor
ICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2dpbl9mb3JtIik7
CisgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQocGFzc3dvcmRGaWVsZCk7CisgICAgfQorICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0iYWRkRm9ybSgpIj4KKzxidXR0b24gb25jbGlj
az0iYWRkUGFzc3dvcmRGaWVsZFRvRm9ybSgpIj5NYW51YWwgVGVzdGluZzogQWRkIHRoZSBwYXNz
d29yZCBmaWVsZDwvYnV0dG9uPgorPC9ib2R5PgorPC9odG1sPgotLSAKMS44LjIuMSAoQXBwbGUg
R2l0LTQ1KQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202328</attachid>
            <date>2013-05-20 15:47:46 -0700</date>
            <delta_ts>2013-05-20 19:08:48 -0700</delta_ts>
            <desc>Patch (version 2)</desc>
            <filename>0001-Expose-a-way-to-know-when-forms-are-added-to-a-page-.patch</filename>
            <type>text/plain</type>
            <size>29619</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">RnJvbSA1YzFkZmFhYzFkZGM5ZTkwZDQ1YzZiNWY4MzM0MzkyY2ZlNGE0YmM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXNzaWUgQmVybGluIDxqYmVybGluQHdlYmtpdC5vcmc+CkRh
dGU6IEZyaSwgMTcgTWF5IDIwMTMgMTE6MTg6MzYgLTA3MDAKU3ViamVjdDogW1BBVENIXSBFeHBv
c2UgYSB3YXkgdG8ga25vdyB3aGVuIGZvcm1zIGFyZSBhZGRlZCB0byBhIHBhZ2Ugb3Igd2hlbgog
Zm9ybSBjb250cm9scyBhcmUgYWRkZWQgdG8gYSBmb3JtIGluIHRoZSBpbmplY3RlZCBidW5kbGUK
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYzMzQKClJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgoKU291cmNlL1dlYktpdDI6CgpBZGQgc2hvdWxkTm90aWZ5T25G
b3JtQ2hhbmdlcyBhbmQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIHRvIHRoZSBXS0J1bmRsZVBh
Z2VGb3JtQ2xpZW50LgoKKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZS5oOgpBZGQgdGhlIG5ldyBjYWxsYmFja3MgYXMgcGFydCBvZiB2ZXJzaW9uIDIgb2YgdGhl
IFdLQnVuZGxlUGFnZUZvcm1DbGllbnQuCgoqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHA6CihXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFn
ZUZvcm1DbGllbnQ6OmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyk6ClBhc3MgdGhlIG1lc3NhZ2Ug
YWxvbmcgdG8gdGhlIGNsaWVudCBpZiB0aGUgY2xpZW50IGhhcyBhIGhhbmRsZXIuCihXZWJLaXQ6
OkluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQ6OnNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMp
OgpEaXR0by4KKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZv
cm1DbGllbnQuaDoKKEluamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQpOgoKKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CihXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKVGVsbCB0aGUgaW5qZWN0ZWQgYnVuZGxl
IGZvcm0gY2xpZW50IGZvciB0aGUgcGFnZS4KKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzaG91
bGROb3RpZnlPbkZvcm1DaGFuZ2VzKToKRGl0dG8uCiogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaDoKKFdlYkNocm9tZUNsaWVudCk6CgpUb29sczoKCkFkZCB0ZXN0
cyBmb3IgdGhlIG5ldyBjYWxsYmFja3MuCgoqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgpBZGQgRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzL19C
dW5kbGUuY3BwIGFuZCBhc3NvY2lhdGUtZm9ybS1jb250cm9scy5odG1sCgoqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMuY3BwOiBBZGRlZC4KKFRl
c3RXZWJLaXRBUEkpOgooVGVzdFdlYktpdEFQSTo6bnVsbEphdmFTY3JpcHRDYWxsYmFjayk6CkEg
Im51bGwiIGNhbGxiYWNrIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IFdLUGFnZVJ1bkphdmFTY3Jp
cHRJbk1haW5GcmFtZSBjYW5ub3QgaGFuZGxlIG51bGwKYmVpbmcgcGFzc2VkIGluIGZvciB0aGUg
Y2FsbGJhY2suCihUZXN0V2ViS2l0QVBJOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZSk6CkFmdGVyIHJlY2VpdmluZyB0aGUgbWVzc2FnZSB0aGF0IGRpZEFzc29jaWF0ZUZvcm1D
b250cm9scyBjYWxsYmFjayB3YXMgaW52b2tlZCBmcm9tIGFkZGluZwp0aGUgZm9ybSBpbiB0aGUg
b25sb2FkIGhhbmRsZXIsIHRlbGwgdGhlIHBhZ2UgdG8gYWRkIGEgcGFzc3dvcmQgZmllbGQgdG8g
dGhlIGZvcm0sIHdoaWNoCnNob3VsZCBhbHNvIGludm9rZSBkaWRBc3NvY2lhdGVGb3JtQ29udHJv
bHMgY2FsbGJhY2suCihUZXN0V2ViS2l0QVBJOjpzZXRJbmplY3RlZEJ1bmRsZUNsaWVudCk6ClJl
Z2lzdGVyIHRvIHJlY2VpdmUgbWVzc2FnZXMuCihUZXN0V2ViS2l0QVBJOjpURVNUKToKTG9hZCBh
c3NvY2lhdGUtZm9ybS1jb250cm9scy5odG1sIGFuZCB3YWl0IHVudGlsIHRoZSBkaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHMgY2FsbGJhY2sgaGFzCmJlZW4gaW52b2tlZCBmb3IgYm90aCBhZGRpbmcg
dGhlIGZvcm0gYW5kIGZvciBhZGRpbmcgYSBwYXNzd29yZCBmaWVsZCB0byB0aGUgZm9ybS4KCiog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5k
bGUuY3BwOiBBZGRlZC4KKFRlc3RXZWJLaXRBUEkpOgooRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
VGVzdCk6CihUZXN0V2ViS2l0QVBJOjpzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKToKUmV0dXJu
IHRydWUgc28gdGhlIGRpZEFzc29jaWF0ZUZvcm1Db250cm9scyBjYWxsYmFjayBpcyBpbnZva2Vk
LgooVGVzdFdlYktpdEFQSTo6ZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKToKVGVsbCB0aGUgVUkg
cHJvY2Vzcy4KKFRlc3RXZWJLaXRBUEk6OkRpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3Q6OkRp
ZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3QpOgooVGVzdFdlYktpdEFQSTo6RGlkQXNzb2NpYXRl
Rm9ybUNvbnRyb2xzVGVzdDo6ZGlkQ3JlYXRlUGFnZSk6ClJlZ2lzdGVyIGZvciB0aGUgc2hvdWxk
Tm90aWZ5T25Gb3JtQ2hhbmdlcyBhbmQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIGNhbGxiYWNr
cy4KCiogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2Fzc29jaWF0ZS1mb3JtLWNvbnRyb2xz
Lmh0bWw6IEFkZGVkLgpBZGQgYSBmb3JtIGluIHJlc3BvbnNlIHRvIHRoZSBvbmxvYWQgZXZlbnQu
IEFkZCBhIGJ1dHRvbiB0aGF0IHdpbGwgYWRkIHRoZSBwYXNzd29yZCBmaWVsZApmb3IgbWFudWFs
IHRlc3RpbmcuCi0tLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAyOSArKysrKysrKwogLi4uL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVQYWdlLmggfCAgNCArKwogLi4uL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGll
bnQuY3BwICAgICAgICAgICAgICAgfCAyNSArKysrKysrCiAuLi4vSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5oICB8ICA5ICsrLQogLi4uL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCAgfCAxMCArKysKIC4uLi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oICAgIHwgIDMgKwogVG9vbHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0MyArKysrKysrKysrKwog
Li4uL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICAgfCAxMiAr
KysrCiAuLi4vVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMuY3BwICAgICB8
IDgzICsrKysrKysrKysrKysrKysrKysrKysKIC4uLi9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1D
b250cm9sc19CdW5kbGUuY3BwICAgIHwgNzggKysrKysrKysrKysrKysrKysrKysKIC4uLi9UZXN0
cy9XZWJLaXQyL2Fzc29jaWF0ZS1mb3JtLWNvbnRyb2xzLmh0bWwgICAgIHwgMzEgKysrKysrKysK
IDExIGZpbGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3Nv
Y2lhdGVGb3JtQ29udHJvbHMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2Fzc29j
aWF0ZS1mb3JtLWNvbnRyb2xzLmh0bWwKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzZmN2M2NS4uMTAyNzNiYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTA1LTIwICBKZXNzaWUgQmVybGluICA8
amJlcmxpbkBhcHBsZS5jb20+CisKKyAgICAgICAgRXhwb3NlIGEgd2F5IHRvIGtub3cgd2hlbiBm
b3JtcyBhcmUgYWRkZWQgdG8gYSBwYWdlIG9yIHdoZW4gZm9ybSBjb250cm9scyBhcmUgYWRkZWQg
dG8gYSBmb3JtCisgICAgICAgIGluIHRoZSBpbmplY3RlZCBidW5kbGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjMzNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzaG91bGROb3RpZnlPbkZvcm1D
aGFuZ2VzIGFuZCBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMgdG8gdGhlIFdLQnVuZGxlUGFnZUZv
cm1DbGllbnQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5oOgorICAgICAgICBBZGQgdGhlIG5ldyBjYWxsYmFja3MgYXMgcGFydCBvZiB2
ZXJzaW9uIDIgb2YgdGhlIFdLQnVuZGxlUGFnZUZvcm1DbGllbnQuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50OjpkaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHMpOgorICAgICAgICBQYXNzIHRoZSBtZXNzYWdlIGFsb25nIHRvIHRoZSBj
bGllbnQgaWYgdGhlIGNsaWVudCBoYXMgYSBoYW5kbGVyLgorICAgICAgICAoV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50OjpzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKToKKyAg
ICAgICAgRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50Lmg6CisgICAgICAgIChJbmplY3RlZEJ1bmRsZVBhZ2VGb3Jt
Q2xpZW50KToKKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpkaWRBc3NvY2lh
dGVGb3JtQ29udHJvbHMpOgorICAgICAgICBUZWxsIHRoZSBpbmplY3RlZCBidW5kbGUgZm9ybSBj
bGllbnQgZm9yIHRoZSBwYWdlLgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNo
b3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ2hy
b21lQ2xpZW50KToKKwogMjAxMy0wNS0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgog
CiAgICAgICAgIEJ1bXAgV0tCdW5kbGVQYWdlTG9hZGVyQ2xpZW50IHZlcnNpb24gbnVtYmVyIHNv
IGFzIG5vdCB0byBicmVhayBzb21lIGNsaWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCmlu
ZGV4IDk5NTUwYzMuLjEwM2Y0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaApAQCAtMzM4
LDYgKzMzOCw4IEBAIHR5cGVkZWYgYm9vbCAoKldLQnVuZGxlUGFnZVNob3VsZFBlcmZvcm1BY3Rp
b25JblRleHRGaWVsZENhbGxiYWNrKShXS0J1bmRsZVBhZ2VSCiB0eXBlZGVmIHZvaWQgKCpXS0J1
bmRsZVBhZ2VXaWxsU3VibWl0Rm9ybUNhbGxiYWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGh0bWxGb3JtRWxlbWVudEhhbmRsZSwgV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZSwgV0tCdW5kbGVGcmFtZVJlZiBzb3VyY2VGcmFtZSwgV0tEaWN0aW9uYXJ5UmVmIHZh
bHVlcywgV0tUeXBlUmVmKiB1c2VyRGF0YSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiB0eXBl
ZGVmIHZvaWQgKCpXS0J1bmRsZVBhZ2VXaWxsU2VuZFN1Ym1pdEV2ZW50Q2FsbGJhY2spKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbEZvcm1FbGVtZW50SGFu
ZGxlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZUZyYW1lUmVmIHNvdXJjZUZyYW1l
LCBXS0RpY3Rpb25hcnlSZWYgdmFsdWVzLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIHR5cGVk
ZWYgdm9pZCAoKldLQnVuZGxlUGFnZURpZEZvY3VzVGV4dEZpZWxkQ2FsbGJhY2spKFdLQnVuZGxl
UGFnZVJlZiBwYWdlLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgaHRtbElucHV0RWxlbWVudEhhbmRs
ZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIGJvb2wgKCpXS0J1bmRsZVBhZ2VTaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzQ2FsbGJhY2sp
KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYg
dm9pZCAoKldLQnVuZGxlUGFnZURpZEFzc29jaWF0ZUZvcm1Db250cm9sc0NhbGxiYWNrKShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tBcnJheVJlZiBlbGVtZW50SGFuZGxlcywgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CiAKIHN0cnVjdCBXS0J1bmRsZVBhZ2VGb3JtQ2xpZW50IHsKICAgICBpbnQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnNpb247CkBAIC0zNTYsNiArMzU4LDggQEAgc3RydWN0IFdLQnVuZGxlUGFnZUZv
cm1DbGllbnQgewogCiAgICAgLy8gdmVyc2lvbiAyLgogICAgIFdLQnVuZGxlUGFnZURpZEZvY3Vz
VGV4dEZpZWxkQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRm9jdXNU
ZXh0RmllbGQ7CisgICAgV0tCdW5kbGVQYWdlU2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlc0NhbGxi
YWNrICAgICAgICAgICAgICAgICAgICAgICBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzOworICAg
IFdLQnVuZGxlUGFnZURpZEFzc29jaWF0ZUZvcm1Db250cm9sc0NhbGxiYWNrICAgICAgICAgICAg
ICAgICAgICAgICAgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzOwogfTsKIHR5cGVkZWYgc3RydWN0
IFdLQnVuZGxlUGFnZUZvcm1DbGllbnQgV0tCdW5kbGVQYWdlRm9ybUNsaWVudDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5jcHAKaW5kZXggZGVhNWVhYi4u
ZTBhYTZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5q
ZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudC5oIgogCisjaW5jbHVkZSAiSW1tdXRhYmxlQXJyYXku
aCIKICNpbmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCkBAIC0xMjQsNCArMTI1
LDI4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRm9ybUNsaWVudDo6d2lsbFN1Ym1pdEZvcm0o
V2ViUGFnZSogcGFnZSwgSFRNTEZvcm1FbGVtZW50CiAgICAgdXNlckRhdGEgPSBhZG9wdFJlZih0
b0ltcGwodXNlckRhdGFUb1Bhc3MpKTsKIH0KIAordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VGb3Jt
Q2xpZW50OjpkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMoV2ViUGFnZSogcGFnZSwgY29uc3QgVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiA+JiBlbGVtZW50cykKK3sKKyAgICBpZiAoIW1f
Y2xpZW50LmRpZEFzc29jaWF0ZUZvcm1Db250cm9scykKKyAgICAgICAgcmV0dXJuOworCisgICAg
dW5zaWduZWQgc2l6ZSA9IGVsZW1lbnRzLnNpemUoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8QVBJ
T2JqZWN0PiA+IGVsZW1lbnRIYW5kbGVzOworICAgIGVsZW1lbnRIYW5kbGVzLnJlc2VydmVDYXBh
Y2l0eShzaXplKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisg
ICAgICAgIGVsZW1lbnRIYW5kbGVzLnVuY2hlY2tlZEFwcGVuZChJbmplY3RlZEJ1bmRsZU5vZGVI
YW5kbGU6OmdldE9yQ3JlYXRlKGVsZW1lbnRzW2ldLmdldCgpKS5nZXQoKSk7CisKKyAgICBtX2Ns
aWVudC5kaWRBc3NvY2lhdGVGb3JtQ29udHJvbHModG9BUEkocGFnZSksIHRvQVBJKEltbXV0YWJs
ZUFycmF5OjphZG9wdChlbGVtZW50SGFuZGxlcykuZ2V0KCkpLCBtX2NsaWVudC5jbGllbnRJbmZv
KTsKK30KKworYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50OjpzaG91bGROb3RpZnlP
bkZvcm1DaGFuZ2VzKFdlYlBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKCFtX2NsaWVudC5zaG91bGRO
b3RpZnlPbkZvcm1DaGFuZ2VzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyh0b0FQSShwYWdlKSwgbV9jbGllbnQu
Y2xpZW50SW5mbyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VG
b3JtQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuaAppbmRleCA5NjA1YWNiLi42ZmQxNWIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZUZvcm1DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUZvcm1DbGllbnQuaApAQCAtMzMsOSArMzMs
MTAgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7Ci0gICAgY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLSAg
ICBjbGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEhUTUxG
b3JtRWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CitjbGFzcyBIVE1MVGV4dEFyZWFF
bGVtZW50OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU1LDYgKzU2LDggQEAgcHVibGlj
OgogICAgIGJvb2wgc2hvdWxkUGVyZm9ybUFjdGlvbkluVGV4dEZpZWxkKFdlYlBhZ2UqLCBXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50KiwgV0tJbnB1dEZpZWxkQWN0aW9uVHlwZSwgV2ViRnJhbWUq
KTsgICAgCiAgICAgdm9pZCB3aWxsU3VibWl0Rm9ybShXZWJQYWdlKiwgV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50KiwgV2ViRnJhbWUqLCBXZWJGcmFtZSogc291cmNlRnJhbWUsIGNvbnN0IFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYsIFJlZlB0cjxBUElPYmplY3Q+JiB1c2VyRGF0
YSk7CiAgICAgdm9pZCB3aWxsU2VuZFN1Ym1pdEV2ZW50KFdlYlBhZ2UqLCBXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQqLCBXZWJGcmFtZSosIFdlYkZyYW1lKiBzb3VyY2VGcmFtZSwgY29uc3QgVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+Jik7CisgICAgdm9pZCBkaWRBc3NvY2lhdGVG
b3JtQ29udHJvbHMoV2ViUGFnZSosIGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6RWxlbWVu
dD4gPiYpOworICAgIGJvb2wgc2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyhXZWJQYWdlKik7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAy
ZTJiNTdhLi42MzE3ZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC03MTYsNiArNzE2
LDE2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9k
ZSopCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRp
ZEFzc29jaWF0ZUZvcm1Db250cm9scyhjb25zdCBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OkVsZW1l
bnQ+ID4mIGVsZW1lbnRzKQoreworICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9y
bUNsaWVudCgpLmRpZEFzc29jaWF0ZUZvcm1Db250cm9scyhtX3BhZ2UsIGVsZW1lbnRzKTsKK30K
KworYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXMoKQorewor
ICAgIHJldHVybiBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRm9ybUNsaWVudCgpLnNob3VsZE5vdGlm
eU9uRm9ybUNoYW5nZXMobV9wYWdlKTsKK30KKwogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNlbGVj
dEl0ZW1Xcml0aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKIHsKICNpZiBQTEFURk9STShFRkwpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAppbmRleCBkYjcwNGJkLi40NWY5ZDgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKQEAgLTE3MCw2ICsxNzAsOSBAQCBwcml2YXRlOgogICAgIC8vIHdpbGwgYmUgY2FsbGVk
IGZyZXF1ZW50bHksIHNvIGhhbmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCiAgICAgdmlydHVh
bCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKikgT1ZFUlJJREU7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4gPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBzaG91bGROb3RpZnlPbkZvcm1DaGFuZ2VzKCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIGJv
b2wgc2VsZWN0SXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgc2VsZWN0SXRlbUFsaWdubWVudEZvbGxvd3NNZW51V3JpdGluZ0RpcmVjdGlv
bigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBoYXNPcGVuZWRQb3B1cCgpIGNvbnN0IE9W
RVJSSURFOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDEyYzYwNGYuLmViOTFkMDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMy0wNS0yMCAgSmVzc2llIEJlcmxp
biAgPGpiZXJsaW5AYXBwbGUuY29tPgorCisgICAgICAgIEV4cG9zZSBhIHdheSB0byBrbm93IHdo
ZW4gZm9ybXMgYXJlIGFkZGVkIHRvIGEgcGFnZSBvciB3aGVuIGZvcm0gY29udHJvbHMgYXJlIGFk
ZGVkIHRvIGEgZm9ybQorICAgICAgICBpbiB0aGUgaW5qZWN0ZWQgYnVuZGxlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYzMzQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdHMgZm9yIHRoZSBu
ZXcgY2FsbGJhY2tzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBEaWRBc3NvY2lhdGVGb3JtQ29u
dHJvbHMvX0J1bmRsZS5jcHAgYW5kIGFzc29jaWF0ZS1mb3JtLWNvbnRyb2xzLmh0bWwKKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJv
bHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEkpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6bnVsbEphdmFTY3JpcHRDYWxsYmFjayk6CisgICAgICAgIEEgIm51bGwiIGNhbGxi
YWNrIHRvIGhhbmRsZSB0aGUgZmFjdCB0aGF0IFdLUGFnZVJ1bkphdmFTY3JpcHRJbk1haW5GcmFt
ZSBjYW5ub3QgaGFuZGxlIG51bGwKKyAgICAgICAgYmVpbmcgcGFzc2VkIGluIGZvciB0aGUgY2Fs
bGJhY2suCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZSk6CisgICAgICAgIEFmdGVyIHJlY2VpdmluZyB0aGUgbWVzc2FnZSB0aGF0IGRp
ZEFzc29jaWF0ZUZvcm1Db250cm9scyBjYWxsYmFjayB3YXMgaW52b2tlZCBmcm9tIGFkZGluZwor
ICAgICAgICB0aGUgZm9ybSBpbiB0aGUgb25sb2FkIGhhbmRsZXIsIHRlbGwgdGhlIHBhZ2UgdG8g
YWRkIGEgcGFzc3dvcmQgZmllbGQgdG8gdGhlIGZvcm0sIHdoaWNoCisgICAgICAgIHNob3VsZCBh
bHNvIGludm9rZSBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMgY2FsbGJhY2suCisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpzZXRJbmplY3RlZEJ1bmRsZUNsaWVudCk6CisgICAgICAgIFJlZ2lzdGVy
IHRvIHJlY2VpdmUgbWVzc2FnZXMuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgTG9hZCBhc3NvY2lhdGUtZm9ybS1jb250cm9scy5odG1sIGFuZCB3YWl0IHVudGlsIHRo
ZSBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMgY2FsbGJhY2sgaGFzCisgICAgICAgIGJlZW4gaW52
b2tlZCBmb3IgYm90aCBhZGRpbmcgdGhlIGZvcm0gYW5kIGZvciBhZGRpbmcgYSBwYXNzd29yZCBm
aWVsZCB0byB0aGUgZm9ybS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcDogQWRkZWQuCisgICAgICAgIChU
ZXN0V2ViS2l0QVBJKToKKyAgICAgICAgKERpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3QpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6c2hvdWxkTm90aWZ5T25Gb3JtQ2hhbmdlcyk6CisgICAg
ICAgIFJldHVybiB0cnVlIHNvIHRoZSBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMgY2FsbGJhY2sg
aXMgaW52b2tlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmRpZEFzc29jaWF0ZUZvcm1Db250
cm9scyk6CisgICAgICAgIFRlbGwgdGhlIFVJIHByb2Nlc3MuCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0OjpEaWRBc3NvY2lhdGVGb3JtQ29udHJv
bHNUZXN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkRpZEFzc29jaWF0ZUZvcm1Db250cm9s
c1Rlc3Q6OmRpZENyZWF0ZVBhZ2UpOgorICAgICAgICBSZWdpc3RlciBmb3IgdGhlIHNob3VsZE5v
dGlmeU9uRm9ybUNoYW5nZXMgYW5kIGRpZEFzc29jaWF0ZUZvcm1Db250cm9scyBjYWxsYmFja3Mu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvYXNzb2NpYXRlLWZvcm0t
Y29udHJvbHMuaHRtbDogQWRkZWQuCisgICAgICAgIEFkZCBhIGZvcm0gaW4gcmVzcG9uc2UgdG8g
dGhlIG9ubG9hZCBldmVudC4gQWRkIGEgYnV0dG9uIHRoYXQgd2lsbCBhZGQgdGhlIHBhc3N3b3Jk
IGZpZWxkCisgICAgICAgIGZvciBtYW51YWwgdGVzdGluZy4KKwogMjAxMy0wNS0yMCAgQ2hyaXN0
b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0g
UmVlbmFibGVkIElOREVYRURfREFUQUJBU0UgYWZ0ZXIgcjE1MDM0NApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1NmQ4OGQxLi44ZTY1MmE5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjA5LDYgKzIwOSw5IEBACiAJCUY2NjBBQTExMTVBNUY2MzEwMDNBMTI0MyAvKiBHZXRJbmplY3Rl
ZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja19CdW5kbGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY2MEFBMEYxNUE1RjYyNDAw
M0ExMjQzIC8qIEdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNr
X0J1bmRsZS5jcHAgKi87IH07CiAJCUY2NjBBQTEzMTVBNjE5QzkwMDNBMTI0MyAvKiBJbmplY3Rl
ZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY2MEFBMTIxNUE2MTlDODAwM0Ex
MjQzIC8qIEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2lucy5j
cHAgKi87IH07CiAJCUY2NjBBQTE1MTVBNjFBQkYwMDNBMTI0MyAvKiBJbmplY3RlZEJ1bmRsZUlu
aXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnNfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2NjBBQTE0MTVBNjFBQkYwMDNBMTI0
MyAvKiBJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnNfQnVu
ZGxlLmNwcCAqLzsgfTsKKwkJRjZCN0JFOTQxNzQ2OTIwOTAwOEEzNDQ1IC8qIERpZEFzc29jaWF0
ZUZvcm1Db250cm9scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNkI3QkU5MzE3NDY5MUVGMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzLmNwcCAqLzsgfTsKKwkJRjZCN0JFOTUxNzQ2OTIxMjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0
ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjZCN0JFOTIxNzQ2OTFFRjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZv
cm1Db250cm9sc19CdW5kbGUuY3BwICovOyB9OworCQlGNkI3QkU5NzE3NDY5Qjk2MDA4QTM0NDUg
LyogYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNkI3QkU5NjE3NDY5QjdFMDA4QTM0NDUgLyog
YXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbCAqLzsgfTsKIAkJRjZGM0YyOTExMzM0MkZFQjAw
QTZCRjE5IC8qIENvb2tpZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjZGM0YyOTAxMzM0MkZFQjAwQTZCRjE5IC8qIENvb2tpZU1hbmFn
ZXIuY3BwICovOyB9OwogCQlGNkY0OUM2OTE1NTQ1QzhFMDAwN0YzOUQgLyogRE9NV2luZG93RXh0
ZW5zaW9uTm9DYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNkY0OUM2NzE1NTQ1QzhEMDAwN0YzOUQgLyogRE9NV2luZG93RXh0ZW5zaW9uTm9D
YWNoZS5jcHAgKi87IH07CiAJCUY2RjQ5QzZCMTU1NDVDQTcwMDA3RjM5RCAvKiBET01XaW5kb3dF
eHRlbnNpb25Ob0NhY2hlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNkY0OUM2NjE1NTQ1QzhEMDAwN0YzOUQgLyogRE9NV2luZG93RXh0
ZW5zaW9uTm9DYWNoZV9CdW5kbGUuY3BwICovOyB9OwpAQCAtMjQ4LDYgKzI1MSw3IEBACiAJCQkJ
QzJDRjk3NUIxNkNFQzcxQjAwNTRFOTlEIC8qIEpTQ29udGV4dEJhY2tGb3J3YXJkQ2FjaGUxLmh0
bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJCQkJQzJDRjk3NUExNkNFQzcxNDAwNTRFOTlEIC8q
IEpTQ29udGV4dEJhY2tGb3J3YXJkQ2FjaGUyLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCiAJ
CQkJMUE5RTUyQzkxM0U2NUVGNDAwNjkxN0Y1IC8qIDE4LWNoYXJhY3RlcnMuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLywKKwkJCQlGNkI3QkU5NzE3NDY5Qjk2MDA4QTM0NDUgLyogYXNzb2NpYXRl
LWZvcm0tY29udHJvbHMuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLywKIAkJCQkzNzkwMjhCOTE0
RkFDMjRDMDA3RTZCNDMgLyogYWNjZXB0c0ZpcnN0TW91c2UuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLywKIAkJCQlCNTVGMTFCRTE1MTkxQTA2MDA5MTU5MTYgLyogQWhlbS50dGYgaW4gQ29weSBS
ZXNvdXJjZXMgKi8sCiAJCQkJQjU1RjExQjcxNTE3RDAzMzAwOTE1OTE2IC8qIGF0dHJpYnV0ZWRT
dHJpbmdDdXN0b21Gb250Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8sCkBAIC01MTEsNiArNTE1
LDkgQEAKIAkJRjY2MEFBMEYxNUE1RjYyNDAwM0ExMjQzIC8qIEdldEluamVjdGVkQnVuZGxlSW5p
dGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRh
dGFDYWxsYmFja19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNjYw
QUExMjE1QTYxOUM4MDAzQTEyNDMgLyogSW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJE
YXRhQ2FsbGJhY2tXaW5zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2lucy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2NjBBQTE0MTVBNjFBQkYwMDNBMTI0MyAvKiBJ
bmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGFDYWxsYmFja1dpbnNfQnVuZGxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlSW5p
dGlhbGl6YXRpb25Vc2VyRGF0YUNhbGxiYWNrV2luc19CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGNkI3QkU5MjE3NDY5MUVGMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRl
Rm9ybUNvbnRyb2xzX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaWRBc3NvY2lhdGVG
b3JtQ29udHJvbHNfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjZC
N0JFOTMxNzQ2OTFFRjAwOEEzNDQ1IC8qIERpZEFzc29jaWF0ZUZvcm1Db250cm9scy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGNkI3QkU5NjE3NDY5QjdFMDA4QTM0NDUgLyogYXNzb2NpYXRl
LWZvcm0tY29udHJvbHMuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJhc3NvY2lhdGUtZm9ybS1jb250cm9scy5o
dG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjZGM0YyOTAxMzM0MkZFQjAwQTZC
RjE5IC8qIENvb2tpZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29va2llTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2
RjQ5QzY2MTU1NDVDOEQwMDA3RjM5RCAvKiBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlX0J1bmRs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBET01XaW5kb3dFeHRl
bnNpb25Ob0NhY2hlX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY2
RjQ5QzY3MTU1NDVDOEQwMDA3RjM5RCAvKiBET01XaW5kb3dFeHRlbnNpb25Ob0NhY2hlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVdpbmRvd0V4dGVuc2lvbk5v
Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjY2LDYgKzY3Myw4IEBA
CiAJCQkJQkMyNDZEOTgxMzJGMUZFMTAwQjU2RDdDIC8qIENhbkhhbmRsZVJlcXVlc3QuY3BwICov
LAogCQkJCUJDMjQ2RDk3MTMyRjFGRTEwMEI1NkQ3QyAvKiBDYW5IYW5kbGVSZXF1ZXN0X0J1bmRs
ZS5jcHAgKi8sCiAJCQkJRjZGM0YyOTAxMzM0MkZFQjAwQTZCRjE5IC8qIENvb2tpZU1hbmFnZXIu
Y3BwICovLAorCQkJCUY2QjdCRTkzMTc0NjkxRUYwMDhBMzQ0NSAvKiBEaWRBc3NvY2lhdGVGb3Jt
Q29udHJvbHMuY3BwICovLAorCQkJCUY2QjdCRTkyMTc0NjkxRUYwMDhBMzQ0NSAvKiBEaWRBc3Nv
Y2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcCAqLywKIAkJCQlCQ0I2ODAzRjEyNkZCRkUxMDA2
NDJBNjEgLyogRG9jdW1lbnRTdGFydFVzZXJTY3JpcHRBbGVydENyYXNoLmNwcCAqLywKIAkJCQlC
Q0I2ODA0MTEyNkZCRkYxMDA2NDJBNjEgLyogRG9jdW1lbnRTdGFydFVzZXJTY3JpcHRBbGVydENy
YXNoX0J1bmRsZS5jcHAgKi8sCiAJCQkJNTEzOTNFMUUxNTIzOTQ0QTAwNUYzOUM1IC8qIERPTVdp
bmRvd0V4dGVuc2lvbkJhc2ljLmNwcCAqLywKQEAgLTc3Niw2ICs3ODUsNyBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlDMDQ1Rjk0NjEzODVDMkY4MDBDMEYzQ0Qg
LyogMTgtY2hhcmFjdGVycy5odG1sICovLAorCQkJCUY2QjdCRTk2MTc0NjlCN0UwMDhBMzQ0NSAv
KiBhc3NvY2lhdGUtZm9ybS1jb250cm9scy5odG1sICovLAogCQkJCTc2RTE4MkRFMTU0NzVBODMw
MEYxRkFERCAvKiBhdXRvLXN1Ym1pdHRpbmctZm9ybS5odG1sICovLAogCQkJCTI5MEY0Mjc0MTcy
QTFGREUwMDkzOUZGMCAvKiBjdXN0b20tcHJvdG9jb2wtc3luYy14aHIuaHRtbCAqLywKIAkJCQlD
NUUxQUZGRDE2QjIyMTc5MDA2Q0MxRjIgLyogZXhlY0NvcHkuaHRtbCAqLywKQEAgLTExNTMsNiAr
MTE2Myw3IEBACiAJCQkJMzdFMzhDMzQxNjlCN0QwMTAwODRDMjhDIC8qIFdlYlZpZXdEaWRSZW1v
dmVGcmFtZUZyb21IaWVyYXJjaHkubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NkUxODJEQTE1NDc1
NTAxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUUyMDI3MzE1QjIxODE5MDBDMTNFMTQgLyogV2luZG93bGVzc1dlYlZpZXdXaXRoTWVkaWEu
bW0gaW4gU291cmNlcyAqLywKKwkJCQlGNkI3QkU5NDE3NDY5MjA5MDA4QTM0NDUgLyogRGlkQXNz
b2NpYXRlRm9ybUNvbnRyb2xzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0M0QzdGMTQ1ODdB
QTYwMDI1RkI2MiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwVGVzdC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDM0M0QzcyMTQ1NzVCNkEwMDI1RkI2MiAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWRE
ZWxlZ2F0ZVRlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzkwMUUyNDE0OTJBRENFMDA3NEE2
NjcgLyogV0tDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTE5NSw2ICsxMjA2LDcg
QEAKIAkJCQk3Q0ZCQ0FFNTE3NDMyMzhGMDBCMkJGQ0YgLyogV2lsbExvYWRfQnVuZGxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDNTc1QkQ5MTI2RjU4RTIwMDZGMEYxMiAvKiBQbGF0Zm9ybVV0
aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU3NUJFMDEyNkY1OTBEMDA2RjBGMTIg
LyogUGxhdGZvcm1VdGlsaXRpZXNNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGNkI3QkU5NTE3
NDY5MjEyMDA4QTM0NDUgLyogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMEJENjY5RjEzMUQzQ0ZGMDBFMThGMkEgLyogUmVzcG9uc2l2ZW5l
c3NUaW1lckRvZXNudEZpcmVFYXJseV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFG
Q0Y3QTExNTM0QjJBMDAwMTA0NDkxIC8qIFNob3VsZEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtX0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzIyRDMxOTE0REM2OEI5MDBGRkIxREQgLyog
VXNlck1lc3NhZ2VfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9scy5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZiNGZlCi0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29j
aWF0ZUZvcm1Db250cm9scy5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtV2ViVmlldy5oIgorI2luY2x1ZGUgIlRlc3QuaCIKKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCitzdGF0aWMgYm9vbCBkaWRSZWNlaXZlQWxsTWVzc2FnZXMgPSBmYWxzZTsK
K3N0YXRpYyBib29sIHJlY2VpdmVkTWVzc2FnZUZvckFkZGluZ0Zvcm0gPSBmYWxzZTsKK3N0YXRp
YyBjb25zdCB1aW50NjRfdCBleHBlY3RlZE51bWJlck9mRWxlbWVudHMgPSAxOworCitzdGF0aWMg
dm9pZCBudWxsSmF2YVNjcmlwdENhbGxiYWNrKFdLU2VyaWFsaXplZFNjcmlwdFZhbHVlUmVmLCBX
S0Vycm9yUmVmLCB2b2lkKikKK3sKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKikKK3sKKyAgICBFWFBFQ1RfV0tfU1RS
RVEoIkRpZFJlY2VpdmVEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMiLCBtZXNzYWdlTmFtZSk7Cisg
ICAgQVNTRVJUX05PVF9OVUxMKG1lc3NhZ2VCb2R5KTsKKyAgICBFWFBFQ1RfRVEoV0tEaWN0aW9u
YXJ5R2V0VHlwZUlEKCksIFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSk7CisKKyAgICBXS0RpY3Rp
b25hcnlSZWYgZGljdGlvbmFyeSA9IHN0YXRpY19jYXN0PFdLRGljdGlvbmFyeVJlZj4obWVzc2Fn
ZUJvZHkpOworICAgIHVpbnQ2NF90IG51bWJlck9mRWxlbWVudHMgPSBXS1VJbnQ2NEdldFZhbHVl
KHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rp
b25hcnksIFV0aWw6OnRvV0soIk51bWJlck9mQ29udHJvbHMiKS5nZXQoKSkpKTsKKworICAgIEVY
UEVDVF9FUShleHBlY3RlZE51bWJlck9mRWxlbWVudHMsIG51bWJlck9mRWxlbWVudHMpOworCisg
ICAgaWYgKCFyZWNlaXZlZE1lc3NhZ2VGb3JBZGRpbmdGb3JtKSB7CisgICAgICAgIHJlY2VpdmVk
TWVzc2FnZUZvckFkZGluZ0Zvcm0gPSB0cnVlOworCisgICAgICAgIFdLUGFnZVJlZiBwYWdlID0g
c3RhdGljX2Nhc3Q8V0tQYWdlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25h
cnksIFV0aWw6OnRvV0soIlBhZ2UiKS5nZXQoKSkpOworICAgICAgICBXS1BhZ2VSdW5KYXZhU2Ny
aXB0SW5NYWluRnJhbWUocGFnZSwgVXRpbDo6dG9XSygiYWRkUGFzc3dvcmRGaWVsZFRvRm9ybSgp
IikuZ2V0KCksIDAsIG51bGxKYXZhU2NyaXB0Q2FsbGJhY2spOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBkaWRSZWNlaXZlQWxsTWVzc2FnZXMgPSB0cnVlOworfQorCitzdGF0aWMg
dm9pZCBzZXRJbmplY3RlZEJ1bmRsZUNsaWVudChXS0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAg
ICBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCBpbmplY3RlZEJ1bmRsZUNsaWVudDsKKyAg
ICBtZW1zZXQoJmluamVjdGVkQnVuZGxlQ2xpZW50LCAwLCBzaXplb2YoaW5qZWN0ZWRCdW5kbGVD
bGllbnQpKTsKKyAgICBpbmplY3RlZEJ1bmRsZUNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZSA9IGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlOworCisg
ICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29udGV4dCwgJmluamVjdGVkQnVu
ZGxlQ2xpZW50KTsKK30KKworVEVTVChXZWJLaXQyLCBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMp
Cit7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0ID0gYWRvcHRXSyhVdGls
OjpjcmVhdGVDb250ZXh0Rm9ySW5qZWN0ZWRCdW5kbGVUZXN0KCJEaWRBc3NvY2lhdGVGb3JtQ29u
dHJvbHNUZXN0IikpOworICAgIHNldEluamVjdGVkQnVuZGxlQ2xpZW50KGNvbnRleHQuZ2V0KCkp
OworCisgICAgUGxhdGZvcm1XZWJWaWV3IHdlYlZpZXcoY29udGV4dC5nZXQoKSk7CisgICAgV0tQ
YWdlTG9hZFVSTCh3ZWJWaWV3LnBhZ2UoKSwgYWRvcHRXSyhVdGlsOjpjcmVhdGVVUkxGb3JSZXNv
dXJjZSgiYXNzb2NpYXRlLWZvcm0tY29udHJvbHMiLCAiaHRtbCIpKS5nZXQoKSk7CisgICAgVXRp
bDo6cnVuKCZkaWRSZWNlaXZlQWxsTWVzc2FnZXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
RGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRsZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmOWJmNQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJv
bHNfQnVuZGxlLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlVGVzdC5oIgorCisjaW5jbHVkZSAiUGxh
dGZvcm1VdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlLmg+CisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0J1bmRsZVBhZ2UuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewor
CitjbGFzcyBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0IDogcHVibGljIEluamVjdGVkQnVu
ZGxlVGVzdCB7CitwdWJsaWM6CisgICAgRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdChjb25z
dCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRl
UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmKTsKK307CisKK3N0YXRpYyBJbmplY3Rl
ZEJ1bmRsZVRlc3Q6OlJlZ2lzdGVyPERpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3Q+IHJlZ2lz
dHJhcigiRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdCIpOworCitzdGF0aWMgYm9vbCBzaG91
bGROb3RpZnlPbkZvcm1DaGFuZ2VzKFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEFzc29jaWF0ZUZvcm1Db250cm9s
cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tBcnJheVJlZiBlbGVtZW50SGFuZGxlcywgY29uc3Qg
dm9pZCopCit7CisgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbWVzc2Fn
ZUJvZHkgPSBhZG9wdFdLKFdLTXV0YWJsZURpY3Rpb25hcnlDcmVhdGUoKSk7CisKKyAgICBXS0Rp
Y3Rpb25hcnlBZGRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0b1dLKCJQYWdlIikuZ2V0
KCksIHBhZ2UpOworICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBudW1iZXJPZkVsZW1lbnRz
ID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShXS0FycmF5R2V0U2l6ZShlbGVtZW50SGFuZGxlcykp
KTsKKyAgICBXS0RpY3Rpb25hcnlBZGRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0b1dL
KCJOdW1iZXJPZkNvbnRyb2xzIikuZ2V0KCksIG51bWJlck9mRWxlbWVudHMuZ2V0KCkpOworCisg
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJEaWRSZWNlaXZlRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
IikuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKK30KKworRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzVGVzdDo6RGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdChjb25zdCBzdGQ6OnN0cmluZyYg
aWRlbnRpZmllcikKKyAgICA6IEluamVjdGVkQnVuZGxlVGVzdChpZGVudGlmaWVyKQoreworfQor
Cit2b2lkIERpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3Q6OmRpZENyZWF0ZVBhZ2UoV0tCdW5k
bGVSZWYgYnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKK3sKKyAgICBXS0J1bmRsZVBhZ2VG
b3JtQ2xpZW50IGZvcm1DbGllbnQ7CisgICAgbWVtc2V0KCZmb3JtQ2xpZW50LCAwLCBzaXplb2Yo
Zm9ybUNsaWVudCkpOworCisgICAgZm9ybUNsaWVudC52ZXJzaW9uID0gMjsKKyAgICBmb3JtQ2xp
ZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgIGZvcm1DbGllbnQuc2hvdWxkTm90aWZ5T25Gb3Jt
Q2hhbmdlcyA9IHNob3VsZE5vdGlmeU9uRm9ybUNoYW5nZXM7CisgICAgZm9ybUNsaWVudC5kaWRB
c3NvY2lhdGVGb3JtQ29udHJvbHMgPSBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHM7CisKKyAgICBX
S0J1bmRsZVBhZ2VTZXRGb3JtQ2xpZW50KHBhZ2UsICZmb3JtQ2xpZW50KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyL2Fzc29jaWF0ZS1mb3JtLWNvbnRyb2xzLmh0bWwgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvYXNzb2NpYXRlLWZvcm0tY29udHJvbHMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYyNDZhCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL2Fzc29jaWF0ZS1mb3JtLWNvbnRyb2xz
Lmh0bWwKQEAgLTAsMCArMSwzMSBAQAorPGh0bWw+Cis8aGVhZD4KKyAgPHNjcmlwdD4KKyAgICBm
dW5jdGlvbiBhZGRGb3JtKCkKKyAgICB7CisgICAgICAgIHZhciBmb3JtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZm9ybSIpOworICAgICAgICBmb3JtLmlkID0gImxvZ2luX2Zvcm0iOworCisg
ICAgICAgIHZhciB1c2VybmFtZUZpZWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQi
KTsKKyAgICAgICAgdXNlcm5hbWVGaWVsZC5pZCA9ICJ1c2VybmFtZSI7CisgICAgICAgIHVzZXJu
YW1lRmllbGQudHlwZSA9ICJ0ZXh0IjsKKyAgICAgICAgZm9ybS5hcHBlbmRDaGlsZCh1c2VybmFt
ZUZpZWxkKTsKKworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGFkZFBhc3N3b3JkRmllbGRUb0Zvcm0oKQorICAgIHsKKyAgICAg
ICAgdmFyIHBhc3N3b3JkRmllbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwor
ICAgICAgICBwYXNzd29yZEZpZWxkLmlkID0gInBhc3N3b3JkIjsKKyAgICAgICAgcGFzc3dvcmRG
aWVsZC50eXBlID0gInBhc3N3b3JkIjsKKworICAgICAgICB2YXIgZm9ybSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJsb2dpbl9mb3JtIik7CisgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQocGFz
c3dvcmRGaWVsZCk7CisgICAgfQorICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
YWRkRm9ybSgpIj4KKzxidXR0b24gb25jbGljaz0iYWRkUGFzc3dvcmRGaWVsZFRvRm9ybSgpIj5N
YW51YWwgVGVzdGluZzogQWRkIHRoZSBwYXNzd29yZCBmaWVsZDwvYnV0dG9uPgorPC9ib2R5Pgor
PC9odG1sPgotLSAKMS44LjIuMSAoQXBwbGUgR2l0LTQ1KQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>