<?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>138171</bug_id>
          
          <creation_ts>2014-10-29 06:59:31 -0700</creation_ts>
          <short_desc>FormData should not use Document, Page, Chrome and ChromeClient</short_desc>
          <delta_ts>2016-09-17 07:04:33 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          <blocked>21354</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>jhoneycutt</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1044745</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-29 06:59:31 -0700</bug_when>
    <thetext>It&apos;s a layering violation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044746</commentid>
    <comment_count>1</comment_count>
      <attachid>240599</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-29 07:09:15 -0700</bug_when>
    <thetext>Created attachment 240599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044747</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-29 07:11:55 -0700</bug_when>
    <thetext>Attachment 240599 did not pass style-queue:


ERROR: Source/WebCore/xml/XMLHttpRequest.cpp:688:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/loader/FrameLoader.cpp:361:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044991</commentid>
    <comment_count>3</comment_count>
      <attachid>240599</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-10-30 00:17:30 -0700</bug_when>
    <thetext>Comment on attachment 240599
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        FormData uses the ChromeClient to ask the WebKit layer whether to
&gt; +        replace upload files with generated files and to actually
&gt; +        generate the replacement files. We could use std::functions passed
&gt; +        to FormData instead of calling ChromeClient methods directly.

This is OK to do, although a better fix would be to stop using the chrome client, and use file replacement code from BlobDataFileReference::generateReplacementFile(). That would require some refactoring, but the code is already in WebCore/platform.

Right now, we potentially archive a bundle twice, first via Blob code path if the file is ever accessed via File API, and then via the chrome client if the file end up being submitted via a form.

I did not review the patch in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044994</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-30 00:30:35 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 240599 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=240599&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        FormData uses the ChromeClient to ask the WebKit layer whether to
&gt; &gt; +        replace upload files with generated files and to actually
&gt; &gt; +        generate the replacement files. We could use std::functions passed
&gt; &gt; +        to FormData instead of calling ChromeClient methods directly.
&gt; 
&gt; This is OK to do, although a better fix would be to stop using the chrome
&gt; client, and use file replacement code from
&gt; BlobDataFileReference::generateReplacementFile(). That would require some
&gt; refactoring, but the code is already in WebCore/platform.

Ah, I didn&apos;t know BlobDataFileReference::generateReplacementFile(), I&apos;ll rework it then.

&gt; Right now, we potentially archive a bundle twice, first via Blob code path
&gt; if the file is ever accessed via File API, and then via the chrome client if
&gt; the file end up being submitted via a form.
&gt; 
&gt; I did not review the patch in detail.

I&apos;ll try to refactor the code to use BlobDataFileReference instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045007</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-10-30 03:13:55 -0700</bug_when>
    <thetext>I&apos;ve been looking at this in more detail, and it seems to me that the replacement file generations should happen automatically already. The BlobDataFileReference objects, already to the generation on demand when the path() or size() methods are used. The File object also computes the replaced name and content type in its constructor. I can&apos;t test this, because the file replacement thing is a mac only feature, but looking at the code I would say that:

 - In FormData::appendKeyValuePairItems, the name and content type we get form the File blob are already computed, so we wouldn&apos;t need to use the chrome client, that only computes the name but no the content type. 

  - We don&apos;t need to generate the files explicitly, when the Blob files are added to the actual HTTP body by the resource handle, the path() method of BlobDataFileReference will be called to read the file, ensuring the replacement files are generated.

  - And we don&apos;t need to explicitly delete the generated files, because the BlobDataFileReference destructor does it already.

I&apos;ve also noticed that FormData uses FormDataList, that surprisingly it&apos;s not in platform but in html. We can probably just move FormDataList to platform, or is there any reason for it to be in html?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045040</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-10-30 09:21:28 -0700</bug_when>
    <thetext>I think that there is a difference in behavior between FormDataElement::EncodedBlob and FormDataElement::EncodedFile. There is no File object created for form upload unless the file is also accessed via element.files[index]. So, there is no Blob and no BlobDataFileReference.

&gt; We can probably just move FormDataList to platform, or is there any reason for it to be in html?

I&apos;m not aware of any such reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045490</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-10-31 22:33:05 -0700</bug_when>
    <thetext>In other words, I think that this refactoring can be performed on non-Mac by eliminating non-File code path. 

One thing that is challenging about this is that these use modes actually have different semantics now. A file that is put into a form input is stored as a path, so any changes to it that are made between choosing it and submitting the form do take effect. On the other hand, File objects are frozen when the File object is created, and get invalidated after any changes. If such a File object is in a form, submission will suddenly fail. 

This is largely a standards limitation, so we should probably try to preserve existing behavior for now, even though it&apos;s crazy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1151989</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-02 10:09:22 -0800</bug_when>
    <thetext>Carlos, are you still planning on reworking this eventually (in which case please unset r?), or are you hoping to land it as-is?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152268</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-04 00:31:53 -0800</bug_when>
    <thetext>I had forgotten this to be honest. So, maybe we could just fix the layering violations now, and then improve the code instead of the other way around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230799</commentid>
    <comment_count>10</comment_count>
      <attachid>240599</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-17 07:03:25 -0700</bug_when>
    <thetext>Comment on attachment 240599
Patch

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

Hi,

Apologies that your patch was not reviewed in a timely manner. Since it&apos;s now quite old, I am removing it from the review request queue. Please consider rebasing it on trunk and resubmitting.

To increase the chances of getting a review, consider using &apos;Tools/Scripts/webkit-patch upload --suggest-reviewers&apos; to CC reviewers who might be interested in this bug.

&gt; Source/WebCore/loader/FrameLoader.cpp:360
&gt; +    if (Page* page = m_frame.document()-&gt;page())

Why do you not need to null-check document and page, you&apos;re sure this is safe? My defeatist, non-ideal strategy is to null-check these always, as I&apos;ve given up on understanding when they can and cannot be null....

&gt; Source/WebCore/loader/FrameLoader.cpp:361
&gt; +        data.generateFiles([page](const String&amp; path) -&gt; String { return page-&gt;chrome().client().generateReplacementFile(path); });

Why do you need to specify the return type of the lambda? Is it not inferred?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230801</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-09-17 07:04:33 -0700</bug_when>
    <thetext>Ah haha, I had previously left review comments on this patch months ago, but never published the review. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240599</attachid>
            <date>2014-10-29 07:09:15 -0700</date>
            <delta_ts>2016-09-17 07:03:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-form-data-violations.diff</filename>
            <type>text/plain</type>
            <size>13542</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZjBjYjg4Li44MWZkOTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYg
QEAKKzIwMTQtMTAtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIEZvcm1EYXRhIHNob3VsZCBub3QgdXNlIERvY3VtZW50LCBQYWdlLCBDaHJv
bWUgYW5kIENocm9tZUNsaWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM4MTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRm9ybURhdGEgdXNlcyB0aGUgQ2hyb21lQ2xpZW50IHRvIGFzayB0aGUgV2Vi
S2l0IGxheWVyIHdoZXRoZXIgdG8KKyAgICAgICAgcmVwbGFjZSB1cGxvYWQgZmlsZXMgd2l0aCBn
ZW5lcmF0ZWQgZmlsZXMgYW5kIHRvIGFjdHVhbGx5CisgICAgICAgIGdlbmVyYXRlIHRoZSByZXBs
YWNlbWVudCBmaWxlcy4gV2UgY291bGQgdXNlIHN0ZDo6ZnVuY3Rpb25zIHBhc3NlZAorICAgICAg
ICB0byBGb3JtRGF0YSBpbnN0ZWFkIG9mIGNhbGxpbmcgQ2hyb21lQ2xpZW50IG1ldGhvZHMgZGly
ZWN0bHkuCisKKyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OmNyZWF0ZSk6IFVzZSBhIGxhbWJkYSBmdW5jdGlvbiBh
cworICAgICAgICBzdGQ6OmZ1bmN0aW9uIHBhcmFtZXRlciBvZiBGb3JtRGF0YTo6Y3JlYXRlTXVs
dGlQYXJ0KCkuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpnZW5lcmF0ZUZvcm1EYXRhRmlsZXMpOiBIZWxwZXIgZnVuY3Rp
b24gdG8KKyAgICAgICAgY2FsbCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcygpIHVzaW5nIGEgbGFt
YmRhIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnN1Ym1pdEZvcm0p
OiBDYWxsIEZyYW1lTG9hZGVyOjpnZW5lcmF0ZUZvcm1EYXRhRmlsZXMoKS4KKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKTogRGl0dG8uCisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKTogVXNl
IG51bGxwdHIuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KTog
SXQgcmVjZWl2ZXMgYSBzdGQ6OmZ1bmN0aW9uCisgICAgICAgIGluc3RlYWQgb2YgYSBEb2N1bWVu
dCB0aGF0IGlzIHBhc3NlZCB0byBhcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcygpCisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMpOiBVc2UgdGhlIGdpdmVu
CisgICAgICAgIHN0ZDo6ZnVuY3Rpb24gaW5zdGVhZCBvZiB1c2luZyBDaHJvbWVDbGllbnQgZGly
ZWN0bHkuCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyk6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaDoKKyAgICAgICAgKiB4bWwv
WE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNl
bmQpOiBVc2UgbGFtYmRhIGZ1bmN0aW9ucyBhcworICAgICAgICBzdGQ6OmZ1bmN0aW9uIHBhcmFt
ZXRlcnMgb2YgY3JlYXRlTXVsdGlQYXJ0KCkgYW5kIGdlbmVyYXRlRmlsZXMoKS4KKwogMjAxNC0x
MC0yOCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
Q1NTNCBTZWxlY3RvcnM6IEFkZCB0aGUgcHNldWRvIGNsYXNzIDphbnktbGluawpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKaW5kZXggNDIzNDNiMi4uZGEzZjRhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCkBAIC0zMSw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9ybVN1Ym1pc3Npb24uaCIKIAorI2lu
Y2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRP
TUZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgpA
QCAtNDUsNiArNDcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KQEAgLTIwNCw3ICsyMDcsMTEg
QEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IEEKICAgICBTdHJpbmcgYm91bmRhcnk7CiAKICAgICBp
ZiAoaXNNdWx0aVBhcnRGb3JtKSB7Ci0gICAgICAgIGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydCgqKHN0YXRpY19jYXN0PEZvcm1EYXRhTGlzdCo+KGRvbUZvcm1EYXRhLmdldCgp
KSksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpLCAmZG9jdW1lbnQpOworICAgICAgICBmb3JtRGF0
YSA9IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoKihzdGF0aWNfY2FzdDxGb3JtRGF0YUxpc3Qq
Pihkb21Gb3JtRGF0YS5nZXQoKSkpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgWyZkb2N1bWVu
dF0oY29uc3QgU3RyaW5nJiBwYXRoLCBTdHJpbmcmIGdlbmVyYXRlZEZpbGVuYW1lKSB7CisgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0
ZWRGaWxlRm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfSk7CiAgICAgICAgIGJvdW5kYXJ5ID0gZm9ybURhdGEtPmJv
dW5kYXJ5KCkuZGF0YSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvcm1EYXRhID0gRm9ybURh
dGE6OmNyZWF0ZSgqKHN0YXRpY19jYXN0PEZvcm1EYXRhTGlzdCo+KGRvbUZvcm1EYXRhLmdldCgp
KSksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpLCBhdHRyaWJ1dGVzLm1ldGhvZCgpID09IEdldE1l
dGhvZCA/IEZvcm1EYXRhOjpGb3JtVVJMRW5jb2RlZCA6IEZvcm1EYXRhOjpwYXJzZUVuY29kaW5n
VHlwZShlbmNvZGluZ1R5cGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmlu
ZGV4IDY2OGY1ZDUuLjI5YjM1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cApAQCAtMzU1LDYgKzM1NSwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZChjb25z
dCBGcmFtZUxvYWRSZXF1ZXN0JiBwYXNzZWRSZXF1ZXN0LCBQYXNzUmVmUHRyPAogICAgIG1fc3Vw
cHJlc3NPcGVuZXJJbk5ld0ZyYW1lID0gZmFsc2U7CiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXI6Omdl
bmVyYXRlRm9ybURhdGFGaWxlcyhGb3JtRGF0YSYgZGF0YSkKK3sKKyAgICBpZiAoUGFnZSogcGFn
ZSA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBkYXRhLmdlbmVyYXRlRmls
ZXMoW3BhZ2VdKGNvbnN0IFN0cmluZyYgcGF0aCkgLT4gU3RyaW5nIHsgcmV0dXJuIHBhZ2UtPmNo
cm9tZSgpLmNsaWVudCgpLmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKHBhdGgpOyB9KTsKK30KKwog
dm9pZCBGcmFtZUxvYWRlcjo6c3VibWl0Rm9ybShQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBz
dWJtaXNzaW9uKQogewogICAgIEFTU0VSVChzdWJtaXNzaW9uLT5tZXRob2QoKSA9PSBGb3JtU3Vi
bWlzc2lvbjo6UG9zdE1ldGhvZCB8fCBzdWJtaXNzaW9uLT5tZXRob2QoKSA9PSBGb3JtU3VibWlz
c2lvbjo6R2V0TWV0aG9kKTsKQEAgLTQyMiw3ICs0MjgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpz
dWJtaXRGb3JtKFBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IHN1Ym1pc3Npb24pCiAgICAgICAg
IG1fc3VibWl0dGVkRm9ybVVSTCA9IHN1Ym1pc3Npb24tPnJlcXVlc3RVUkwoKTsKICAgICB9CiAK
LSAgICBzdWJtaXNzaW9uLT5kYXRhKCktPmdlbmVyYXRlRmlsZXMobV9mcmFtZS5kb2N1bWVudCgp
KTsKKyAgICBnZW5lcmF0ZUZvcm1EYXRhRmlsZXMoKnN1Ym1pc3Npb24tPmRhdGEoKSk7CiAgICAg
c3VibWlzc2lvbi0+c2V0UmVmZXJyZXIob3V0Z29pbmdSZWZlcnJlcigpKTsKICAgICBzdWJtaXNz
aW9uLT5zZXRPcmlnaW4ob3V0Z29pbmdPcmlnaW4oKSk7CiAKQEAgLTMxNjUsNyArMzE3MSw3IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0q
IGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hCiAgICAgLy8gSWYgdGhpcyB3YXMgYSByZXBvc3QgdGhh
dCBmYWlsZWQgdGhlIHBhZ2UgY2FjaGUsIHdlIG1pZ2h0IHRyeSB0byByZXBvc3QgdGhlIGZvcm0u
CiAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb247CiAgICAgaWYgKGZvcm1EYXRhKSB7Ci0gICAg
ICAgIGZvcm1EYXRhLT5nZW5lcmF0ZUZpbGVzKG1fZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgICAg
IGdlbmVyYXRlRm9ybURhdGFGaWxlcygqZm9ybURhdGEpOwogCiAgICAgICAgIHJlcXVlc3Quc2V0
SFRUUE1ldGhvZCgiUE9TVCIpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KGZvcm1EYXRh
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKaW5kZXggNzkyNWU0ZC4uMTNkOGQ0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTU2LDYgKzU2LDcgQEAgY2xhc3Mg
RE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsK
IGNsYXNzIEV2ZW50OworY2xhc3MgRm9ybURhdGE7CiBjbGFzcyBGb3JtU3RhdGU7CiBjbGFzcyBG
b3JtU3VibWlzc2lvbjsKIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50OwpAQCAtMzc3LDYgKzM3OCw4
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpc3BhdGNoR2xvYmFsT2JqZWN0QXZhaWxhYmxlSW5B
bGxXb3JsZHMoKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVGb3JtRGF0YUZpbGVzKEZvcm1EYXRhJik7
CisKICAgICBGcmFtZSYgbV9mcmFtZTsKICAgICBGcmFtZUxvYWRlckNsaWVudCYgbV9jbGllbnQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKaW5kZXgg
Y2M2YTRiNS4uMmIzOGViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9G
b3JtRGF0YS5jcHAKQEAgLTI1LDE1ICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5
SW1wbC5oIgogI2luY2x1ZGUgIkJsb2JVUkwuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZp
bGUuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVy
LmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtOTksMTQgKzk1LDE0IEBAIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKIHsK
ICAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBw
ZW5kS2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5jb2RpbmcsIGZhbHNlLCAwLCBlbmNvZGluZ1R5
cGUpOworICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5jb2Rpbmcs
IGZhbHNlLCBudWxscHRyLCBlbmNvZGluZ1R5cGUpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0
KGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywg
RG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydChjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcsIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcmLCBTdHJpbmcmKT4gc2hv
dWxkUmVwbGFjZVVwbG9hZEZpbGVGdW5jdGlvbikKIHsKICAgICBSZWZQdHI8Rm9ybURhdGE+IHJl
c3VsdCA9IGNyZWF0ZSgpOwotICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMobGlz
dCwgZW5jb2RpbmcsIHRydWUsIGRvY3VtZW50KTsKKyAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVl
UGFpckl0ZW1zKGxpc3QsIGVuY29kaW5nLCB0cnVlLCBzaG91bGRSZXBsYWNlVXBsb2FkRmlsZUZ1
bmN0aW9uKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTU4LDcgKzE1
NCw3IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEJsb2IoY29uc3QgVVJMJiBibG9iVVJMKQogICAg
IG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVudChibG9iVVJMKSk7CiB9CiAKLXZvaWQg
Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlz
dCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZvcm0sIERv
Y3VtZW50KiBkb2N1bWVudCwgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKK3ZvaWQgRm9ybURh
dGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlzdCwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBpc011bHRpUGFydEZvcm0sIHN0ZDo6ZnVu
Y3Rpb248Ym9vbChjb25zdCBTdHJpbmcmLCBTdHJpbmcmKT4gc2hvdWxkUmVwbGFjZVVwbG9hZEZp
bGVGdW5jdGlvbiwgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlwZSkKIHsKICAgICBpZiAoaXNNdWx0
aVBhcnRGb3JtKQogICAgICAgICBtX2JvdW5kYXJ5ID0gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0
ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CkBAIC0xODYsMTIgKzE4MiwxMCBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNv
bnN0IFRleHRFbmNvZAogICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9u
IHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1l
bnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBwYXRoID0gZmlsZS5wYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1l
bnQtPnBhZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0
ZWRGaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZp
bGUgPSBwYWdlLT5jaHJvbWUoKS5jbGllbnQoKS5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZp
bGVGb3JVcGxvYWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHNob3VsZFJlcGxh
Y2VVcGxvYWRGaWxlRnVuY3Rpb24ocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lID0gZ2VuZXJhdGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIGZpbGVuYW1lIGlzIHBhc3NlZCBpbiBG
b3JtRGF0YS5hcHBlbmQoKSwgdXNlIGl0IGluc3RlYWQgb2YgdGhlIGZpbGUgYmxvYidzIG5hbWUu
CkBAIC0zMzcsMTkgKzMzMSwxNSBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6cmVz
b2x2ZUJsb2JSZWZlcmVuY2VzKCkKICAgICByZXR1cm4gbmV3Rm9ybURhdGEucmVsZWFzZSgpOwog
fQogCi12b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkb2N1bWVudCkKK3Zv
aWQgRm9ybURhdGE6OmdlbmVyYXRlRmlsZXMoc3RkOjpmdW5jdGlvbjxTdHJpbmcoY29uc3QgU3Ry
aW5nJik+IGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlRnVuY3Rpb24pCiB7Ci0gICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBmb3IgKEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKICAgICAg
ICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZp
bGUgJiYgZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewogICAgICAgICAgICAgQVNTRVJU
KCFlbGVtZW50Lm1fb3duc0dlbmVyYXRlZEZpbGUpOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1l
bnQubV9nZW5lcmF0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgaWYgKCFlbGVt
ZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lID0gcGFnZS0+Y2hy
b21lKCkuY2xpZW50KCkuZ2VuZXJhdGVSZXBsYWNlbWVudEZpbGUoZWxlbWVudC5tX2ZpbGVuYW1l
KTsKKyAgICAgICAgICAgIGVsZW1lbnQubV9nZW5lcmF0ZWRGaWxlbmFtZSA9IGdlbmVyYXRlUmVw
bGFjZW1lbnRGaWxlRnVuY3Rpb24oZWxlbWVudC5tX2ZpbGVuYW1lKTsKICAgICAgICAgICAgIGlm
ICghZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICBlbGVtZW50Lm1fb3duc0dlbmVyYXRlZEZpbGUgPSB0cnVlOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKaW5kZXggYzVlN2YwZi4uMzdiZGUx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaApAQCAtMjks
NyArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xh
c3MgRm9ybURhdGFMaXN0OwogY2xhc3MgVGV4dEVuY29kaW5nOwogCkBAIC0xOTgsNyArMTk3LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qg
Q1N0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGUoY29uc3Qg
VmVjdG9yPGNoYXI+Jik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZShj
b25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBFbmNvZGluZ1R5cGUgPSBG
b3JtVVJMRW5jb2RlZCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZU11
bHRpUGFydChjb25zdCBGb3JtRGF0YUxpc3QmLCBjb25zdCBUZXh0RW5jb2RpbmcmLCBEb2N1bWVu
dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVNdWx0aVBhcnQoY29u
c3QgRm9ybURhdGFMaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgc3RkOjpmdW5jdGlvbjxib29s
KGNvbnN0IFN0cmluZyYsIFN0cmluZyYpPik7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkZvcm1EYXRh
KCk7CiAKICAgICAvLyBGSVhNRTogQm90aCB0aGVzZSBmdW5jdGlvbnMgcGVyZm9ybSBhIGRlZXAg
Y29weSBvZiBtX2VsZW1lbnRzLCBidXQgZGlmZmVyIGluIGhhbmRsaW5nIG9mIG90aGVyIGRhdGEg
bWVtYmVycy4KQEAgLTIyOCw3ICsyMjcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPEZv
cm1EYXRhRWxlbWVudD4mIGVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50czsgfQog
ICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgYm91bmRhcnkoKSBjb25zdCB7IHJldHVybiBtX2JvdW5k
YXJ5OyB9CiAKLSAgICB2b2lkIGdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqKTsKKyAgICB2b2lkIGdl
bmVyYXRlRmlsZXMoc3RkOjpmdW5jdGlvbjxTdHJpbmcoY29uc3QgU3RyaW5nJik+KTsKICAgICB2
b2lkIHJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKTsKIAogICAgIGJvb2wgYWx3YXlzU3Ry
ZWFtKCkgY29uc3QgeyByZXR1cm4gbV9hbHdheXNTdHJlYW07IH0KQEAgLTI1NSw3ICsyNTQsNyBA
QCBwcml2YXRlOgogICAgIEZvcm1EYXRhKCk7CiAgICAgRm9ybURhdGEoY29uc3QgRm9ybURhdGEm
KTsKIAotICAgIHZvaWQgYXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0
JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgYm9vbCBpc011bHRpUGFydEZvcm0sIERvY3VtZW50Kiwg
RW5jb2RpbmdUeXBlID0gRm9ybVVSTEVuY29kZWQpOworICAgIHZvaWQgYXBwZW5kS2V5VmFsdWVQ
YWlySXRlbXMoY29uc3QgRm9ybURhdGFMaXN0JiwgY29uc3QgVGV4dEVuY29kaW5nJiwgYm9vbCBp
c011bHRpUGFydEZvcm0sIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBTdHJpbmcmLCBTdHJpbmcm
KT4sIEVuY29kaW5nVHlwZSA9IEZvcm1VUkxFbmNvZGVkKTsKIAogICAgIGJvb2wgaGFzR2VuZXJh
dGVkRmlsZXMoKSBjb25zdDsKICAgICBib29sIGhhc093bmVkR2VuZXJhdGVkRmlsZXMoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGJmODZmMDMuLjFiNzIz
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMjQsNiArMjQsOCBA
QAogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAKICNpbmNsdWRlICJCbG9iLmgiCisjaW5j
bHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ29u
dGVudFNlY3VyaXR5UG9saWN5LmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5BY2Nlc3NDb250cm9s
LmgiCiAjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKQEAgLTM5LDYgKzQxLDcgQEAKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIk1l
bW9yeUNhY2hlLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhcnNlZENvbnRlbnRU
eXBlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgpAQCAtNjc1LDkgKzY3OCwxNCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERP
TUZvcm1EYXRhKiBib2R5LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fbWV0aG9kICE9ICJHRVQiICYmIG1fbWV0aG9kICE9ICJIRUFEIiAmJiBtX3VybC5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpIHsKLSAgICAgICAgbV9yZXF1ZXN0RW50aXR5Qm9keSA9
IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoKihzdGF0aWNfY2FzdDxGb3JtRGF0YUxpc3QqPihi
b2R5KSksIGJvZHktPmVuY29kaW5nKCksIGRvY3VtZW50KCkpOwotCi0gICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHktPmdlbmVyYXRlRmlsZXMoZG9jdW1lbnQoKSk7CisgICAgICAgIG1fcmVxdWVz
dEVudGl0eUJvZHkgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KCooc3RhdGljX2Nhc3Q8Rm9y
bURhdGFMaXN0Kj4oYm9keSkpLCBib2R5LT5lbmNvZGluZygpLCBbdGhpc10oY29uc3QgU3RyaW5n
JiBwYXRoLCBTdHJpbmcmIGdlbmVyYXRlZEZpbGVuYW1lKSB7CisgICAgICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFn
ZS0+Y2hyb21lKCkuY2xpZW50KCkuc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9yVXBs
b2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdl
KCkpCisgICAgICAgICAgICBtX3JlcXVlc3RFbnRpdHlCb2R5LT5nZW5lcmF0ZUZpbGVzKFtwYWdl
XShjb25zdCBTdHJpbmcmIHBhdGgpIC0+IFN0cmluZyB7IHJldHVybiBwYWdlLT5jaHJvbWUoKS5j
bGllbnQoKS5nZW5lcmF0ZVJlcGxhY2VtZW50RmlsZShwYXRoKTsgfSk7CiAKICAgICAgICAgU3Ry
aW5nIGNvbnRlbnRUeXBlID0gZ2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIik7CiAgICAg
ICAgIGlmIChjb250ZW50VHlwZS5pc0VtcHR5KCkpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>