<?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>72961</bug_id>
          
          <creation_ts>2011-11-22 08:25:42 -0800</creation_ts>
          <short_desc>[WK2][X11] Plugins should not be loaded into the UI process</short_desc>
          <delta_ts>2012-02-28 02:30:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>72121</dup_id>
          
          <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="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>hausmann</cc>
    
    <cc>mrobinson</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507625</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-11-22 08:25:42 -0800</bug_when>
    <thetext>Currently we load plugins in the UI process to get the mime description. This negates the security benefit of the multi-process architecture and it causing problems with Qt5 because some plugins rely on Qt4 and for some strange reason Qt4 and Qt5 does not like each other in a process (which result in a crash at dlopen when loading the plugin). To solve this I am planning to introduce a scanner process for querying the plugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507762</commentid>
    <comment_count>1</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-11-22 12:39:14 -0800</bug_when>
    <thetext>We do something similar for the Mac port where we launch the plug-in process when plug-ins need to write an updated MIME type plist file, see PluginProcessProxy::createPropertyListFile for more details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508134</commentid>
    <comment_count>2</comment_count>
      <attachid>116357</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-11-23 07:40:46 -0800</bug_when>
    <thetext>Created attachment 116357
WIP patch

WIP patch for feedback. I set the r? just to not miss your attention :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508135</commentid>
    <comment_count>3</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-11-23 07:41:15 -0800</bug_when>
    <thetext>I choose to introduce a dedicated executable for the task so this solution does not depend on the plugin process. The work-in-progress patch is missing gtk build parts - I need to learn that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508136</commentid>
    <comment_count>4</comment_count>
      <attachid>116357</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-11-23 07:45:25 -0800</bug_when>
    <thetext>Comment on attachment 116357
WIP patch

Attachment 116357 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10616294</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508185</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-23 09:21:38 -0800</bug_when>
    <thetext>Would it be possible to use CoreIPC for all the IPC stuff, instead of custom code and parsing stdout output?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508204</commentid>
    <comment_count>6</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-11-23 10:06:52 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Would it be possible to use CoreIPC for all the IPC stuff, instead of custom code and parsing stdout output?

I was also thinking about that. Our case is a bit trickier than the property list file thing what Andresca suggested. In that case there is no need to communicate with the plugin porcess but it just being launched and it creates the file. In our situation we are in the middle of a sync message from web process to ui process and we need to reply that. So we would have to launch the process and wait for a sync message from it and then reply to the web process. Maybe this could be done with a timer based approach (an inner run loop until got the message or a timout expires), I&apos;m not sure. So basically it is not trivial with CoreIPC - that&apos;s why I found adding a bit of custom IPC easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508317</commentid>
    <comment_count>7</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-11-23 12:49:58 -0800</bug_when>
    <thetext>After a bit investigation I realized that the situation is the same when the plugin process is launched so my concerns seems to be invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508677</commentid>
    <comment_count>8</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-11-24 01:59:32 -0800</bug_when>
    <thetext>Ok, finally I remember what was in my mind when I started working on this. I though we need to avoid linking against qt (because of the incompatibility of qt4 plugins and qt5) so I decided to implement a self-contained program for the task. But we will have the same issues with the plugin process so the plan is to reuse the gtk plugin process. I&apos;m going to investigate in that. If that is possible than we don&apos;t need this patch but we can handle this in the plugin process. However I&apos;m a bit afraid that the dependencies of webcore are too deep and it&apos;s not suitable to rebuild the word with gtk just for the plugin process.

I promise I stop brain dumping form now... :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508769</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-24 07:21:42 -0800</bug_when>
    <thetext>I would also prefer an approach similar to what&apos;s done on Mac OS X. A file on the disk has two advantages:

    1) It doesn&apos;t require hand-crafted IPC altogether.
    2) It can even serve as a cache, making it possible to avoid running the scanning process unless we can determine that we need to update the cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508771</commentid>
    <comment_count>10</comment_count>
      <attachid>116357</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-24 07:24:49 -0800</bug_when>
    <thetext>Comment on attachment 116357
WIP patch

Taking this out of the review queue, as I&apos;m pretty sure we don&apos;t want the hand-crafted IPC approach. Like I said in the previous comment, I&apos;d prefer a non-IPC approach with a disk-cache. See also bug #43179 for an alternate approach of using an sqlite database as cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566529</commentid>
    <comment_count>11</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-02-28 02:30:35 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 72121 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116357</attachid>
            <date>2011-11-23 07:40:46 -0800</date>
            <delta_ts>2011-11-24 07:24:48 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>upload.diff</filename>
            <type>text/plain</type>
            <size>17064</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwZjYxZWM3Li45YWIwYWJh
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMTEtMjMgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgorCisgICAg
ICAgIFtXSzJdW1gxMV0gUGx1Z2lucyBzaG91bGQgbm90IGJlIGxvYWRlZCBpbnRvIHRoZSBVSSBw
cm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mjk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U291cmNlL1F0V2ViS2l0LnBybzoKKwogMjAxMS0xMS0yMiAgQW5keSBXaW5nbyAgPHdpbmdvQGln
YWxpYS5jb20+CiAKICAgICAgICAgRml4IC5kaXItbG9jYWxzLmVsIHRvIG9ubHkgYXBwbHkgdG8g
c3BlY2lmaWMgbW9kZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9RdFdlYktpdC5wcm8gYi9Tb3VyY2Uv
UXRXZWJLaXQucHJvCmluZGV4IDhiMjdjYWUuLmZlN2E4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9R
dFdlYktpdC5wcm8KKysrIGIvU291cmNlL1F0V2ViS2l0LnBybwpAQCAtNCw2ICs0LDggQEAKICMg
U2VlICdUb29scy9xbWFrZS9SRUFETUUnIGZvciBhbiBvdmVydmlldyBvZiB0aGUgYnVpbGQgc3lz
dGVtCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAorbG9hZChmZWF0dXJlcykKKwogVEVNUExBVEUgPSBzdWJkaXJz
CiBDT05GSUcgKz0gb3JkZXJlZAogCkBAIC0xMyw2ICsxNSwxMCBAQCBTVUJESVJTICs9IGFwaQog
IW5vX3dlYmtpdDIgewogICAgIHdlYnByb2Nlc3MuZmlsZSA9IFdlYktpdDIvV2ViUHJvY2Vzcy5w
cm8KICAgICBTVUJESVJTICs9IHdlYnByb2Nlc3MKKyAgICBjb250YWlucyhERUZJTkVTLCBQTFVH
SU5fQVJDSElURUNUVVJFX1gxMT0xKSB7CisgICAgICAgIHBsdWdpbnNjYW5uZXJwcm9jZXNzLmZp
bGUgPSBXZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9QbHVnaW5TY2FubmVyUHJv
Y2Vzcy5wcm8KKyAgICAgICAgU1VCRElSUyArPSBwbHVnaW5zY2FubmVycHJvY2VzcworICAgIH0K
IH0KIAogaW5jbHVkZShXZWJLaXQvcXQvZG9jcy9kb2NzLnByaSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBhZWYy
Yzc1Li5jMzg5ZjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTEtMjMgIEJh
bGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgorCisgICAgICAgIFtXSzJdW1gxMV0g
UGx1Z2lucyBzaG91bGQgbm90IGJlIGxvYWRlZCBpbnRvIHRoZSBVSSBwcm9jZXNzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSBhIHNjYW5u
ZXIgcHJvY2VzcyB0byBxdWVyeSB0aGUgcGx1Z2luIGFib3V0CisgICAgICAgIHRoZSBpbmZvcm1h
dGlvbnMgd2UgbmVlZCBhdCB0aGUgVUkgcHJvY2VzcyBzaWRlLgorICAgICAgICBDb21tdW5pY2F0
aW9uIGhhcyBpbXBsZW1lbnRlZCB2aWEgYmFzaWMgVU5JWCBJUEMgaW4gYSB3YXkKKyAgICAgICAg
dGhhdCBoYW5kbGVzIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIG9mIHRoZSBzY2FubmVyIHByb2Nlc3Mu
CisKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVs
ZS5oOgorICAgICAgICAqIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdp
bk1vZHVsZVgxMS5jcHA6CisgICAgICAgIChXZWJLaXQ6OnNjYW5uZXJQcm9jZXNzUGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6OmNsb3NlRmlsZURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mb0J5U2Nhbm5lclByb2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyk6CisgICAg
ICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL1BsdWdpblNjYW5uZXJQcm9jZXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChwaXBlV3JpdGUpOgorICAgICAgICAod3JpdGVUcnVuY2F0ZWQp
OgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDEx
L1BsdWdpblNjYW5uZXJQcm9jZXNzLnBybzogQWRkZWQuCisKIDIwMTEtMTEtMjIgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIEVuc3VyZSB3ZWIg
cHJvY2VzcyBiZWZvcmUgc3RhcnRpbmcgYSBkb3dubG9hZApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luTW9kdWxl
LmgKaW5kZXggZjgwYTBhMS4uOWNlOWQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oCkBA
IC03MCw2ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVgxMVF1aXJrc0JlZm9yZUxv
YWQoKTsKICAgICBzdGF0aWMgdm9pZCBzZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiBt
aW1lRGVzY3JpcHRpb24sIFBsdWdpbk1vZHVsZUluZm8mKTsKICAgICBib29sIGdldFBsdWdpbklu
Zm9Gb3JMb2FkZWRQbHVnaW4oUGx1Z2luTW9kdWxlSW5mbyYpOworICAgIHN0YXRpYyBib29sIGdl
dFBsdWdpbkluZm9CeVNjYW5uZXJQcm9jZXNzKGNoYXIqIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVs
ZUluZm8mKTsKICNlbmRpZgogCiAgICAgYm9vbCB0cnlHZXRTaXRlc1dpdGhEYXRhKFZlY3RvcjxT
dHJpbmc+Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRz
Y2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL05ldHNjYXBlUGx1Z2luTW9kdWxlWDExLmNwcAppbmRl
eCBiZTA0YmZmLi42NGE2MmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1
Z2lucy9OZXRzY2FwZS94MTEvTmV0c2NhcGVQbHVnaW5Nb2R1bGVYMTEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVs
ZVgxMS5jcHAKQEAgLTMyLDEzICszMiwyMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgogCiAjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNp
bmNsdWRlIDxRRGlyPgogI2luY2x1ZGUgPFFMaWJyYXJ5PgogI2VuZGlmCiAKKyNpbmNsdWRlIDxl
cnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE1MSwyMyArMTU5LDE3NyBAQCBi
b29sIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpnZXRQbHVnaW5JbmZvRm9yTG9hZGVkUGx1Z2luKFBs
dWdpbk1vZHVsZUluZm8mIHBsdWdpbgogCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK3N0YXRpYyBT
dHJpbmcgc2Nhbm5lclByb2Nlc3NQYXRoKCkKK3sKKyAgICBjb25zdCBjaGFyKiBzY2FubmVyQmFz
ZU5hbWUgPSAiUGx1Z2luU2Nhbm5lclByb2Nlc3MiOworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFT
dHJpbmcgYXBwbGljYXRpb25QYXRoID0gUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQ
YXRoKCkgKyBRRGlyOjpzZXBhcmF0b3IoKSArIFFMYXRpbjFTdHJpbmcoc2Nhbm5lckJhc2VOYW1l
KTsKKyAgICBpZiAoIVFGaWxlOjpleGlzdHMoYXBwbGljYXRpb25QYXRoKSkKKyAgICAgICAgYXBw
bGljYXRpb25QYXRoID0gUUxhdGluMVN0cmluZygiUGx1Z2luU2Nhbm5lclByb2Nlc3MiKTsKKyAg
ICByZXR1cm4gU3RyaW5nKGFwcGxpY2F0aW9uUGF0aCk7CisjZWxpZiBQTEFURk9STShHVEspCisg
ICAgY29uc3QgZ2NoYXIqIGV4ZWNEaXJlY3RvcnkgPSBnX2dldGVudigiV0VCS0lUX0VYRUNfUEFU
SCIpOworICAgIHJldHVybiBTdHJpbmcoZ19idWlsZF9maWxlbmFtZShleGVjRGlyZWN0b3J5ID8g
ZXhlY0RpcmVjdG9yeSA6IExJQkVYRUNESVIsIHNjYW5uZXJCYXNlTmFtZSkpOworI2Vsc2UKKyAg
ICByZXR1cm4gU3RyaW5nKHNjYW5uZXJCYXNlTmFtZSk7CisjZW5kaWYKK30KKworc3RhdGljIHZv
aWQgY2xvc2VGaWxlRGVzY3JpcHRvcihpbnQgZmlsZURlc2NyaXB0b3IpCit7CisgICAgd2hpbGUg
KGNsb3NlKGZpbGVEZXNjcmlwdG9yKSA9PSAtMSAmJiAoZXJybm8gPT0gRUlOVFIpKSB7IH0KK30K
KworYm9vbCBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0UGx1Z2luSW5mb0J5U2Nhbm5lclByb2Nl
c3MoY2hhciogcmVhbFBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKK3sKKyAg
ICAvLyBTdGFydCB0aGUgc2Nhbm5lciBwcm9jZXNzIHRoYXQgd2lsbCBnZXQgdGhlIGluZm9ybWF0
aW9uIGZyb20gdGhlIHBsdWdpbi4KKyAgICAvLyBXZSBleHBlY3QgaXQgdG8gcHJvZHVjZSB0aHJl
ZSBsaW5lcyBvZiBvdXRwdXQ6IG5hbWUsIGRlc2NyaXB0aW9uIGFuZCBNSU1FIGRlc2NyaXB0aW9u
LgorICAgIC8vIFRoZSBmaXJzdCB0d28gaXMgYWxsb3dlZCB0byBiZSBlbXB0eSBidXQgdGhlIE1J
TUUgZGVzY3JpcHRpb24gaXMgbm90LgorICAgIC8vIElmIHRoZSBvdXRwdXQgZG9lcyBub3QgZml0
IHdpdGggdGhlc2UgY29uZGl0aW9ucyB0aGFuIHdlIGFzc3VtZSB0aGUgc2Nhbm5lciBjb3VsZCBu
b3QKKyAgICAvLyBnZXQgdGhlIGluZm9ybWF0aW9uIGJlY2F1c2Ugb2YgYW4gZXJyb3IgYW5kIHdl
IHJlamVjdCB0byB1c2UgdGhlIHBsdWdpbi4KKworICAgIGludCBwaXBlRW5kc1syXTsKKyAgICBp
bnQgcmVzdWx0ID0gcGlwZTIocGlwZUVuZHMsIE9fTk9OQkxPQ0spOworICAgIEFTU0VSVF9VTlVT
RUQocmVzdWx0LCAhcmVzdWx0KTsKKyAgICBpbnQgcmVhZEVuZCA9IHBpcGVFbmRzWzBdOworICAg
IGludCB3cml0ZUVuZCA9IHBpcGVFbmRzWzFdOworCisgICAgcGlkX3QgaWQgPSBmb3JrKCk7Cisg
ICAgaWYgKGlkKSB7CisgICAgICAgIC8vIFBhcmVudC4KKyAgICAgICAgY2xvc2VGaWxlRGVzY3Jp
cHRvcih3cml0ZUVuZCk7CisKKyAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gc3Rh
cnQgd3JpdGluZy4gSXQgc2VuZHMgdGhlIGZpcnN0IGJ5dGUganVzdCBmb3Igbm90aWZ5aW5nIHVz
LgorICAgICAgICBmZF9zZXQgZmRzOworICAgICAgICBGRF9aRVJPKCZmZHMpOworICAgICAgICBG
RF9TRVQocmVhZEVuZCwgJmZkcyk7CisgICAgICAgIHRpbWV2YWwgc3RhcnR1cFRpbWVvdXQgPSB7
IDAsIDEwMCAqIDEwMDAgfTsgLy8gMTAwIE1pbGxpc2Vjb25kcy4KKyAgICAgICAgaW50IHNlbGVj
dFJlc3VsdDsKKyAgICAgICAgd2hpbGUgKChzZWxlY3RSZXN1bHQgPSBzZWxlY3QocmVhZEVuZCAr
IDEsICZmZHMsIDAsIDAsICZzdGFydHVwVGltZW91dCkpID09IC0xICYmIGVycm5vID09IEVJTlRS
KSB7IH0KKyAgICAgICAgY2hhciBvbmVCeXRlQnVmZmVyOworICAgICAgICBpZiAoc2VsZWN0UmVz
dWx0IDw9IDAgfHwgcmVhZChyZWFkRW5kLCAmb25lQnl0ZUJ1ZmZlciwgMSkgIT0gMSkgeworICAg
ICAgICAgICAgLy8gU2Nhbm5lciBwcm9jZXNzIGV4aXRlZCBvciBkaWVkLgorICAgICAgICAgICAg
Y2xvc2VGaWxlRGVzY3JpcHRvcihyZWFkRW5kKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFJlYWQgYW5kIHByb2Nlc3MgdGhlIG91dHB1dC4KKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgbnVtTGluZXNFeHBlY3RlZCA9IDM7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHJlYWRTaXplID0gMjU2OworCisgICAgICAgIFN0cmluZyBvdXRwdXRbbnVtTGlu
ZXNFeHBlY3RlZF07CisgICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXIocmVhZFNpemUgKiA0KTsK
KyAgICAgICAgdW5zaWduZWQgbGluZUluZGV4ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZW5kID0g
MDsKKyAgICAgICAgdW5zaWduZWQgbmV4dExpbmVTdGFydCA9IDA7CisgICAgICAgIHVuc2lnbmVk
IGJ5dGVzUmVhZCA9IDA7CisgICAgICAgIHRpbWV2YWwgdGltZW91dCA9IHsgMCwgMTAgKiAxMDAw
IH07IC8vIDEwIE1pbGxpc2Vjb25kcy4KKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgd2hpbGUgKChzZWxlY3RSZXN1bHQgPSBzZWxlY3QocmVhZEVuZCArIDEsICZmZHMsIDAs
IDAsICZ0aW1lb3V0KSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQorICAgICAgICAgICAg
aWYgKHNlbGVjdFJlc3VsdCA8PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gU2Nhbm5lciBwcm9j
ZXNzIGV4aXRlZCBvciBkaWVkLgorICAgICAgICAgICAgICAgIGNsb3NlRmlsZURlc2NyaXB0b3Io
cmVhZEVuZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIGNhblJlYWRNb3JlQnl0ZXMgPSB0cnVlOworICAgICAgICAgICAg
d2hpbGUgKGNhblJlYWRNb3JlQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzaXpl
KGJ5dGVzUmVhZCArIHJlYWRTaXplKTsKKyAgICAgICAgICAgICAgICBpbnQgcmVhZFJlc3VsdDsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoKHJlYWRSZXN1bHQgPSByZWFkKHJlYWRFbmQsIGJ1ZmZl
ci5kYXRhKCkgKyBieXRlc1JlYWQsIHJlYWRTaXplKSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIp
IHsgfQorICAgICAgICAgICAgICAgIGlmIChyZWFkUmVzdWx0ID09IC0xICYmIGVycm5vID09IEVB
R0FJTikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHJlYWRSZXN1bHQgIT0gLTEpOworCisgICAgICAgICAgICAgICAgaWYgKCFyZWFkUmVzdWx0KSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRvbyBlYXJseSBFT0YuCisgICAgICAgICAgICAgICAg
ICAgIGNsb3NlRmlsZURlc2NyaXB0b3IocmVhZEVuZCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBieXRlc1Jl
YWQgKz0gcmVhZFJlc3VsdDsKKyAgICAgICAgICAgICAgICBjYW5SZWFkTW9yZUJ5dGVzID0gcmVh
ZFJlc3VsdCA9PSByZWFkU2l6ZTsKKworICAgICAgICAgICAgICAgIGZvciAoOyBlbmQgPCBieXRl
c1JlYWQ7ICsrZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbZW5kXSA9PSAn
XG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5lTGVuZ3RoID0gZW5k
IC0gbmV4dExpbmVTdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTGVuZ3Ro
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtsaW5lSW5kZXhdID0gU3RyaW5n
KGJ1ZmZlci5kYXRhKCkgKyBuZXh0TGluZVN0YXJ0LCBsaW5lTGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgrK2xpbmVJbmRleCA9PSBudW1MaW5lc0V4cGVjdGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VGaWxlRGVzY3JpcHRvcihyZWFkRW5kKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXRbMl0uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4lc1xuJXNcbiIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbMF0uYXNjaWkoKS5kYXRhKCksIG91
dHB1dFsxXS5hc2NpaSgpLmRhdGEoKSwgb3V0cHV0WzJdLmFzY2lpKCkuZGF0YSgpKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5pbmZvLm5hbWUgPSBvdXRwdXRbMF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmluZm8uZGVzYyA9IG91dHB1dFsxXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6c2V0TUlN
RURlc2NyaXB0aW9uKG91dHB1dFsyXSwgcGx1Z2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5leHRMaW5lU3RhcnQgPSBlbmQgKyAxOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gQ2hpbGQuCisgICAgICAgIGNsb3NlRmlsZURlc2NyaXB0b3IocmVh
ZEVuZCk7CisKKyAgICAgICAgY2hhciB3cml0ZUVuZEFzU3RyaW5nWzE2XTsKKyAgICAgICAgc3By
aW50Zih3cml0ZUVuZEFzU3RyaW5nLCAiJWQiLCB3cml0ZUVuZCk7CisgICAgICAgIENTdHJpbmcg
cGF0aCA9IHNjYW5uZXJQcm9jZXNzUGF0aCgpLmFzY2lpKCk7CisgICAgICAgIGNoYXIqIGFyZ3Zb
XSA9IHsKKyAgICAgICAgICAgIHBhdGgubXV0YWJsZURhdGEoKSwKKyAgICAgICAgICAgIHdyaXRl
RW5kQXNTdHJpbmcsCisgICAgICAgICAgICByZWFsUGx1Z2luUGF0aCwKKyAgICAgICAgICAgIDAK
KyAgICAgICAgfTsKKworICAgICAgICBleGVjdnAoYXJndlswXSwgYXJndik7CisKKyAgICAgICAg
X2V4aXQoMSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIGJvb2wg
TmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5Q
YXRoLCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4pCiB7CisgICAgZnByaW50ZihzdGRlcnIsICJn
ZXQgaW5mbyBmb3IgJXNcbiIsIHBsdWdpblBhdGguYXNjaWkoKS5kYXRhKCkpOworCiAgICAgLy8g
VGVtcGFyYXJpbHkgc3VwcHJlc3Mgc3Rkb3V0IGluIHRoaXMgZnVuY3Rpb24gYXMgcGx1Z2lucyB3
aWxsIGJlIGxvYWRlZCBhbmQgc2h1dGRvd24gYW5kIGRlYnVnIGluZm8KICAgICAvLyBpcyBsZWFr
ZWQgdG8gbGF5b3V0IHRlc3Qgb3V0cHV0LgogICAgIFN0ZG91dERldk51bGxSZWRpcmVjdG9yIHN0
ZG91dERldk51bGxSZWRpcmVjdG9yOwogCi0gICAgLy8gV2UgYXJlIGxvYWRpbmcgdGhlIHBsdWdp
biBoZXJlIHNpbmNlIGl0IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBzdGFuZGFyZGl6ZWQgd2F5IHRv
Ci0gICAgLy8gZ2V0IHRoZSBuZWVkZWQgaW5mb3JtYXRpb25zIGZyb20gYSBVTklYIHBsdWdpbiB3
aXRob3V0IGxvYWRpbmcgaXQuCi0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z2luTW9kdWxlPiBwbHVn
aW5Nb2R1bGUgPSBOZXRzY2FwZVBsdWdpbk1vZHVsZTo6Z2V0T3JDcmVhdGUocGx1Z2luUGF0aCk7
Ci0gICAgaWYgKCFwbHVnaW5Nb2R1bGUpCisgICAgY2hhciByZWFsUGx1Z2luUGF0aFtQQVRIX01B
WCArIDFdOworICAgIGlmICghcmVhbHBhdGgocGx1Z2luUGF0aC5hc2NpaSgpLmRhdGEoKSwgcmVh
bFBsdWdpblBhdGgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBwbHVnaW5Nb2R1bGUt
PmluY3JlbWVudExvYWRDb3VudCgpOwotICAgIGJvb2wgcmV0dXJuVmFsdWUgPSBwbHVnaW5Nb2R1
bGUtPmdldFBsdWdpbkluZm9Gb3JMb2FkZWRQbHVnaW4ocGx1Z2luKTsKLSAgICBwbHVnaW5Nb2R1
bGUtPmRlY3JlbWVudExvYWRDb3VudCgpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHN0
ZDo6cGFpcjxib29sLCBXZWJDb3JlOjpQbHVnaW5JbmZvPiA+IFBsdWdpbkluZm9NYXA7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChQbHVnaW5JbmZvTWFwLCBwbHVnaW5JbmZvQ2FjaGUsICgpKTsK
KworICAgIFN0cmluZyBrZXkocmVhbFBsdWdpblBhdGgpOworICAgIFBsdWdpbkluZm9NYXA6Oml0
ZXJhdG9yIGZvdW5kID0gcGx1Z2luSW5mb0NhY2hlLmZpbmQoa2V5KTsKKyAgICBpZiAoZm91bmQg
IT0gcGx1Z2luSW5mb0NhY2hlLmVuZCgpKSB7CisgICAgICAgIGlmIChmb3VuZC0+c2Vjb25kLmZp
cnN0KSB7CisgICAgICAgICAgICBwbHVnaW4uaW5mbyA9IGZvdW5kLT5zZWNvbmQuc2Vjb25kOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChnZXRQbHVnaW5JbmZvQnlTY2FubmVyUHJvY2VzcyhyZWFsUGx1
Z2luUGF0aCwgcGx1Z2luKSkgeworICAgICAgICBwbHVnaW5JbmZvQ2FjaGUuYWRkKGtleSwgc3Rk
OjptYWtlX3BhaXIodHJ1ZSwgcGx1Z2luLmluZm8pKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQogCi0gICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIHBsdWdpbkluZm9DYWNoZS5hZGQo
a2V5LCBzdGQ6Om1ha2VfcGFpcihmYWxzZSwgUGx1Z2luSW5mbygpKSk7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiB2b2lkIE5ldHNjYXBlUGx1Z2luTW9kdWxlOjpkZXRlcm1pbmVRdWlya3MoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUveDExL1Bs
dWdpblNjYW5uZXJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05l
dHNjYXBlL3gxMS9QbHVnaW5TY2FubmVyUHJvY2Vzcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjU3MGU2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9QbHVnaW5TY2FubmVyUHJvY2Vzcy5jcHAKQEAg
LTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgWFBfVU5JWCAx
CisKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisKKy8vIERlZmluZSBhbiBBU1NFUlQgdGhhdCBkb2VzIG5vdCBkZXBlbmQgb24gaGVscGVy
cyBpbiBXVEYgYnV0IHByb2R1Y2luZyB0aGUgc2FtZSBvdXRwdXQuCisjaWZuZGVmIE5ERUJVRwor
I2RlZmluZSBDUkFTSCgpIGRvIHsgXAorICAgICooaW50ICopKHVpbnRwdHJfdCkweGJiYWRiZWVm
ID0gMDsgXAorICAgICgodm9pZCgqKSgpKTApKCk7IC8qIE1vcmUgcmVsaWFibGUsIGJ1dCBkb2Vz
bid0IHNheSBCQkFEQkVFRiAqLyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVChjb25k
aXRpb24pIFwKKyAgICBpZiAoIShjb25kaXRpb24pKSB7IFwKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJBU1NFUlRJT04gRkFJTEVEOiAlc1xuJXM6KCVkKSA6ICVzXG4iLCAjY29uZGl0aW9uLCBf
X0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7IFwKKyAgICAgICAgQ1JBU0goKTsgXAor
ICAgIH0KKyNlbHNlCisjZGVmaW5lIEFTU0VSVChjb25kaXRpb24pCisjZW5kaWYKKworI2RlZmlu
ZSBESUVfSUZfTk9UKGNvbmRpdGlvbikgXAorICAgIGRvIHsgXAorICAgICAgICBpZiAoIShjb25k
aXRpb24pKSBcCisgICAgICAgICAgICBleGl0KDEpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2Rl
ZmluZSBFWFBFQ1QoY29uZGl0aW9uKSAgXAorICAgIGRvIHsgXAorICAgICAgICBBU1NFUlQoKGNv
bmRpdGlvbikpOyBcCisgICAgICAgIGlmICghKGNvbmRpdGlvbikpIHsgXAorICAgICAgICAgICAg
LyogU29tZXRoaW5nIGJhZCBoYXBwZW5lZCBpbiB0aGUgVUkgcHJvY2Vzcy4gRGllIGdyYWNlZnVs
bHkuICovIFwKKyAgICAgICAgICAgIGV4aXQoMSk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3aGls
ZSAoMCkKKworc3RhdGljIHZvaWQgcGlwZVdyaXRlKGludCBwaXBlLCBjb25zdCBjaGFyKiBzdHJp
bmcsIHVuc2lnbmVkIG5CeXRlcykKK3sKKyAgICBBU1NFUlQoIXN0cmluZ1tuQnl0ZXNdKTsKKwor
ICAgIHVuc2lnbmVkIGJ5dGVzV3JpdHRlbiA9IDA7CisgICAgZmRfc2V0IGZkczsKKyAgICBGRF9a
RVJPKCZmZHMpOworICAgIEZEX1NFVChwaXBlLCAmZmRzKTsKKyAgICB0aW1ldmFsIHRpbWVvdXQg
PSB7MCwgMTAgKiAxMDAwIH07IC8vIDEwIE1pbGxpc2Vjb25kcy4KKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICBBU1NFUlQoYnl0ZXNXcml0dGVuIDwgbkJ5dGVzKTsKKyAgICAgICAgaW50IHNl
bGVjdFJlc3VsdDsKKyAgICAgICAgd2hpbGUgKChzZWxlY3RSZXN1bHQgPSBzZWxlY3QocGlwZSAr
IDEsIDAsICZmZHMsIDAsICZ0aW1lb3V0KSkgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpIHsgfQor
ICAgICAgICBFWFBFQ1Qoc2VsZWN0UmVzdWx0ID4gMCk7CisKKyAgICAgICAgaW50IHJlc3VsdDsK
KyAgICAgICAgd2hpbGUgKChyZXN1bHQgPSB3cml0ZShwaXBlLCBzdHJpbmcgKyBieXRlc1dyaXR0
ZW4sIG5CeXRlcyAtIGJ5dGVzV3JpdHRlbikpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0K
KyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgRVhQRUNUKHJlc3VsdCAhPSAtMSk7CisKKyAgICAgICAgYnl0
ZXNXcml0dGVuICs9IHJlc3VsdDsKKyAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSBuQnl0ZXMp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZVRydW5j
YXRlZChpbnQgcGlwZSAsIGNvbnN0IGNoYXIqIG9yaWdpbmFsKQoreworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0cmxlbihvcmlnaW5hbCk7CisgICAgY2hhciogdHJ1bmNhdGVkID0gbmV3IGNoYXJb
bGVuZ3RoICsgMV07CisgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gMDsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBjaGFyIGMgPSBvcmlnaW5h
bFtpXTsKKyAgICAgICAgaWYgKGMgIT0gJ1xuJykKKyAgICAgICAgICAgIHRydW5jYXRlZFtuZXdM
ZW5ndGgrK10gPSBjOworICAgIH0KKyAgICB0cnVuY2F0ZWRbbmV3TGVuZ3RoXSA9IDA7CisKKyAg
ICBwaXBlV3JpdGUocGlwZSwgdHJ1bmNhdGVkLCBuZXdMZW5ndGgpOworCisgICAgZGVsZXRlIHRy
dW5jYXRlZDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGlu
dCBwaXBlID0gYXRvaShhcmd2WzFdKTsKKyAgICBjaGFyKiBwbHVnaW5QYXRoID0gYXJndlsyXTsK
KworICAgIHZvaWQqIHBsdWdpbiA9IGRsb3BlbihwbHVnaW5QYXRoLCBSVExEX05PVyk7CisgICAg
RElFX0lGX05PVChwbHVnaW4pOworCisgICAgTlBQX0dldFZhbHVlUHJvY1B0ciBOUFBfR2V0VmFs
dWUgPSByZWludGVycHJldF9jYXN0PE5QUF9HZXRWYWx1ZVByb2NQdHI+KGRsc3ltKHBsdWdpbiwg
Ik5QX0dldFZhbHVlIikpOworICAgIERJRV9JRl9OT1QoTlBQX0dldFZhbHVlKTsKKyAgICBOUF9H
ZXRNSU1FRGVzY3JpcHRpb25GdW5jUHRyIE5QX0dldE1JTUVEZXNjcmlwdGlvbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8TlBfR2V0TUlNRURlc2NyaXB0aW9uRnVuY1B0cj4oZGxzeW0ocGx1Z2luLCAiTlBf
R2V0TUlNRURlc2NyaXB0aW9uIikpOworICAgIERJRV9JRl9OT1QoTlBfR2V0TUlNRURlc2NyaXB0
aW9uKTsKKworICAgIGNoYXIqIG5hbWU7CisgICAgTlBFcnJvciBlcnJvck5hbWUgPSBOUFBfR2V0
VmFsdWUoMCwgTlBQVnBsdWdpbk5hbWVTdHJpbmcsICZuYW1lKTsKKyAgICBjaGFyKiBkZXNjcmlw
dGlvbjsKKyAgICBOUEVycm9yIGVycm9yRGVzY3JpcHRpb24gPSBOUFBfR2V0VmFsdWUoMCwgTlBQ
VnBsdWdpbkRlc2NyaXB0aW9uU3RyaW5nLCAmZGVzY3JpcHRpb24pOworICAgIGNoYXIqIG1pbWVE
ZXNjcmlwdGlvbiA9IE5QX0dldE1JTUVEZXNjcmlwdGlvbigpOworICAgIERJRV9JRl9OT1QobWlt
ZURlc2NyaXB0aW9uKTsKKworICAgIC8vIE5vdGlmeSB0aGUgVUkgcHJvY2Vzcy4KKyAgICBwaXBl
V3JpdGUocGlwZSwgIlgiLCAxKTsKKworICAgIGlmIChlcnJvck5hbWUgPT0gTlBFUlJfTk9fRVJS
T1IpCisgICAgICAgIHdyaXRlVHJ1bmNhdGVkKHBpcGUsIG5hbWUpOworCisgICAgcGlwZVdyaXRl
KHBpcGUsICJcbiIsIDEpOworCisgICAgaWYgKGVycm9yRGVzY3JpcHRpb24gPT0gTlBFUlJfTk9f
RVJST1IpCisgICAgICAgIHdyaXRlVHJ1bmNhdGVkKHBpcGUsIGRlc2NyaXB0aW9uKTsKKworICAg
IHBpcGVXcml0ZShwaXBlLCAiXG4iLCAxKTsKKworICAgIHdyaXRlVHJ1bmNhdGVkKHBpcGUsIG1p
bWVEZXNjcmlwdGlvbik7CisgICAgcGlwZVdyaXRlKHBpcGUsICJcbiIsIDEpOworCisgICAgd2hp
bGUgKGNsb3NlKHBpcGUpID09IC0xICYmIGVycm5vID09IEVJTlRSKSB7IH0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9QbHVnaW5TY2Fu
bmVyUHJvY2Vzcy5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS94
MTEvUGx1Z2luU2Nhbm5lclByb2Nlc3MucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmYxNzgyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
UGx1Z2lucy9OZXRzY2FwZS94MTEvUGx1Z2luU2Nhbm5lclByb2Nlc3MucHJvCkBAIC0wLDAgKzEs
MjcgQEAKK1RFTVBMQVRFID0gYXBwCisKK0NPTkZJRyAtPSBxdAorCitUQVJHRVQgPSBQbHVnaW5T
Y2FubmVyUHJvY2VzcworREVTVERJUiA9ICQke1JPT1RfQlVJTERfRElSfS9iaW4KK0xJQlMgPSAt
bGRsCisKK1NPVVJDRVMgKz0gUGx1Z2luU2Nhbm5lclByb2Nlc3MuY3BwCisKK0lOU1RBTExTICs9
IHRhcmdldAorCitTT1VSQ0VfRElSPSQke1JPT1RfV0VCS0lUX0RJUn0vU291cmNlCisKK0NPTkZJ
RyhyZWxlYXNlLCBkZWJ1Z3xyZWxlYXNlKTogREVGSU5FUyAqPSBOREVCVUcKKworSU5DTFVERVBB
VEggPSAkJFNPVVJDRV9ESVIvV2ViS2l0MiBcCisgICAgICAgICAgICAgICQkU09VUkNFX0RJUi9X
ZWJDb3JlL2JyaWRnZSBcCisgICAgICAgICAgICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL3BsdWdp
bnMgXAorICAgICAgICAgICAgICAkJFNPVVJDRV9ESVIvSmF2YVNjcmlwdENvcmUgXAorICAgICAg
ICAgICAgICAkJElOQ0xVREVQQVRICisKK2lzRW1wdHkoSU5TVEFMTF9CSU5TKSB7CisgICAgdGFy
Z2V0LnBhdGggPSAkJFtRVF9JTlNUQUxMX0JJTlNdCit9IGVsc2UgeworICAgIHRhcmdldC5wYXRo
ID0gJCRJTlNUQUxMX0JJTlMKK30K
</data>
<flag name="review"
          id="115500"
          type_id="1"
          status="-"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="115501"
          type_id="3"
          status="-"
          setter="kbalazs"
    />
          </attachment>
      

    </bug>

</bugzilla>