<?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>177041</bug_id>
          
          <creation_ts>2017-09-16 14:54:29 -0700</creation_ts>
          <short_desc>[WPE][GTK] Merge ProcessLauncher[WPE,GTK]</short_desc>
          <delta_ts>2017-09-27 12:18:29 -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>WPE WebKit</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349689</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-16 14:54:29 -0700</bug_when>
    <thetext>ProcessLauncherWPE.cpp and ProcessLauncherGTK.cpp contain largely duplicated code. Let&apos;s merge them together as ProcessLauncherGLib.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349690</commentid>
    <comment_count>1</comment_count>
      <attachid>321014</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-16 14:58:48 -0700</bug_when>
    <thetext>Created attachment 321014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349736</commentid>
    <comment_count>2</comment_count>
      <attachid>321014</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-17 01:22:29 -0700</bug_when>
    <thetext>Comment on attachment 321014
Patch

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

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:104
&gt; +        nargs = 5;

nargs++ here would be safer in case we add a new one

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:113
&gt; +        for (auto it = splitArgs.begin(); it != splitArgs.end(); it++)

I know this was existing code, but we could take advantage of this patch to modernize it a bit.

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:123
&gt; +    for (auto it = prefixArgs.begin(); it != prefixArgs.end(); it++)

Ditto.

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:132
&gt; +    argv[i++] = const_cast&lt;char*&gt;(realPluginPath.data());

I think this need to be protected by a ENABLE(NETSCAPE_PLUGIN_API) ifdef.

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:136
&gt; +    if (!g_spawn_async(0, argv, 0, G_SPAWN_LEAVE_DESCRIPTORS_OPEN, childSetupFunction, GINT_TO_POINTER(socketPair.server), &amp;pid, &amp;error.outPtr())) {

0 -&gt; nullptr

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:137
&gt; +        g_printerr(&quot;Unable to fork a new WebProcess: %s.\n&quot;, error-&gt;message);

WTFLogAlways?

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:151
&gt; +    RefPtr&lt;ProcessLauncher&gt; protectedThis(this);
&gt; +    IPC::Connection::Identifier serverSocket = socketPair.server;
&gt; +    RunLoop::main().dispatch([protectedThis, pid, serverSocket] {

RunLoop::main().dispatch([protectedThis = makeRef(*this), pid, serverSocket = socketPair.server] {

&gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:152
&gt; +        protectedThis-&gt;didFinishLaunchingProcess(pid, serverSocket);

You can also capture this for convenience and then you don&apos;t need to capture pid

didFinishLaunchingProcess(m_processIdentifier, serverSocket);

I know all this is just copied code, not yours, I don&apos;t like making refactorings or other changes in behavior in this kind of patches, but coding style and modernization is always welcome, I think :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349746</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-17 07:29:46 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #2)
&gt; &gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:132
&gt; &gt; +    argv[i++] = const_cast&lt;char*&gt;(realPluginPath.data());
&gt; 
&gt; I think this need to be protected by a ENABLE(NETSCAPE_PLUGIN_API) ifdef.

Yes, I broke this by moving realPluginPath inside the ifdef. I&apos;ll do this:

#if ENABLE(NETSCAPE_PLUGIN_API)
    argv[i++] = const_cast&lt;char*&gt;(realPluginPath.data());
#else
    argv[i++] = nullptr;
#endif
    argv[i++] = nullptr;

This will avoid leaving uninitialized stack memory in that index. It&apos;s awkward. This messiness should all be replaced with a Vector, but that will be a follow-up patch.

&gt; &gt; Source/WebKit/UIProcess/Launcher/glib/ProcessLauncherGLib.cpp:137
&gt; &gt; +        g_printerr(&quot;Unable to fork a new WebProcess: %s.\n&quot;, error-&gt;message);
&gt; 
&gt; WTFLogAlways?

This should be a fatal error, so I&apos;ll change it to g_error(). I&apos;ll also change the error message to say &quot;child process&quot; rather than &quot;WebProcess&quot; since that has been on my TODO list for at least two years now. Also, &quot;g_printerr() should not be used from within libraries&quot; according to its documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349747</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-17 07:34:06 -0700</bug_when>
    <thetext>Committed r222133: &lt;http://trac.webkit.org/changeset/222133&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1349749</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-17 07:37:35 -0700</bug_when>
    <thetext>Committed r222134: &lt;http://trac.webkit.org/changeset/222134&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321014</attachid>
            <date>2017-09-16 14:58:48 -0700</date>
            <delta_ts>2017-09-17 01:22:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177041-20170916165847.patch</filename>
            <type>text/plain</type>
            <size>20781</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyMTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGE0MDJmMWUzYzg2MzlkYmZk
MjJjZDU5YjhkNjZjMDE2ODk5NmUwNjEuLjA2ZWJiZGJkMmU0MjZmMzJjZDNkYTM1NzQzZmUwZmRk
YjRhMGU5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDktMTYgIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXUEVdW0dUS10g
TWVyZ2UgUHJvY2Vzc0xhdW5jaGVyW1dQRSxHVEtdCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwNDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nl
c3NMYXVuY2hlckdMaWIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TGF1bmNoZXIvZ3RrL1Byb2Nlc3NMYXVuY2hlckd0ay5jcHAuCisgICAgICAgIChXZWJLaXQ6OmNo
aWxkU2V0dXBGdW5jdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRl
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZh
bGlkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvd3BlL1Byb2Nlc3NMYXVuY2hl
cldQRS5jcHA6IFJlbW92ZWQuCisKIDIwMTctMDktMTUgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFdURjogdXNlIEZvcndhcmQuaCB3aGVuIGFwcHJvcHJpYXRl
IGluc3RlYWQgb2YgVmVjdG9yLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1H
VEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDY4MWE5OGM0
ZWE0YzNjYmJlNjY0ODFlYWZiYmY4YTRkY2FjOGFmYzQuLmMxOGYxY2Y1NWZkYmJmYTc1MzUxYTkx
NmNkNGE3OWM0ZDUzZDNiNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsu
Y21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTk1LDcgKzE5
NSw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0F1dG9t
YXRpb24vZ3RrL1dlYkF1dG9tYXRpb25TZXNzaW9uR3RrLmNwcAogCi0gICAgVUlQcm9jZXNzL0xh
dW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCisgICAgVUlQcm9jZXNzL0xhdW5jaGVy
L2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAKIAogICAgIFVJUHJvY2Vzcy9saW51eC9NZW1v
cnlQcmVzc3VyZU1vbml0b3IuY3BwCiAKQEAgLTEwMTQsNyArMTAxNCw3IEBAIGlmIChFTkFCTEVf
UExVR0lOX1BST0NFU1NfR1RLMikKIAogICAgICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vz
c0xhdW5jaGVyLmNwcAogCi0gICAgICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xh
dW5jaGVyR3RrLmNwcAorICAgICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9Qcm9jZXNzTGF1
bmNoZXJHTGliLmNwcAogCiAgICAgICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luUHJv
Y2Vzc1Byb3h5VW5peC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQ
RS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggYzMwNzI5ZjNk
NTU1MTE5ZTQ0ZDk3YTNkNzQ1YzJlZmVhYTc1MGRjNy4uNThmMzU3ZThiODRiNWUwZmYxMDc3ZDI0
MzNmY2ZmZDBlMWIwOWYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0xOTksNyArMTk5
LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQXV0b21h
dGlvbi9jYWlyby9XZWJBdXRvbWF0aW9uU2Vzc2lvbkNhaXJvLmNwcAogCi0gICAgVUlQcm9jZXNz
L0xhdW5jaGVyL3dwZS9Qcm9jZXNzTGF1bmNoZXJXUEUuY3BwCisgICAgVUlQcm9jZXNzL0xhdW5j
aGVyL2dsaWIvUHJvY2Vzc0xhdW5jaGVyR0xpYi5jcHAKIAogICAgIFVJUHJvY2Vzcy9QbHVnaW5z
L3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAKICAgICBVSVByb2Nlc3MvUGx1Z2lucy91bml4
L1BsdWdpblByb2Nlc3NQcm94eVVuaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9MYXVuY2hlci9nbGliL1Byb2Nlc3NMYXVuY2hlckdMaWIuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9Qcm9jZXNzTGF1bmNoZXJHTGliLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hNzFmZmJhZGM3OTIxNmYxMjNmNzZiMDFhMWY0MjUyZTFkMGI1MWQwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9Qcm9jZXNz
TGF1bmNoZXJHTGliLmNwcApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNT1RPUk9MQSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBNT1RPUk9MQSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9jZXNz
TGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJQcm9jZXNz
RXhlY3V0YWJsZVBhdGguaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNs
dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1VuaVN0ZEV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oV1BFKQorI2luY2x1ZGUgPHdwZS9yZW5k
ZXJlci1ob3N0Lmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgdm9pZCBjaGlsZFNldHVwRnVuY3Rpb24oZ3BvaW50ZXIg
dXNlckRhdGEpCit7CisgICAgaW50IHNvY2tldCA9IEdQT0lOVEVSX1RPX0lOVCh1c2VyRGF0YSk7
CisgICAgY2xvc2Uoc29ja2V0KTsKK30KKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MoKQoreworICAgIEdQaWQgcGlkID0gMDsKKworICAgIElQQzo6Q29ubmVjdGlvbjo6U29j
a2V0UGFpciBzb2NrZXRQYWlyID0gSVBDOjpDb25uZWN0aW9uOjpjcmVhdGVQbGF0Zm9ybUNvbm5l
Y3Rpb24oSVBDOjpDb25uZWN0aW9uOjpDb25uZWN0aW9uT3B0aW9uczo6U2V0Q2xvZXhlY09uU2Vy
dmVyKTsKKworICAgIFN0cmluZyBleGVjdXRhYmxlUGF0aDsKKyAgICBDU3RyaW5nIHJlYWxFeGVj
dXRhYmxlUGF0aDsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBTdHJpbmcg
cGx1Z2luUGF0aDsKKyAgICBDU3RyaW5nIHJlYWxQbHVnaW5QYXRoOworI2VuZGlmCisgICAgc3dp
dGNoIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUpIHsKKyAgICBjYXNlIFByb2Nlc3NMYXVu
Y2hlcjo6UHJvY2Vzc1R5cGU6OldlYjoKKyAgICAgICAgZXhlY3V0YWJsZVBhdGggPSBleGVjdXRh
YmxlUGF0aE9mV2ViUHJvY2VzcygpOworICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OlBs
dWdpbjY0OgorICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6UGx1Z2luMzI6
CisgICAgICAgIGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0YWJsZVBhdGhPZlBsdWdpblByb2Nlc3Mo
KTsKKyNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1NfR1RLMikKKyAgICAgICAgaWYgKG1fbGF1bmNo
T3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5jb250YWlucygicmVxdWlyZXMtZ3RrMiIp
KQorICAgICAgICAgICAgZXhlY3V0YWJsZVBhdGguYXBwZW5kKCcyJyk7CisjZW5kaWYKKyAgICAg
ICAgcGx1Z2luUGF0aCA9IG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5n
ZXQoInBsdWdpbi1wYXRoIik7CisgICAgICAgIHJlYWxQbHVnaW5QYXRoID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHBsdWdpblBhdGgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNh
c2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0d29yazoKKyAgICAgICAgZXhlY3V0
YWJsZVBhdGggPSBleGVjdXRhYmxlUGF0aE9mTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nlc3NUeXBlOjpTdG9yYWdlOgorICAg
ICAgICBleGVjdXRhYmxlUGF0aCA9IGV4ZWN1dGFibGVQYXRoT2ZTdG9yYWdlUHJvY2VzcygpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlYWxFeGVjdXRhYmxlUGF0aCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihleGVjdXRhYmxlUGF0aCk7CisgICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gd2Via2l0U29ja2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBzb2NrZXRQYWlyLmNsaWVu
dCkpOworICAgIHVuc2lnbmVkIG5hcmdzID0gNDsgLy8gc2l6ZSBvZiB0aGUgYXJndiBhcnJheSBm
b3IgZ19zcGF3bl9hc3luYygpCisKKyNpZiBQTEFURk9STShXUEUpCisgICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gd3BlU29ja2V0OworICAgIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPT0g
UHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6V2ViKSB7CisgICAgICAgIHdwZVNvY2tldCA9
IEdVbmlxdWVQdHI8Z2NoYXI+KGdfc3RyZHVwX3ByaW50ZigiJWQiLCB3cGVfcmVuZGVyZXJfaG9z
dF9jcmVhdGVfY2xpZW50KCkpKTsKKyAgICAgICAgbmFyZ3MgPSA1OworICAgIH0KKyNlbmRpZgor
CisjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQorICAgIFZlY3RvcjxDU3RyaW5nPiBwcmVmaXhB
cmdzOworICAgIGlmICghbV9sYXVuY2hPcHRpb25zLnByb2Nlc3NDbWRQcmVmaXguaXNOdWxsKCkp
IHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gc3BsaXRBcmdzOworICAgICAgICBtX2xhdW5jaE9w
dGlvbnMucHJvY2Vzc0NtZFByZWZpeC5zcGxpdCgnICcsIHNwbGl0QXJncyk7CisgICAgICAgIGZv
ciAoYXV0byBpdCA9IHNwbGl0QXJncy5iZWdpbigpOyBpdCAhPSBzcGxpdEFyZ3MuZW5kKCk7IGl0
KyspCisgICAgICAgICAgICBwcmVmaXhBcmdzLmFwcGVuZChpdC0+dXRmOCgpKTsKKyAgICAgICAg
bmFyZ3MgKz0gcHJlZml4QXJncy5zaXplKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBjaGFyKiog
YXJndiA9IGdfbmV3YShjaGFyKiwgbmFyZ3MpOworICAgIHVuc2lnbmVkIGkgPSAwOworI2lmIEVO
QUJMRShERVZFTE9QRVJfTU9ERSkKKyAgICAvLyBJZiB0aGVyZSdzIGEgcHJlZml4IGNvbW1hbmQs
IHB1dCBpdCBiZWZvcmUgdGhlIHJlc3Qgb2YgdGhlIGFyZ3MuCisgICAgZm9yIChhdXRvIGl0ID0g
cHJlZml4QXJncy5iZWdpbigpOyBpdCAhPSBwcmVmaXhBcmdzLmVuZCgpOyBpdCsrKQorICAgICAg
ICBhcmd2W2krK10gPSBjb25zdF9jYXN0PGNoYXIqPihpdC0+ZGF0YSgpKTsKKyNlbmRpZgorICAg
IGFyZ3ZbaSsrXSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KHJlYWxFeGVjdXRhYmxlUGF0aC5kYXRhKCkp
OworICAgIGFyZ3ZbaSsrXSA9IHdlYmtpdFNvY2tldC5nZXQoKTsKKyNpZiBQTEFURk9STShXUEUp
CisgICAgaWYgKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6
OlByb2Nlc3NUeXBlOjpXZWIpCisgICAgICAgIGFyZ3ZbaSsrXSA9IHdwZVNvY2tldC5nZXQoKTsK
KyNlbmRpZgorICAgIGFyZ3ZbaSsrXSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KHJlYWxQbHVnaW5QYXRo
LmRhdGEoKSk7CisgICAgYXJndltpKytdID0gbnVsbHB0cjsKKworICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAoIWdfc3Bhd25fYXN5bmMoMCwgYXJndiwgMCwgR19TUEFX
Tl9MRUFWRV9ERVNDUklQVE9SU19PUEVOLCBjaGlsZFNldHVwRnVuY3Rpb24sIEdJTlRfVE9fUE9J
TlRFUihzb2NrZXRQYWlyLnNlcnZlciksICZwaWQsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAg
ICAgZ19wcmludGVycigiVW5hYmxlIHRvIGZvcmsgYSBuZXcgV2ViUHJvY2VzczogJXMuXG4iLCBl
cnJvci0+bWVzc2FnZSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIC8vIERvbid0IGV4cG9zZSB0aGUgcGFyZW50IHNvY2tldCB0byBwb3RlbnRpYWwgZnV0dXJl
IGNoaWxkcmVuLgorICAgIGlmICghc2V0Q2xvc2VPbkV4ZWMoc29ja2V0UGFpci5jbGllbnQpKQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgY2xvc2Uoc29ja2V0
UGFpci5jbGllbnQpOworICAgIG1fcHJvY2Vzc0lkZW50aWZpZXIgPSBwaWQ7CisKKyAgICAvLyBX
ZSd2ZSBmaW5pc2hlZCBsYXVuY2hpbmcgdGhlIHByb2Nlc3MsIG1lc3NhZ2UgYmFjayB0byB0aGUg
bWFpbiBydW4gbG9vcC4KKyAgICBSZWZQdHI8UHJvY2Vzc0xhdW5jaGVyPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBzZXJ2ZXJTb2NrZXQgPSBz
b2NrZXRQYWlyLnNlcnZlcjsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3Rl
ZFRoaXMsIHBpZCwgc2VydmVyU29ja2V0XSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPmRpZEZp
bmlzaExhdW5jaGluZ1Byb2Nlc3MocGlkLCBzZXJ2ZXJTb2NrZXQpOworICAgIH0pOworfQorCit2
b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7CisgICAgaWYgKG1faXNM
YXVuY2hpbmcpIHsKKyAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFtX3Byb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBraWxsKG1fcHJvY2Vzc0lkZW50aWZpZXIsIFNJR0tJTEwpOworICAgIG1fcHJvY2Vzc0lkZW50
aWZpZXIgPSAwOworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9ndGsvUHJvY2Vzc0xhdW5jaGVyR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTZiZmYzZmFlYmM2MmM4NGM0MWY2OTAyNjc0
ZGUzOTA5NDEwOTA4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2d0ay9Qcm9jZXNzTGF1bmNoZXJH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29w
eXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTU9UT1JP
TEEgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgTU9UT1JPTEEgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHJv
Y2Vzc0xhdW5jaGVyLmgiCi0KLSNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiUHJv
Y2Vzc0V4ZWN1dGFibGVQYXRoLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTmV0d29ya2luZ0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFu
ZGxlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxsb2NhbGUuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgot
I2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTGliVXRp
bGl0aWVzLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgdm9p
ZCBjaGlsZFNldHVwRnVuY3Rpb24oZ3BvaW50ZXIgdXNlckRhdGEpCi17Ci0gICAgaW50IHNvY2tl
dCA9IEdQT0lOVEVSX1RPX0lOVCh1c2VyRGF0YSk7Ci0gICAgY2xvc2Uoc29ja2V0KTsKLX0KLQot
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQotewotICAgIEdQaWQgcGlkID0g
MDsKLQotICAgIElQQzo6Q29ubmVjdGlvbjo6U29ja2V0UGFpciBzb2NrZXRQYWlyID0gSVBDOjpD
b25uZWN0aW9uOjpjcmVhdGVQbGF0Zm9ybUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpDb25u
ZWN0aW9uT3B0aW9uczo6U2V0Q2xvZXhlY09uU2VydmVyKTsKLQotICAgIFN0cmluZyBleGVjdXRh
YmxlUGF0aCwgcGx1Z2luUGF0aDsKLSAgICBDU3RyaW5nIHJlYWxFeGVjdXRhYmxlUGF0aCwgcmVh
bFBsdWdpblBhdGg7Ci0gICAgc3dpdGNoIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUpIHsK
LSAgICBjYXNlIFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OldlYjoKLSAgICAgICAgZXhl
Y3V0YWJsZVBhdGggPSBleGVjdXRhYmxlUGF0aE9mV2ViUHJvY2VzcygpOwotICAgICAgICBicmVh
azsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBjYXNlIFByb2Nlc3NMYXVu
Y2hlcjo6UHJvY2Vzc1R5cGU6OlBsdWdpbjY0OgotICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQ
cm9jZXNzVHlwZTo6UGx1Z2luMzI6Ci0gICAgICAgIGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0YWJs
ZVBhdGhPZlBsdWdpblByb2Nlc3MoKTsKLSNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1NfR1RLMikK
LSAgICAgICAgaWYgKG1fbGF1bmNoT3B0aW9ucy5leHRyYUluaXRpYWxpemF0aW9uRGF0YS5jb250
YWlucygicmVxdWlyZXMtZ3RrMiIpKQotICAgICAgICAgICAgZXhlY3V0YWJsZVBhdGguYXBwZW5k
KCcyJyk7Ci0jZW5kaWYKLSAgICAgICAgcGx1Z2luUGF0aCA9IG1fbGF1bmNoT3B0aW9ucy5leHRy
YUluaXRpYWxpemF0aW9uRGF0YS5nZXQoInBsdWdpbi1wYXRoIik7Ci0gICAgICAgIHJlYWxQbHVn
aW5QYXRoID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKHBsdWdpblBhdGgpOwotICAgICAgICBi
cmVhazsKLSNlbmRpZgotICAgIGNhc2UgUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6TmV0
d29yazoKLSAgICAgICAgZXhlY3V0YWJsZVBhdGggPSBleGVjdXRhYmxlUGF0aE9mTmV0d29ya1By
b2Nlc3MoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6OlByb2Nl
c3NUeXBlOjpTdG9yYWdlOgotICAgICAgICBleGVjdXRhYmxlUGF0aCA9IGV4ZWN1dGFibGVQYXRo
T2ZTdG9yYWdlUHJvY2VzcygpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJl
YWxFeGVjdXRhYmxlUGF0aCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihleGVjdXRhYmxlUGF0
aCk7Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gc29ja2V0KGdfc3RyZHVwX3ByaW50ZigiJWQiLCBz
b2NrZXRQYWlyLmNsaWVudCkpOwotCi0gICAgdW5zaWduZWQgbmFyZ3MgPSA0OyAvLyBzaXplIG9m
IHRoZSBhcmd2IGFycmF5IGZvciBnX3NwYXduX2FzeW5jKCkKLQotI2lmIEVOQUJMRShERVZFTE9Q
RVJfTU9ERSkKLSAgICBWZWN0b3I8Q1N0cmluZz4gcHJlZml4QXJnczsKLSAgICBpZiAoIW1fbGF1
bmNoT3B0aW9ucy5wcm9jZXNzQ21kUHJlZml4LmlzTnVsbCgpKSB7Ci0gICAgICAgIFZlY3RvcjxT
dHJpbmc+IHNwbGl0QXJnczsKLSAgICAgICAgbV9sYXVuY2hPcHRpb25zLnByb2Nlc3NDbWRQcmVm
aXguc3BsaXQoJyAnLCBzcGxpdEFyZ3MpOwotICAgICAgICBmb3IgKGF1dG8gaXQgPSBzcGxpdEFy
Z3MuYmVnaW4oKTsgaXQgIT0gc3BsaXRBcmdzLmVuZCgpOyBpdCsrKQotICAgICAgICAgICAgcHJl
Zml4QXJncy5hcHBlbmQoaXQtPnV0ZjgoKSk7Ci0gICAgICAgIG5hcmdzICs9IHByZWZpeEFyZ3Mu
c2l6ZSgpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY2hhcioqIGFyZ3YgPSBnX25ld2EoY2hhcios
IG5hcmdzKTsKLSAgICB1bnNpZ25lZCBpID0gMDsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUp
Ci0gICAgLy8gSWYgdGhlcmUncyBhIHByZWZpeCBjb21tYW5kLCBwdXQgaXQgYmVmb3JlIHRoZSBy
ZXN0IG9mIHRoZSBhcmdzLgotICAgIGZvciAoYXV0byBpdCA9IHByZWZpeEFyZ3MuYmVnaW4oKTsg
aXQgIT0gcHJlZml4QXJncy5lbmQoKTsgaXQrKykKLSAgICAgICAgYXJndltpKytdID0gY29uc3Rf
Y2FzdDxjaGFyKj4oaXQtPmRhdGEoKSk7Ci0jZW5kaWYKLSAgICBhcmd2W2krK10gPSBjb25zdF9j
YXN0PGNoYXIqPihyZWFsRXhlY3V0YWJsZVBhdGguZGF0YSgpKTsKLSAgICBhcmd2W2krK10gPSBz
b2NrZXQuZ2V0KCk7Ci0gICAgYXJndltpKytdID0gY29uc3RfY2FzdDxjaGFyKj4ocmVhbFBsdWdp
blBhdGguZGF0YSgpKTsKLSAgICBhcmd2W2krK10gPSAwOwotCi0gICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOwotICAgIGlmICghZ19zcGF3bl9hc3luYygwLCBhcmd2LCAwLCBHX1NQQVdO
X0xFQVZFX0RFU0NSSVBUT1JTX09QRU4sIGNoaWxkU2V0dXBGdW5jdGlvbiwgR0lOVF9UT19QT0lO
VEVSKHNvY2tldFBhaXIuc2VydmVyKSwgJnBpZCwgJmVycm9yLm91dFB0cigpKSkgewotICAgICAg
ICBnX3ByaW50ZXJyKCJVbmFibGUgdG8gZm9yayBhIG5ldyBXZWJQcm9jZXNzOiAlcy5cbiIsIGVy
cm9yLT5tZXNzYWdlKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0g
ICAgLy8gRG9uJ3QgZXhwb3NlIHRoZSBwYXJlbnQgc29ja2V0IHRvIHBvdGVudGlhbCBmdXR1cmUg
Y2hpbGRyZW4uCi0gICAgaWYgKCFzZXRDbG9zZU9uRXhlYyhzb2NrZXRQYWlyLmNsaWVudCkpCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBjbG9zZShzb2NrZXRQ
YWlyLmNsaWVudCk7Ci0gICAgbV9wcm9jZXNzSWRlbnRpZmllciA9IHBpZDsKLQotICAgIC8vIFdl
J3ZlIGZpbmlzaGVkIGxhdW5jaGluZyB0aGUgcHJvY2VzcywgbWVzc2FnZSBiYWNrIHRvIHRoZSBt
YWluIHJ1biBsb29wLgotICAgIFJlZlB0cjxQcm9jZXNzTGF1bmNoZXI+IHByb3RlY3Rvcih0aGlz
KTsKLSAgICBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgc2VydmVyU29ja2V0ID0gc29ja2V0
UGFpci5zZXJ2ZXI7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0b3IsIHBp
ZCwgc2VydmVyU29ja2V0XSB7Ci0gICAgICAgIHByb3RlY3Rvci0+ZGlkRmluaXNoTGF1bmNoaW5n
UHJvY2VzcyhwaWQsIHNlcnZlclNvY2tldCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUHJvY2Vzc0xh
dW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKLXsKLSAgICBpZiAobV9pc0xhdW5jaGluZykgewot
ICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fcHJvY2Vzc0lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGtpbGwobV9wcm9j
ZXNzSWRlbnRpZmllciwgU0lHS0lMTCk7Ci0gICAgbV9wcm9jZXNzSWRlbnRpZmllciA9IDA7Ci19
Ci0KLXZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQotewotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0xhdW5jaGVyL3dwZS9Qcm9jZXNzTGF1bmNoZXJXUEUuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTGF1bmNoZXIvd3BlL1Byb2Nlc3NMYXVuY2hlcldQRS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJjNjIzODQ3ZDBmODU2ZGM2MWRmOWFjYjAwZGQzMmM3M2Q5YzU2Y2Yu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvd3BlL1Byb2Nlc3NMYXVuY2hlcldQRS5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIw
MTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBNT1RPUk9MQSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNT1RPUk9M
QSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIu
aCIKLQotI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJQcm9jZXNzRXhlY3V0YWJs
ZVBhdGguaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxlcnJu
by5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHdw
ZS9yZW5kZXJlci1ob3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HTGliVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotLy8gRklYTUU6IE1lcmdlIHdpdGggUHJvY2Vzc0xhdW5jaGVyR3RrPwotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB2
b2lkIGNoaWxkU2V0dXBGdW5jdGlvbihncG9pbnRlciB1c2VyRGF0YSkKLXsKLSAgICBpbnQgc29j
a2V0ID0gR1BPSU5URVJfVE9fSU5UKHVzZXJEYXRhKTsKLSAgICBjbG9zZShzb2NrZXQpOwotfQot
Ci12b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJvY2VzcygpCi17Ci0gICAgR1BpZCBwaWQg
PSAwOwotCi0gICAgSVBDOjpDb25uZWN0aW9uOjpTb2NrZXRQYWlyIHNvY2tldFBhaXIgPSBJUEM6
OkNvbm5lY3Rpb246OmNyZWF0ZVBsYXRmb3JtQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OkNv
bm5lY3Rpb25PcHRpb25zOjpTZXRDbG9leGVjT25TZXJ2ZXIpOwotCi0gICAgU3RyaW5nIGV4ZWN1
dGFibGVQYXRoOwotICAgIENTdHJpbmcgcmVhbEV4ZWN1dGFibGVQYXRoOwotICAgIHN3aXRjaCAo
bV9sYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBQcm9jZXNzTGF1bmNoZXI6
OlByb2Nlc3NUeXBlOjpXZWI6Ci0gICAgICAgIGV4ZWN1dGFibGVQYXRoID0gZXhlY3V0YWJsZVBh
dGhPZldlYlByb2Nlc3MoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm9jZXNzTGF1bmNo
ZXI6OlByb2Nlc3NUeXBlOjpOZXR3b3JrOgotICAgICAgICBleGVjdXRhYmxlUGF0aCA9IGV4ZWN1
dGFibGVQYXRoT2ZOZXR3b3JrUHJvY2VzcygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBy
b2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6OlN0b3JhZ2U6Ci0gICAgICAgIGV4ZWN1dGFibGVQ
YXRoID0gZXhlY3V0YWJsZVBhdGhPZlN0b3JhZ2VQcm9jZXNzKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgcmVhbEV4ZWN1dGFibGVQYXRoID0gZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKGV4ZWN1dGFibGVQYXRoKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiB3a1NvY2tldChn
X3N0cmR1cF9wcmludGYoIiVkIiwgc29ja2V0UGFpci5jbGllbnQpKTsKLSAgICBHVW5pcXVlUHRy
PGdjaGFyPiB3cGVTb2NrZXQ7Ci0KLSAgICB1bnNpZ25lZCBuYXJncyA9IDQ7IC8vIHNpemUgb2Yg
dGhlIGFyZ3YgYXJyYXkgZm9yIGdfc3Bhd25fYXN5bmMoKQotICAgIGlmIChtX2xhdW5jaE9wdGlv
bnMucHJvY2Vzc1R5cGUgPT0gUHJvY2Vzc0xhdW5jaGVyOjpQcm9jZXNzVHlwZTo6V2ViKSB7Ci0g
ICAgICAgIHdwZVNvY2tldCA9IEdVbmlxdWVQdHI8Z2NoYXI+KGdfc3RyZHVwX3ByaW50ZigiJWQi
LCB3cGVfcmVuZGVyZXJfaG9zdF9jcmVhdGVfY2xpZW50KCkpKTsKLSAgICAgICAgbmFyZ3MgPSA1
OwotICAgIH0KLQotI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKLSAgICBWZWN0b3I8Q1N0cmlu
Zz4gcHJlZml4QXJnczsKLSAgICBpZiAoIW1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzQ21kUHJlZml4
LmlzTnVsbCgpKSB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0QXJnczsKLSAgICAgICAg
bV9sYXVuY2hPcHRpb25zLnByb2Nlc3NDbWRQcmVmaXguc3BsaXQoJyAnLCBzcGxpdEFyZ3MpOwot
ICAgICAgICBmb3IgKGF1dG8gaXQgPSBzcGxpdEFyZ3MuYmVnaW4oKTsgaXQgIT0gc3BsaXRBcmdz
LmVuZCgpOyBpdCsrKQotICAgICAgICAgICAgcHJlZml4QXJncy5hcHBlbmQoaXQtPnV0ZjgoKSk7
Ci0gICAgICAgIG5hcmdzICs9IHByZWZpeEFyZ3Muc2l6ZSgpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgY2hhcioqIGFyZ3YgPSBnX25ld2EoY2hhciosIG5hcmdzKTsKLSAgICB1bnNpZ25lZCBpID0g
MDsKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgLy8gSWYgdGhlcmUncyBhIHByZWZp
eCBjb21tYW5kLCBwdXQgaXQgYmVmb3JlIHRoZSByZXN0IG9mIHRoZSBhcmdzLgotICAgIGZvciAo
YXV0byBpdCA9IHByZWZpeEFyZ3MuYmVnaW4oKTsgaXQgIT0gcHJlZml4QXJncy5lbmQoKTsgaXQr
KykKLSAgICAgICAgYXJndltpKytdID0gY29uc3RfY2FzdDxjaGFyKj4oaXQtPmRhdGEoKSk7Ci0j
ZW5kaWYKLSAgICBhcmd2W2krK10gPSBjb25zdF9jYXN0PGNoYXIqPihyZWFsRXhlY3V0YWJsZVBh
dGguZGF0YSgpKTsKLSAgICBhcmd2W2krK10gPSB3a1NvY2tldC5nZXQoKTsKLSAgICBpZiAobV9s
YXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6UHJvY2Vzc1R5cGU6
OldlYikKLSAgICAgICAgYXJndltpKytdID0gd3BlU29ja2V0LmdldCgpOwotICAgIGFyZ3ZbaSsr
XSA9IG51bGxwdHI7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgaWYg
KCFnX3NwYXduX2FzeW5jKDAsIGFyZ3YsIDAsIEdfU1BBV05fTEVBVkVfREVTQ1JJUFRPUlNfT1BF
TiwgY2hpbGRTZXR1cEZ1bmN0aW9uLCBHSU5UX1RPX1BPSU5URVIoc29ja2V0UGFpci5zZXJ2ZXIp
LCAmcGlkLCAmZXJyb3Iub3V0UHRyKCkpKSB7Ci0gICAgICAgIGdfcHJpbnRlcnIoIlVuYWJsZSB0
byBmb3JrIGEgbmV3IFdlYlByb2Nlc3M6ICVzLlxuIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBleHBvc2UgdGhl
IHBhcmVudCBzb2NrZXQgdG8gcG90ZW50aWFsIGZ1dHVyZSBjaGlsZHJlbi4KLSAgICB3aGlsZSAo
ZmNudGwoc29ja2V0UGFpci5jbGllbnQsIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChlcnJubyAhPSBFSU5UUik7Ci0KLSAgICBjbG9zZShzb2NrZXRQ
YWlyLmNsaWVudCk7Ci0gICAgbV9wcm9jZXNzSWRlbnRpZmllciA9IHBpZDsKLQotICAgIC8vIFdl
J3ZlIGZpbmlzaGVkIGxhdW5jaGluZyB0aGUgcHJvY2VzcywgbWVzc2FnZSBiYWNrIHRvIHRoZSBt
YWluIHJ1biBsb29wLgotICAgIFJlZlB0cjxQcm9jZXNzTGF1bmNoZXI+IHByb3RlY3RlZFRoaXMo
dGhpcyk7Ci0gICAgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIHNlcnZlclNvY2tldCA9IHNv
Y2tldFBhaXIuc2VydmVyOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVk
VGhpcywgcGlkLCBzZXJ2ZXJTb2NrZXRdIHsKLSAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlkRmlu
aXNoTGF1bmNoaW5nUHJvY2VzcyhwaWQsIHNlcnZlclNvY2tldCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKLXsKLSAgICBpZiAobV9pc0xh
dW5jaGluZykgewotICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGtpbGwobV9wcm9jZXNzSWRlbnRpZmllciwgU0lHS0lMTCk7Ci0gICAgbV9wcm9jZXNzSWRlbnRp
ZmllciA9IDA7Ci19Ci0KLXZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUo
KQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="341054"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="341065"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>