<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>224901</bug_id>
          
          <creation_ts>2008-06-04 15:44 0000</creation_ts>
          <short_desc>dev-util/cmake &lt; 2.6.1 links executable with insecure RUNPATHs</short_desc>
          <delta_ts>2008-09-08 14:47:03 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Security</product>
          <component>Runpath Issues</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <status_whiteboard>~2 [noglsa]</status_whiteboard>
          
          <priority>P2</priority>
          <bug_severity>trivial</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>flameeyes@gentoo.org</reporter>
          <assigned_to>security@gentoo.org</assigned_to>
          <cc>brad.king@kitware.com</cc>
    
    <cc>galtgendo@o2.pl</cc>
    
    <cc>holger.hoffstaette@googlemail.com</cc>
    
    <cc>kde@gentoo.org</cc>
    
    <cc>loki_val@gentoo.org</cc>
    
    <cc>matsuu@gentoo.org</cc>
    
    <cc>matthew.m.mccormick@gmail.com</cc>
    
    <cc>peper@gentoo.org</cc>

      

      
          <long_desc isprivate="0">
            <who>flameeyes@gentoo.org</who>
            <bug_when>2008-06-04 15:44:25 0000</bug_when>
            <thetext>scanelf: rpath_security_checks(): Security problem NULL DT_RUNPATH in /var/tmp/portage/app-pda/libsyncml-0.4.6/image/usr/bin/syncml-http-client
scanelf: rpath_security_checks(): Security problem NULL DT_RUNPATH in /var/tmp/portage/app-pda/libsyncml-0.4.6/image/usr/bin/syncml-http-server
scanelf: rpath_security_checks(): Security problem NULL DT_RUNPATH in /var/tmp/portage/app-pda/libsyncml-0.4.6/image/usr/bin/syncml-obex-client</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>flameeyes@gentoo.org</who>
            <bug_when>2008-06-04 16:35:15 0000</bug_when>
            <thetext>CCing KDE team as it might be caused by cmake 2.6.0
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>flameeyes@gentoo.org</who>
            <bug_when>2008-06-06 17:10:09 0000</bug_when>
            <thetext>Okay this seems to be related to cmake 2.6.0 and this warning in particular:
CMake Warning (dev) at index/CMakeLists.txt:42 (add_library):
  Policy CMP0003 should be set before this line.  Add code such as

    if(COMMAND cmake_policy)
      cmake_policy(SET CMP0003 NEW)
    endif(COMMAND cmake_policy)

  as early as possible but after the most recent call to
  cmake_minimum_required or cmake_policy(VERSION).  This warning appears
  because target &quot;sopranoindex&quot; links to some libraries for which the linker
  must search:

I got this error out of soprano, and it also has the same NULL DT_RUNPATH. And good enough it seems a quite big security risk (if it wasn&apos;t for scanelf).
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>matthew.m.mccormick@gmail.com</who>
            <bug_when>2008-07-03 14:27:39 0000</bug_when>
            <thetext>This is not caused by cmake 2.6, but fixed by cmake 2.6.  To use they better version, use cmake 2.6, and put 

if(COMMAND cmake_policy)
    cmake_policy(VERSION 2.6)
endif()

in your topmost CMakeLists.txt

For more information, see

cmake --help-policies

and look at 0003

I will be filing a bug to unmask cmake 2.6

(In reply to comment #2)
&gt; Okay this seems to be related to cmake 2.6.0 and this warning in particular:
&gt; CMake Warning (dev) at index/CMakeLists.txt:42 (add_library):
&gt;   Policy CMP0003 should be set before this line.  Add code such as
&gt; 
&gt;     if(COMMAND cmake_policy)
&gt;       cmake_policy(SET CMP0003 NEW)
&gt;     endif(COMMAND cmake_policy)
&gt; 
&gt;   as early as possible but after the most recent call to
&gt;   cmake_minimum_required or cmake_policy(VERSION).  This warning appears
&gt;   because target &quot;sopranoindex&quot; links to some libraries for which the linker
&gt;   must search:
&gt; 
&gt; I got this error out of soprano, and it also has the same NULL DT_RUNPATH. And
&gt; good enough it seems a quite big security risk (if it wasn&apos;t for scanelf).
&gt; 

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>matthew.m.mccormick@gmail.com</who>
            <bug_when>2008-07-03 14:50:06 0000</bug_when>
            <thetext>The new cmake policy is better security-wise, but I don&apos;t know if will help with the problem mentioned.  For more info, check

http://www.cmake.org/Wiki/CMake_RPATH_handling

From what I understand, you would want the &apos;Always Full RPATH&apos; option?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>cryos@gentoo.org</who>
            <bug_when>2008-07-29 14:31:13 0000</bug_when>
            <thetext>As far as I can see with this individual applications will need to be patched to use the correct policy. I will admit to not being an RPATH guru but it also seems to me that the RPATH handling has been improved, it just needs to be set up correctly by the application.

I am not sure if some of the CMake files will also need patching to find the libraries they are linking to also. I do think it is important to bring CMake 2.6.0 out of package mask.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>loki_val@gentoo.org</who>
            <bug_when>2008-07-30 12:51:48 0000</bug_when>
            <thetext>A simple fix, add -DCMAKE_NO_BUILTIN_CHRPATH:BOOL=ON to options.

http://markmail.org/message/7fexrgbrawejuhpl</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>brad.king@kitware.com</who>
            <bug_when>2008-08-04 16:00:46 0000</bug_when>
            <thetext>CMake maintains a separate RPATH for binaries in the build tree and binaries in the install tree.  The idea is to make it easy to run a binary that uses shared libraries in its own build tree.  When the binary is installed (make install) CMake sets the RPATH for the install tree copy of the binary to be whatever was specified by the project (or removes the entry completely if nothing was specified).

CMake has built-in chrpath functionality (which improves over the original tool by supporting cross compiling).  It uses this to switch the RPATH in the installed binary.  When the RPATH specified for the installed binary is longer than the RPATH needed for running from the build tree, CMake reserves space in the build-tree copy by appending &apos;:&apos; characters to fill up the space.  This is what creates the empty RPATH entries.  However, these entries never get installed.  The final binary always has the RPATH specified by the project for the install tree copy.

What -DCMAKE_NO_BUILTIN_CHRPATH:BOOL=ON does is to tell CMake to create a new binary for installation by linking again in order to set the new RPATH for the install tree.  In this case there is no need to reserve space, so the build-tree copy does not get the &apos;:&apos; characters appended.

Another fix is to tell CMake that we don&apos;t care about running from the build tree so it should just link with the final install-tree RPATH right away:

  -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON

This will avoid the re-linking step and avoid creating empty RPATH entries in any copy of the binary.

If someone can tell me how to reserve extra space in the RPATH string through a standard linker interface without creating a bogus path, I&apos;d love to use it instead of appending &apos;:&apos; characters.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>holger.hoffstaette@googlemail.com</who>
            <bug_when>2008-08-04 16:13:43 0000</bug_when>
            <thetext>(In reply to comment #7)
&gt; Another fix is to tell CMake that we don&apos;t care about running from the build
&gt; tree so it should just link with the final install-tree RPATH right away:

USE=&quot;test&quot; often runs things in the build tree, no? Maybe something to consider.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>matsuu@gentoo.org</who>
            <bug_when>2008-08-14 02:32:03 0000</bug_when>
            <thetext>I suggest to add -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=1 and -DCMAKE_BUILD_WITH_INSTALL_RPATH=1 to cmake-utils.eclass as cmake-2.6.1/CMakeLists.txt.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>matsuu@gentoo.org</who>
            <bug_when>2008-08-14 02:37:16 0000</bug_when>
            <thetext>Created an attachment (id=162856)
cmake-utils-rpath.patch

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>brad.king@kitware.com</who>
            <bug_when>2008-08-14 13:59:55 0000</bug_when>
            <thetext>I finally got access to a friend&apos;s gentoo box and was able to reproduce this problem.  It looks like the gentoo linker is using --enable-new-dtags by default.  Using this flag on my debian machine I was able to reproduce the problem too.  The bug is that CMake removes only the DT_RPATH entry and zeroes its string.  The DT_RUNPATH entry is left intact but it refers to the same string data which have now been zeroed so it becomes an empty string.

I&apos;ve committed a fix to CMake HEAD in CVS.  We&apos;ll include the fix in the 2.6.2 release.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>matthew.m.mccormick@gmail.com</who>
            <bug_when>2008-08-14 15:04:14 0000</bug_when>
            <thetext>&gt; 
&gt; I&apos;ve committed a fix to CMake HEAD in CVS.  We&apos;ll include the fix in the 2.6.2
&gt; release.
&gt; 

Awesome.  Thanks for working so hard on this.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>py@gentoo.org</who>
            <bug_when>2008-08-26 18:48:04 0000</bug_when>
            <thetext>(In reply to comment #11)
&gt; I&apos;ve committed a fix to CMake HEAD in CVS.  We&apos;ll include the fix in the 2.6.2
&gt; release.
&gt; 

Any ETA for this release? otherwise could you indicate the exact CVS diff so we can patch 2.6.0 until 2.6.2 is out? Thanks.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>brad.king@kitware.com</who>
            <bug_when>2008-08-26 19:05:31 0000</bug_when>
            <thetext>Created an attachment (id=163847)
Patch from upstream cmake fixing this bug.  Applies cleanly to 2.6.1.

Here is a patch I generated to backport the fix to 2.6.1.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>tgurr@gentoo.org</who>
            <bug_when>2008-08-27 21:22:26 0000</bug_when>
            <thetext>I&apos;ve just added cmake-2.6.1 to the tree which applies the patch kindly provided by upstream, big thanks Brad!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>py@gentoo.org</who>
            <bug_when>2008-08-30 11:13:03 0000</bug_when>
            <thetext>Arches, please test and mark stable dev-util/cmake-2.6.1. 
Target keywords: &quot;alpha amd64 arm hppa ia64 mips ppc ppc64 s390 sh sparc x86 ~x86-fbsd&quot;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2008-08-30 12:10:46 0000</bug_when>
            <thetext>Wait -- Did this ever affect any stable system?
As far as I understand, cmake 2.6* has been under p.mask until very recently.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2008-08-30 12:50:07 0000</bug_when>
            <thetext>in fact, it is still masked. Un-cc&apos;ing arches.

Just to make sure: Our stable (pre 2.6.0) was not affected by this behaviour?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>cryos@gentoo.org</who>
            <bug_when>2008-09-01 22:20:25 0000</bug_when>
            <thetext>I am bringing cmake-2.6.1 out of package mask as all looks well now. Is there any reason this bug is still open?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>py@gentoo.org</who>
            <bug_when>2008-09-07 18:25:30 0000</bug_when>
            <thetext>(In reply to comment #19)
&gt; I am bringing cmake-2.6.1 out of package mask as all looks well now. Is there
&gt; any reason this bug is still open?
&gt; 
Yes, as rbu pointed out in comment #18, we need to know if cmake &lt; 2.6 was affected or not since it was stable. If no, we can close this bug. If yes, we&apos;ll probably need to stable a fixed version. </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>brad.king@kitware.com</who>
            <bug_when>2008-09-08 13:26:14 0000</bug_when>
            <thetext>The code in question was introduced in CMake 2.6.0, so there is no problem for 2.4.x and below.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>rbu@gentoo.org</who>
            <bug_when>2008-09-08 14:47:03 0000</bug_when>
            <thetext>Thanks, closing then.</thetext>
          </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162856</attachid>
            <date>2008-08-14 02:37 0000</date>
            <desc>cmake-utils-rpath.patch</desc>
            <filename>cmake-utils-rpath.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">LS0tIGNtYWtlLXV0aWxzLmVjbGFzcy5vcmlnCTIwMDgtMDgtMTQgMTE6MzI6NDUuMDAwMDAwMDAw
ICswOTAwCisrKyBjbWFrZS11dGlscy5lY2xhc3MJMjAwOC0wOC0xNCAxMTozNDowNC4wMDAwMDAw
MDAgKzA5MDAKQEAgLTEyOCw2ICsxMjgsOCBAQAogCWVjaG8gLURDTUFLRV9JTlNUQUxMX1BSRUZJ
WD0ke1BSRUZJWDotL3Vzcn0KIAllY2hvIC1ETElCX1NVRkZJWD0ke3RtcF9saWJkaXIvbGlifQog
CWVjaG8gLURMSUJfSU5TVEFMTF9ESVI9JHtQUkVGSVg6LS91c3J9LyR7dG1wX2xpYmRpcn0KKwll
Y2hvIC1EQ01BS0VfSU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIPTEKKwllY2hvIC1EQ01BS0Vf
QlVJTERfV0lUSF9JTlNUQUxMX1JQQVRIPTEKIAlbWyAtbiAke0NNQUtFX05PX0NPTE9SfSBdXSAm
JiBlY2hvIC1EQ01BS0VfQ09MT1JfTUFLRUZJTEU9T0ZGCiB9CiAK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163847</attachid>
            <date>2008-08-26 19:05 0000</date>
            <desc>Patch from upstream cmake fixing this bug.  Applies cleanly to 2.6.1.</desc>
            <filename>cmake-2.6.1+rpath.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtLWdpdCBjbWFrZS0yLjYuMS1vcmlnL1NvdXJjZS9jbUZpbGVDb21tYW5kLmN4eCBjbWFr
ZS0yLjYuMS9Tb3VyY2UvY21GaWxlQ29tbWFuZC5jeHgKaW5kZXggNmFjNmJjYy4uZThlNjRhNCAx
MDA2NDQKLS0tIGNtYWtlLTIuNi4xLW9yaWcvU291cmNlL2NtRmlsZUNvbW1hbmQuY3h4CisrKyBj
bWFrZS0yLjYuMS9Tb3VyY2UvY21GaWxlQ29tbWFuZC5jeHgKQEAgLTE0ODYsNyArMTQ4Niw4IEBA
IGNtRmlsZUNvbW1hbmQ6OkhhbmRsZVJQYXRoUmVtb3ZlQ29tbWFuZChzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gY29uc3QmIGFyZ3MpCiAgIGNtU3lzdGVtVG9vbHNGaWxlVGltZSogZnQgPSBjbVN5
c3RlbVRvb2xzOjpGaWxlVGltZU5ldygpOwogICBib29sIGhhdmVfZnQgPSBjbVN5c3RlbVRvb2xz
OjpGaWxlVGltZUdldChmaWxlLCBmdCk7CiAgIHN0ZDo6c3RyaW5nIGVtc2c7Ci0gIGlmKCFjbVN5
c3RlbVRvb2xzOjpSZW1vdmVSUGF0aChmaWxlLCAmZW1zZykpCisgIGJvb2wgcmVtb3ZlZDsKKyAg
aWYoIWNtU3lzdGVtVG9vbHM6OlJlbW92ZVJQYXRoKGZpbGUsICZlbXNnLCAmcmVtb3ZlZCkpCiAg
ICAgewogICAgIGNtT1N0cmluZ1N0cmVhbSBlOwogICAgIGUgPDwgIlJQQVRIX1JFTU9WRSBjb3Vs
ZCBub3QgcmVtb3ZlIFJQQVRIIGZyb20gZmlsZTpcbiIKQEAgLTE0OTUsOSArMTQ5NiwxOSBAQCBj
bUZpbGVDb21tYW5kOjpIYW5kbGVSUGF0aFJlbW92ZUNvbW1hbmQoc3RkOjp2ZWN0b3I8c3RkOjpz
dHJpbmc+IGNvbnN0JiBhcmdzKQogICAgIHRoaXMtPlNldEVycm9yKGUuc3RyKCkuY19zdHIoKSk7
CiAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgIH0KLSAgaWYoc3VjY2VzcyAmJiBoYXZlX2Z0KQor
ICBpZihzdWNjZXNzKQogICAgIHsKLSAgICBjbVN5c3RlbVRvb2xzOjpGaWxlVGltZVNldChmaWxl
LCBmdCk7CisgICAgaWYocmVtb3ZlZCkKKyAgICAgIHsKKyAgICAgIHN0ZDo6c3RyaW5nIG1lc3Nh
Z2UgPSAiUmVtb3ZlZCBydW50aW1lIHBhdGggZnJvbSBcIiI7CisgICAgICBtZXNzYWdlICs9IGZp
bGU7CisgICAgICBtZXNzYWdlICs9ICJcIiI7CisgICAgICB0aGlzLT5NYWtlZmlsZS0+RGlzcGxh
eVN0YXR1cyhtZXNzYWdlLmNfc3RyKCksIC0xKTsKKyAgICAgIH0KKyAgICBpZihoYXZlX2Z0KQor
ICAgICAgeworICAgICAgY21TeXN0ZW1Ub29sczo6RmlsZVRpbWVTZXQoZmlsZSwgZnQpOworICAg
ICAgfQogICAgIH0KICAgY21TeXN0ZW1Ub29sczo6RmlsZVRpbWVEZWxldGUoZnQpOwogICByZXR1
cm4gc3VjY2VzczsKZGlmZiAtLWdpdCBjbWFrZS0yLjYuMS1vcmlnL1NvdXJjZS9jbVN5c3RlbVRv
b2xzLmN4eCBjbWFrZS0yLjYuMS9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHgKaW5kZXggNGUxZjk0
NS4uZjMzM2E0YyAxMDA2NDQKLS0tIGNtYWtlLTIuNi4xLW9yaWcvU291cmNlL2NtU3lzdGVtVG9v
bHMuY3h4CisrKyBjbWFrZS0yLjYuMS9Tb3VyY2UvY21TeXN0ZW1Ub29scy5jeHgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZiBkZWZpbmVkKENNQUtFX0JVSUxEX1dJVEhfQ01BS0UpCiAjIGluY2x1ZGUg
PGNtc3lzL1Rlcm1pbmFsLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxjbXN5cy9zdGwvYWxnb3JpdGht
PgogCiAjaWYgZGVmaW5lZChfV0lOMzIpCiAjIGluY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTIzMjgs
NiArMjMyOSwxNiBAQCBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGNtU3lzdGVtVG9vbHNGaW5kUlBh
dGgoc3RkOjpzdHJpbmcgY29uc3QmIGhhdmUsCiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ01B
S0VfVVNFX0VMRl9QQVJTRVIpCitzdHJ1Y3QgY21TeXN0ZW1Ub29sc1JQYXRoSW5mbworeworICB1
bnNpZ25lZCBsb25nIFBvc2l0aW9uOworICB1bnNpZ25lZCBsb25nIFNpemU7CisgIHN0ZDo6c3Ry
aW5nIE5hbWU7CisgIHN0ZDo6c3RyaW5nIFZhbHVlOworfTsKKyNlbmRpZgorCiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIGJvb2wgY21TeXN0ZW1Ub29sczo6Q2hhbmdlUlBhdGgoc3RkOjpzdHJpbmcg
Y29uc3QmIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IGNvbnN0JiBvbGRSUGF0aCwKQEAgLTIzNDAsMzcgKzIzNTEsNzEgQEAgYm9vbCBjbVN5c3RlbVRv
b2xzOjpDaGFuZ2VSUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSwKICAgICB7CiAgICAgKmNo
YW5nZWQgPSBmYWxzZTsKICAgICB9Ci0gIHVuc2lnbmVkIGxvbmcgcnBhdGhQb3NpdGlvbiA9IDA7
Ci0gIHVuc2lnbmVkIGxvbmcgcnBhdGhTaXplID0gMDsKLSAgc3RkOjpzdHJpbmcgcnBhdGhQcmVm
aXg7Ci0gIHN0ZDo6c3RyaW5nIHJwYXRoU3VmZml4OworICBpbnQgcnBfY291bnQgPSAwOworICBj
bVN5c3RlbVRvb2xzUlBhdGhJbmZvIHJwWzJdOwogICB7CiAgIC8vIFBhcnNlIHRoZSBFTEYgYmlu
YXJ5LgogICBjbUVMRiBlbGYoZmlsZS5jX3N0cigpKTsKIAotICAvLyBHZXQgdGhlIFJQQVRIIG9y
IFJVTlBBVEggZW50cnkgZnJvbSBpdC4KLSAgY21FTEY6OlN0cmluZ0VudHJ5IGNvbnN0KiBzZSA9
IGVsZi5HZXRSUGF0aCgpOwotICBpZighc2UpCisgIC8vIEdldCB0aGUgUlBBVEggYW5kIFJVTlBB
VEggZW50cmllcyBmcm9tIGl0LgorICBpbnQgc2VfY291bnQgPSAwOworICBjbUVMRjo6U3RyaW5n
RW50cnkgY29uc3QqIHNlWzJdID0gezAsIDB9OworICBjb25zdCBjaGFyKiBzZV9uYW1lWzJdID0g
ezAsIDB9OworICBpZihjbUVMRjo6U3RyaW5nRW50cnkgY29uc3QqIHNlX3JwYXRoID0gZWxmLkdl
dFJQYXRoKCkpCiAgICAgewotICAgIHNlID0gZWxmLkdldFJ1blBhdGgoKTsKKyAgICBzZVtzZV9j
b3VudF0gPSBzZV9ycGF0aDsKKyAgICBzZV9uYW1lW3NlX2NvdW50XSA9ICJSUEFUSCI7CisgICAg
KytzZV9jb3VudDsKKyAgICB9CisgIGlmKGNtRUxGOjpTdHJpbmdFbnRyeSBjb25zdCogc2VfcnVu
cGF0aCA9IGVsZi5HZXRSdW5QYXRoKCkpCisgICAgeworICAgIHNlW3NlX2NvdW50XSA9IHNlX3J1
bnBhdGg7CisgICAgc2VfbmFtZVtzZV9jb3VudF0gPSAiUlVOUEFUSCI7CisgICAgKytzZV9jb3Vu
dDsKKyAgICB9CisgIGlmKHNlX2NvdW50ID09IDApCisgICAgeworICAgIGlmKG5ld1JQYXRoLmVt
cHR5KCkpCisgICAgICB7CisgICAgICAvLyBUaGUgbmV3IHJwYXRoIGlzIGVtcHR5IGFuZCB0aGVy
ZSBpcyBubyBycGF0aCBhbnl3YXkgc28gaXQgaXMKKyAgICAgIC8vIG9rYXkuCisgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBpZihlbXNnKQorICAg
ICAgICB7CisgICAgICAgICplbXNnID0gIk5vIHZhbGlkIEVMRiBSUEFUSCBvciBSVU5QQVRIIGVu
dHJ5IGV4aXN0cyBpbiB0aGUgZmlsZTsgIjsKKyAgICAgICAgKmVtc2cgKz0gZWxmLkdldEVycm9y
TWVzc2FnZSgpOworICAgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CiAgICAg
fQogCi0gIGlmKHNlKQorICBmb3IoaW50IGk9MDsgaSA8IHNlX2NvdW50OyArK2kpCiAgICAgewor
ICAgIC8vIElmIGJvdGggUlBBVEggYW5kIFJVTlBBVEggcmVmZXIgdG8gdGhlIHNhbWUgc3RyaW5n
IGxpdGVyYWwgaXQKKyAgICAvLyBuZWVkcyB0byBiZSBjaGFuZ2VkIG9ubHkgb25jZS4KKyAgICBp
ZihycF9jb3VudCAmJiBycFswXS5Qb3NpdGlvbiA9PSBzZVtpXS0+UG9zaXRpb24pCisgICAgICB7
CisgICAgICBjb250aW51ZTsKKyAgICAgIH0KKwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVu
dCBycGF0aCBjb250YWlucyB0aGUgb2xkIHJwYXRoLgotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5
cGUgcG9zID0gY21TeXN0ZW1Ub29sc0ZpbmRSUGF0aChzZS0+VmFsdWUsIG9sZFJQYXRoKTsKKyAg
ICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvcyA9CisgICAgICBjbVN5c3RlbVRvb2xzRmluZFJQ
YXRoKHNlW2ldLT5WYWx1ZSwgb2xkUlBhdGgpOwogICAgIGlmKHBvcyA9PSBzdGQ6OnN0cmluZzo6
bnBvcykKICAgICAgIHsKICAgICAgIC8vIElmIGl0IGNvbnRhaW5zIHRoZSBuZXcgcnBhdGggaW5z
dGVhZCB0aGVuIGl0IGlzIG9rYXkuCi0gICAgICBpZihjbVN5c3RlbVRvb2xzRmluZFJQYXRoKHNl
LT5WYWx1ZSwgbmV3UlBhdGgpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgaWYoY21TeXN0
ZW1Ub29sc0ZpbmRSUGF0aChzZVtpXS0+VmFsdWUsIG5ld1JQYXRoKSAhPSBzdGQ6OnN0cmluZzo6
bnBvcykKICAgICAgICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KICAgICAgIGlmKGVtc2cpCiAgICAgICAgIHsKICAgICAgICAgY21PU3RyaW5n
U3RyZWFtIGU7Ci0gICAgICAgIGUgPDwgIlRoZSBjdXJyZW50IFJQQVRIIGlzOlxuIgotICAgICAg
ICAgIDw8ICIgICIgPDwgc2UtPlZhbHVlIDw8ICJcbiIKKyAgICAgICAgZSA8PCAiVGhlIGN1cnJl
bnQgIiA8PCBzZV9uYW1lW2ldIDw8ICIgaXM6XG4iCisgICAgICAgICAgPDwgIiAgIiA8PCBzZVtp
XS0+VmFsdWUgPDwgIlxuIgogICAgICAgICAgIDw8ICJ3aGljaCBkb2VzIG5vdCBjb250YWluOlxu
IgogICAgICAgICAgIDw8ICIgICIgPDwgb2xkUlBhdGggPDwgIlxuIgogICAgICAgICAgIDw8ICJh
cyB3YXMgZXhwZWN0ZWQuIjsKQEAgLTIzNzksNDcgKzI0MjQsNDMgQEAgYm9vbCBjbVN5c3RlbVRv
b2xzOjpDaGFuZ2VSUGF0aChzdGQ6OnN0cmluZyBjb25zdCYgZmlsZSwKICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgIH0KIAotICAgIC8vIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnRy
eS4KLSAgICBycGF0aFBvc2l0aW9uID0gc2UtPlBvc2l0aW9uOwotICAgIHJwYXRoU2l6ZSA9IHNl
LT5TaXplOworICAgIC8vIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbnRyeSBpbiB0aGUg
ZmlsZS4KKyAgICBycFtycF9jb3VudF0uUG9zaXRpb24gPSBzZVtpXS0+UG9zaXRpb247CisgICAg
cnBbcnBfY291bnRdLlNpemUgPSBzZVtpXS0+U2l6ZTsKKyAgICBycFtycF9jb3VudF0uTmFtZSA9
IHNlX25hbWVbaV07CiAKLSAgICAvLyBTdG9yZSB0aGUgcGFydCBvZiB0aGUgcGF0aCB3ZSBtdXN0
IHByZXNlcnZlLgotICAgIHJwYXRoUHJlZml4ID0gc2UtPlZhbHVlLnN1YnN0cigwLCBwb3MpOwot
ICAgIHJwYXRoU3VmZml4ID0gc2UtPlZhbHVlLnN1YnN0cihwb3Mrb2xkUlBhdGgubGVuZ3RoKCks
IG9sZFJQYXRoLm5wb3MpOwotICAgIH0KLSAgZWxzZSBpZihuZXdSUGF0aC5lbXB0eSgpKQotICAg
IHsKLSAgICAvLyBUaGUgbmV3IHJwYXRoIGlzIGVtcHR5IGFuZCB0aGVyZSBpcyBubyBycGF0aCBh
bnl3YXkgc28gaXQgaXMKLSAgICAvLyBva2F5LgotICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ZWxzZQotICAgIHsKLSAgICBpZihlbXNnKQorICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IHZhbHVl
IHdoaWNoIHByZXNlcnZlcyB0aGUgcGFydCBvZiB0aGUgcGF0aAorICAgIC8vIG5vdCBiZWluZyBj
aGFuZ2VkLgorICAgIHJwW3JwX2NvdW50XS5WYWx1ZSA9IHNlW2ldLT5WYWx1ZS5zdWJzdHIoMCwg
cG9zKTsKKyAgICBycFtycF9jb3VudF0uVmFsdWUgKz0gbmV3UlBhdGg7CisgICAgcnBbcnBfY291
bnRdLlZhbHVlICs9IHNlW2ldLT5WYWx1ZS5zdWJzdHIocG9zK29sZFJQYXRoLmxlbmd0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFJQYXRoLm5w
b3MpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCByb29tIHRvIHN0b3JlIHRo
ZSBuZXcgcnBhdGggYW5kIGF0CisgICAgLy8gbGVhc3Qgb25lIG51bGwgdGVybWluYXRvci4KKyAg
ICBpZihycFtycF9jb3VudF0uU2l6ZSA8IHJwW3JwX2NvdW50XS5WYWx1ZS5sZW5ndGgoKSsxKQog
ICAgICAgewotICAgICAgKmVtc2cgPSAiTm8gdmFsaWQgRUxGIFJQQVRIIGVudHJ5IGV4aXN0cyBp
biB0aGUgZmlsZTsgIjsKLSAgICAgICplbXNnICs9IGVsZi5HZXRFcnJvck1lc3NhZ2UoKTsKKyAg
ICAgIGlmKGVtc2cpCisgICAgICAgIHsKKyAgICAgICAgKmVtc2cgPSAiVGhlIHJlcGxhY2VtZW50
IHBhdGggaXMgdG9vIGxvbmcgZm9yIHRoZSAiOworICAgICAgICAqZW1zZyArPSBzZV9uYW1lW2ld
OworICAgICAgICAqZW1zZyArPSAiIGVudHJ5LiI7CisgICAgICAgIH0KKyAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGVudHJ5IGlz
IHJlYWR5IGZvciB1cGRhdGUuCisgICAgKytycF9jb3VudDsKICAgICB9CiAgIH0KLSAgLy8gQ29t
cHV0ZSB0aGUgZnVsbCBuZXcgcnBhdGguCi0gIHN0ZDo6c3RyaW5nIHJwYXRoID0gcnBhdGhQcmVm
aXg7Ci0gIHJwYXRoICs9IG5ld1JQYXRoOwotICBycGF0aCArPSBycGF0aFN1ZmZpeDsKIAotICAv
LyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gdG8gc3RvcmUgdGhlIG5ldyBycGF0aCBh
bmQgYXQKLSAgLy8gbGVhc3Qgb25lIG51bGwgdGVybWluYXRvci4KLSAgaWYocnBhdGhTaXplIDwg
cnBhdGgubGVuZ3RoKCkrMSkKKyAgLy8gSWYgbm8gcnVudGltZSBwYXRoIG5lZWRzIHRvIGJlIGNo
YW5nZWQsIHdlIGFyZSBkb25lLgorICBpZihycF9jb3VudCA9PSAwKQogICAgIHsKLSAgICBpZihl
bXNnKQotICAgICAgewotICAgICAgKmVtc2cgPSAiVGhlIHJlcGxhY2VtZW50IFJQQVRIIGlzIHRv
byBsb25nLiI7Ci0gICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAvLyBPcGVuIHRoZSBmaWxlIGZvciB1cGRhdGUgYW5kIHNlZWsgdG8gdGhlIFJQ
QVRIIHBvc2l0aW9uLgorICAvLyBPcGVuIHRoZSBmaWxlIGZvciB1cGRhdGUuCiAgIHN0ZDo6b2Zz
dHJlYW0gZihmaWxlLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICBzdGQ6Omlvczo6aW4gfCBz
dGQ6Omlvczo6b3V0IHwgc3RkOjppb3M6OmJpbmFyeSk7CiAgIGlmKCFmKQpAQCAtMjQzMCw0MCAr
MjQ3MSw0OSBAQCBib29sIGNtU3lzdGVtVG9vbHM6OkNoYW5nZVJQYXRoKHN0ZDo6c3RyaW5nIGNv
bnN0JiBmaWxlLAogICAgICAgfQogICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gIGlmKCFmLnNl
ZWtwKHJwYXRoUG9zaXRpb24pKQorCisgIC8vIFN0b3JlIHRoZSBuZXcgUlBBVEggYW5kIFJVTlBB
VEggc3RyaW5ncy4KKyAgZm9yKGludCBpPTA7IGkgPCBycF9jb3VudDsgKytpKQogICAgIHsKLSAg
ICBpZihlbXNnKQorICAgIC8vIFNlZWsgdG8gdGhlIFJQQVRIIHBvc2l0aW9uLgorICAgIGlmKCFm
LnNlZWtwKHJwW2ldLlBvc2l0aW9uKSkKICAgICAgIHsKLSAgICAgICplbXNnID0gIkVycm9yIHNl
ZWtpbmcgdG8gUlBBVEggcG9zaXRpb24uIjsKKyAgICAgIGlmKGVtc2cpCisgICAgICAgIHsKKyAg
ICAgICAgKmVtc2cgPSAiRXJyb3Igc2Vla2luZyB0byAiOworICAgICAgICAqZW1zZyArPSBycFtp
XS5OYW1lOworICAgICAgICAqZW1zZyArPSAiIHBvc2l0aW9uLiI7CisgICAgICAgIH0KKyAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gIC8v
IFdyaXRlIHRoZSBuZXcgcnBhdGguICBGb2xsb3cgaXQgd2l0aCBlbm91Z2ggbnVsbCB0ZXJtaW5h
dG9ycyB0bwotICAvLyBmaWxsIHRoZSBzdHJpbmcgdGFibGUgZW50cnkuCi0gIGYgPDwgcnBhdGg7
Ci0gIGZvcih1bnNpZ25lZCBsb25nIGk9cnBhdGgubGVuZ3RoKCk7IGkgPCBycGF0aFNpemU7ICsr
aSkKLSAgICB7Ci0gICAgZiA8PCAnXDAnOwotICAgIH0KKyAgICAvLyBXcml0ZSB0aGUgbmV3IHJw
YXRoLiAgRm9sbG93IGl0IHdpdGggZW5vdWdoIG51bGwgdGVybWluYXRvcnMgdG8KKyAgICAvLyBm
aWxsIHRoZSBzdHJpbmcgdGFibGUgZW50cnkuCisgICAgZiA8PCBycFtpXS5WYWx1ZTsKKyAgICBm
b3IodW5zaWduZWQgbG9uZyBqPXJwW2ldLlZhbHVlLmxlbmd0aCgpOyBqIDwgcnBbaV0uU2l6ZTsg
KytqKQorICAgICAgeworICAgICAgZiA8PCAnXDAnOworICAgICAgfQogCi0gIC8vIE1ha2Ugc3Vy
ZSBldmVyeXRoaW5nIHdhcyBva2F5LgotICBpZihmKQotICAgIHsKLSAgICBpZihjaGFuZ2VkKQor
ICAgIC8vIE1ha2Ugc3VyZSBpdCB3cm90ZSBjb3JyZWN0bHkuCisgICAgaWYoIWYpCiAgICAgICB7
Ci0gICAgICAqY2hhbmdlZCA9IHRydWU7CisgICAgICBpZihlbXNnKQorICAgICAgICB7CisgICAg
ICAgICplbXNnID0gIkVycm9yIHdyaXRpbmcgdGhlIG5ldyAiOworICAgICAgICAqZW1zZyArPSBy
cFtpXS5OYW1lOworICAgICAgICAqZW1zZyArPSAiIHN0cmluZyB0byB0aGUgZmlsZS4iOworICAg
ICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICBlbHNlCisKKyAgLy8gRXZlcnl0aGluZyB3YXMgdXBkYXRlZCBzdWNjZXNzZnVsbHku
CisgIGlmKGNoYW5nZWQpCiAgICAgewotICAgIGlmKGVtc2cpCi0gICAgICB7Ci0gICAgICAqZW1z
ZyA9ICJFcnJvciB3cml0aW5nIHRoZSBuZXcgcnBhdGggdG8gdGhlIGZpbGUuIjsKLSAgICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgKmNoYW5nZWQgPSB0cnVlOwogICAgIH0KKyAgcmV0dXJu
IHRydWU7CiAjZWxzZQogICAodm9pZClmaWxlOwogICAodm9pZClvbGRSUGF0aDsKQEAgLTI0NzUs
NTcgKzI1MjUsOTUgQEAgYm9vbCBjbVN5c3RlbVRvb2xzOjpDaGFuZ2VSUGF0aChzdGQ6OnN0cmlu
ZyBjb25zdCYgZmlsZSwKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1ib29sIGNtU3lzdGVt
VG9vbHM6OlJlbW92ZVJQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlLCBzdGQ6OnN0cmluZyog
ZW1zZykKK2Jvb2wgY21TeXN0ZW1Ub29sczo6UmVtb3ZlUlBhdGgoc3RkOjpzdHJpbmcgY29uc3Qm
IGZpbGUsIHN0ZDo6c3RyaW5nKiBlbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sKiByZW1vdmVkKQogewogI2lmIGRlZmluZWQoQ01BS0VfVVNFX0VMRl9QQVJTRVIpCi0g
IHVuc2lnbmVkIGxvbmcgcnBhdGhQb3NpdGlvbiA9IDA7Ci0gIHVuc2lnbmVkIGxvbmcgcnBhdGhT
aXplID0gMDsKLSAgdW5zaWduZWQgbG9uZyBycGF0aEVudHJ5UG9zaXRpb24gPSAwOworICBpZihy
ZW1vdmVkKQorICAgIHsKKyAgICAqcmVtb3ZlZCA9IGZhbHNlOworICAgIH0KKyAgaW50IHplcm9D
b3VudCA9IDA7CisgIHVuc2lnbmVkIGxvbmcgemVyb1Bvc2l0aW9uWzJdID0gezAsMH07CisgIHVu
c2lnbmVkIGxvbmcgemVyb1NpemVbMl0gPSB7MCwwfTsKKyAgdW5zaWduZWQgbG9uZyBieXRlc0Jl
Z2luID0gMDsKICAgc3RkOjp2ZWN0b3I8Y2hhcj4gYnl0ZXM7CiAgIHsKICAgLy8gUGFyc2UgdGhl
IEVMRiBiaW5hcnkuCiAgIGNtRUxGIGVsZihmaWxlLmNfc3RyKCkpOwogCi0gIC8vIEdldCB0aGUg
UlBBVEggb3IgUlVOUEFUSCBlbnRyeSBmcm9tIGl0LgotICBjbUVMRjo6U3RyaW5nRW50cnkgY29u
c3QqIHNlID0gZWxmLkdldFJQYXRoKCk7Ci0gIGlmKCFzZSkKKyAgLy8gR2V0IHRoZSBSUEFUSCBh
bmQgUlVOUEFUSCBlbnRyaWVzIGZyb20gaXQgYW5kIHNvcnQgdGhlbSBieSBpbmRleAorICAvLyBp
biB0aGUgZHluYW1pYyBzZWN0aW9uIGhlYWRlci4KKyAgaW50IHNlX2NvdW50ID0gMDsKKyAgY21F
TEY6OlN0cmluZ0VudHJ5IGNvbnN0KiBzZVsyXSA9IHswLCAwfTsKKyAgaWYoY21FTEY6OlN0cmlu
Z0VudHJ5IGNvbnN0KiBzZV9ycGF0aCA9IGVsZi5HZXRSUGF0aCgpKQogICAgIHsKLSAgICBzZSA9
IGVsZi5HZXRSdW5QYXRoKCk7CisgICAgc2Vbc2VfY291bnQrK10gPSBzZV9ycGF0aDsKICAgICB9
Ci0KLSAgaWYoc2UpCisgIGlmKGNtRUxGOjpTdHJpbmdFbnRyeSBjb25zdCogc2VfcnVucGF0aCA9
IGVsZi5HZXRSdW5QYXRoKCkpCiAgICAgewotICAgIC8vIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0
IHRoZSBlbnRyeS4KLSAgICBycGF0aFBvc2l0aW9uID0gc2UtPlBvc2l0aW9uOwotICAgIHJwYXRo
U2l6ZSA9IHNlLT5TaXplOwotICAgIHJwYXRoRW50cnlQb3NpdGlvbiA9IGVsZi5HZXREeW5hbWlj
RW50cnlQb3NpdGlvbihzZS0+SW5kZXhJblNlY3Rpb24pOworICAgIHNlW3NlX2NvdW50KytdID0g
c2VfcnVucGF0aDsKKyAgICB9CisgIGlmKHNlX2NvdW50ID09IDApCisgICAgeworICAgIC8vIFRo
ZXJlIGlzIG5vIFJQQVRIIG9yIFJVTlBBVEggYW55d2F5LgorICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgaWYoc2VfY291bnQgPT0gMiAmJiBzZVsxXS0+SW5kZXhJblNlY3Rpb24gPCBzZVswXS0+
SW5kZXhJblNlY3Rpb24pCisgICAgeworICAgIGNtc3lzX3N0bDo6c3dhcChzZVswXSwgc2VbMV0p
OworICAgIH0KIAotICAgIC8vIEdldCB0aGUgZmlsZSByYW5nZSBjb250YWluaW5nIHRoZSByZXN0
IG9mIHRoZSBEWU5BTUlDIHRhYmxlCi0gICAgLy8gYWZ0ZXIgdGhlIFJQQVRIIGVudHJ5LgotICAg
IHVuc2lnbmVkIGxvbmcgbmV4dEVudHJ5UG9zaXRpb24gPQotICAgICAgZWxmLkdldER5bmFtaWNF
bnRyeVBvc2l0aW9uKHNlLT5JbmRleEluU2VjdGlvbisxKTsKLSAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSBlbGYuR2V0RHluYW1pY0VudHJ5Q291bnQoKTsKLSAgICBpZihjb3VudCA9PSAwKQorICAv
LyBHZXQgdGhlIHNpemUgb2YgdGhlIGR5bmFtaWMgc2VjdGlvbiBoZWFkZXIuCisgIHVuc2lnbmVk
IGludCBjb3VudCA9IGVsZi5HZXREeW5hbWljRW50cnlDb3VudCgpOworICBpZihjb3VudCA9PSAw
KQorICAgIHsKKyAgICAvLyBUaGlzIHNob3VsZCBoYXBwZW4gb25seSBmb3IgaW52YWxpZCBFTEYg
ZmlsZXMgd2hlcmUgYSBEVF9OVUxMCisgICAgLy8gYXBwZWFycyBiZWZvcmUgdGhlIGVuZCBvZiB0
aGUgdGFibGUuCisgICAgaWYoZW1zZykKICAgICAgIHsKLSAgICAgIC8vIFRoaXMgc2hvdWxkIGhh
cHBlbiBvbmx5IGZvciBpbnZhbGlkIEVMRiBmaWxlcyB3aGVyZSBhIERUX05VTEwKLSAgICAgIC8v
IGFwcGVhcnMgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHRhYmxlLgotICAgICAgaWYoZW1zZykKLSAg
ICAgICAgewotICAgICAgICAqZW1zZyA9ICJEWU5BTUlDIHNlY3Rpb24gY29udGFpbnMgYSBEVF9O
VUxMIGJlZm9yZSB0aGUgZW5kLiI7Ci0gICAgICAgIH0KLSAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICplbXNnID0gIkRZTkFNSUMgc2VjdGlvbiBjb250YWlucyBhIERUX05VTEwgYmVmb3JlIHRo
ZSBlbmQuIjsKICAgICAgIH0KLSAgICB1bnNpZ25lZCBsb25nIG51bGxFbnRyeVBvc2l0aW9uID0g
ZWxmLkdldER5bmFtaWNFbnRyeVBvc2l0aW9uKGNvdW50KTsKKyAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgIC8vIFNhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmluZyBlbnRyaWVzIHRv
IGJlIHplcm9lZC4KKyAgemVyb0NvdW50ID0gc2VfY291bnQ7CisgIGZvcihpbnQgaT0wOyBpIDwg
c2VfY291bnQ7ICsraSkKKyAgICB7CisgICAgemVyb1Bvc2l0aW9uW2ldID0gc2VbaV0tPlBvc2l0
aW9uOworICAgIHplcm9TaXplW2ldID0gc2VbaV0tPlNpemU7CisgICAgfQorCisgIC8vIEdldCB0
aGUgcmFuZ2Ugb2YgZmlsZSBwb3NpdGlvbnMgY29ycmVzcG9uZGluZyB0byBlYWNoIGVudHJ5IGFu
ZAorICAvLyB0aGUgcmVzdCBvZiB0aGUgdGFibGUgYWZ0ZXIgdGhlbS4KKyAgdW5zaWduZWQgbG9u
ZyBlbnRyeUJlZ2luWzNdID0gezAsMCwwfTsKKyAgdW5zaWduZWQgbG9uZyBlbnRyeUVuZFsyXSA9
IHswLDB9OworICBmb3IoaW50IGk9MDsgaSA8IHNlX2NvdW50OyArK2kpCisgICAgeworICAgIGVu
dHJ5QmVnaW5baV0gPSBlbGYuR2V0RHluYW1pY0VudHJ5UG9zaXRpb24oc2VbaV0tPkluZGV4SW5T
ZWN0aW9uKTsKKyAgICBlbnRyeUVuZFtpXSA9IGVsZi5HZXREeW5hbWljRW50cnlQb3NpdGlvbihz
ZVtpXS0+SW5kZXhJblNlY3Rpb24rMSk7CisgICAgfQorICBlbnRyeUJlZ2luW3NlX2NvdW50XSA9
IGVsZi5HZXREeW5hbWljRW50cnlQb3NpdGlvbihjb3VudCk7CisKKyAgLy8gVGhlIGRhdGEgYXJl
IHRvIGJlIHdyaXR0ZW4gb3ZlciB0aGUgb2xkIHRhYmxlIGVudHJpZXMgc3RhcnRpbmcgYXQKKyAg
Ly8gdGhlIGZpcnN0IG9uZSBiZWluZyByZW1vdmVkLgorICBieXRlc0JlZ2luID0gZW50cnlCZWdp
blswXTsKKyAgdW5zaWduZWQgbG9uZyBieXRlc0VuZCA9IGVudHJ5QmVnaW5bc2VfY291bnRdOwog
Ci0gICAgLy8gQWxsb2NhdGUgYW5kIGZpbGwgYSBidWZmZXIgd2l0aCB6ZXJvcy4KLSAgICBieXRl
cy5yZXNpemUobnVsbEVudHJ5UG9zaXRpb24gLSBycGF0aEVudHJ5UG9zaXRpb24sIDApOworICAv
LyBBbGxvY2F0ZSBhIGJ1ZmZlciB0byBob2xkIHRoZSBwYXJ0IG9mIHRoZSBmaWxlIHRvIGJlIHdy
aXR0ZW4uCisgIC8vIEluaXRpYWxpemUgaXQgd2l0aCB6ZXJvcy4KKyAgYnl0ZXMucmVzaXplKGJ5
dGVzRW5kIC0gYnl0ZXNCZWdpbiwgMCk7CiAKLSAgICAvLyBSZWFkIHRoZSBwYXJ0IG9mIHRoZSBE
WU5BTUlDIHNlY3Rpb24gaGVhZGVyIHRoYXQgd2lsbCBtb3ZlLgotICAgIC8vIFRoZSByZW1haW5k
ZXIgb2YgdGhlIGJ1ZmZlciB3aWxsIGJlIGxlZnQgd2l0aCB6ZXJvcyB3aGljaAotICAgIC8vIHJl
cHJlc2VudCBhIERUX05VTEwgZW50cnkuCi0gICAgaWYoIWVsZi5SZWFkQnl0ZXMobmV4dEVudHJ5
UG9zaXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgbnVsbEVudHJ5UG9zaXRpb24gLSBuZXh0
RW50cnlQb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNbMF0pKQorICAvLyBS
ZWFkIHRoZSBwYXJ0IG9mIHRoZSBEWU5BTUlDIHNlY3Rpb24gaGVhZGVyIHRoYXQgd2lsbCBtb3Zl
LgorICAvLyBUaGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgd2lsbCBiZSBsZWZ0IHdpdGggemVy
b3Mgd2hpY2gKKyAgLy8gcmVwcmVzZW50IGEgRFRfTlVMTCBlbnRyeS4KKyAgY2hhciogZGF0YSA9
ICZieXRlc1swXTsKKyAgZm9yKGludCBpPTA7IGkgPCBzZV9jb3VudDsgKytpKQorICAgIHsKKyAg
ICAvLyBSZWFkIGRhdGEgYmV0d2VlbiB0aGUgZW50cmllcyBiZWluZyByZW1vdmVkLgorICAgIHVu
c2lnbmVkIGxvbmcgc3ogPSBlbnRyeUJlZ2luW2krMV0gLSBlbnRyeUVuZFtpXTsKKyAgICBpZihz
eiA+IDAgJiYgIWVsZi5SZWFkQnl0ZXMoZW50cnlFbmRbaV0sIHN6LCBkYXRhKSkKICAgICAgIHsK
ICAgICAgIGlmKGVtc2cpCiAgICAgICAgIHsKQEAgLTI1MzMsMTEgKzI2MjEsNyBAQCBib29sIGNt
U3lzdGVtVG9vbHM6OlJlbW92ZVJQYXRoKHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlLCBzdGQ6OnN0
cmluZyogZW1zZykKICAgICAgICAgfQogICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfQotICAg
IH0KLSAgZWxzZQotICAgIHsKLSAgICAvLyBUaGVyZSBpcyBubyBSUEFUSCBvciBSVU5QQVRIIGFu
eXdheS4KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBkYXRhICs9IHN6OwogICAgIH0KICAgfQogCkBA
IC0yNTU0LDcgKzI2MzgsNyBAQCBib29sIGNtU3lzdGVtVG9vbHM6OlJlbW92ZVJQYXRoKHN0ZDo6
c3RyaW5nIGNvbnN0JiBmaWxlLCBzdGQ6OnN0cmluZyogZW1zZykKICAgICB9CiAKICAgLy8gV3Jp
dGUgdGhlIG5ldyBEWU5BTUlDIHRhYmxlIGhlYWRlci4KLSAgaWYoIWYuc2Vla3AocnBhdGhFbnRy
eVBvc2l0aW9uKSkKKyAgaWYoIWYuc2Vla3AoYnl0ZXNCZWdpbikpCiAgICAgewogICAgIGlmKGVt
c2cpCiAgICAgICB7CkBAIC0yNTcxLDM2ICsyNjU1LDQxIEBAIGJvb2wgY21TeXN0ZW1Ub29sczo6
UmVtb3ZlUlBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUsIHN0ZDo6c3RyaW5nKiBlbXNnKQog
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgLy8gRmlsbCB0aGUgUlBBVEggc3RyaW5nIHdp
dGggemVybyBieXRlcy4KLSAgaWYoIWYuc2Vla3AocnBhdGhQb3NpdGlvbikpCisgIC8vIEZpbGwg
dGhlIFJQQVRIIGFuZCBSVU5QQVRIIHN0cmluZ3Mgd2l0aCB6ZXJvIGJ5dGVzLgorICBmb3IoaW50
IGk9MDsgaSA8IHplcm9Db3VudDsgKytpKQogICAgIHsKLSAgICBpZihlbXNnKQorICAgIGlmKCFm
LnNlZWtwKHplcm9Qb3NpdGlvbltpXSkpCiAgICAgICB7Ci0gICAgICAqZW1zZyA9ICJFcnJvciBz
ZWVraW5nIHRvIFJQQVRIIHBvc2l0aW9uLiI7CisgICAgICBpZihlbXNnKQorICAgICAgICB7Cisg
ICAgICAgICplbXNnID0gIkVycm9yIHNlZWtpbmcgdG8gUlBBVEggcG9zaXRpb24uIjsKKyAgICAg
ICAgfQorICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIGZvcih1bnNpZ25lZCBsb25n
IGo9MDsgaiA8IHplcm9TaXplW2ldOyArK2opCisgICAgICB7CisgICAgICBmIDw8ICdcMCc7Cisg
ICAgICB9CisgICAgaWYoIWYpCisgICAgICB7CisgICAgICBpZihlbXNnKQorICAgICAgICB7Cisg
ICAgICAgICplbXNnID0gIkVycm9yIHdyaXRpbmcgdGhlIGVtcHR5IHJwYXRoIHN0cmluZyB0byB0
aGUgZmlsZS4iOworICAgICAgICB9CisgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgZm9yKHVuc2lnbmVkIGxvbmcgaT0wOyBpIDwgcnBhdGhT
aXplOyArK2kpCi0gICAgewotICAgIGYgPDwgJ1wwJzsKICAgICB9CiAKLSAgLy8gTWFrZSBzdXJl
IGV2ZXJ5dGhpbmcgd2FzIG9rYXkuCi0gIGlmKGYpCi0gICAgewotICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgZWxzZQorICAvLyBFdmVyeXRoaW5nIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4K
KyAgaWYocmVtb3ZlZCkKICAgICB7Ci0gICAgaWYoZW1zZykKLSAgICAgIHsKLSAgICAgICplbXNn
ID0gIkVycm9yIHdyaXRpbmcgdGhlIGVtcHR5IHJwYXRoIHRvIHRoZSBmaWxlLiI7Ci0gICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgICpyZW1vdmVkID0gdHJ1ZTsKICAgICB9CisgIHJldHVy
biB0cnVlOwogI2Vsc2UKICAgKHZvaWQpZmlsZTsKICAgKHZvaWQpZW1zZzsKKyAgKHZvaWQpcmVt
b3ZlZDsKICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgY21ha2UtMi42LjEt
b3JpZy9Tb3VyY2UvY21TeXN0ZW1Ub29scy5oIGNtYWtlLTIuNi4xL1NvdXJjZS9jbVN5c3RlbVRv
b2xzLmgKaW5kZXggNDkzZmY3MS4uMWZmMTJiZiAxMDA2NDQKLS0tIGNtYWtlLTIuNi4xLW9yaWcv
U291cmNlL2NtU3lzdGVtVG9vbHMuaAorKysgY21ha2UtMi42LjEvU291cmNlL2NtU3lzdGVtVG9v
bHMuaApAQCAtMzk2LDcgKzM5Niw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCogY2hhbmdlZCA9IDApOwogCiAgIC8qKiBUcnkgdG8gcmVtb3ZlIHRoZSBSUEFUSCBm
cm9tIGFuIEVMRiBiaW5hcnkuICAqLwotICBzdGF0aWMgYm9vbCBSZW1vdmVSUGF0aChzdGQ6OnN0
cmluZyBjb25zdCYgZmlsZSwgc3RkOjpzdHJpbmcqIGVtc2cgPSAwKTsKKyAgc3RhdGljIGJvb2wg
UmVtb3ZlUlBhdGgoc3RkOjpzdHJpbmcgY29uc3QmIGZpbGUsIHN0ZDo6c3RyaW5nKiBlbXNnID0g
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCogcmVtb3ZlZCA9IDApOwogCiAgIC8q
KiBDaGVjayB3aGV0aGVyIHRoZSBSUEFUSCBpbiBhbiBFTEYgYmluYXJ5IGNvbnRhaW5zIHRoZSBw
YXRoCiAgICAgICBnaXZlbi4gICovCg==
</data>        

          </attachment>
    </bug>

</bugzilla>