<?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>28084</bug_id>
          
          <creation_ts>2009-08-07 14:07:53 -0700</creation_ts>
          <short_desc>KURL ref() methods should be fragmentIdentifier() methods</short_desc>
          <delta_ts>2009-08-10 12:15:42 -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>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138137</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-07 14:07:53 -0700</bug_when>
    <thetext>KURL ref() methods should be fragmentIdentifier() methods.

HTML 5 has standardized on the terminology &quot;fragment identifier&quot; for the fragment/ref string after the #.

Having ref() be a method causes headaches, being overloaded with the &quot;ref()&quot; of ref pointer fame.

I have a cleanup that replaces:
ref(), hasRef(), setRef(const String&amp;), removeRef(), equalIgnoringRef()
with
fragmentIdentifier(), hasFragmentIdentifier(), setFragmentIdentifier(const String&amp;), removeFragmentIdentifier(), equalIgnoringFragmentIdentifier()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138140</commentid>
    <comment_count>1</comment_count>
      <attachid>34327</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-07 14:14:43 -0700</bug_when>
    <thetext>Created attachment 34327
Proposed patch

Pretty mechanical change.

But there are some very subtle &quot;null versus empty&quot; changes, also, so even if this get&apos;s an r+, note that I&apos;m still running all the layout tests on all the platforms I have access to, just to make sure those subtle changes don&apos;t break anything, and I&apos;ll finish that and land after the weekend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138165</commentid>
    <comment_count>2</comment_count>
      <attachid>34327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-07 14:45:27 -0700</bug_when>
    <thetext>Comment on attachment 34327
Proposed patch

&gt; -    const KURL&amp; url = this-&gt;url();
&gt; -    return url.ref().isEmpty() ? &quot;&quot; : &quot;#&quot; + url.ref();
&gt; +    const String&amp; fragmentIdentifier = this-&gt;url().fragmentIdentifier();
&gt; +    return fragmentIdentifier.isEmpty() ? &quot;&quot; : &quot;#&quot; + fragmentIdentifier;

No need for the this-&gt; any more here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138168</commentid>
    <comment_count>3</comment_count>
      <attachid>34327</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 14:48:26 -0700</bug_when>
    <thetext>Comment on attachment 34327
Proposed patch

You&apos;re my personal hero. :)

Why do we even need to check &quot;has&quot; before &quot;remove&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138694</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-10 09:35:29 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/accessibility/AccessibilityRenderObject.cpp
Sending        WebCore/bindings/js/JSLocationCustom.cpp
Sending        WebCore/css/CSSCursorImageValue.cpp
Sending        WebCore/history/HistoryItem.cpp
Sending        WebCore/html/HTMLAnchorElement.cpp
Sending        WebCore/html/HTMLFrameElementBase.cpp
Sending        WebCore/loader/FrameLoader.cpp
Sending        WebCore/loader/appcache/ApplicationCache.cpp
Sending        WebCore/loader/appcache/ApplicationCacheGroup.cpp
Sending        WebCore/loader/appcache/ApplicationCacheResource.h
Sending        WebCore/loader/appcache/ApplicationCacheStorage.cpp
Sending        WebCore/loader/appcache/ManifestParser.cpp
Sending        WebCore/page/Location.cpp
Sending        WebCore/page/Page.cpp
Sending        WebCore/platform/KURL.cpp
Sending        WebCore/platform/KURL.h
Sending        WebCore/rendering/RenderPartObject.cpp
Sending        WebCore/workers/WorkerLocation.cpp
Transmitting file data ...................
Committed revision 46978.

Two platforms I can build and test on are clear, I&apos;ll keep a close eye on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138695</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-10 09:36:01 -0700</bug_when>
    <thetext>@Eric Seidel

DOH, just saw your comment.  Good point, there&apos;s no reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138696</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-10 09:38:14 -0700</bug_when>
    <thetext>Actually, currently removeFragmentIdentifier() blindly reallocs and reparses, whilst hasFragmentIdentifier() is cheap.  There&apos;s no reason that removeFragmentIdentifier() shouldn&apos;t be a little smarter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138699</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-10 09:41:24 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=28151</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138701</commentid>
    <comment_count>8</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-08-10 09:43:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Two platforms I can build and test on are clear, I&apos;ll keep a close eye on the
&gt; bots.

http://build.webkit.org/builders/GTK%20Linux%20Release/builds/2853/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138703</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-10 09:48:36 -0700</bug_when>
    <thetext>Chromium build borked (obviously). Fix coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138705</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-10 10:08:43 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #4)
&gt; &gt; Two platforms I can build and test on are clear, I&apos;ll keep a close eye on the
&gt; &gt; bots.
&gt; 
&gt; http://build.webkit.org/builders/GTK%20Linux%20Release/builds/2853/steps/compile-webkit/logs/stdio

Sending        gtk/ChangeLog
Sending        gtk/webkit/webkitdownload.cpp
Transmitting file data ..
Committed revision 46980.

Hope that&apos;s it, I&apos;ll keep watching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138752</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-10 11:46:06 -0700</bug_when>
    <thetext>Chromium build fix landed as http://trac.webkit.org/changeset/46993.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138755</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-08-10 11:49:48 -0700</bug_when>
    <thetext>Sorry for the mild pain, guys.  Glad we did this one, though!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138766</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-10 12:15:42 -0700</bug_when>
    <thetext>no worries :).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34327</attachid>
            <date>2009-08-07 14:14:43 -0700</date>
            <delta_ts>2009-08-07 14:48:26 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>25240</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMDktMDgtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEtV
UkwgcmVmKCkgbWV0aG9kcyBzaG91bGQgYmUgZnJhZ21lbnRJZGVudGlmaWVyKCkgbWV0aG9kcyAK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MDg0CisK
KyAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHJlbmFtZXMsIGFsc28gdG9vayB0aGUgY2hhbmNl
IHRvIHJlcGxhY2UgYWxsIHVzZSBvZjoKKyAgICAgICAgc2V0UmVmKFN0cmluZygpKTsKKyAgICAg
ICAgd2l0aDoKKyAgICAgICAgcmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9LVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmZyYWdtZW50SWRl
bnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpoYXNGcmFnbWVudElkZW50aWZpZXIp
OgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6c2V0RnJhZ21lbnRJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OktVUkw6OnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpLVVJMOjpwcmV0dHlVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZXF1YWxJZ25vcmlu
Z0ZyYWdtZW50SWRlbnRpZmllcik6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5oOgorCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRIYXNoKTogUmV3b3JrIHdpdGggbmV3IG5hbWVzLCBhbmQgdG8gdXNl
IHRoZSBuZXcgZXF1YWxJZ25vcmluZ051bGxpdHkoKSBtZXRob2QuCisKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW50ZXJuYWxMaW5rRWxlbWVudCk6CisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNT
VkdDdXJzb3JJZGVudGlmaWVyKToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjppc0N1cnJlbnREb2N1bWVudCk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6aGFzaCk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6aXNVUkxBbGxv
d2VkKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpn
b3RvQW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzY2hlZHVsZUxvY2F0
aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzY3JvbGxUb0FuY2hv
cik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkUmVsb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjp1cmxzTWF0Y2hJdGVtKToKKyAgICAgICAgKiBsb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
aWNhdGlvbkNhY2hlOjpyZXNvdXJjZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNh
dGlvbkNhY2hlOjpyZXNvdXJjZUZvclJlcXVlc3QpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRp
b25DYWNoZUdyb3VwOjpjYWNoZUZvck1haW5SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGxpY2F0aW9uQ2FjaGVHcm91cDo6ZmFsbGJhY2tDYWNoZUZvck1haW5SZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6c2VsZWN0Q2FjaGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpmaW5pc2hlZExvYWRpbmdNYWluUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRSZWNl
aXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZUdyb3VwOjpk
aWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50
cnkpOgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKToK
KyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmZpbmRPckNyZWF0ZUNh
Y2hlR3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmNh
Y2hlR3JvdXBGb3JVUkwpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2U6OmZhbGxiYWNrQ2FjaGVHcm91cEZvclVSTCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hl
L01hbmlmZXN0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTWFuaWZlc3QpOgor
ICAgICAgICAqIHBhZ2UvTG9jYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246
Omhhc2gpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
Ojpnb1RvSXRlbSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNVUkxBbGxvd2VkKToKKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckxvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckxvY2F0aW9uOjpoYXNoKToK
KwogMjAwOS0wOC0wNyAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0Njkx
MCkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyMiwxNiArMTEyMiwxNiBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9
IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgCiAgICAgS1VS
TCBsaW5rVVJMID0gYW5jaG9yLT5ocmVmKCk7Ci0gICAgU3RyaW5nIHJlZiA9IGxpbmtVUkwucmVm
KCk7Ci0gICAgaWYgKHJlZi5pc0VtcHR5KCkpCisgICAgU3RyaW5nIGZyYWdtZW50SWRlbnRpZmll
ciA9IGxpbmtVUkwuZnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgaWYgKGZyYWdtZW50SWRlbnRp
Zmllci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIC8vIGNoZWNrIGlm
IFVSTCBpcyB0aGUgc2FtZSBhcyBjdXJyZW50IFVSTAotICAgIGxpbmtVUkwucmVtb3ZlUmVmKCk7
CisgICAgbGlua1VSTC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICBpZiAobV9yZW5k
ZXJlci0+ZG9jdW1lbnQoKS0+dXJsKCkgIT0gbGlua1VSTCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgTm9kZSogbGlua2VkTm9kZSA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPmZpbmRB
bmNob3IocmVmKTsKKyAgICBOb2RlKiBsaW5rZWROb2RlID0gbV9yZW5kZXJlci0+ZG9jdW1lbnQo
KS0+ZmluZEFuY2hvcihmcmFnbWVudElkZW50aWZpZXIpOwogICAgIGlmICghbGlua2VkTm9kZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ2OTEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDEzICsyNDUsMTMgQEAg
dm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0ZSogZXhlYwogICAgIEFTU0VSVChmcmFt
ZSk7CiAKICAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAgU3RyaW5n
IG9sZFJlZiA9IHVybC5yZWYoKTsKKyAgICBTdHJpbmcgb2xkRnJhZ21lbnRJZGVudGlmaWVyID0g
dXJsLmZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIFN0cmluZyBzdHIgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKTsKICAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoIiMiKSkKICAgICAgICAgc3RyID0gc3Ry
LnN1YnN0cmluZygxKTsKLSAgICBpZiAob2xkUmVmID09IHN0ciB8fCAob2xkUmVmLmlzTnVsbCgp
ICYmIHN0ci5pc0VtcHR5KCkpKQorICAgIGlmIChlcXVhbElnbm9yaW5nTnVsbGl0eShvbGRGcmFn
bWVudElkZW50aWZpZXIsIHN0cikpCiAgICAgICAgIHJldHVybjsKLSAgICB1cmwuc2V0UmVmKHN0
cik7CisgICAgdXJsLnNldEZyYWdtZW50SWRlbnRpZmllcihzdHIpOwogCiAgICAgbmF2aWdhdGVJ
ZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKIH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0N1
cnNvckltYWdlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuY3BwCShyZXZpc2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvY3NzL0NTU0N1cnNvcklt
YWdlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NWR0N1cnNvcklkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiB1cmwpCiB7CiAgICAgS1VSTCBrdXJsKHVybCk7Ci0gICAgcmV0dXJuIGt1cmwuaGFz
UmVmKCk7CisgICAgcmV0dXJuIGt1cmwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgU1ZHQ3Vyc29yRWxlbWVudCogcmVzb3VyY2VSZWZlcmVuY2VkQnlDdXJzb3JF
bGVtZW50KGNvbnN0IFN0cmluZyYgZnJhZ21lbnRJZCwgRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRl
eDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShyZXZpc2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvaGlz
dG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCBG
b3JtRGF0YSogSGlzdG9yeUl0ZW06OmZvcm1EYXRhKCkKIGJvb2wgSGlzdG9yeUl0ZW06OmlzQ3Vy
cmVudERvY3VtZW50KERvY3VtZW50KiBkb2MpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBjaGVjayBpZiB0aGlzIGlzIHRoZSBjdXJyZW50IGRv
Y3VtZW50LgotICAgIHJldHVybiBlcXVhbElnbm9yaW5nUmVmKHVybCgpLCBkb2MtPnVybCgpKTsK
KyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcih1cmwoKSwgZG9jLT51
cmwoKSk7CiB9CiAKIHZvaWQgSGlzdG9yeUl0ZW06Om1lcmdlQXV0b0NvbXBsZXRlSGludHMoSGlz
dG9yeUl0ZW0qIG90aGVySXRlbSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAko
cmV2aXNpb24gNDY5MTApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDQsOCArMzQ0LDggQEAgU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50
Ojp0YXJnZXQoKSBjb25zdAogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6Omhhc2goKSBjb25z
dAogewotICAgIFN0cmluZyByZWYgPSBocmVmKCkucmVmKCk7Ci0gICAgcmV0dXJuIHJlZi5pc0Vt
cHR5KCkgPyAiIiA6ICIjIiArIHJlZjsKKyAgICBTdHJpbmcgZnJhZ21lbnRJZGVudGlmaWVyID0g
aHJlZigpLmZyYWdtZW50SWRlbnRpZmllcigpOworICAgIHJldHVybiBmcmFnbWVudElkZW50aWZp
ZXIuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyBmcmFnbWVudElkZW50aWZpZXI7CiB9CiAKIFN0cmlu
ZyBIVE1MQW5jaG9yRWxlbWVudDo6aG9zdCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDQ2OTEwKQorKysgV2ViQ29yZS9odG1sL0hUTUxG
cmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBib29s
IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjppc1VSTEFsbG93ZWQoCiAgICAgLy8gQnV0IHdlIGRvbid0
IGFsbG93IG1vcmUgdGhhbiBvbmUuCiAgICAgYm9vbCBmb3VuZFNlbGZSZWZlcmVuY2UgPSBmYWxz
ZTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9y
aW5nUmVmKGZyYW1lLT5sb2FkZXIoKS0+dXJsKCksIGNvbXBsZXRlVVJMKSkgeworICAgICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihmcmFtZS0+bG9hZGVyKCktPnVybCgp
LCBjb21wbGV0ZVVSTCkpIHsKICAgICAgICAgICAgIGlmIChmb3VuZFNlbGZSZWZlcmVuY2UpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZm91bmRTZWxmUmVmZXJl
bmNlID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDQ2OTEwKQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTEs
NyArOTExLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6YmVnaW4oY29uc3QgS1VSTCYgdXJsLAogICAg
IEtVUkwgcmVmKHVybCk7CiAgICAgcmVmLnNldFVzZXIoU3RyaW5nKCkpOwogICAgIHJlZi5zZXRQ
YXNzKFN0cmluZygpKTsKLSAgICByZWYuc2V0UmVmKFN0cmluZygpKTsKKyAgICByZWYucmVtb3Zl
RnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgbV9vdXRnb2luZ1JlZmVycmVyID0gcmVmLnN0cmlu
ZygpOwogICAgIG1fVVJMID0gdXJsOwogCkBAIC0xMTgxLDE2ICsxMTgxLDE2IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmdvdG9BbmNob3IoKQogICAgIC8vIE9UT0ggSWYgQ1NTIHRhcmdldCB3YXMgc2V0
IHByZXZpb3VzbHksIHdlIHdhbnQgdG8gc2V0IGl0IHRvIDAsIHJlY2FsYwogICAgIC8vIGFuZCBw
b3NzaWJseSByZXBhaW50IGJlY2F1c2UgOnRhcmdldCBwc2V1ZG8gY2xhc3MgbWF5IGhhdmUgYmVl
bgogICAgIC8vIHNldCAoc2VlIGJ1ZyAxMTMyMSkuCi0gICAgaWYgKCFtX1VSTC5oYXNSZWYoKSAm
JiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCisgICAgaWYgKCFtX1VSTC5oYXNG
cmFnbWVudElkZW50aWZpZXIoKSAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyByZWYgPSBtX1VSTC5yZWYoKTsKLSAgICBp
ZiAoZ290b0FuY2hvcihyZWYpKQorICAgIFN0cmluZyBmcmFnbWVudElkZW50aWZpZXIgPSBtX1VS
TC5mcmFnbWVudElkZW50aWZpZXIoKTsKKyAgICBpZiAoZ290b0FuY2hvcihmcmFnbWVudElkZW50
aWZpZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUcnkgYWdhaW4gYWZ0ZXIgZGVjb2Rp
bmcgdGhlIHJlZiwgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgZW5jb2RpbmcuCiAgICAgaWYgKG1f
ZGVjb2RlcikKLSAgICAgICAgZ290b0FuY2hvcihkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMocmVm
LCBtX2RlY29kZXItPmVuY29kaW5nKCkpKTsKKyAgICAgICAgZ290b0FuY2hvcihkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXMoZnJhZ21lbnRJZGVudGlmaWVyLCBtX2RlY29kZXItPmVuY29kaW5nKCkp
KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlcjo6ZmluaXNoZWRQYXJzaW5nKCkKQEAgLTEzNTMsNyAr
MTM1Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UKICAgICAv
LyBJZiB0aGUgVVJMIHdlJ3JlIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGlzIHRoZSBzYW1lIGFzIHRo
ZSBjdXJyZW50IG9uZSwgZXhjZXB0IGZvciB0aGUKICAgICAvLyBmcmFnbWVudCBwYXJ0LCB3ZSBk
b24ndCBuZWVkIHRvIHNjaGVkdWxlIHRoZSBsb2NhdGlvbiBjaGFuZ2UuCiAgICAgS1VSTCBwYXJz
ZWRVUkwodXJsKTsKLSAgICBpZiAocGFyc2VkVVJMLmhhc1JlZigpICYmIGVxdWFsSWdub3JpbmdS
ZWYobV9VUkwsIHBhcnNlZFVSTCkpIHsKKyAgICBpZiAocGFyc2VkVVJMLmhhc0ZyYWdtZW50SWRl
bnRpZmllcigpICYmIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIobV9VUkwsIHBhcnNl
ZFVSTCkpIHsKICAgICAgICAgY2hhbmdlTG9jYXRpb24oY29tcGxldGVVUkwodXJsKSwgcmVmZXJy
ZXIsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0LCB3YXNVc2VyR2VzdHVyZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMDI5LDggKzIwMjksOCBAQCBwcml2YXRlOgogLy8g
dGhhdCBhIGhpZ2hlciBsZXZlbCBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgVVJMcyBtYXRjaCBh
bmQgdGhlIHNjcm9sbGluZyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCiB2b2lkIEZyYW1lTG9h
ZGVyOjpzY3JvbGxUb0FuY2hvcihjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKGVxdWFs
SWdub3JpbmdSZWYodXJsLCBtX1VSTCkpOwotICAgIGlmIChlcXVhbElnbm9yaW5nUmVmKHVybCwg
bV9VUkwpICYmICFlcXVhbElnbm9yaW5nTnVsbGl0eSh1cmwucmVmKCksIG1fVVJMLnJlZigpKSkg
eworICAgIEFTU0VSVChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgbV9VUkwp
KTsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIG1fVVJMKSAm
JiAhZXF1YWxJZ25vcmluZ051bGxpdHkodXJsLmZyYWdtZW50SWRlbnRpZmllcigpLCBtX1VSTC5m
cmFnbWVudElkZW50aWZpZXIoKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGN1cnJlbnREb2N1bWVu
dCA9IGZyYW1lKCktPmRvY3VtZW50KCk7CiAgICAgICAgIGN1cnJlbnREb2N1bWVudC0+cG9zdFRh
c2soSGFzaENoYW5nZUV2ZW50VGFzazo6Y3JlYXRlKGN1cnJlbnREb2N1bWVudCkpOwogICAgIH0K
QEAgLTMwMTQsOSArMzAxNCw5IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZFJlbG9hZChjb25z
dCBLVVIKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJ1bGU6ICJEb24ndCBy
ZWxvYWQgaWYgbmF2aWdhdGluZyBieSBmcmFnbWVudCB3aXRoaW4KICAgICAvLyB0aGUgc2FtZSBV
UkwsIGJ1dCBkbyByZWxvYWQgaWYgZ29pbmcgdG8gYSBuZXcgVVJMIG9yIHRvIHRoZSBzYW1lIFVS
TCB3aXRoIG5vCiAgICAgLy8gZnJhZ21lbnQgaWRlbnRpZmllciBhdCBhbGwuIgotICAgIGlmICgh
ZGVzdGluYXRpb25VUkwuaGFzUmVmKCkpCisgICAgaWYgKCFkZXN0aW5hdGlvblVSTC5oYXNGcmFn
bWVudElkZW50aWZpZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICFlcXVh
bElnbm9yaW5nUmVmKGN1cnJlbnRVUkwsIGRlc3RpbmF0aW9uVVJMKTsKKyAgICByZXR1cm4gIWVx
dWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY3VycmVudFVSTCwgZGVzdGluYXRpb25VUkwp
OwogfQogCiB2b2lkIEZyYW1lTG9hZGVyOjpjbG9zZU9sZERhdGFTb3VyY2VzKCkKQEAgLTQ1NzEs
NyArNDU3MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiAKIGJv
b2wgRnJhbWVMb2FkZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiB7
CiAgICAgY29uc3QgS1VSTCYgY3VycmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybCgpOwot
ICAgIGlmICghZXF1YWxJZ25vcmluZ1JlZihjdXJyZW50VVJMLCBpdGVtLT51cmwoKSkpCisgICAg
aWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKGN1cnJlbnRVUkwsIGl0ZW0tPnVy
bCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSGlzdG9yeUl0ZW1WZWN0
b3ImIGNoaWxkSXRlbXMgPSBpdGVtLT5jaGlsZHJlbigpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
YXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQ2OTEwKQorKysgV2Vi
Q29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMSw3ICsxMTEsNyBAQCB1bnNpZ25lZCBBcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVSZXNv
dXJjCiAgICAgCiBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UqIEFwcGxpY2F0aW9uQ2FjaGU6OnJl
c291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewotICAgIEFTU0VSVCghS1VSTCh1cmwp
Lmhhc1JlZigpKTsKKyAgICBBU1NFUlQoIUtVUkwodXJsKS5oYXNGcmFnbWVudElkZW50aWZpZXIo
KSk7CiAgICAgcmV0dXJuIG1fcmVzb3VyY2VzLmdldCh1cmwpLmdldCgpOwogfSAgICAKIApAQCAt
MTMzLDggKzEzMyw4IEBAIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSogQXBwbGljYXRpb25DYWMK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgS1VSTCB1cmwocmVxdWVzdC51cmwoKSk7Ci0g
ICAgaWYgKHVybC5oYXNSZWYoKSkKLSAgICAgICAgdXJsLnJlbW92ZVJlZigpOworICAgIGlmICh1
cmwuaGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCisgICAgICAgIHVybC5yZW1vdmVGcmFnbWVudElk
ZW50aWZpZXIoKTsKIAogICAgIHJldHVybiByZXNvdXJjZUZvclVSTCh1cmwpOwogfQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3Bw
CShyZXZpc2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9u
Q2FjaGVHcm91cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDggKzg3LDggQEAgQXBwbGljYXRp
b25DYWNoZSogQXBwbGljYXRpb25DYWNoZUdyb3VwOgogICAgICAgICByZXR1cm4gMDsKIAogICAg
IEtVUkwgdXJsKHJlcXVlc3QudXJsKCkpOwotICAgIGlmICh1cmwuaGFzUmVmKCkpCi0gICAgICAg
IHVybC5yZW1vdmVSZWYoKTsKKyAgICBpZiAodXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQor
ICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAKICAgICBpZiAoQXBwbGlj
YXRpb25DYWNoZUdyb3VwKiBncm91cCA9IGNhY2hlU3RvcmFnZSgpLmNhY2hlR3JvdXBGb3JVUkwo
dXJsKSkgewogICAgICAgICBBU1NFUlQoZ3JvdXAtPm5ld2VzdENhY2hlKCkpOwpAQCAtMTA2LDgg
KzEwNiw4IEBAIEFwcGxpY2F0aW9uQ2FjaGUqIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDoKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBLVVJMIHVybChyZXF1ZXN0LnVybCgpKTsKLSAgICBpZiAodXJs
Lmhhc1JlZigpKQotICAgICAgICB1cmwucmVtb3ZlUmVmKCk7CisgICAgaWYgKHVybC5oYXNGcmFn
bWVudElkZW50aWZpZXIoKSkKKyAgICAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OwogCiAgICAgaWYgKEFwcGxpY2F0aW9uQ2FjaGVHcm91cCogZ3JvdXAgPSBjYWNoZVN0b3JhZ2Uo
KS5mYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwodXJsKSkgewogICAgICAgICBBU1NFUlQoZ3JvdXAt
Pm5ld2VzdENhY2hlKCkpOwpAQCAtMTM1LDggKzEzNSw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNo
ZUdyb3VwOjpzZWxlY3RDYWNoZSgKICAgICB9CiAKICAgICBLVVJMIG1hbmlmZXN0VVJMKHBhc3Nl
ZE1hbmlmZXN0VVJMKTsKLSAgICBpZiAobWFuaWZlc3RVUkwuaGFzUmVmKCkpCi0gICAgICAgIG1h
bmlmZXN0VVJMLnJlbW92ZVJlZigpOworICAgIGlmIChtYW5pZmVzdFVSTC5oYXNGcmFnbWVudElk
ZW50aWZpZXIoKSkKKyAgICAgICAgbWFuaWZlc3RVUkwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVy
KCk7CiAKICAgICBBcHBsaWNhdGlvbkNhY2hlKiBtYWluUmVzb3VyY2VDYWNoZSA9IGRvY3VtZW50
TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5tYWluUmVzb3VyY2VBcHBsaWNhdGlvbkNh
Y2hlKCk7CiAgICAgCkBAIC0xNDcsOCArMTQ3LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3Jv
dXA6OnNlbGVjdENhY2hlKAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhlIG1h
aW4gcmVzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tIGNhY2hlLCBzbyB0aGUgY2FjaGUgbXVzdCBoYXZl
IGFuIGVudHJ5IGZvciBpdC4gTWFyayBpdCBhcyBmb3JlaWduLgogICAgICAgICAgICAgS1VSTCBk
b2N1bWVudFVSTChkb2N1bWVudExvYWRlci0+dXJsKCkpOwotICAgICAgICAgICAgaWYgKGRvY3Vt
ZW50VVJMLmhhc1JlZigpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50VVJMLnJlbW92ZVJlZigp
OworICAgICAgICAgICAgaWYgKGRvY3VtZW50VVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQor
ICAgICAgICAgICAgICAgIGRvY3VtZW50VVJMLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwog
ICAgICAgICAgICAgQXBwbGljYXRpb25DYWNoZVJlc291cmNlKiByZXNvdXJjZSA9IG1haW5SZXNv
dXJjZUNhY2hlLT5yZXNvdXJjZUZvclVSTChkb2N1bWVudFVSTCk7CiAgICAgICAgICAgICBib29s
IGluU3RvcmFnZSA9IHJlc291cmNlLT5zdG9yYWdlSUQoKTsKICAgICAgICAgICAgIHJlc291cmNl
LT5hZGRUeXBlKEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Rm9yZWlnbik7CkBAIC0yMTIsOCAr
MjEyLDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmZpbmlzaGVkTG9hZAogICAgIEFT
U0VSVChtX3BlbmRpbmdNYXN0ZXJSZXNvdXJjZUxvYWRlcnMuY29udGFpbnMobG9hZGVyKSk7CiAg
ICAgQVNTRVJUKG1fY29tcGxldGlvblR5cGUgPT0gTm9uZSB8fCBtX3BlbmRpbmdFbnRyaWVzLmlz
RW1wdHkoKSk7CiAgICAgS1VSTCB1cmwgPSBsb2FkZXItPnVybCgpOwotICAgIGlmICh1cmwuaGFz
UmVmKCkpCi0gICAgICAgIHVybC5yZW1vdmVSZWYoKTsKKyAgICBpZiAodXJsLmhhc0ZyYWdtZW50
SWRlbnRpZmllcigpKQorICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAK
ICAgICBzd2l0Y2ggKG1fY29tcGxldGlvblR5cGUpIHsKICAgICBjYXNlIE5vbmU6CkBAIC00NTUs
OCArNDU1LDggQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlR3JvdXA6OmRpZFJlY2VpdmVSZQogICAg
IEFTU0VSVChoYW5kbGUgPT0gbV9jdXJyZW50SGFuZGxlKTsKIAogICAgIEtVUkwgdXJsKGhhbmRs
ZS0+cmVxdWVzdCgpLnVybCgpKTsKLSAgICBpZiAodXJsLmhhc1JlZigpKQotICAgICAgICB1cmwu
cmVtb3ZlUmVmKCk7CisgICAgaWYgKHVybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkKKyAgICAg
ICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIAogICAgIEFTU0VSVCghbV9j
dXJyZW50UmVzb3VyY2UpOwogICAgIEFTU0VSVChtX3BlbmRpbmdFbnRyaWVzLmNvbnRhaW5zKHVy
bCkpOwpAQCAtNTU0LDggKzU1NCw4IEBAIHZvaWQgQXBwbGljYXRpb25DYWNoZUdyb3VwOjpkaWRG
YWlsKFJlc28KIAogICAgIHVuc2lnbmVkIHR5cGUgPSBtX2N1cnJlbnRSZXNvdXJjZSA/IG1fY3Vy
cmVudFJlc291cmNlLT50eXBlKCkgOiBtX3BlbmRpbmdFbnRyaWVzLmdldChoYW5kbGUtPnJlcXVl
c3QoKS51cmwoKSk7CiAgICAgS1VSTCB1cmwoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpOwotICAg
IGlmICh1cmwuaGFzUmVmKCkpCi0gICAgICAgIHVybC5yZW1vdmVSZWYoKTsKKyAgICBpZiAodXJs
Lmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKQorICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVu
dGlmaWVyKCk7CiAKICAgICBBU1NFUlQoIW1fY3VycmVudFJlc291cmNlIHx8ICFtX3BlbmRpbmdF
bnRyaWVzLmNvbnRhaW5zKHVybCkpOwogICAgIG1fY3VycmVudFJlc291cmNlID0gMDsKQEAgLTg3
OCw3ICs4NzgsNyBAQCB2b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6ZGVsaXZlckRlbGF5CiB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6YWRkRW50cnkoY29uc3QgU3RyaW5nJiB1cmwsIHVu
c2lnbmVkIHR5cGUpCiB7CiAgICAgQVNTRVJUKG1fY2FjaGVCZWluZ1VwZGF0ZWQpOwotICAgIEFT
U0VSVCghS1VSTCh1cmwpLmhhc1JlZigpKTsKKyAgICBBU1NFUlQoIUtVUkwodXJsKS5oYXNGcmFn
bWVudElkZW50aWZpZXIoKSk7CiAgICAgCiAgICAgLy8gRG9uJ3QgYWRkIHRoZSBVUkwgaWYgd2Ug
YWxyZWFkeSBoYXZlIGFuIG1hc3RlciByZXNvdXJjZSBpbiB0aGUgY2FjaGUKICAgICAvLyAoaS5l
LiwgdGhlIG1haW4gcmVzb3VyY2UgZmluaXNoZWQgbG9hZGluZyBiZWZvcmUgdGhlIG1hbmlmZXN0
KS4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZS5oCShyZXZpc2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBjcmVhdGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgdW5zaWduZWQgdHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCkpCiAgICAgewotICAgICAgICBBU1NFUlQoIXVy
bC5oYXNSZWYoKSk7CisgICAgICAgIEFTU0VSVCghdXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigp
KTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Uo
dXJsLCByZXNwb25zZSwgdHlwZSwgYnVmZmVyKSk7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCShyZXZp
c2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIEFwcGxpY2F0aW9u
Q2FjaGVHcm91cCogQXBwbGljYXRpb25DYWNoZVMKIAogQXBwbGljYXRpb25DYWNoZUdyb3VwKiBB
cHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6ZmluZE9yQ3JlYXRlQ2FjaGVHcm91cChjb25zdCBLVVJM
JiBtYW5pZmVzdFVSTCkKIHsKLSAgICBBU1NFUlQoIW1hbmlmZXN0VVJMLmhhc1JlZigpKTsKKyAg
ICBBU1NFUlQoIW1hbmlmZXN0VVJMLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsKIAogICAgIHN0
ZDo6cGFpcjxDYWNoZUdyb3VwTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9jYWNoZXNJ
bk1lbW9yeS5hZGQobWFuaWZlc3RVUkwsIDApOwogICAgIApAQCAtMTc4LDcgKzE3OCw3IEBAIHZv
aWQgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OmxvYWRNYW5pZmUKIAogQXBwbGljYXRpb25DYWNo
ZUdyb3VwKiBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cEZvclVSTChjb25zdCBL
VVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKCF1cmwuaGFzUmVmKCkpOworICAgIEFTU0VSVCghdXJs
Lmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKTsKICAgICAKICAgICBsb2FkTWFuaWZlc3RIb3N0SGFz
aGVzKCk7CiAgICAgCkBAIC0yNTUsNyArMjU1LDcgQEAgQXBwbGljYXRpb25DYWNoZUdyb3VwKiBB
cHBsaWNhdGlvbkNhY2hlUwogCiBBcHBsaWNhdGlvbkNhY2hlR3JvdXAqIEFwcGxpY2F0aW9uQ2Fj
aGVTdG9yYWdlOjpmYWxsYmFja0NhY2hlR3JvdXBGb3JVUkwoY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIEFTU0VSVCghdXJsLmhhc1JlZigpKTsKKyAgICBBU1NFUlQoIXVybC5oYXNGcmFnbWVudElk
ZW50aWZpZXIoKSk7CiAKICAgICAvLyBDaGVjayBpZiBhbiBhcHByb3ByaWF0ZSBjYWNoZSBhbHJl
YWR5IGV4aXN0cyBpbiBtZW1vcnkuCiAgICAgQ2FjaGVHcm91cE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9jYWNoZXNJbk1lbW9yeS5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNh
Y2hlL01hbmlmZXN0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBj
YWNoZS9NYW5pZmVzdFBhcnNlci5jcHAJKHJldmlzaW9uIDQ2OTEwKQorKysgV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvTWFuaWZlc3RQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsOCAr
MTE0LDggQEAgYm9vbCBwYXJzZU1hbmlmZXN0KGNvbnN0IEtVUkwmIG1hbmlmZXN0VQogICAgICAg
ICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgICAgICBpZiAodXJsLmhhc1JlZigpKQotICAgICAgICAgICAgICAgIHVybC5zZXRSZWYo
U3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKHVybC5oYXNGcmFnbWVudElkZW50aWZpZXIoKSkK
KyAgICAgICAgICAgICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0Nhc2UodXJsLnByb3RvY29sKCks
IG1hbmlmZXN0VVJMLnByb3RvY29sKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MTQxLDggKzE0MSw4IEBAIGJvb2wgcGFyc2VNYW5pZmVzdChjb25zdCBLVVJMJiBtYW5pZmVzdFUK
ICAgICAgICAgICAgIEtVUkwgbmFtZXNwYWNlVVJMKG1hbmlmZXN0VVJMLCBTdHJpbmcobGluZS5j
aGFyYWN0ZXJzKCksIHAgLSBsaW5lLmNoYXJhY3RlcnMoKSkpOwogICAgICAgICAgICAgaWYgKCFu
YW1lc3BhY2VVUkwuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaWYgKG5hbWVzcGFjZVVSTC5oYXNSZWYoKSkKLSAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VVUkwuc2V0UmVmKFN0cmluZygpKTsKKyAgICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkwuaGFz
RnJhZ21lbnRJZGVudGlmaWVyKCkpCisgICAgICAgICAgICAgICAgbmFtZXNwYWNlVVJMLnJlbW92
ZUZyYWdtZW50SWRlbnRpZmllcigpOwogCiAgICAgICAgICAgICBpZiAoIXByb3RvY29sSG9zdEFu
ZFBvcnRBcmVFcXVhbChtYW5pZmVzdFVSTCwgbmFtZXNwYWNlVVJMKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTE1OSw4ICsxNTksOCBAQCBib29sIHBhcnNlTWFuaWZlc3QoY29uc3Qg
S1VSTCYgbWFuaWZlc3RVCiAgICAgICAgICAgICBLVVJMIGZhbGxiYWNrVVJMKG1hbmlmZXN0VVJM
LCBTdHJpbmcoZmFsbGJhY2tTdGFydCwgcCAtIGZhbGxiYWNrU3RhcnQpKTsKICAgICAgICAgICAg
IGlmICghZmFsbGJhY2tVUkwuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgaWYgKGZhbGxiYWNrVVJMLmhhc1JlZigpKQotICAgICAgICAgICAgICAgIGZh
bGxiYWNrVVJMLnNldFJlZihTdHJpbmcoKSk7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tVUkwu
aGFzRnJhZ21lbnRJZGVudGlmaWVyKCkpCisgICAgICAgICAgICAgICAgZmFsbGJhY2tVUkwucmVt
b3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAKICAgICAgICAgICAgIGlmICghcHJvdG9jb2xIb3N0
QW5kUG9ydEFyZUVxdWFsKG1hbmlmZXN0VVJMLCBmYWxsYmFja1VSTCkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkluZGV4OiBXZWJDb3JlL3BhZ2UvTG9jYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJKHJldmlzaW9uIDQ2OTEwKQorKysgV2ViQ29y
ZS9wYWdlL0xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDggKzEyNSw4IEBAIFN0
cmluZyBMb2NhdGlvbjo6aGFzaCgpIGNvbnN0CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBjb25zdCBLVVJMJiB1cmwgPSB0aGlzLT51cmwoKTsKLSAg
ICByZXR1cm4gdXJsLnJlZigpLmlzRW1wdHkoKSA/ICIiIDogIiMiICsgdXJsLnJlZigpOworICAg
IGNvbnN0IFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyID0gdGhpcy0+dXJsKCkuZnJhZ21lbnRJ
ZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIGZyYWdtZW50SWRlbnRpZmllci5pc0VtcHR5KCkgPyAi
IiA6ICIjIiArIGZyYWdtZW50SWRlbnRpZmllcjsKIH0KIAogU3RyaW5nIExvY2F0aW9uOjp0b1N0
cmluZygpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvcGFnZS9Q
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgUGFnZTo6Z29U
b0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEYKICAgICBjb25zdCBLVVJMJiBjdXJyZW50VVJMID0g
bV9tYWluRnJhbWUtPmxvYWRlcigpLT51cmwoKTsKICAgICBjb25zdCBLVVJMJiBuZXdVUkwgPSBp
dGVtLT51cmwoKTsKIAotICAgIGlmIChuZXdVUkwuaGFzUmVmKCkgJiYgZXF1YWxJZ25vcmluZ1Jl
ZihjdXJyZW50VVJMLCBuZXdVUkwpKQorICAgIGlmIChuZXdVUkwuaGFzRnJhZ21lbnRJZGVudGlm
aWVyKCkgJiYgZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihjdXJyZW50VVJMLCBuZXdV
UkwpKQogICAgICAgICBkYXRhYmFzZVBvbGljeSA9IERhdGFiYXNlUG9saWN5Q29udGludWU7CiAj
ZW5kaWYKICAgICBtX21haW5GcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKGRhdGFiYXNl
UG9saWN5KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2aXNpb24gNDY5MTApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL0tVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTAsNyArNTkwLDcgQEAgU3RyaW5n
IEtVUkw6OnVzZXIoKSBjb25zdAogICAgIHJldHVybiBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
bV9zdHJpbmcuc3Vic3RyaW5nKG1fdXNlclN0YXJ0LCBtX3VzZXJFbmQgLSBtX3VzZXJTdGFydCkp
OwogfQogCi1TdHJpbmcgS1VSTDo6cmVmKCkgY29uc3QKK1N0cmluZyBLVVJMOjpmcmFnbWVudElk
ZW50aWZpZXIoKSBjb25zdAogewogICAgIGlmIChtX2ZyYWdtZW50RW5kID09IG1fcXVlcnlFbmQp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTU5OCw3ICs1OTgsNyBAQCBTdHJpbmcgS1VS
TDo6cmVmKCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJpbmcuc3Vic3RyaW5nKG1fcXVlcnlFbmQg
KyAxLCBtX2ZyYWdtZW50RW5kIC0gKG1fcXVlcnlFbmQgKyAxKSk7CiB9CiAKLWJvb2wgS1VSTDo6
aGFzUmVmKCkgY29uc3QKK2Jvb2wgS1VSTDo6aGFzRnJhZ21lbnRJZGVudGlmaWVyKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9mcmFnbWVudEVuZCAhPSBtX3F1ZXJ5RW5kOwogfQpAQCAtNzYwLDE2
ICs3NjAsMTYgQEAgdm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFN0cmluZyYgcGFzc3dvcgogICAg
IHBhcnNlKG1fc3RyaW5nLmxlZnQobV91c2VyRW5kKSArIHAgKyBtX3N0cmluZy5zdWJzdHJpbmco
ZW5kKSk7CiB9CiAKLXZvaWQgS1VSTDo6c2V0UmVmKGNvbnN0IFN0cmluZyYgcykKK3ZvaWQgS1VS
TDo6c2V0RnJhZ21lbnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgcykKIHsKICAgICBpZiAoIW1f
aXNWYWxpZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IE5vbi1BU0NJSSBjaGFy
YWN0ZXJzIG11c3QgYmUgZW5jb2RlZCBhbmQgZXNjYXBlZCB0byBtYXRjaCBwYXJzZSgpIGV4cGVj
dGF0aW9ucy4KLSAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fcXVlcnlFbmQpICsgKHMuaXNOdWxs
KCkgPyAiIiA6ICIjIiArIHMpKTsKKyAgICBwYXJzZShtX3N0cmluZy5sZWZ0KG1fcXVlcnlFbmQp
ICsgIiMiICsgcyk7CiB9CiAKLXZvaWQgS1VSTDo6cmVtb3ZlUmVmKCkKK3ZvaWQgS1VSTDo6cmVt
b3ZlRnJhZ21lbnRJZGVudGlmaWVyKCkKIHsKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAg
cmV0dXJuOwpAQCAtODQzLDcgKzg0Myw3IEBAIFN0cmluZyBLVVJMOjpwcmV0dHlVUkwoKSBjb25z
dAogCiAgICAgaWYgKG1fZnJhZ21lbnRFbmQgIT0gbV9xdWVyeUVuZCkgewogICAgICAgICByZXN1
bHQuYXBwZW5kKCcjJyk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIHJlZigpKTsKKyAgICAgICAg
YXBwZW5kKHJlc3VsdCwgZnJhZ21lbnRJZGVudGlmaWVyKCkpOwogICAgIH0KIAogICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CkBAIC0xMzE2LDcgKzEzMTYsNyBAQCB2b2lkIEtVUkw6
OnBhcnNlKGNvbnN0IGNoYXIqIHVybCwgY29uc3QgCiAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKIH0K
IAotYm9vbCBlcXVhbElnbm9yaW5nUmVmKGNvbnN0IEtVUkwmIGEsIGNvbnN0IEtVUkwmIGIpCiti
b29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY29uc3QgS1VSTCYgYSwgY29uc3Qg
S1VSTCYgYikKIHsKICAgICBpZiAoYS5tX3F1ZXJ5RW5kICE9IGIubV9xdWVyeUVuZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDQ2OTEwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDExICs1NSw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIFRleHRFbmNvZGluZzsKIHN0cnVjdCBLVVJMSGFzaDsKIAot
Ly8gRklYTUU6IE91ciB0ZXJtaW5vbG9neSBoZXJlIGlzIGEgYml0IGluY29uc2lzdGVudC4gV2Ug
cmVmZXIgdG8gdGhlIHBhcnQKLS8vIGFmdGVyIHRoZSAiIyIgYXMgdGhlICJmcmFnbWVudCIgaW4g
c29tZSBwbGFjZXMgYW5kIHRoZSAicmVmIiBpbiBvdGhlcnMuCi0vLyBXZSBzaG91bGQgZml4IHRo
ZSB0ZXJtaW5vbG9neSB0byBtYXRjaCB0aGUgVVJMIGFuZCBVUkkgUkZDcyBhcyBjbG9zZWx5Ci0v
LyBhcyBwb3NzaWJsZSB0byByZXNvbHZlIHRoaXMuCi0KIGNsYXNzIEtVUkwgewogcHVibGljOgog
ICAgIC8vIEdlbmVyYXRlcyBhIFVSTCB3aGljaCBjb250YWlucyBhIG51bGwgc3RyaW5nLgpAQCAt
MTIwLDggKzExNSw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcGF0aCgpIGNvbnN0OwogICAgIFN0
cmluZyBsYXN0UGF0aENvbXBvbmVudCgpIGNvbnN0OwogICAgIFN0cmluZyBxdWVyeSgpIGNvbnN0
OwotICAgIFN0cmluZyByZWYoKSBjb25zdDsKLSAgICBib29sIGhhc1JlZigpIGNvbnN0OworICAg
IFN0cmluZyBmcmFnbWVudElkZW50aWZpZXIoKSBjb25zdDsKKyAgICBib29sIGhhc0ZyYWdtZW50
SWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgU3RyaW5nIGJhc2VBc1N0cmluZygpIGNvbnN0Owog
CkBAIC0xNTUsMTAgKzE1MCwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVVJMICh3aXRoIG5vdGhpbmcg
YWZ0ZXIgaXQpLiBUbyBjbGVhciB0aGUgcXVlcnksIHBhc3MgYSBudWxsIHN0cmluZy4KICAgICB2
b2lkIHNldFF1ZXJ5KGNvbnN0IFN0cmluZyYpOwogCi0gICAgdm9pZCBzZXRSZWYoY29uc3QgU3Ry
aW5nJik7Ci0gICAgdm9pZCByZW1vdmVSZWYoKTsKKyAgICB2b2lkIHNldEZyYWdtZW50SWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigp
OwogCi0gICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1JlZihjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOworICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIo
Y29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKIAogICAgIGZyaWVuZCBib29sIHByb3RvY29sSG9z
dEFuZFBvcnRBcmVFcXVhbChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwogCkBAIC0yNDQsNyAr
MjM5LDcgQEAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJgogYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBTdHJpbmcmLCBjb25zdCBLVVJMJik7CiAKLWJvb2wgZXF1YWxJZ25vcmluZ1JlZihjb25z
dCBLVVJMJiwgY29uc3QgS1VSTCYpOworYm9vbCBlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlm
aWVyKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CiBib29sIHByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwogICAgIAogY29uc3QgS1VSTCYgYmxh
bmtVUkwoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZp
c2lvbiA0NjkxMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBib29sIGlzVVJMQWxsb3dlZChE
b2N1bWVudCogZG9jLCAKICAgICBLVVJMIGNvbXBsZXRlVVJMID0gZG9jLT5jb21wbGV0ZVVSTCh1
cmwpOwogICAgIGJvb2wgZm91bmRTZWxmUmVmZXJlbmNlID0gZmFsc2U7CiAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBkb2MtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnBh
cmVudCgpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nUmVmKGZyYW1lLT5sb2FkZXIoKS0+
dXJsKCksIGNvbXBsZXRlVVJMKSkgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50
SWRlbnRpZmllcihmcmFtZS0+bG9hZGVyKCktPnVybCgpLCBjb21wbGV0ZVVSTCkpIHsKICAgICAg
ICAgICAgIGlmIChmb3VuZFNlbGZSZWZlcmVuY2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgZm91bmRTZWxmUmVmZXJlbmNlID0gdHJ1ZTsKSW5kZXg6IFdlYkNv
cmUvd29ya2Vycy9Xb3JrZXJMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckxvY2F0aW9uLmNwcAkocmV2aXNpb24gNDY5MTApCisrKyBXZWJDb3JlL3dvcmtl
cnMvV29ya2VyTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIFN0
cmluZyBXb3JrZXJMb2NhdGlvbjo6c2VhcmNoKCkgY29uc3QKIAogU3RyaW5nIFdvcmtlckxvY2F0
aW9uOjpoYXNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV91cmwucmVmKCkuaXNFbXB0eSgpID8g
IiIgOiAiIyIgKyBtX3VybC5yZWYoKTsKKyAgICByZXR1cm4gbV91cmwuZnJhZ21lbnRJZGVudGlm
aWVyKCkuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyBtX3VybC5mcmFnbWVudElkZW50aWZpZXIoKTsK
IH0KIAogU3RyaW5nIFdvcmtlckxvY2F0aW9uOjp0b1N0cmluZygpIGNvbnN0Cg==
</data>
<flag name="review"
          id="18502"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>