<?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>156073</bug_id>
          
          <creation_ts>2016-03-31 11:16:25 -0700</creation_ts>
          <short_desc>Web Automation: Add Automation.takeScreenshot</short_desc>
          <delta_ts>2016-03-31 12:04:11 -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>Web Inspector</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1179481</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-31 11:16:25 -0700</bug_when>
    <thetext>* SUMMARY
Add Automation.screenshot. Screenshot of the entire page, not just the visible/viewport portion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179484</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-31 11:16:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/25468646&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179499</commentid>
    <comment_count>2</comment_count>
      <attachid>275307</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-31 11:32:48 -0700</bug_when>
    <thetext>Created attachment 275307
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179502</commentid>
    <comment_count>3</comment_count>
      <attachid>275307</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2016-03-31 11:43:01 -0700</bug_when>
    <thetext>Comment on attachment 275307
[PATCH] Proposed Fix

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

&gt; Source/WebKit2/UIProcess/Automation/Automation.json:313
&gt; +            &quot;name&quot;: &quot;screenshot&quot;,

I think takeScreenshot would be better. See below.

&gt; Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp:777
&gt; +void WebAutomationSession::screenshot(ErrorString&amp; errorString, const String&amp; handle, Ref&lt;ScreenshotCallback&gt;&amp;&amp; callback)

WebAutomationSession::takeScreenshot would be good, we have been naming these the same as the WebAutomationSessionPoxy methods.

&gt; Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp:476
&gt; +    RefPtr&lt;WebImage&gt; image = page-&gt;scaledSnapshotWithOptions(snapshotRect, 1, SnapshotOptionsShareable);

This forces 1x? I wonder if we should make it work with 2x too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179503</commentid>
    <comment_count>4</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-31 11:44:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 275307 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275307&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Automation/Automation.json:313
&gt; &gt; +            &quot;name&quot;: &quot;screenshot&quot;,
&gt; 
&gt; I think takeScreenshot would be better. See below.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp:777
&gt; &gt; +void WebAutomationSession::screenshot(ErrorString&amp; errorString, const String&amp; handle, Ref&lt;ScreenshotCallback&gt;&amp;&amp; callback)
&gt; 
&gt; WebAutomationSession::takeScreenshot would be good, we have been naming
&gt; these the same as the WebAutomationSessionPoxy methods.

I&apos;ll rename.


&gt; &gt; Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp:476
&gt; &gt; +    RefPtr&lt;WebImage&gt; image = page-&gt;scaledSnapshotWithOptions(snapshotRect, 1, SnapshotOptionsShareable);
&gt; 
&gt; This forces 1x? I wonder if we should make it work with 2x too.

Nope, this is an &quot;additional scale&quot;. it is fine to be 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179505</commentid>
    <comment_count>5</comment_count>
      <attachid>275307</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-03-31 11:46:12 -0700</bug_when>
    <thetext>Comment on attachment 275307
[PATCH] Proposed Fix

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

r=me!

&gt; Source/WebKit2/ChangeLog:35
&gt; +        Use null string where possible for efficiency.

Efficiency! :)

&gt; Source/WebKit2/UIProcess/Automation/WebAutomationSession.h:109
&gt; +    void screenshot(Inspector::ErrorString&amp;, const String&amp; handle, Ref&lt;Inspector::AutomationBackendDispatcherHandler::ScreenshotCallback&gt;&amp;&amp;) override;

I would name it takeScreenshot to match the callback.

&gt; Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp:455
&gt; +    ShareableBitmap::Handle handle;

Nit: move this closer to the use-site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179508</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-31 11:49:33 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp:455
&gt; &gt; +    ShareableBitmap::Handle handle;
&gt; 
&gt; Nit: move this closer to the use-site.

This is used, even when empty, in all the DidTakeScreenshot responses, so I put it at the top.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179522</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-31 12:04:11 -0700</bug_when>
    <thetext>&lt;http://trac.webkit.org/changeset/198907&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275307</attachid>
            <date>2016-03-31 11:32:48 -0700</date>
            <delta_ts>2016-03-31 11:45:06 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>webkit-screenshot.patch</filename>
            <type>text/plain</type>
            <size>19767</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzMjJlMjlkLi5mZDBmMTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTYtMDMtMzEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgQXV0b21hdGlvbjogQWRkIEF1dG9tYXRpb24uc2NyZWVuc2hvdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDczCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8yNTQ2ODY0Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNv
bjoKKyAgICAgICAgQWRkIEF1dG9tYXRpb24uc2NyZWVuc2hvdCB3aGljaCByZXR1cm5zIGJhc2U2
NCBlbmNvZGVkIFBORyBkYXRhLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0F1dG9tYXRp
b24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpzY3JlZW5zaG90KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0b21hdGlvblNlc3Npb246OmRpZFRha2VTY3JlZW5zaG90KToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEp
OgorICAgICAgICBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViUGFnZSB0byBnZXQgYW4gSW1hZ2Ug
b2YgdGhlIHBhZ2UKKyAgICAgICAgYW5kIGhhbmRsZSB0aGUgcmVzcG9uc2UuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29jb2EvV2ViQXV0b21hdGlvblNlc3Npb25Db2NvYS5tbToKKyAgICAgICAg
KFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBO
R0RhdGEpOgorICAgICAgICBDb252ZXJ0IHRoZSBiaXRtYXAgZGF0YSB0byBhIGJhc2U2NCBlbmNv
ZGVkIFBORy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25T
ZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpldmFsdWF0ZUphdmFT
Y3JpcHRDYWxsYmFjayk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJv
eHk6OmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhPcmRpbmFsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6cmVzb2x2ZUNoaWxkRnJh
bWVXaXRoTm9kZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OnJlc29sdmVDaGlsZEZyYW1lV2l0aE5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlUGFyZW50RnJhbWUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojpjb21wdXRlRWxlbWVudExheW91dCk6Cisg
ICAgICAgIFVzZSBudWxsIHN0cmluZyB3aGVyZSBwb3NzaWJsZSBmb3IgZWZmaWNpZW5jeS4KKwor
ICAgICAgICAoV2ViS2l0OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Ojp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgIFRha2UgYW4gaW1hZ2Ugb2YgdGhlIGVudGlyZSBwYWdlIGFuZCBwYXNzIGJh
Y2sgdG8gdGhlIFVJUHJvY2Vzcy4KKwogMjAxNi0wMy0zMCAgQnJpYW4gQnVyZyAgPGJidXJnQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgQXV0b21hdGlvbjogQWRkIEF1dG9tYXRpb24ucGVyZm9y
bUtleWJvYXJkSW50ZXJhY3Rpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KaW5kZXggMmZjOTMxZC4uZmQwZjk3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29u
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNv
bgpAQCAtMzA1LDExICszMDUsMjIgQEAKICAgICAgICAgICAgICJuYW1lIjogInBlcmZvcm1LZXli
b2FyZEludGVyYWN0aW9ucyIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2ltdWxhdGVz
IGRlbGl2ZXJpbmcgdGhlIHJlc3VsdHMgb2YgcHJlc3Npbmcgb25lIG9yIG1vcmUga2V5Ym9hcmQg
a2V5cyB0b2dldGhlciBvciBzdWNjZXNzaXZlbHkuIiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaGFuZGxlIiwgIiRyZWYiOiAiQnJvd3Np
bmdDb250ZXh0SGFuZGxlIiwgImRlc2NyaXB0aW9uIjogIlRoZSBoYW5kbGUgZm9yIHRoZSBicm93
c2luZyBjb250ZXh0IHdoaWNoIHNob3VsZCByZWNpZXZlIGtleS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJoYW5kbGUiLCAiJHJlZiI6ICJCcm93c2luZ0NvbnRleHRIYW5kbGUiLCAi
ZGVzY3JpcHRpb24iOiAiVGhlIGhhbmRsZSBmb3IgdGhlIGJyb3dzaW5nIGNvbnRleHQgd2hpY2gg
c2hvdWxkIHJlY2VpdmUga2V5LiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVy
YWN0aW9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJLZXlib2FyZElu
dGVyYWN0aW9uIiB9LCAiZGVzY3JpcHRpb24iOiAiQW4gb3JkZXJlZCBsaXN0IG9mIGtleSBzZXF1
ZW5jZXMgdG8gYmUgZGVsaXZlcmVkIHVzaW5nIG5hdGl2ZSBrZXkgZXZlbnRzLiIgfQogICAgICAg
ICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJzY3Jl
ZW5zaG90IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTY3JlZW5zaG90IG9mIHRoZSBj
dXJyZW50IHBhZ2UgaW4gYSBicm93c2luZyBjb250ZXh0LiIsCisgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhhbmRsZSIsICIkcmVmIjogIkJy
b3dzaW5nQ29udGV4dEhhbmRsZSIsICJkZXNjcmlwdGlvbiI6ICJUaGUgaGFuZGxlIGZvciB0aGUg
YnJvd3NpbmcgY29udGV4dCB0byB0YWtlIGEgc2NyZWVuc2hvdCBvZi4iIH0KKyAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImRhdGEiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiQmFzZTY0LWVuY29kZWQg
aW1hZ2UgZGF0YSAoUE5HKS4iIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAiYXN5bmMi
OiB0cnVlCisgICAgICAgIH0sCisgICAgICAgIHsKICAgICAgICAgICAgICJuYW1lIjogInJlc29s
dmVDaGlsZEZyYW1lSGFuZGxlIiwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEZXRlcm1p
bmVzIHRoZSA8Y29kZT5GcmFtZUhhbmRsZTwvY29kZT4gYmFzZWQgb24gdGhlIG9yZGluYWwsIG5h
bWUgb3Igbm9kZSBoYW5kbGUgb2YgYSBjaGlsZCBmcmFtZS4iLAogICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggMzAyOGE3ZS4uMzk5NTNkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtNzcxLDEwICs3NzEsNDEgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywKICAgICAgICAgZm9yIChhdXRvJiBhY3Rpb24gOiBhY3Rpb25zVG9QZXJm
b3JtKQogICAgICAgICAgICAgYWN0aW9uKCk7CiAgICAgfQotCiAjZW5kaWYgLy8gVVNFKEFQUEtJ
VCkKIH0KIAordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2NyZWVuc2hvdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8U2NyZWVuc2hvdENhbGxi
YWNrPiYmIGNhbGxiYWNrKQoreworICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94
eUZvckhhbmRsZShoYW5kbGUpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfTUVTU0FHRShXaW5kb3dOb3RGb3VuZCk7CisKKyAgICB1aW50NjRfdCBj
YWxsYmFja0lEID0gbV9uZXh0U2NyZWVuc2hvdENhbGxiYWNrSUQrKzsKKyAgICBtX3NjcmVlbnNo
b3RDYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKKworICAgIHBh
Z2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpU
YWtlU2NyZWVuc2hvdChwYWdlLT5wYWdlSUQoKSwgY2FsbGJhY2tJRCksIDApOworfQorCit2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRUYWtlU2NyZWVuc2hvdCh1aW50NjRfdCBjYWxsYmFj
a0lELCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgaW1hZ2VEYXRhSGFuZGxlLCBjb25z
dCBTdHJpbmcmIGVycm9yVHlwZSkKK3sKKyAgICBhdXRvIGNhbGxiYWNrID0gbV9zY3JlZW5zaG90
Q2FsbGJhY2tzLnRha2UoY2FsbGJhY2tJRCk7CisgICAgaWYgKCFjYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFlcnJvclR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxi
YWNrLT5zZW5kRmFpbHVyZShlcnJvclR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgU3RyaW5nIGJhc2U2NEVuY29kZWREYXRhID0gcGxhdGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5H
RGF0YShpbWFnZURhdGFIYW5kbGUpOworICAgIGlmIChiYXNlNjRFbmNvZGVkRGF0YS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkVy
cm9yTWVzc2FnZTo6SW50ZXJuYWxFcnJvcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKGJhc2U2NEVuY29kZWREYXRhKTsKK30KKwogI2lmICFV
U0UoQVBQS0lUKQogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1TaW11bGF0ZU1v
dXNlSW50ZXJhY3Rpb24oV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24s
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uLCBXZWJFdmVudDo6
TW9kaWZpZXJzKQogewpAQCAtNzg3LDYgKzgxOCwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpwbGF0Zm9ybVNpbXVsYXRlS2V5U3Ryb2tlKFdlYlBhZ2VQcm94eSYsIEluc3BlY3Rvcjo6
UAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1TaW11bGF0ZUtleVNlcXVlbmNl
KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFN0cmluZyYpCiB7CiB9CisKK1N0cmluZyBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cGxhdGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5HRGF0YShjb25zdCBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSYpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQogI2VuZGlmIC8v
ICFVU0UoQVBQS0lUKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5o
CmluZGV4IGY5MzdkN2EuLjQ1ZGU3NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaApAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkF1dG9tYXRpb25CYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiU2hh
cmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogCkBAIC0xMDUsNiArMTA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZXZhbHVhdGVK
YXZhU2NyaXB0RnVuY3Rpb24oSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUs
IGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkm
IGFyZ3VtZW50cywgYm9vbCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBSZWY8SW5z
cGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFdmFsdWF0ZUphdmFT
Y3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHBlcmZvcm1Nb3Vz
ZUludGVyYWN0aW9uKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uLCBj
b25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb24s
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGtleU1vZGlmaWVycywgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50PiYgdXBkYXRlZFBvc2l0aW9uKSBv
dmVycmlkZTsKICAgICB2b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXkmIGludGVyYWN0aW9ucykgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JlZW5zaG90
KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEluc3Bl
Y3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6U2NyZWVuc2hvdENhbGxi
YWNrPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKEluc3Bl
Y3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlvbmFsT3Jk
aW5hbCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxO
b2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcm
IGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwogICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQoSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcm
IGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlv
bmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCogdXNlVmlld3BvcnRDb29yZGlu
YXRlcywgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CkBAIC0xMzUsNiArMTM3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFJlc29sdmVDaGlsZEZyYW1lKHVpbnQ2NF90IGNh
bGxiYWNrSUQsIHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKTsKICAg
ICB2b2lkIGRpZFJlc29sdmVQYXJlbnRGcmFtZSh1aW50NjRfdCBjYWxsYmFja0lELCB1aW50NjRf
dCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSk7CiAgICAgdm9pZCBkaWRDb21wdXRl
RWxlbWVudExheW91dCh1aW50NjRfdCBjYWxsYmFja0lELCBXZWJDb3JlOjpJbnRSZWN0LCBjb25z
dCBTdHJpbmcmIGVycm9yVHlwZSk7CisgICAgdm9pZCBkaWRUYWtlU2NyZWVuc2hvdCh1aW50NjRf
dCBjYWxsYmFja0lELCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JUeXBlKTsKIAogICAgIC8vIFBsYXRmb3JtLXNwZWNpZmljIGhlbHBlciBtZXRob2Rz
LgogICAgIHZvaWQgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5
JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHZpZXdQb3NpdGlvbiwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6TW91c2VCdXR0b24sIFdlYkV2ZW50OjpNb2RpZmllcnMpOwpAQCAtMTQyLDYg
KzE0NSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwbGF0Zm9ybVNpbXVsYXRlS2V5U3Ryb2tlKFdl
YlBhZ2VQcm94eSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50
ZXJhY3Rpb25UeXBlLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5
KTsKICAgICAvLyBTaW11bGF0ZXMga2V5IHByZXNzZXMgdG8gcHJvZHVjZSB0aGUgY29kZXBvaW50
cyBpbiBhIHN0cmluZy4gT25lIG9yIG1vcmUgY29kZSBwb2ludHMgYXJlIGRlbGl2ZXJlZCBhdG9t
aWNhbGx5IGF0IGdyYXBoZW1lIGNsdXN0ZXIgYm91bmRhcmllcy4KICAgICB2b2lkIHBsYXRmb3Jt
U2ltdWxhdGVLZXlTZXF1ZW5jZShXZWJQYWdlUHJveHkmLCBjb25zdCBTdHJpbmcmKTsKKyAgICAv
LyBHZXQgYmFzZTY0IGVuY29kZWQgUE5HIGRhdGEgZnJvbSBhIGJpdG1hcC4KKyAgICBTdHJpbmcg
cGxhdGZvcm1HZXRCYXNlNjRFbmNvZGVkUE5HRGF0YShjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYpOwogCiAjaWYgVVNFKEFQUEtJVCkKICAgICB2b2lkIHNlbmRTeW50aGVzaXplZEV2ZW50
c1RvUGFnZShXZWJQYWdlUHJveHkmLCBOU0FycmF5ICpldmVudHNUb1NlbmQpOwpAQCAtMTc0LDYg
KzE3OSw5IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9uZXh0Q29tcHV0ZUVsZW1lbnRMYXlv
dXRDYWxsYmFja0lEIHsgMSB9OwogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxJbnNwZWN0
b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNvbXB1dGVFbGVtZW50TGF5
b3V0Q2FsbGJhY2s+PiBtX2NvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2tzOwogCisgICAgdWlu
dDY0X3QgbV9uZXh0U2NyZWVuc2hvdENhbGxiYWNrSUQgeyAxIH07CisgICAgSGFzaE1hcDx1aW50
NjRfdCwgUmVmUHRyPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6U2NyZWVuc2hvdENhbGxiYWNrPj4gbV9zY3JlZW5zaG90Q2FsbGJhY2tzOworCiAjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwqIG1f
cmVtb3RlQ2hhbm5lbCB7IG51bGxwdHIgfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24ubWVzc2FnZXMu
aW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5tZXNzYWdlcy5pbgppbmRleCA3MmQ5YTkzLi41YzNiN2EwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbi5tZXNzYWdlcy5pbgpAQCAtMjcsNCArMjcsNiBAQCBtZXNzYWdlcyAtPiBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbiB7CiAgICAgRGlkUmVzb2x2ZVBhcmVudEZyYW1lKHVpbnQ2NF90
IGNhbGxiYWNrSUQsIHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyBlcnJvclR5cGUpCiAKICAgICBE
aWRDb21wdXRlRWxlbWVudExheW91dCh1aW50NjRfdCBjYWxsYmFja0lELCBXZWJDb3JlOjpJbnRS
ZWN0IHJlY3QsIFN0cmluZyBlcnJvclR5cGUpCisKKyAgICBEaWRUYWtlU2NyZWVuc2hvdCh1aW50
NjRfdCBjYWxsYmFja0lELCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGltYWdlRGF0
YUhhbmRsZSwgU3RyaW5nIGVycm9yVHlwZSkKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db2NvYS9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYkF1dG9tYXRpb25TZXNzaW9uQ29jb2EubW0KaW5kZXgg
MTI0MWEyZC4uNDNkY2NmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
Y29hL1dlYkF1dG9tYXRpb25TZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYkF1dG9tYXRpb25TZXNzaW9uQ29jb2EubW0KQEAgLTQ1NCw2ICs0NTQs
MjEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGxhdGZvcm1TaW11bGF0ZUtleVNlcXVl
bmNlKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QKICAgICBzZW5kU3ludGhlc2l6ZWRFdmVudHNU
b1BhZ2UocGFnZSwgZXZlbnRzVG9CZVNlbnQuZ2V0KCkpOwogfQogCitTdHJpbmcgV2ViQXV0b21h
dGlvblNlc3Npb246OnBsYXRmb3JtR2V0QmFzZTY0RW5jb2RlZFBOR0RhdGEoY29uc3QgU2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGltYWdlRGF0YUhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZURhdGFIYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbjo6UmVhZE9ubHkpOworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjZ0ltYWdlID0gYml0bWFwLT5tYWtlQ0dJbWFnZSgpOworICAgIFJldGFpblB0
cjxOU011dGFibGVEYXRhPiBpbWFnZURhdGEgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGF0YSBhbGxv
Y10gaW5pdF0pOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0
aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSgoQ0ZNdXRhYmxl
RGF0YVJlZilpbWFnZURhdGEuZ2V0KCksIGtVVFR5cGVQTkcsIDEsIDApKTsKKyAgICBpZiAoIWRl
c3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBDR0ltYWdlRGVzdGlu
YXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgY2dJbWFnZS5nZXQoKSwgMCk7CisgICAg
Q0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworCisgICAgcmV0
dXJuIFtpbWFnZURhdGEgYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zOjBdOworfQorCiAj
ZW5kaWYgLy8gVVNFKEFQUEtJVCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eS5jcHAKaW5kZXggN2JkMTFkMy4uOGMzZTVmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHlTY3JpcHRTb3VyY2UuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgor
I2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldl
YlByb2Nlc3MuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CkBAIC0xMzgs
NyArMTM5LDcgQEAgc3RhdGljIEpTVmFsdWVSZWYgZXZhbHVhdGVKYXZhU2NyaXB0Q2FsbGJhY2so
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGYKICAgICB1aW50NjRfdCBjYWxsYmFj
a0lEID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsK
ICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcmVzdWx0KEFkb3B0LCBKU1ZhbHVlVG9TdHJp
bmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7CiAKLSAgICBhdXRvbWF0
aW9uU2Vzc2lvblByb3h5LT5kaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihmcmFtZUlELCBj
YWxsYmFja0lELCByZXN1bHQtPnN0cmluZygpLCBlbXB0eVN0cmluZygpKTsKKyAgICBhdXRvbWF0
aW9uU2Vzc2lvblByb3h5LT5kaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihmcmFtZUlELCBj
YWxsYmFja0lELCByZXN1bHQtPnN0cmluZygpLCBTdHJpbmcoKSk7CiAKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CkBAIC0yMDgsNyArMjA5LDcgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lKFdl
YkZyYW1lJiBmcmFtZSkKIAogICAgIGF1dG8gcGVuZGluZ0ZyYW1lQ2FsbGJhY2tzID0gbV93ZWJG
cmFtZVBlbmRpbmdFdmFsdWF0ZUphdmFTY3JpcHRDYWxsYmFja3NNYXAudGFrZShmcmFtZUlEKTsK
ICAgICBmb3IgKHVpbnQ2NF90IGNhbGxiYWNrSUQgOiBwZW5kaW5nRnJhbWVDYWxsYmFja3MpCi0g
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpEaWRFdmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbihjYWxsYmFja0lELCBlbXB0eVN0cmluZygpLCBlcnJvclR5cGUpLCAwKTsKKyAg
ICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb246OkRpZEV2YWx1YXRlSmF2YVNjcmlw
dEZ1bmN0aW9uKGNhbGxiYWNrSUQsIFN0cmluZygpLCBlcnJvclR5cGUpLCAwKTsKIH0KIAogdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1
aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBWZWN0b3I8U3RyaW5nPiBh
cmd1bWVudHMsIGJvb2wgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKQEAgLTMwMyw3ICszMDQsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OnJlc29sdmVDaGlsZEZyYW1lV2l0aE9yZGluYWwodWludDY0X3QgZnJhbWVJRCwgdQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Np
b246OkRpZFJlc29sdmVDaGlsZEZyYW1lKGNhbGxiYWNrSUQsIGNoaWxkRnJhbWUtPmZyYW1lSUQo
KSwgZW1wdHlTdHJpbmcoKSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9u
OjpEaWRSZXNvbHZlQ2hpbGRGcmFtZShjYWxsYmFja0lELCBjaGlsZEZyYW1lLT5mcmFtZUlEKCks
IFN0cmluZygpKSwgMCk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6cmVz
b2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJp
bmcmIG5vZGVIYW5kbGUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0zMzQsNyArMzM1LDcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2Rl
SGFuZGxlKHVpbnQ2NF90IGZyYW1lSUQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpEaWRSZXNvbHZlQ2hpbGRGcmFtZShjYWxsYmFj
a0lELCBmcmFtZUZyb21FbGVtZW50LT5mcmFtZUlEKCksIGVtcHR5U3RyaW5nKCkpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlkUmVzb2x2ZUNoaWxkRnJhbWUoY2Fs
bGJhY2tJRCwgZnJhbWVGcm9tRWxlbWVudC0+ZnJhbWVJRCgpLCBTdHJpbmcoKSksIDApOwogfQog
CiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnJlc29sdmVDaGlsZEZyYW1lV2l0aE5h
bWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCBjYWxsYmFj
a0lEKQpAQCAtMzY1LDcgKzM2Niw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6
cmVzb2x2ZUNoaWxkRnJhbWVXaXRoTmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlk
UmVzb2x2ZUNoaWxkRnJhbWUoY2FsbGJhY2tJRCwgY2hpbGRGcmFtZS0+ZnJhbWVJRCgpLCBlbXB0
eVN0cmluZygpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb246OkRpZFJl
c29sdmVDaGlsZEZyYW1lKGNhbGxiYWNrSUQsIGNoaWxkRnJhbWUtPmZyYW1lSUQoKSwgU3RyaW5n
KCkpLCAwKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpyZXNvbHZlUGFy
ZW50RnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTM4NCw3
ICszODUsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OnJlc29sdmVQYXJlbnRG
cmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb246OkRpZFJlc29sdmVQYXJlbnRG
cmFtZShjYWxsYmFja0lELCBwYXJlbnRGcmFtZS0+ZnJhbWVJRCgpLCBlbXB0eVN0cmluZygpKSwg
MCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb246OkRpZFJlc29sdmVQYXJlbnRG
cmFtZShjYWxsYmFja0lELCBwYXJlbnRGcmFtZS0+ZnJhbWVJRCgpLCBTdHJpbmcoKSksIDApOwog
fQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OmZvY3VzRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCkKQEAgLTQ0Niw3ICs0NDcsMzcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5Ojpjb21wdXRlRWxlbWVudExheW91dCh1aW50NjRfdCBmcmFtZUlELCBTdHJpbmcgbm8KICAg
ICAgICAgcmVjdCA9IGNvcmVGcmFtZVZpZXctPnJvb3RWaWV3VG9Db250ZW50cyhyZWN0KTsKICAg
ICB9CiAKLSAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlkQ29tcHV0ZUVsZW1l
bnRMYXlvdXQoY2FsbGJhY2tJRCwgcmVjdCwgZW1wdHlTdHJpbmcoKSksIDApOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uOjpEaWRDb21wdXRlRWxlbWVudExheW91dChjYWxsYmFj
a0lELCByZWN0LCBTdHJpbmcoKSksIDApOworfQorCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OnRha2VTY3JlZW5zaG90KHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgU3RyaW5nIHdp
bmRvd05vdEZvdW5kRXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0
YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RXJyb3JNZXNzYWdlOjpX
aW5kb3dOb3RGb3VuZCk7CisKKyAgICBXZWJQYWdlKiBwYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkud2ViUGFnZShwYWdlSUQpOworICAgIGlmICghcGFnZSkgeworICAgICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlkVGFrZVNjcmVlbnNob3QoY2FsbGJhY2tJRCwgaGFu
ZGxlLCB3aW5kb3dOb3RGb3VuZEVycm9yVHlwZSksIDApOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBwYWdlLT5tYWluRnJhbWVW
aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21h
dGlvblNlc3Npb246OkRpZFRha2VTY3JlZW5zaG90KGNhbGxiYWNrSUQsIGhhbmRsZSwgU3RyaW5n
KCkpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYkNvcmU6OkludFJlY3Qg
c25hcHNob3RSZWN0ID0gV2ViQ29yZTo6SW50UmVjdChXZWJDb3JlOjpJbnRQb2ludCgwLCAwKSwg
ZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7CisgICAgaWYgKHNuYXBzaG90UmVjdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb246OkRpZFRha2VTY3Jl
ZW5zaG90KGNhbGxiYWNrSUQsIGhhbmRsZSwgU3RyaW5nKCkpLCAwKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxXZWJJbWFnZT4gaW1hZ2UgPSBwYWdlLT5zY2FsZWRTbmFw
c2hvdFdpdGhPcHRpb25zKHNuYXBzaG90UmVjdCwgMSwgU25hcHNob3RPcHRpb25zU2hhcmVhYmxl
KTsKKyAgICBpZiAoaW1hZ2UpCisgICAgICAgIGltYWdlLT5iaXRtYXAoKS0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uOjpSZWFkT25seSk7CisKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6RGlkVGFrZVNjcmVlbnNob3QoY2FsbGJhY2tJRCwg
aGFuZGxlLCBTdHJpbmcoKSksIDApOyAgICAKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb25Qcm94eS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9BdXRvbWF0aW9u
L1dlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkuaAppbmRleCAxNWNkZmQwLi5hYjgzYTNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXV0b21hdGlv
bi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5LmgKQEAgLTY1LDYgKzY1LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlc29sdmVQYXJlbnRGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBj
YWxsYmFja0lEKTsKICAgICB2b2lkIGZvY3VzRnJhbWUodWludDY0X3QgZnJhbWVJRCk7CiAgICAg
dm9pZCBjb21wdXRlRWxlbWVudExheW91dCh1aW50NjRfdCBmcmFtZUlELCBTdHJpbmcgbm9kZUhh
bmRsZSwgYm9vbCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBib29sIHVzZVZpZXdwb3J0Q29vcmRp
bmF0ZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgdGFrZVNjcmVlbnNob3QodWlu
dDY0X3QgcGFnZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKTsKIAogICAgIFN0cmluZyBtX3Nlc3Np
b25JZGVudGlmaWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25Qcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Lm1l
c3NhZ2VzLmluCmluZGV4IGY3MjMxZTcuLjYyYWNlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5Lm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5Lm1lc3NhZ2VzLmluCkBAIC0zMSw0ICszMSw2IEBAIG1lc3NhZ2Vz
IC0+IFdlYkF1dG9tYXRpb25TZXNzaW9uUHJveHkgewogICAgIEZvY3VzRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCkKIAogICAgIENvbXB1dGVFbGVtZW50TGF5b3V0KHVpbnQ2NF90IGZyYW1lSUQsIFN0
cmluZyBub2RlSGFuZGxlLCBib29sIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGJvb2wgdXNlVmll
d3BvcnRDb29yZGluYXRlcywgdWludDY0X3QgY2FsbGJhY2tJRCkKKworICAgIFRha2VTY3JlZW5z
aG90KHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgY2FsbGJhY2tJRCkKIH0K
</data>
<flag name="review"
          id="299679"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>