<?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>49548</bug_id>
          
          <creation_ts>2010-11-15 10:31:12 -0800</creation_ts>
          <short_desc>WebCore cache stores duplicate copies of subresources with URL fragments</short_desc>
          <delta_ts>2010-12-15 03:28:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>309340</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-11-15 10:31:12 -0800</bug_when>
    <thetext>* SUMMARY
The WebCore cache stores duplicate copies of subresources when they contain different URL fragments--even though the resource is fetched without the URL fragment from the network only once.  (In the case of Safari, CFNetwork is stripping off the URL fragment before fetching it, and is caching the result.)

This nominally only affects SVG fonts since they&apos;re the only resource that uses a URL fragment, but adding URL fragments to other subresources also demonstrates this behavior.

* STEPS TO REPRODUCE
1. Download, unzip and open the attached test case (svgfont.html) in Safari.

* EXPECTED RESULTS
One copy of bg_pattern.jpg and ABCFont.svg should be stored in the WebCore cache.

* ACTUAL RESULTS
Multiple copies of bg_pattern.jpg and ABCFont.svg are stored in the WebCore cache.

* REGRESSION
Unknown.  I believe the WebCore cache may have had this issue for a long time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309341</commentid>
    <comment_count>1</comment_count>
      <attachid>73909</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-11-15 10:32:22 -0800</bug_when>
    <thetext>Created attachment 73909
Test case (zip archive)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309342</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-11-15 10:33:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/8668586&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322180</commentid>
    <comment_count>3</comment_count>
      <attachid>76566</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-14 13:53:49 -0800</bug_when>
    <thetext>Created attachment 76566
patch

- Strip fragment identifiers from HTTP and file URLs for the memory cache.
- Changed some CachedResourceLoader and MemoryCache interfaces to use KURLs
  instead of strings to reduce repeated URL parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322202</commentid>
    <comment_count>4</comment_count>
      <attachid>76566</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-12-14 14:24:03 -0800</bug_when>
    <thetext>Comment on attachment 76566
patch

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

r=me. Please double check for invalid URLs being passed around - I don&apos;t think that we have a good general policy of who should check for those, so they can creep up.

Can any assertions for !hasFragmentIdentifier() be added in code that&apos;s behind MemoryCache interface? I think that these could be quite valuable.

&gt; WebCore/loader/cache/CachedResource.cpp:119
&gt; -    ASSERT(url().isNull() || cache()-&gt;resourceForURL(url()) != this);
&gt; +    ASSERT(url().isNull() || cache()-&gt;resourceForURL(KURL(ParsedURLString, url())) != this);

Is url() always a valid parsed URL string here? Otherwise, KURL(ParsedURLString, url()) can assert.

&gt; WebCore/loader/cache/CachedResourceLoader.cpp:160
&gt; +    return cache()-&gt;requestUserCSSStyleSheet(this, KURL(ParsedURLString, url), charset);

Is url guaranteed to be a parsed URL string? If it is, perhaps the caller could pass a KURL object?

This code looks dangerous. Note that we use completeURL() in other CachedResourceLoader methods.

&gt; WebCore/loader/cache/MemoryCache.cpp:225
&gt; +    if (!originalURL.hasFragmentIdentifier())
&gt; +        return originalURL;

I would add a comment explaining that invalid URLs are returned unchanged. Perhaps even to a declaration in header, not sure.

&gt; WebCore/loader/cache/MemoryCache.cpp:227
&gt; +    // Data urls must be unmodified and it is also safer to keep them for custom protocols.

Isn&apos;t this a bug in data URL parsing? Sounds like these shouldn&apos;t have fragments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322259</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-14 15:14:01 -0800</bug_when>
    <thetext>Attachment 76566 was posted by a committer and has review+, assigning to Antti Koivisto for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322301</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-14 15:42:36 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 76566 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76566&amp;action=review
&gt; 
&gt; r=me. Please double check for invalid URLs being passed around - I don&apos;t think that we have a good general policy of who should check for those, so they can creep up.

Ok.

&gt; Can any assertions for !hasFragmentIdentifier() be added in code that&apos;s behind MemoryCache interface? I think that these could be quite valuable.

I wouldn&apos;t be surprised if there were WebKit clients using custom protocols that expect to see everything in the request URL. To be safe, this patch still allow frag ids in the cache so simple !hasFragmentIdentifier() would not work. I&apos;ll see if there is some other asserts that could be useful.

&gt; &gt; WebCore/loader/cache/CachedResource.cpp:119
&gt; &gt; -    ASSERT(url().isNull() || cache()-&gt;resourceForURL(url()) != this);
&gt; &gt; +    ASSERT(url().isNull() || cache()-&gt;resourceForURL(KURL(ParsedURLString, url())) != this);
&gt; 
&gt; Is url() always a valid parsed URL string here? Otherwise, KURL(ParsedURLString, url()) can assert.

If not that is likely to be a bug that we want to catch. I was thinking of switching CachedResource to KURL too later.

&gt; &gt; WebCore/loader/cache/CachedResourceLoader.cpp:160
&gt; &gt; +    return cache()-&gt;requestUserCSSStyleSheet(this, KURL(ParsedURLString, url), charset);
&gt; 
&gt; Is url guaranteed to be a parsed URL string? If it is, perhaps the caller could pass a KURL object?
&gt;
&gt; This code looks dangerous. Note that we use completeURL() in other CachedResourceLoader methods.

It seems it will only ever gets invoked if you have a user stylesheets with @import rules. I like that code ends up guaranteeing that the url has been parsed and resolved absolute, though it is rather messy.

I&apos;ll see about passing KURL.

&gt; &gt; WebCore/loader/cache/MemoryCache.cpp:227
&gt; &gt; +    // Data urls must be unmodified and it is also safer to keep them for custom protocols.
&gt; 
&gt; Isn&apos;t this a bug in data URL parsing? Sounds like these shouldn&apos;t have fragments.

Yeah, I think so. Data and javascript URLs (and maybe others) should never have fragment identifiers. That seemed like something better fixed separately as it might expand quite a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322493</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-14 20:59:05 -0800</bug_when>
    <thetext>Attachment 76566 did not build on win:
Build output: http://queues.webkit.org/results/7118009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322562</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-12-15 03:28:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74107</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>73909</attachid>
            <date>2010-11-15 10:32:22 -0800</date>
            <delta_ts>2010-11-15 10:32:22 -0800</delta_ts>
            <desc>Test case (zip archive)</desc>
            <filename>bug-49548.zip</filename>
            <type>application/zip</type>
            <size>3088</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">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
ZQEAAJUKAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76566</attachid>
            <date>2010-12-14 13:53:49 -0800</date>
            <delta_ts>2010-12-14 14:24:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>resource-fragment.patch</filename>
            <type>text/plain</type>
            <size>15491</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDA1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTItMTQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTU0OAorICAgICAgICBXZWJD
b3JlIGNhY2hlIHN0b3JlcyBkdXBsaWNhdGUgY29waWVzIG9mIHN1YnJlc291cmNlcyB3aXRoIFVS
TCBmcmFnbWVudHMKKyAgICAgICAgCisgICAgICAgIC0gU3RyaXAgZnJhZ21lbnQgaWRlbnRpZmll
cnMgZnJvbSBIVFRQIGFuZCBmaWxlIFVSTHMgZm9yIHRoZSBtZW1vcnkgY2FjaGUuCisgICAgICAg
IC0gQ2hhbmdlZCBzb21lIENhY2hlZFJlc291cmNlTG9hZGVyIGFuZCBNZW1vcnlDYWNoZSBpbnRl
cmZhY2VzIHRvIHVzZSBLVVJMcworICAgICAgICAgIGluc3RlYWQgb2Ygc3RyaW5ncyB0byByZWR1
Y2UgcmVwZWF0ZWQgVVJMIHBhcnNpbmcuCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9jYWNo
ZS9zdWJyZXNvdXJjZS1mcmFnbWVudC1pZGVudGlmaWVyLmh0bWwKKworICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvRnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRlbGxDbGllbnRB
Ym91dFBhc3RNZW1vcnlDYWNoZUxvYWRzKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6On5DYWNoZWRS
ZXNvdXJjZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpjYWNoZWRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tGb3JSZWxv
YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RVc2Vy
Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
cmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpNZW1vcnlDYWNoZTo6cmVxdWVzdFVzZXJDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JVUkwpOgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5oOgorCiAyMDEwLTEyLTE0ICBMYXN6bG8gR29tYm9z
ICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmlj
IFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuY3BwCShyZXZpc2lvbiA3NDA1NSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
c291cmNlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMTAgKzEzMCw5IEBAIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBJbnNwZWN0b3JSZXNvdXIKIAogQ2FjaGVkUmVzb3VyY2UqIElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3Qg
S1VSTCYgdXJsKQogewotICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gdXJsLnN0cmluZygp
OwotICAgIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGZyYW1lLT5kb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5jYWNoZWRSZXNvdXJjZSh1cmxTdHJpbmcpOworICAg
IENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSA9IGZyYW1lLT5kb2N1bWVudCgpLT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpLT5jYWNoZWRSZXNvdXJjZSh1cmwpOwogICAgIGlmICghY2FjaGVk
UmVzb3VyY2UpCi0gICAgICAgIGNhY2hlZFJlc291cmNlID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JV
UkwodXJsU3RyaW5nKTsKKyAgICAgICAgY2FjaGVkUmVzb3VyY2UgPSBjYWNoZSgpLT5yZXNvdXJj
ZUZvclVSTCh1cmwpOwogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZTsKIH0KIApJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNzQwNTUpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MjEsNyArMzQyMSw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnRlbGxDbGllbnRBYm91dFBhc3RNZW0KIAogICAgIHNpemVfdCBzaXplID0gcGFz
dExvYWRzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVS
TChwYXN0TG9hZHNbaV0pOworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBjYWNo
ZSgpLT5yZXNvdXJjZUZvclVSTChLVVJMKFBhcnNlZFVSTFN0cmluZywgcGFzdExvYWRzW2ldKSk7
CiAKICAgICAgICAgLy8gRklYTUU6IFRoZXNlIGxvYWRzLCBsb2FkZWQgZnJvbSBjYWNoZSwgYnV0
IG5vdyBnb25lIGZyb20gdGhlIGNhY2hlIGJ5IHRoZSB0aW1lCiAgICAgICAgIC8vIFBhZ2U6OnNl
dE1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNFbmFibGVkKHRydWUpIGlzIGNhbGxlZCwgd2lsbCBub3Qg
YmUgc2VlbiBieSB0aGUgY2xpZW50LgpJbmRleDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcAkocmV2aXNpb24gNzQwNTUpCisrKyBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBDYWNoZWRS
ZXNvdXJjZTo6fkNhY2hlZFJlc291cmNlKCkKICAgICBBU1NFUlQoY2FuRGVsZXRlKCkpOwogICAg
IEFTU0VSVCghaW5DYWNoZSgpKTsKICAgICBBU1NFUlQoIW1fZGVsZXRlZCk7Ci0gICAgQVNTRVJU
KHVybCgpLmlzTnVsbCgpIHx8IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybCgpKSAhPSB0aGlz
KTsKKyAgICBBU1NFUlQodXJsKCkuaXNOdWxsKCkgfHwgY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwo
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCgpKSkgIT0gdGhpcyk7CiAjaWZuZGVmIE5ERUJVRwog
ICAgIG1fZGVsZXRlZCA9IHRydWU7CiAgICAgY2FjaGVkUmVzb3VyY2VMZWFrQ291bnRlci5kZWNy
ZW1lbnQoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHAJKHJldmlzaW9uIDc0MDU1KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMiBAQCBDYWNo
ZWRSZXNvdXJjZUxvYWRlcjo6fkNhY2hlZFJlc291cmNlTG9hCiAgICAgLy8gTWFrZSBzdXJlIG5v
IHJlcXVlc3RzIHN0aWxsIHBvaW50IHRvIHRoaXMgQ2FjaGVkUmVzb3VyY2VMb2FkZXIKICAgICBB
U1NFUlQobV9yZXF1ZXN0Q291bnQgPT0gMCk7CiB9CisgICAgCitDYWNoZWRSZXNvdXJjZSogQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmNhY2hlZFJlc291cmNlKGNvbnN0IEtVUkwmIHJlc291cmNlVVJM
KSBjb25zdCAKK3sKKyAgICBLVVJMIHVybCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVudElk
ZW50aWZpZXJJZk5lZWRlZChyZXNvdXJjZVVSTCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnRSZXNv
dXJjZXMuZ2V0KHVybCkuZ2V0KCk7IAorfQogCiBGcmFtZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6
OmZyYW1lKCkgY29uc3QKIHsKQEAgLTg5LDcgKzk1LDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6Y2hlY2tGb3JSZWxvYQogICAgIGlmIChtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxs
VVJMLnN0cmluZygpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIENhY2hlZFJlc291cmNl
KiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOwor
ICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKGZ1
bGxVUkwpOwogICAgIGlmICghZXhpc3RpbmcgfHwgZXhpc3RpbmctPmlzUHJlbG9hZGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTUxLDcgKzE1Nyw3IEBAIENhY2hlZENTU1N0eWxlU2hlZXQq
IENhY2hlZFJlc291cmNlTG9hZGUKIAogQ2FjaGVkQ1NTU3R5bGVTaGVldCogQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KQogewotICAgIHJldHVybiBjYWNoZSgpLT5yZXF1ZXN0VXNlckNT
U1N0eWxlU2hlZXQodGhpcywgdXJsLCBjaGFyc2V0KTsKKyAgICByZXR1cm4gY2FjaGUoKS0+cmVx
dWVzdFVzZXJDU1NTdHlsZVNoZWV0KHRoaXMsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBj
aGFyc2V0KTsKIH0KIAogQ2FjaGVkU2NyaXB0KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVz
dFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQpAQCAtMjQ1
LDYgKzI1MSw5IEBAIGJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QoQ2EKIENh
Y2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKENhY2hl
ZFJlc291cmNlOjpUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNo
YXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5LCBib29sIGlzUHJlbG9hZCkKIHsK
ICAgICBLVVJMIGZ1bGxVUkwgPSBtX2RvY3VtZW50LT5jb21wbGV0ZVVSTCh1cmwpOworICAgIAor
ICAgIC8vIElmIG9ubHkgdGhlIGZyYWdtZW50IGlkZW50aWZpZXJzIGRpZmZlciwgaXQgaXMgdGhl
IHNhbWUgcmVzb3VyY2UuCisgICAgZnVsbFVSTCA9IE1lbW9yeUNhY2hlOjpyZW1vdmVGcmFnbWVu
dElkZW50aWZpZXJJZk5lZWRlZChmdWxsVVJMKTsKIAogICAgIGlmICghZnVsbFVSTC5pc1ZhbGlk
KCkgfHwgIWNhblJlcXVlc3QodHlwZSwgZnVsbFVSTCkpCiAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lv
biA3NDA1NSkKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIC8vIExvZ3MgYW4g
YWNjZXNzIGRlbmllZCBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGZvciB0aGUgc3BlY2lmaWVkIFVS
TC4KICAgICB2b2lkIHByaW50QWNjZXNzRGVuaWVkTWVzc2FnZShjb25zdCBLVVJMJiB1cmwpIGNv
bnN0OwogCi0gICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYg
dXJsKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50UmVzb3VyY2VzLmdldCh1cmwpLmdldCgpOyB9
CisgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKGNvbnN0IEtVUkwmIHVybCkgY29u
c3Q7CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmVzb3VyY2U+ID4gRG9jdW1lbnRSZXNvdXJjZU1hcDsKICAgICBjb25zdCBEb2N1
bWVudFJlc291cmNlTWFwJiBhbGxDYWNoZWRSZXNvdXJjZXMoKSBjb25zdCB7IHJldHVybiBtX2Rv
Y3VtZW50UmVzb3VyY2VzOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNo
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3Bw
CShyZXZpc2lvbiA3NDA1NSkKKysrIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTcgKzk1LDIwIEBAIHN0YXRpYyBDYWNoZWRSZXNvdXJj
ZSogY3JlYXRlUmVzb3VyY2UoQ2EKICAgICByZXR1cm4gMDsKIH0KIAotQ2FjaGVkUmVzb3VyY2Uq
IE1lbW9yeUNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHks
IGJvb2wgcmVxdWVzdElzUHJlbG9hZCwgYm9vbCBmb3JIaXN0b3J5KQorQ2FjaGVkUmVzb3VyY2Uq
IE1lbW9yeUNhY2hlOjpyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiBy
ZXF1ZXN0VVJMLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIFJlc291cmNlTG9hZFByaW9yaXR5IHBy
aW9yaXR5LCBib29sIHJlcXVlc3RJc1ByZWxvYWQsIGJvb2wgZm9ySGlzdG9yeSkKIHsKLSAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSAnJXMnLCBj
aGFyc2V0ICclcycsIHByaW9yaXR5PSVkLCBwcmVsb2FkPSV1LCBmb3JIaXN0b3J5PSV1IiwgdXJs
LnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSwgY2hhcnNldC5sYXRpbjEoKS5kYXRhKCksIHByaW9y
aXR5LCByZXF1ZXN0SXNQcmVsb2FkLCBmb3JIaXN0b3J5KTsKKyAgICBMT0coUmVzb3VyY2VMb2Fk
aW5nLCAiTWVtb3J5Q2FjaGU6OnJlcXVlc3RSZXNvdXJjZSAnJXMnLCBjaGFyc2V0ICclcycsIHBy
aW9yaXR5PSVkLCBwcmVsb2FkPSV1LCBmb3JIaXN0b3J5PSV1IiwgcmVxdWVzdFVSTC5zdHJpbmco
KS5sYXRpbjEoKS5kYXRhKCksIGNoYXJzZXQubGF0aW4xKCkuZGF0YSgpLCBwcmlvcml0eSwgcmVx
dWVzdElzUHJlbG9hZCwgZm9ySGlzdG9yeSk7CiAgICAgCiAgICAgLy8gRklYTUU6IERvIHdlIHJl
YWxseSBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhbiBlbXB0eSBVUkw/CiAgICAgLy8gV291bGQgaXQg
YmUgYmV0dGVyIHRvIGp1c3QgZ28gb24gd2l0aCB0aGUgY2FjaGUgY29kZSBhbmQgbGV0IGl0IGZh
aWwgbGF0ZXI/Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgaWYgKHJlcXVlc3RVUkwuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhpcyBpcyB0
aGUgcHVyZSBwcmltYXJ5IHJlc291cmNlIFVSTC4KKyAgICBLVVJMIHVybCA9IHJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVlc3RVUkwpOwogCiAgICAgLy8gTG9vayB1cCB0aGUg
cmVzb3VyY2UgaW4gb3VyIG1hcC4KLSAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSByZXNv
dXJjZUZvclVSTCh1cmwuc3RyaW5nKCkpOworICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9
IHJlc291cmNlRm9yVVJMKHVybCk7CiAKICAgICAvLyBOb24gaHR0cHMgIm5vLXN0b3JlIiByZXNv
dXJjZXMgYXJlIGxlZnQgaW4gdGhlIGNhY2hlIHRvIGJlIHVzZWQgZm9yIGJhY2svZm9yd2FyZCBu
YXZpZ2F0aW9uIG9ubHkuCiAgICAgLy8gSWYgdGhpcyBpcyBub3QgYSByZXF1ZXN0IGZvckhpc3Rv
cnkgYW5kIHRoZSByZXNvdXJjZSB3YXMgc2VydmVkIHdpdGggIm5vLXN0b3JlIiB3ZSBzaG91bGQg
ZXZpY3QKQEAgLTE4NCw4ICsxODcsMTEgQEAgQ2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpy
ZXF1ZXN0UmVzbwogICAgIHJldHVybiByZXNvdXJjZTsKIH0KICAgICAKLUNhY2hlZENTU1N0eWxl
U2hlZXQqIE1lbW9yeUNhY2hlOjpyZXF1ZXN0VXNlckNTU1N0eWxlU2hlZXQoQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBjaGFyc2V0KQorQ2FjaGVkQ1NTU3R5bGVTaGVldCogTWVtb3J5Q2FjaGU6OnJlcXVl
c3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VM
b2FkZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkKIHsK
KyAgICAvLyBFbnN1cmUgdGhpcyBpcyB0aGUgcHVyZSBwcmltYXJ5IHJlc291cmNlIFVSTC4KKyAg
ICBLVVJMIHVybCA9IHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcklmTmVlZGVkKHJlcXVlc3RVUkwp
OworCiAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogdXNlclNoZWV0OwogICAgIGlmIChDYWNoZWRS
ZXNvdXJjZSogZXhpc3RpbmcgPSByZXNvdXJjZUZvclVSTCh1cmwpKSB7CiAgICAgICAgIGlmIChl
eGlzdGluZy0+dHlwZSgpICE9IENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0KQpAQCAtMjEy
LDcgKzIxOCwyMCBAQCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBNZW1vcnlDYWNoZTo6cmVxdWVzCiAK
ICAgICByZXR1cm4gdXNlclNoZWV0OwogfQotICAgIAorCitLVVJMIE1lbW9yeUNhY2hlOjpyZW1v
dmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChjb25zdCBLVVJMJiBvcmlnaW5hbFVSTCkKK3sK
KyAgICBpZiAoIW9yaWdpbmFsVVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQorICAgICAgICBy
ZXR1cm4gb3JpZ2luYWxVUkw7CisgICAgLy8gU3RyaXAgYXdheSBmcmFnbWVudCBpZGVudGlmaWVy
IGZyb20gSFRUUCBhbmQgZmlsZSB1cmxzLgorICAgIC8vIERhdGEgdXJscyBtdXN0IGJlIHVubW9k
aWZpZWQgYW5kIGl0IGlzIGFsc28gc2FmZXIgdG8ga2VlcCB0aGVtIGZvciBjdXN0b20gcHJvdG9j
b2xzLgorICAgIGlmICghKG9yaWdpbmFsVVJMLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgb3Jp
Z2luYWxVUkwuaXNMb2NhbEZpbGUoKSkpCisgICAgICAgIHJldHVybiBvcmlnaW5hbFVSTDsKKyAg
ICBLVVJMIHVybCA9IG9yaWdpbmFsVVJMOworICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZp
ZXIoKTsKKyAgICByZXR1cm4gdXJsOworfQorCiB2b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRl
UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBDYWNoZWRSZXNvdXJjZUxvYWRlciog
Y2FjaGVkUmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgQVNTRVJUKHJlc291cmNlKTsKQEAgLTI2OSw4
ICsyODgsOSBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZXZhbGlkYXRpb25GYWlsZWQoQ2FjCiAgICAg
cmV2YWxpZGF0aW5nUmVzb3VyY2UtPmNsZWFyUmVzb3VyY2VUb1JldmFsaWRhdGUoKTsKIH0KIAot
Q2FjaGVkUmVzb3VyY2UqIE1lbW9yeUNhY2hlOjpyZXNvdXJjZUZvclVSTChjb25zdCBTdHJpbmcm
IHVybCkKK0NhY2hlZFJlc291cmNlKiBNZW1vcnlDYWNoZTo6cmVzb3VyY2VGb3JVUkwoY29uc3Qg
S1VSTCYgcmVzb3VyY2VVUkwpCiB7CisgICAgS1VSTCB1cmwgPSByZW1vdmVGcmFnbWVudElkZW50
aWZpZXJJZk5lZWRlZChyZXNvdXJjZVVSTCk7CiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNl
ID0gbV9yZXNvdXJjZXMuZ2V0KHVybCk7CiAgICAgYm9vbCB3YXNQdXJnZWFibGUgPSBNZW1vcnlD
YWNoZTo6c2hvdWxkTWFrZVJlc291cmNlUHVyZ2VhYmxlT25FdmljdGlvbigpICYmIHJlc291cmNl
ICYmIHJlc291cmNlLT5pc1B1cmdlYWJsZSgpOwogICAgIGlmIChyZXNvdXJjZSAmJiAhcmVzb3Vy
Y2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKSB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9jYWNoZS9N
ZW1vcnlDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNh
Y2hlLmgJKHJldmlzaW9uIDc0MDU1KQorKysgV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw5IEBAIHB1YmxpYzoKICAgICAvLyBm
b3VuZCBpbiB0aGUgY2FjaGUuCiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZUxvYWRlciosIENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgUmVzb3VyY2VMb2FkUHJpb3JpdHksIGJvb2wgaXNQ
cmVsb2FkID0gZmFsc2UsIGJvb2wgZm9ySGlzdG9yeSA9IGZhbHNlKTsKIAotICAgIENhY2hlZENT
U1N0eWxlU2hlZXQqIHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOworICAgIENhY2hl
ZENTU1N0eWxlU2hlZXQqIHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChDYWNoZWRSZXNvdXJjZUxv
YWRlciosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAKKyAg
ICBzdGF0aWMgS1VSTCByZW1vdmVGcmFnbWVudElkZW50aWZpZXJJZk5lZWRlZChjb25zdCBLVVJM
JiBvcmlnaW5hbFVSTCk7CiAgICAgCiAgICAgdm9pZCByZXZhbGlkYXRlUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2UqLCBDYWNoZWRSZXNvdXJjZUxvYWRlciopOwogICAgIHZvaWQgcmV2YWxpZGF0aW9u
U3VjY2VlZGVkKENhY2hlZFJlc291cmNlKiByZXZhbGlkYXRpbmdSZXNvdXJjZSwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwpAQCAtMTQ0LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFk
ZENhY2hlZFJlc291cmNlTG9hZGVyKENhY2hlZFJlc291cmNlTG9hZGVyKik7CiAgICAgdm9pZCBy
ZW1vdmVDYWNoZWRSZXNvdXJjZUxvYWRlcihDYWNoZWRSZXNvdXJjZUxvYWRlciopOwogCi0gICAg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYpOworICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZUZvclVSTChjb25zdCBLVVJMJik7CiAKICAgICAvLyBDYWxscyB0
byBwdXQgdGhlIGNhY2hlZCByZXNvdXJjZSBpbnRvIGFuZCBvdXQgb2YgTFJVIGxpc3RzLgogICAg
IHZvaWQgaW5zZXJ0SW5MUlVMaXN0KENhY2hlZFJlc291cmNlKik7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA3NDA1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDEwLTEyLTE0ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk1NDgKKyAgICAgICAgV2ViQ29yZSBj
YWNoZSBzdG9yZXMgZHVwbGljYXRlIGNvcGllcyBvZiBzdWJyZXNvdXJjZXMgd2l0aCBVUkwgZnJh
Z21lbnRzCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhY2hlL3N1YnJlc291cmNlLWZyYWdtZW50
LWlkZW50aWZpZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2Nh
Y2hlL3N1YnJlc291cmNlLWZyYWdtZW50LWlkZW50aWZpZXIuaHRtbDogQWRkZWQuCisKIDIwMTAt
MTItMTQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3NDA0MC4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2UtZnJhZ21lbnQtaWRlbnRpZmllci1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS9zdWJyZXNvdXJj
ZS1mcmFnbWVudC1pZGVudGlmaWVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2UtZnJhZ21lbnQtaWRlbnRpZmllci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorICAgVGVzdCB0aGF0IHJl
c291cmNlcyB3aXRoIGZyYWdtZW50IGlkZW50aWZpZXJzIGFyZSBsb2FkZWQgb25seSBvbmNlLgor
UmVzb3VyY2UgcmVxdWVzdHM6CisKKworYmdfcGF0dGVybi5qcGcKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2UtZnJhZ21lbnQtaWRlbnRpZmllci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUvc3VicmVzb3VyY2UtZnJh
Z21lbnQtaWRlbnRpZmllci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jYWNoZS9zdWJyZXNvdXJjZS1mcmFnbWVudC1pZGVudGlmaWVyLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVp
dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgorICAg
IDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIENhbGxDb21tYW5kKGNtZCkKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5
IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgICAg
ICAgICAgICAgIHJlcS5vcGVuKCJHRVQiLCAiaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jlc291cmNl
cy9uZXR3b3JrLXNpbXVsYXRvci5waHA/Y29tbWFuZD0iICsgY21kLCBmYWxzZSk7CisgICAgICAg
ICAgICAgICAgcmVxLnNlbmQobnVsbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcS5yZXNw
b25zZVRleHQ7CisgICAgICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGVu
ZFRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBnZXRSZXNvdXJjZUxvZygpOworICAgICAg
ICAgICAgQ2FsbENvbW1hbmQoImNsZWFyLXJlc291cmNlLXJlcXVlc3QtbG9nIik7CisKKyAgICAg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gZ2V0UmVzb3VyY2VMb2coKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbG9n
ID0gQ2FsbENvbW1hbmQoImdldC1yZXNvdXJjZS1yZXF1ZXN0LWxvZyIpOworICAgICAgICAgICAg
dmFyIGxvZ0xpbmVzID0gbG9nLnNwbGl0KCdcbicpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVyVGV4dCA9IGxvZ0xpbmVzLmpvaW4oJ1xuJyk7Cisg
ICAgICAgIH0KKworICAgICAgICBDYWxsQ29tbWFuZCgic3RhcnQtcmVzb3VyY2UtcmVxdWVzdC1s
b2ciKTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBlbmRUZXN0LCBm
YWxzZSk7CisgICAgPC9zY3JpcHQ+CisgIAorICAgIDxzdHlsZT4KKyAgICAgICAgZGl2IHsKKyAg
ICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaHR0cDovLzEyNy4wLjAuMTo4MDAwL3Jl
c291cmNlcy9uZXR3b3JrLXNpbXVsYXRvci5waHA/Y29tbWFuZD1sb2ctcmVzb3VyY2UtcmVxdWVz
dCZwYXRoPWJnX3BhdHRlcm4uanBnI2RpdicpOworICAgICAgICB9CisgICAgICAgIHAgeworICAg
ICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdodHRwOi8vMTI3LjAuMC4xOjgwMDAvcmVz
b3VyY2VzL25ldHdvcmstc2ltdWxhdG9yLnBocD9jb21tYW5kPWxvZy1yZXNvdXJjZS1yZXF1ZXN0
JnBhdGg9YmdfcGF0dGVybi5qcGcjcCcpOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKworPC9o
ZWFkPgorPGJvZHk+CisgICAgPGRpdiBzdHlsZT0id2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4
OyI+PC9kaXY+CisgICAgPGltZyBzcmM9Imh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9yZXNvdXJjZXMv
bmV0d29yay1zaW11bGF0b3IucGhwP2NvbW1hbmQ9bG9nLXJlc291cmNlLXJlcXVlc3QmcGF0aD1i
Z19wYXR0ZXJuLmpwZyNpbWcxIj4KKyAgICA8aW1nIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAw
L3Jlc291cmNlcy9uZXR3b3JrLXNpbXVsYXRvci5waHA/Y29tbWFuZD1sb2ctcmVzb3VyY2UtcmVx
dWVzdCZwYXRoPWJnX3BhdHRlcm4uanBnI2ltZzIiPgorICAgIAorICBUZXN0IHRoYXQgcmVzb3Vy
Y2VzIHdpdGggZnJhZ21lbnQgaWRlbnRpZmllcnMgYXJlIGxvYWRlZCBvbmx5IG9uY2UuCisKKyAg
PGgyPlJlc291cmNlIHJlcXVlc3RzOjwvaDI+CisgIDxwcmUgaWQ9InJlc3VsdCI+UmVxdWVzdCBs
b2cgZ29lcyBoZXJlIGluIERSVDwvcHJlPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="67540"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>