<?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>88535</bug_id>
          
          <creation_ts>2012-06-07 07:10:49 -0700</creation_ts>
          <short_desc>[Qt][WK2] Scanning plugins blocks the UI for a long time</short_desc>
          <delta_ts>2012-06-13 07:39:49 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</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="Balazs Kelemen">kbalazs</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>643521</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-07 07:10:49 -0700</bug_when>
    <thetext>This is sad, since one of the main benefits of WebKit2 is the availability of an always responsive UI. A relatively simple solution for this is a custom persistent cache where we store the meta data of plugins (supported mime types, etc.). This is what we did in WebCore back in time under the NETSCAPE_PLUGIN_METADATA_CACHE flag. I am going to implement something similar for Qt-WK2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643557</commentid>
    <comment_count>1</comment_count>
      <attachid>146290</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-07 07:54:42 -0700</bug_when>
    <thetext>Created attachment 146290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647879</commentid>
    <comment_count>2</comment_count>
      <attachid>146290</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-13 03:53:44 -0700</bug_when>
    <thetext>Comment on attachment 146290
Patch

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

Looks good in general, I think this is a good approach. But I think the cacheFile() implementation and usage should be improved, in particular I think we should use the same directory that we use for other storage/cache related things in QtWebKit.

&gt; Source/WebKit2/UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:57
&gt; +static QFileInfo cacheFile()

It appears to me that the callers of this function do only three things with the return value:

    1) Call filePath() and the construct a QFile object
    2) Call exists() to check if the file exists
    3) Call QFile::remove on the filePath() to remove the file

In the light of that it seems to me that a better return type for this function would be a PassOwnPtr&lt;QFile&gt; object, so that the code becomes simpler:

    QFile file(cacheFile().filePath());
    file.open(...);

becomes

    OwnPtr&lt;QFile&gt; file(cacheFile());
    file-&gt;open();

and

    if (cacheFile().exists())

becomes

    if (cacheFile()-&gt;exists())

and

    QFile::remove(cacheFile().filePath());

becomes

    cacheFile()-&gt;remove();

However please feel absolutely free to ignore this suggestion :)

&gt; Source/WebKit2/UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:61
&gt; +    return QFileInfo(QDir(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)), QLatin1String(&quot;plugin_meta_data.json&quot;));

For other storage items we use CacheLocation + &quot;.QtWebKit/&quot;, see WebContextQt.cpp. I think code from there should be re-used in determining the base directory. That also includes the path creation and I think it would make the function a lot cheaper. In some functions below it&apos;s called repeatedly as if it were very cheap to call, but depending on the backend the implementation of writableLocation(CacheLocation) may be more expensive than it seems.

&gt; Source/WebKit2/UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:99
&gt; +        isWritable = QDir::root().mkpath(cacheFileInfo.dir().path());

Wouldn&apos;t it be easier here to use absolutePath() instead of .dir().path() ?

Also I think using the return value if mkpath() has no effect here because in line 101 the value is discarded with the result of the open() call.

&gt; Source/WebKit2/UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:101
&gt; +    isWritable = file.open(QFile::WriteOnly) &amp;&amp; file.isWritable();

Shouldn&apos;t this be WriteOnly | Truncate, to handle the case where the file exists already?

&gt; Source/WebKit2/UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:137
&gt; +static MetaDataResult::Tag tryReadPluginMetaDataFromCacheFile(QString canonicalPluginPath, RawPluginMetaData&amp; result)

QString canonicalPluginPath -&gt; const QString&amp; canonicalPluginPath

&gt; Source/WebKit2/UIProcess/Plugins/qt/PluginProcessProxyQt.cpp:140
&gt; +    if (!cacheFile().exists())
&gt; +        return MetaDataResult::NotAvailable;

I think readMetaDataFromCacheFile will fail accordingly if the file doesn&apos;t exist (open() will fail), and therefore you can avoid this check and call to cacheFile().

This way in the common case of success the cacheFile() function is called only one single time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647984</commentid>
    <comment_count>3</comment_count>
      <attachid>147310</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-13 07:09:11 -0700</bug_when>
    <thetext>Created attachment 147310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647998</commentid>
    <comment_count>4</comment_count>
      <attachid>147310</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-13 07:39:42 -0700</bug_when>
    <thetext>Comment on attachment 147310
Patch

Clearing flags on attachment: 147310

Committed r120205: &lt;http://trac.webkit.org/changeset/120205&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647999</commentid>
    <comment_count>5</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-13 07:39:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146290</attachid>
            <date>2012-06-07 07:54:42 -0700</date>
            <delta_ts>2012-06-13 07:09:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88535-20120607165438.patch</filename>
            <type>text/plain</type>
            <size>10246</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWU4YWNiYmYyYmVlZjgz
Yzk4ZDVhZWI1OTg2NzRhNTAyMzllZjg0Mi4uZmJhMDA5YTliNDQyOWE5ZWVkYTNlZGRjOTI5NjM0
ZjM0M2ViNzE3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA2LTA3ICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gU2Nh
bm5pbmcgcGx1Z2lucyBibG9ja3MgdGhlIFVJIGZvciBhIGxvbmcgdGltZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBwZXJzaXN0ZW50
IGNhY2hlIGZvciB0aGUgbWV0YSBkYXRhIG9mIHBsdWdpbnMuCisgICAgICAgIFRoaXMgd2F5IHRo
ZSBVSSBwcm9jZXNzIHdpbGwgbm90IGJsb2NrIGZvciB0b28gbG9uZyB3aGVuCisgICAgICAgIGl0
J3MgdGltZSB0byBzY2FuIHRoZSBwbHVnaW5zIChleGNlcHQgdGhlIGZpcnN0IHRpbWUpLgorICAg
ICAgICBUaGUgY2FjaGUgaXMgYSBqc29uIGZpbGUgc3RvcmVkIGluIGEgc3RhbmRhcmQgaGlkZGVu
IGNhY2hlCisgICAgICAgIGRpcmVjdG9yeS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5z
L3F0L1BsdWdpblByb2Nlc3NQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y2FjaGVGaWxl
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnJlYWRNZXRhRGF0YUZyb21D
YWNoZUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp3cml0ZVRvQ2FjaGVGaWxlKToKKyAgICAgICAg
KFdlYktpdDo6YXBwZW5kVG9DYWNoZUZpbGUpOgorICAgICAgICAoV2ViS2l0Ojp0cnlSZWFkUGx1
Z2luTWV0YURhdGFGcm9tQ2FjaGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJvY2Vz
c1Byb3h5OjpzY2FuUGx1Z2luKToKKwogMjAxMi0wNi0wNiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBBZGQgcXVpcmtzIGZvciBydW5uaW5nIHRo
ZSB3ZWIgcHJvY2VzcyBpbiBhIHByb2ZpbGVyIHNoZWxsLCBsaWtlIHZhbGdyaW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9jZXNzUHJv
eHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9j
ZXNzUHJveHlRdC5jcHAKaW5kZXggOWI3ZjJiMmRkYTJlNzhhZmQzYTg3ZjE3MjE2ZGUxYmFhY2U3
MzlmYy4uZjA5Mzk4Y2QzYjMxZGYxMWFiOTYwZTEwYWUwZTIzMDcyZTdmNjk5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvcXQvUGx1Z2luUHJvY2Vzc1Byb3h5
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3F0L1BsdWdpblBy
b2Nlc3NQcm94eVF0LmNwcApAQCAtMzEsMTAgKzMxLDIwIEBACiAjaW5jbHVkZSAiUHJvY2Vzc0V4
ZWN1dGFibGVQYXRoLmgiCiAjaW5jbHVkZSA8UUJ5dGVBcnJheT4KICNpbmNsdWRlIDxRQ29yZUFw
cGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEYXRlVGltZT4KICNpbmNsdWRlIDxRRGlyPgogI2luY2x1
ZGUgPFFFdmVudExvb3A+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUZpbGVJbmZvPgor
I2luY2x1ZGUgPFFKc29uQXJyYXk+CisjaW5jbHVkZSA8UUpzb25Eb2N1bWVudD4KKyNpbmNsdWRl
IDxRSnNvbk9iamVjdD4KKyNpbmNsdWRlIDxRTWFwPgogI2luY2x1ZGUgPFFQcm9jZXNzPgorI2lu
Y2x1ZGUgPFFTdGFuZGFyZFBhdGhzPgogI2luY2x1ZGUgPFFTdHJpbmc+CisjaW5jbHVkZSA8UVN0
cmluZ0J1aWxkZXI+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CkBAIC00NCwzNSArNTQsMTk1IEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUlu
aXRpYWxpemVQbHVnaW5Qcm9jZXNzKFBsdWdpblByb2Nlc3NDcmVhdGlvblBhCiB7CiB9CiAKK3N0
YXRpYyBRRmlsZUluZm8gY2FjaGVGaWxlKCkKK3sKKyAgICAvLyBJdCBjb3VsZCBiZSBhIHN0YXRp
YyBidXQgYXNraW5nIGZvciB0aGUgcGF0aCBldmVyeSB0aW1lIGNvdWxkIGhlbHAgaWYgc29tZXRo
aW5nCisgICAgLy8gYmFkIGhhcHBlbmVkIHdpdGggdGhlIGZpbGUgc3lzdGVtLgorICAgIHJldHVy
biBRRmlsZUluZm8oUURpcihRU3RhbmRhcmRQYXRoczo6d3JpdGFibGVMb2NhdGlvbihRU3RhbmRh
cmRQYXRoczo6Q2FjaGVMb2NhdGlvbikpLCBRTGF0aW4xU3RyaW5nKCJwbHVnaW5fbWV0YV9kYXRh
Lmpzb24iKSk7Cit9CisKK3N0cnVjdCBSZWFkUmVzdWx0IHsKKyAgICBlbnVtIFRhZyB7CisgICAg
ICAgIEVtcHR5LAorICAgICAgICBFcnJvciwKKyAgICAgICAgU3VjY2VzcworICAgIH07Cit9Owor
CitzdGF0aWMgUmVhZFJlc3VsdDo6VGFnIHJlYWRNZXRhRGF0YUZyb21DYWNoZUZpbGUoUUpzb25E
b2N1bWVudCYgcmVzdWx0KQoreworICAgIFFGaWxlIGZpbGUoY2FjaGVGaWxlKCkuZmlsZVBhdGgo
KSk7CisgICAgaWYgKCFmaWxlLm9wZW4oUUZpbGU6OlJlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJu
IFJlYWRSZXN1bHQ6OkVtcHR5OworICAgIFFCeXRlQXJyYXkgZGF0YSA9IGZpbGUucmVhZEFsbCgp
OworICAgIGlmIChkYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFJlYWRSZXN1bHQ6OkVt
cHR5OworCisgICAgUUpzb25QYXJzZUVycm9yIGVycm9yOworICAgIHJlc3VsdCA9IFFKc29uRG9j
dW1lbnQ6OmZyb21Kc29uKGRhdGEsICZlcnJvcik7CisgICAgaWYgKGVycm9yLmVycm9yICE9IFFK
c29uUGFyc2VFcnJvcjo6Tm9FcnJvciB8fCAhcmVzdWx0LmlzQXJyYXkoKSkgeworICAgICAgICAv
LyBDb3JydXB0ZWQgZmlsZS4KKyAgICAgICAgZmlsZS5yZW1vdmUoKTsKKyAgICAgICAgcmV0dXJu
IFJlYWRSZXN1bHQ6OkVycm9yOworICAgIH0KKworICAgIGZpbGUuY2xvc2UoKTsKKyAgICByZXR1
cm4gUmVhZFJlc3VsdDo6U3VjY2VzczsKK30KKworc3RhdGljIHZvaWQgd3JpdGVUb0NhY2hlRmls
ZShjb25zdCBRSnNvbkFycmF5JiBhcnJheSkKK3sKKyAgICBRQnl0ZUFycmF5IGRhdGEgPSBRSnNv
bkRvY3VtZW50KGFycmF5KS50b0pzb24oKTsKKyAgICBRRmlsZUluZm8gY2FjaGVGaWxlSW5mbyA9
IGNhY2hlRmlsZSgpOworICAgIGJvb2wgaXNXcml0YWJsZSA9IHRydWU7CisgICAgaWYgKCFjYWNo
ZUZpbGVJbmZvLmV4aXN0cygpKQorICAgICAgICBpc1dyaXRhYmxlID0gUURpcjo6cm9vdCgpLm1r
cGF0aChjYWNoZUZpbGVJbmZvLmRpcigpLnBhdGgoKSk7CisgICAgUUZpbGUgZmlsZShjYWNoZUZp
bGVJbmZvLmZpbGVQYXRoKCkpOworICAgIGlzV3JpdGFibGUgPSBmaWxlLm9wZW4oUUZpbGU6Oldy
aXRlT25seSkgJiYgZmlsZS5pc1dyaXRhYmxlKCk7CisKKyAgICBpZiAoIWlzV3JpdGFibGUpIHsK
KyAgICAgICAgLy8gSXQgc2hvdWxkIG5ldmVyIGhhcHBlbiBiZWNhdXNlIFFTdGFuZGFyZFBhdGhz
IGdpdmVzIGEgd3JpdGFibGUgbG9jYXRpb24sCisgICAgICAgIC8vIGJ1dCBsZXQncyBiZSBwZXNz
aW1pc3RpYywgaXQgaXMgdGhlIGZpbGUgc3lzdGVtIGFmdGVyIGFsbC4KKyAgICAgICAgcVdhcm5p
bmcoIkNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGZvciBwbHVnaW4gbWV0YSBkYXRhIGNhY2hlIGZp
bGU6ICVzXG4iLCBxUHJpbnRhYmxlKGNhY2hlRmlsZUluZm8uZGlyKCkucGF0aCgpKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHdyaXRlIGVy
cm9yIGhlcmUuIFdlIHdpbGwgZGV0ZWN0IGl0IGxhdGVyLgorICAgIGZpbGUud3JpdGUoZGF0YSk7
CisgICAgZmlsZS5jbG9zZSgpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRUb0NhY2hlRmlsZShj
b25zdCBRSnNvbk9iamVjdCYgb2JqZWN0KQoreworICAgIFFKc29uRG9jdW1lbnQganNvbkRvY3Vt
ZW50OworICAgIFJlYWRSZXN1bHQ6OlRhZyByZXN1bHQgPSByZWFkTWV0YURhdGFGcm9tQ2FjaGVG
aWxlKGpzb25Eb2N1bWVudCk7CisgICAgaWYgKHJlc3VsdCA9PSBSZWFkUmVzdWx0OjpFcnJvcikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZXN1bHQgPT0gUmVhZFJlc3VsdDo6RW1wdHkpCisg
ICAgICAgIGpzb25Eb2N1bWVudC5zZXRBcnJheShRSnNvbkFycmF5KCkpOworCisgICAgUUpzb25B
cnJheSBhcnJheSA9IGpzb25Eb2N1bWVudC5hcnJheSgpOworICAgIGFycmF5LmFwcGVuZChvYmpl
Y3QpOworICAgIHdyaXRlVG9DYWNoZUZpbGUoYXJyYXkpOworfQorCitzdHJ1Y3QgTWV0YURhdGFS
ZXN1bHQgeworICAgIGVudW0gVGFnIHsKKyAgICAgICAgTm90QXZhaWxhYmxlLAorICAgICAgICBV
bmxvYWRhYmxlLAorICAgICAgICBBdmFpbGFibGUKKyAgICB9OworfTsKKworc3RhdGljIE1ldGFE
YXRhUmVzdWx0OjpUYWcgdHJ5UmVhZFBsdWdpbk1ldGFEYXRhRnJvbUNhY2hlRmlsZShRU3RyaW5n
IGNhbm9uaWNhbFBsdWdpblBhdGgsIFJhd1BsdWdpbk1ldGFEYXRhJiByZXN1bHQpCit7CisgICAg
aWYgKCFjYWNoZUZpbGUoKS5leGlzdHMoKSkKKyAgICAgICAgcmV0dXJuIE1ldGFEYXRhUmVzdWx0
OjpOb3RBdmFpbGFibGU7CisKKyAgICBRSnNvbkRvY3VtZW50IGpzb25Eb2N1bWVudDsKKyAgICBp
ZiAocmVhZE1ldGFEYXRhRnJvbUNhY2hlRmlsZShqc29uRG9jdW1lbnQpICE9IFJlYWRSZXN1bHQ6
OlN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBNZXRhRGF0YVJlc3VsdDo6Tm90QXZhaWxhYmxlOwor
CisgICAgUUpzb25BcnJheSBhcnJheSA9IGpzb25Eb2N1bWVudC5hcnJheSgpOworICAgIFFEYXRl
VGltZSBwbHVnaW5MYXN0TW9kaWZpZWQgPSBRRmlsZUluZm8oY2Fub25pY2FsUGx1Z2luUGF0aCku
bGFzdE1vZGlmaWVkKCk7CisgICAgZm9yIChRSnNvbkFycmF5Ojpjb25zdF9pdGVyYXRvciBpID0g
YXJyYXkuY29uc3RCZWdpbigpOyBpICE9IGFycmF5LmNvbnN0RW5kKCk7ICsraSkgeworICAgICAg
ICBRSnNvblZhbHVlIGl0ZW0gPSAqaTsKKyAgICAgICAgaWYgKCFpdGVtLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIFFGaWxlOjpyZW1vdmUoY2FjaGVGaWxlKCkuZmlsZVBhdGgoKSk7CisgICAg
ICAgICAgICByZXR1cm4gTWV0YURhdGFSZXN1bHQ6Ok5vdEF2YWlsYWJsZTsKKyAgICAgICAgfQor
CisgICAgICAgIFFKc29uT2JqZWN0IG9iamVjdCA9IGl0ZW0udG9PYmplY3QoKTsKKyAgICAgICAg
aWYgKG9iamVjdC52YWx1ZShRU3RyaW5nTGl0ZXJhbCgicGF0aCIpKS50b1N0cmluZygpID09IGNh
bm9uaWNhbFBsdWdpblBhdGgpIHsKKyAgICAgICAgICAgIFFTdHJpbmcgdGltZXN0YW1wU3RyaW5n
ID0gb2JqZWN0LnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJ0aW1lc3RhbXAiKSkudG9TdHJpbmcoKTsK
KyAgICAgICAgICAgIGlmICh0aW1lc3RhbXBTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgUUZpbGU6OnJlbW92ZShjYWNoZUZpbGUoKS5maWxlUGF0aCgpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWV0YURhdGFSZXN1bHQ6Ok5vdEF2YWlsYWJsZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFFEYXRlVGltZSB0aW1lc3RhbXAgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmco
dGltZXN0YW1wU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICh0aW1lc3RhbXAgPCBwbHVnaW5MYXN0
TW9kaWZpZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBPdXQgb2YgZGF0ZSBkYXRhIGZvciB0aGlz
IHBsdWdpbiA9PiByZW1vdmUgaXQgZnJvbSB0aGUgZmlsZS4KKyAgICAgICAgICAgICAgICBhcnJh
eS5yZW1vdmVBdChpLmkpOworICAgICAgICAgICAgICAgIHdyaXRlVG9DYWNoZUZpbGUoYXJyYXkp
OworICAgICAgICAgICAgICAgIHJldHVybiBNZXRhRGF0YVJlc3VsdDo6Tm90QXZhaWxhYmxlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAob2JqZWN0LmNvbnRhaW5zKFFMYXRpbjFT
dHJpbmcoInVubG9hZGFibGUiKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGFEYXRhUmVz
dWx0OjpVbmxvYWRhYmxlOworCisgICAgICAgICAgICAvLyBNYXRjaC4KKyAgICAgICAgICAgIHJl
c3VsdC5uYW1lID0gb2JqZWN0LnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJuYW1lIikpLnRvU3RyaW5n
KCk7CisgICAgICAgICAgICByZXN1bHQuZGVzY3JpcHRpb24gPSBvYmplY3QudmFsdWUoUVN0cmlu
Z0xpdGVyYWwoImRlc2NyaXB0aW9uIikpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXN1bHQu
bWltZURlc2NyaXB0aW9uID0gb2JqZWN0LnZhbHVlKFFTdHJpbmdMaXRlcmFsKCJtaW1lRGVzY3Jp
cHRpb24iKSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQubWltZURlc2NyaXB0
aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgdGhlIG1pbWUgZGVzY3Jp
cHRpb24gaXMgbWFuZGF0b3J5LgorICAgICAgICAgICAgICAgIC8vIERvbid0IHRydXN0IGluIHRo
ZSBjYWNoZSBmaWxlIGlmIGl0IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgIFFGaWxlOjpyZW1v
dmUoY2FjaGVGaWxlKCkuZmlsZVBhdGgoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1ldGFE
YXRhUmVzdWx0OjpOb3RBdmFpbGFibGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBNZXRhRGF0YVJlc3VsdDo6QXZhaWxhYmxlOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIE1ldGFEYXRhUmVzdWx0OjpOb3RBdmFpbGFibGU7Cit9CisKIGJvb2wgUGx1Z2luUHJv
Y2Vzc1Byb3h5OjpzY2FuUGx1Z2luKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUmF3UGx1Z2lu
TWV0YURhdGEmIHJlc3VsdCkKIHsKLSAgICBRU3RyaW5nIGNvbW1hbmRMaW5lID0gUUxhdGluMVN0
cmluZygiJTEgJTIgJTMiKTsKLSAgICBjb21tYW5kTGluZSA9IGNvbW1hbmRMaW5lLmFyZyhleGVj
dXRhYmxlUGF0aE9mUGx1Z2luUHJvY2VzcygpKTsKLSAgICBjb21tYW5kTGluZSA9IGNvbW1hbmRM
aW5lLmFyZyhRU3RyaW5nTGl0ZXJhbCgiLXNjYW5QbHVnaW4iKSkuYXJnKHN0YXRpY19jYXN0PFFT
dHJpbmc+KHBsdWdpblBhdGgpKTsKKyAgICBRRmlsZUluZm8gcGx1Z2luRmlsZUluZm8ocGx1Z2lu
UGF0aCk7CisgICAgaWYgKCFwbHVnaW5GaWxlSW5mby5leGlzdHMoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTWV0YURhdGFSZXN1bHQ6OlRhZyBtZXRhRGF0YVJlc3VsdCA9IHRyeVJl
YWRQbHVnaW5NZXRhRGF0YUZyb21DYWNoZUZpbGUocGx1Z2luRmlsZUluZm8uY2Fub25pY2FsRmls
ZVBhdGgoKSwgcmVzdWx0KTsKKyAgICBpZiAobWV0YURhdGFSZXN1bHQgPT0gTWV0YURhdGFSZXN1
bHQ6OkF2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1ldGFEYXRhUmVz
dWx0ID09IE1ldGFEYXRhUmVzdWx0OjpVbmxvYWRhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICAvLyBTY2FuIHRoZSBwbHVnaW4gdmlhIHRoZSBwbHVnaW4gcHJvY2Vzcy4KKyAgICBR
U3RyaW5nIGNvbW1hbmRMaW5lID0gUVN0cmluZyhleGVjdXRhYmxlUGF0aE9mUGx1Z2luUHJvY2Vz
cygpKSAlIFFMYXRpbjFDaGFyKCcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJSBRU3Ry
aW5nTGl0ZXJhbCgiLXNjYW5QbHVnaW4iKSAlIFFMYXRpbjFDaGFyKCcgJykgJSBwbHVnaW5GaWxl
SW5mby5jYW5vbmljYWxGaWxlUGF0aCgpOwogICAgIFFQcm9jZXNzIHByb2Nlc3M7CiAgICAgcHJv
Y2Vzcy5zZXRSZWFkQ2hhbm5lbChRUHJvY2Vzczo6U3RhbmRhcmRPdXRwdXQpOwogICAgIHByb2Nl
c3Muc3RhcnQoY29tbWFuZExpbmUpOwogCi0gICAgaWYgKCFwcm9jZXNzLndhaXRGb3JGaW5pc2hl
ZCgpCi0gICAgICAgIHx8IHByb2Nlc3MuZXhpdFN0YXR1cygpICE9IFFQcm9jZXNzOjpOb3JtYWxF
eGl0Ci0gICAgICAgIHx8IHByb2Nlc3MuZXhpdENvZGUoKSAhPSBFWElUX1NVQ0NFU1MpIHsKKyAg
ICBib29sIHJhblN1Y2Nlc3NmdWxseSA9IHByb2Nlc3Mud2FpdEZvckZpbmlzaGVkKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICYmIHByb2Nlc3MuZXhpdFN0YXR1cygpID09IFFQcm9jZXNz
OjpOb3JtYWxFeGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcm9jZXNzLmV4aXRD
b2RlKCkgPT0gRVhJVF9TVUNDRVNTOworICAgIGlmIChyYW5TdWNjZXNzZnVsbHkpIHsKKyAgICAg
ICAgUUJ5dGVBcnJheSBvdXRwdXRCeXRlcyA9IHByb2Nlc3MucmVhZEFsbCgpOworICAgICAgICBB
U1NFUlQoIShvdXRwdXRCeXRlcy5zaXplKCkgJSBzaXplb2YoVUNoYXIpKSk7CisKKyAgICAgICAg
U3RyaW5nIG91dHB1dChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ob3V0cHV0Qnl0ZXMu
Y29uc3REYXRhKCkpLCBvdXRwdXRCeXRlcy5zaXplKCkgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gbGluZXM7CisgICAgICAgIG91dHB1dC5zcGxpdChVQ2hhcignXG4n
KSwgbGluZXMpOworICAgICAgICBBU1NFUlQobGluZXMuc2l6ZSgpID09IDMpOworCisgICAgICAg
IHJlc3VsdC5uYW1lLnN3YXAobGluZXNbMF0pOworICAgICAgICByZXN1bHQuZGVzY3JpcHRpb24u
c3dhcChsaW5lc1sxXSk7CisgICAgICAgIHJlc3VsdC5taW1lRGVzY3JpcHRpb24uc3dhcChsaW5l
c1syXSk7CisgICAgfSBlbHNlCiAgICAgICAgIHByb2Nlc3Mua2lsbCgpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgUUJ5dGVBcnJheSBvdXRwdXRCeXRlcyA9IHByb2Nlc3Mu
cmVhZEFsbCgpOwotICAgIEFTU0VSVCghKG91dHB1dEJ5dGVzLnNpemUoKSAlIHNpemVvZihVQ2hh
cikpKTsKKyAgICBRVmFyaWFudE1hcCBtYXA7CisgICAgbWFwW1FTdHJpbmdMaXRlcmFsKCJwYXRo
IildID0gUVN0cmluZyhwbHVnaW5GaWxlSW5mby5jYW5vbmljYWxGaWxlUGF0aCgpKTsKKyAgICBt
YXBbUVN0cmluZ0xpdGVyYWwoInRpbWVzdGFtcCIpXSA9IFFEYXRlVGltZTo6Y3VycmVudERhdGVU
aW1lKCkudG9TdHJpbmcoKTsKKworICAgIGlmICghcmFuU3VjY2Vzc2Z1bGx5IHx8IHJlc3VsdC5t
aW1lRGVzY3JpcHRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFdlIGZhaWxlZCBnZXR0aW5n
IHRoZSBtZXRhIGRhdGEgaW4gc29tZSB3YXkuIENhY2hlIHRoaXMgaW5mb3JtYXRpb24sIHNvIHdl
IGRvbid0CisgICAgICAgIC8vIG5lZWQgdG8gcmVzY2FuIHN1Y2ggcGx1Z2lucyBldmVyeSB0aW1l
LiBXZSB3aWxsIHJldHJ5IGl0IG9uY2UgdGhlIHBsdWdpbiBpcyB1cGRhdGVkLgogCi0gICAgU3Ry
aW5nIG91dHB1dChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ob3V0cHV0Qnl0ZXMuY29u
c3REYXRhKCkpLCBvdXRwdXRCeXRlcy5zaXplKCkgLyBzaXplb2YoVUNoYXIpKTsKLSAgICBWZWN0
b3I8U3RyaW5nPiBsaW5lczsKLSAgICBvdXRwdXQuc3BsaXQoVUNoYXIoJ1xuJyksIGxpbmVzKTsK
LSAgICBBU1NFUlQobGluZXMuc2l6ZSgpID09IDMpOworICAgICAgICBtYXBbUVN0cmluZ0xpdGVy
YWwoInVubG9hZGFibGUiKV0gPSBRU3RyaW5nTGl0ZXJhbCgidHJ1ZSIpOworICAgICAgICBhcHBl
bmRUb0NhY2hlRmlsZShRSnNvbk9iamVjdDo6ZnJvbVZhcmlhbnRNYXAobWFwKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICByZXN1bHQubmFtZS5zd2FwKGxpbmVzWzBdKTsK
LSAgICByZXN1bHQuZGVzY3JpcHRpb24uc3dhcChsaW5lc1sxXSk7Ci0gICAgcmVzdWx0Lm1pbWVE
ZXNjcmlwdGlvbi5zd2FwKGxpbmVzWzJdKTsKLSAgICByZXR1cm4gIXJlc3VsdC5taW1lRGVzY3Jp
cHRpb24uaXNFbXB0eSgpOworICAgIG1hcFtRU3RyaW5nTGl0ZXJhbCgibmFtZSIpXSA9IFFTdHJp
bmcocmVzdWx0Lm5hbWUpOworICAgIG1hcFtRU3RyaW5nTGl0ZXJhbCgiZGVzY3JpcHRpb24iKV0g
PSBRU3RyaW5nKHJlc3VsdC5kZXNjcmlwdGlvbik7CisgICAgbWFwW1FTdHJpbmdMaXRlcmFsKCJt
aW1lRGVzY3JpcHRpb24iKV0gPSBRU3RyaW5nKHJlc3VsdC5taW1lRGVzY3JpcHRpb24pOworICAg
IGFwcGVuZFRvQ2FjaGVGaWxlKFFKc29uT2JqZWN0Ojpmcm9tVmFyaWFudE1hcChtYXApKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147310</attachid>
            <date>2012-06-13 07:09:11 -0700</date>
            <delta_ts>2012-06-13 07:39:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88535-20120613160900.patch</filename>
            <type>text/plain</type>
            <size>16841</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNTNmMDMwNzI4MDQwY2Ey
M2YxZTYxZGU2NWRjNDE5MjIxNDMzMGEwNi4uMDgxOTBlMDdhOGVkYzNiY2IyYTEyNjFkNWYyYTk3
NzY3MzBlYmVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTA2LTEzICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdW1dLMl0gU2Nh
bm5pbmcgcGx1Z2lucyBibG9ja3MgdGhlIFVJIGZvciBhIGxvbmcgdGltZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYSBwZXJzaXN0ZW50
IGNhY2hlIGZvciB0aGUgbWV0YSBkYXRhIG9mIHBsdWdpbnMuCisgICAgICAgIFRoaXMgd2F5IHRo
ZSBVSSBwcm9jZXNzIHdpbGwgbm90IGJsb2NrIGZvciB0b28gbG9uZyB3aGVuCisgICAgICAgIGl0
J3MgdGltZSB0byBzY2FuIHRoZSBwbHVnaW5zIChleGNlcHQgdGhlIGZpcnN0IHRpbWUpLgorICAg
ICAgICBUaGUgY2FjaGUgaXMgYSBqc29uIGZpbGUgc3RvcmVkIGluIGEgc3RhbmRhcmQgaGlkZGVu
IGNhY2hlCisgICAgICAgIGRpcmVjdG9yeS4KKworICAgICAgICAqIFNoYXJlZC9xdC9RdERlZmF1
bHREYXRhTG9jYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OmRlZmF1bHREYXRhTG9jYXRpb24pOgorICAgICAgICAqIFNoYXJlZC9xdC9RdERlZmF1
bHREYXRhTG9jYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICBBZGRl
ZCBhIGNvbW1vbiBoZWxwZXIgZm9yIHRoZSBwYXRoIHdlIHVzZSB0bworICAgICAgICBwdXQgc3R1
ZmYgaW50by4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL1Bs
dWdpbnMvcXQvUGx1Z2luUHJvY2Vzc1Byb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpjYWNo
ZUZpbGUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cmVhZE1ldGFEYXRh
RnJvbUNhY2hlRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OndyaXRlVG9DYWNoZUZpbGUpOgorICAg
ICAgICAoV2ViS2l0OjphcHBlbmRUb0NhY2hlRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OnRyeVJl
YWRQbHVnaW5NZXRhRGF0YUZyb21DYWNoZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Q
cm9jZXNzUHJveHk6OnNjYW5QbHVnaW4pOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9XZWJDb250
ZXh0UXQuY3BwOgorCiAyMDEyLTA2LTEyICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUu
Y29tPgogCiAgICAgICAgIFNoYWRvdyBQc2V1ZG8gSUQgc2hvdWxkIGJlIGFibGUgdG8gbmVzdCB0
byBwb2ludCBuZXN0ZWQgc2hhZG93IERPTS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9xdC9RdERlZmF1bHREYXRhTG9jYXRpb24uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L3F0L1F0RGVmYXVsdERhdGFMb2NhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcxOGI5NGQzYzEwMDM2
MzM3ZmYxNzZhNTdlZTNlOGY3Y2NmMzBlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9xdC9RdERlZmF1bHREYXRhTG9jYXRpb24uY3BwCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJRdERlZmF1bHREYXRhTG9jYXRpb24uaCIKKworI2luY2x1ZGUgPFFDb3JlQXBwbGlj
YXRpb24+CisjaW5jbHVkZSA8UURpcj4KKyNpbmNsdWRlIDxRU3RhbmRhcmRQYXRocz4KKyNpbmNs
dWRlIDxRU3RyaW5nQnVpbGRlcj4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1FTdHJpbmcgZGVmYXVsdERhdGFMb2NhdGlvbigpCit7Cisg
ICAgc3RhdGljIFFTdHJpbmcgc19kYXRhTG9jYXRpb247CisKKyAgICBpZiAoIXNfZGF0YUxvY2F0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHNfZGF0YUxvY2F0aW9uOworCisgICAgUVN0
cmluZyBkYXRhTG9jYXRpb24gPSBRU3RhbmRhcmRQYXRoczo6d3JpdGFibGVMb2NhdGlvbihRU3Rh
bmRhcmRQYXRoczo6RGF0YUxvY2F0aW9uKTsKKyAgICBpZiAoZGF0YUxvY2F0aW9uLmlzRW1wdHko
KSkKKyAgICAgICAgZGF0YUxvY2F0aW9uID0gUURpcjo6aG9tZVBhdGgoKSAlIFFEaXI6OnNlcGFy
YXRvcigpICUgUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25OYW1lKCk7CisgICAgc19kYXRh
TG9jYXRpb24gPSBkYXRhTG9jYXRpb24gJSBRRGlyOjpzZXBhcmF0b3IoKSAlIFFTdHJpbmdMaXRl
cmFsKCIuUXRXZWJLaXQiKSAlIFFEaXI6OnNlcGFyYXRvcigpOworICAgIFFEaXI6OnJvb3QoKS5t
a3BhdGgoc19kYXRhTG9jYXRpb24pOworCisgICAgcmV0dXJuIHNfZGF0YUxvY2F0aW9uOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXREZWZhdWx0RGF0YUxv
Y2F0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvcXQvUXREZWZhdWx0RGF0YUxvY2F0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWYzMmM4Nzk1NzdmMGE0OGJmODRlMWFlMzJhYWY0YTBiZDg0NjI4Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9RdERlZmF1bHREYXRh
TG9jYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFF0RGVmYXVsdERhdGFMb2NhdGlvbl9oCisjZGVmaW5lIFF0RGVmYXVsdERh
dGFMb2NhdGlvbl9oCisKKyNpbmNsdWRlIDxRU3RyaW5nPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUVN0cmluZyBkZWZhdWx0RGF0YUxvY2F0aW9uKCk7CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQppbmRleCAzY2JlOTFmNzhlMWY4ZjFmNjEyODRjMzU4OWQ0NjM3NzBiMjg2M2VlLi5kNWQ0ZmZm
ZjEzZmYxNGM4Y2EzZTE0ZWYxNzU3Njc2ZmQyOTI4MmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEzNyw2
ICsxMzcsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5o
IFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVk
L3F0L1dlYkV2ZW50RmFjdG9yeVF0LmggXAorICAgIFNoYXJlZC9xdC9RdERlZmF1bHREYXRhTG9j
YXRpb24uaCBcCiAgICAgU2hhcmVkL3F0L1F0TmV0d29ya1JlcGx5RGF0YS5oIFwKICAgICBTaGFy
ZWQvcXQvUXROZXR3b3JrUmVxdWVzdERhdGEuaCBcCiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQVBJ
Q2FzdC5oIFwKQEAgLTQ4OSw2ICs0OTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFyZWQvcXQv
UHJvY2Vzc0V4ZWN1dGFibGVQYXRoUXQuY3BwIFwKICAgICBTaGFyZWQvcXQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzUXQuY3BwIFwKICAgICBTaGFyZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuY3BwIFwK
KyAgICBTaGFyZWQvcXQvUXREZWZhdWx0RGF0YUxvY2F0aW9uLmNwcCBcCiAgICAgU2hhcmVkL3F0
L1F0TmV0d29ya1JlcGx5RGF0YS5jcHAgXAogICAgIFNoYXJlZC9xdC9RdE5ldHdvcmtSZXF1ZXN0
RGF0YS5jcHAgXAogICAgIFNoYXJlZC9xdC9XZWJVUkxSZXF1ZXN0UXQuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3F0L1BsdWdpblByb2Nlc3NQcm94
eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3F0L1BsdWdpblByb2Nl
c3NQcm94eVF0LmNwcAppbmRleCA5YjdmMmIyZGRhMmU3OGFmZDNhODdmMTcyMTZkZTFiYWFjZTcz
OWZjLi5iMGE1YjIzMGQzNmU2N2MyMjhkMjlhNWQ5Y2M2ODQ0MzY5Mjg4YWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9jZXNzUHJveHlR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvcXQvUGx1Z2luUHJv
Y2Vzc1Byb3h5UXQuY3BwCkBAIC0yOSwxMiArMjksMjMgQEAKICNpZiBFTkFCTEUoUExVR0lOX1BS
T0NFU1MpCiAKICNpbmNsdWRlICJQcm9jZXNzRXhlY3V0YWJsZVBhdGguaCIKKyNpbmNsdWRlICJR
dERlZmF1bHREYXRhTG9jYXRpb24uaCIKICNpbmNsdWRlIDxRQnl0ZUFycmF5PgogI2luY2x1ZGUg
PFFDb3JlQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UURhdGVUaW1lPgogI2luY2x1ZGUgPFFEaXI+
CiAjaW5jbHVkZSA8UUV2ZW50TG9vcD4KKyNpbmNsdWRlIDxRRmlsZT4KKyNpbmNsdWRlIDxRSnNv
bkFycmF5PgorI2luY2x1ZGUgPFFKc29uRG9jdW1lbnQ+CisjaW5jbHVkZSA8UUpzb25PYmplY3Q+
CisjaW5jbHVkZSA8UU1hcD4KICNpbmNsdWRlIDxRUHJvY2Vzcz4KLSNpbmNsdWRlIDxRU3RyaW5n
PgorI2luY2x1ZGUgPFFTdHJpbmdCdWlsZGVyPgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1
ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDQsMzUg
KzU1LDE4MSBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplUGx1
Z2luUHJvY2VzcyhQbHVnaW5Qcm9jZXNzQ3JlYXRpb25QYQogewogfQogCitzdGF0aWMgUGFzc093
blB0cjxRRmlsZT4gY2FjaGVGaWxlKCkKK3sKKyAgICBzdGF0aWMgUVN0cmluZyBjYWNoZUZpbGVQ
YXRoID0gZGVmYXVsdERhdGFMb2NhdGlvbigpICUgUVN0cmluZ0xpdGVyYWwoInBsdWdpbl9tZXRh
X2RhdGEuanNvbiIpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgUUZpbGUoY2FjaGVGaWxlUGF0
aCkpOworfQorCitzdHJ1Y3QgUmVhZFJlc3VsdCB7CisgICAgZW51bSBUYWcgeworICAgICAgICBF
bXB0eSwKKyAgICAgICAgRXJyb3IsCisgICAgICAgIFN1Y2Nlc3MKKyAgICB9OworfTsKKworc3Rh
dGljIFJlYWRSZXN1bHQ6OlRhZyByZWFkTWV0YURhdGFGcm9tQ2FjaGVGaWxlKFFKc29uRG9jdW1l
bnQmIHJlc3VsdCkKK3sKKyAgICBPd25QdHI8UUZpbGU+IGZpbGUgPSBjYWNoZUZpbGUoKTsKKyAg
ICBpZiAoIWZpbGUtPm9wZW4oUUZpbGU6OlJlYWRPbmx5KSkKKyAgICAgICAgcmV0dXJuIFJlYWRS
ZXN1bHQ6OkVtcHR5OworICAgIFFCeXRlQXJyYXkgZGF0YSA9IGZpbGUtPnJlYWRBbGwoKTsKKyAg
ICBpZiAoZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBSZWFkUmVzdWx0OjpFbXB0eTsK
KworICAgIFFKc29uUGFyc2VFcnJvciBlcnJvcjsKKyAgICByZXN1bHQgPSBRSnNvbkRvY3VtZW50
Ojpmcm9tSnNvbihkYXRhLCAmZXJyb3IpOworICAgIGlmIChlcnJvci5lcnJvciAhPSBRSnNvblBh
cnNlRXJyb3I6Ok5vRXJyb3IgfHwgIXJlc3VsdC5pc0FycmF5KCkpIHsKKyAgICAgICAgLy8gQ29y
cnVwdGVkIGZpbGUuCisgICAgICAgIGZpbGUtPnJlbW92ZSgpOworICAgICAgICByZXR1cm4gUmVh
ZFJlc3VsdDo6RXJyb3I7CisgICAgfQorCisgICAgcmV0dXJuIFJlYWRSZXN1bHQ6OlN1Y2Nlc3M7
Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlVG9DYWNoZUZpbGUoY29uc3QgUUpzb25BcnJheSYgYXJy
YXkpCit7CisgICAgT3duUHRyPFFGaWxlPiBmaWxlID0gY2FjaGVGaWxlKCk7CisgICAgaWYgKCFm
aWxlLT5vcGVuKFFGaWxlOjpXcml0ZU9ubHkgfCBRRmlsZTo6VHJ1bmNhdGUpKSB7CisgICAgICAg
IC8vIEl0IHNob3VsZCBuZXZlciBidXQgbGV0J3MgYmUgcGVzc2ltaXN0aWMsIGl0IGlzIHRoZSBm
aWxlIHN5c3RlbSBhZnRlciBhbGwuCisgICAgICAgIHFXYXJuaW5nKCJDYW5ub3Qgd3JpdGUgaW50
byBwbHVnaW4gbWV0YSBkYXRhIGNhY2hlIGZpbGU6ICVzXG4iLCBxUHJpbnRhYmxlKGZpbGUtPmZp
bGVOYW1lKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIERvbid0IGNhcmUg
YWJvdXQgd3JpdGUgZXJyb3IgaGVyZS4gV2Ugd2lsbCBkZXRlY3QgaXQgbGF0ZXIuCisgICAgZmls
ZS0+d3JpdGUoUUpzb25Eb2N1bWVudChhcnJheSkudG9Kc29uKCkpOworfQorCitzdGF0aWMgdm9p
ZCBhcHBlbmRUb0NhY2hlRmlsZShjb25zdCBRSnNvbk9iamVjdCYgb2JqZWN0KQoreworICAgIFFK
c29uRG9jdW1lbnQganNvbkRvY3VtZW50OworICAgIFJlYWRSZXN1bHQ6OlRhZyByZXN1bHQgPSBy
ZWFkTWV0YURhdGFGcm9tQ2FjaGVGaWxlKGpzb25Eb2N1bWVudCk7CisgICAgaWYgKHJlc3VsdCA9
PSBSZWFkUmVzdWx0OjpFcnJvcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZXN1bHQgPT0g
UmVhZFJlc3VsdDo6RW1wdHkpCisgICAgICAgIGpzb25Eb2N1bWVudC5zZXRBcnJheShRSnNvbkFy
cmF5KCkpOworCisgICAgUUpzb25BcnJheSBhcnJheSA9IGpzb25Eb2N1bWVudC5hcnJheSgpOwor
ICAgIGFycmF5LmFwcGVuZChvYmplY3QpOworICAgIHdyaXRlVG9DYWNoZUZpbGUoYXJyYXkpOwor
fQorCitzdHJ1Y3QgTWV0YURhdGFSZXN1bHQgeworICAgIGVudW0gVGFnIHsKKyAgICAgICAgTm90
QXZhaWxhYmxlLAorICAgICAgICBVbmxvYWRhYmxlLAorICAgICAgICBBdmFpbGFibGUKKyAgICB9
OworfTsKKworc3RhdGljIE1ldGFEYXRhUmVzdWx0OjpUYWcgdHJ5UmVhZFBsdWdpbk1ldGFEYXRh
RnJvbUNhY2hlRmlsZShjb25zdCBRU3RyaW5nJiBjYW5vbmljYWxQbHVnaW5QYXRoLCBSYXdQbHVn
aW5NZXRhRGF0YSYgcmVzdWx0KQoreworICAgIFFKc29uRG9jdW1lbnQganNvbkRvY3VtZW50Owor
ICAgIGlmIChyZWFkTWV0YURhdGFGcm9tQ2FjaGVGaWxlKGpzb25Eb2N1bWVudCkgIT0gUmVhZFJl
c3VsdDo6U3VjY2VzcykKKyAgICAgICAgcmV0dXJuIE1ldGFEYXRhUmVzdWx0OjpOb3RBdmFpbGFi
bGU7CisKKyAgICBRSnNvbkFycmF5IGFycmF5ID0ganNvbkRvY3VtZW50LmFycmF5KCk7CisgICAg
UURhdGVUaW1lIHBsdWdpbkxhc3RNb2RpZmllZCA9IFFGaWxlSW5mbyhjYW5vbmljYWxQbHVnaW5Q
YXRoKS5sYXN0TW9kaWZpZWQoKTsKKyAgICBmb3IgKFFKc29uQXJyYXk6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBhcnJheS5jb25zdEJlZ2luKCk7IGkgIT0gYXJyYXkuY29uc3RFbmQoKTsgKytpKSB7Cisg
ICAgICAgIFFKc29uVmFsdWUgaXRlbSA9ICppOworICAgICAgICBpZiAoIWl0ZW0uaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgY2FjaGVGaWxlKCktPnJlbW92ZSgpOworICAgICAgICAgICAgcmV0
dXJuIE1ldGFEYXRhUmVzdWx0OjpOb3RBdmFpbGFibGU7CisgICAgICAgIH0KKworICAgICAgICBR
SnNvbk9iamVjdCBvYmplY3QgPSBpdGVtLnRvT2JqZWN0KCk7CisgICAgICAgIGlmIChvYmplY3Qu
dmFsdWUoUVN0cmluZ0xpdGVyYWwoInBhdGgiKSkudG9TdHJpbmcoKSA9PSBjYW5vbmljYWxQbHVn
aW5QYXRoKSB7CisgICAgICAgICAgICBRU3RyaW5nIHRpbWVzdGFtcFN0cmluZyA9IG9iamVjdC52
YWx1ZShRU3RyaW5nTGl0ZXJhbCgidGltZXN0YW1wIikpLnRvU3RyaW5nKCk7CisgICAgICAgICAg
ICBpZiAodGltZXN0YW1wU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNhY2hl
RmlsZSgpLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWV0YURhdGFSZXN1bHQ6
Ok5vdEF2YWlsYWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFFEYXRlVGltZSB0aW1l
c3RhbXAgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcodGltZXN0YW1wU3RyaW5nKTsKKyAgICAgICAg
ICAgIGlmICh0aW1lc3RhbXAgPCBwbHVnaW5MYXN0TW9kaWZpZWQpIHsKKyAgICAgICAgICAgICAg
ICAvLyBPdXQgb2YgZGF0ZSBkYXRhIGZvciB0aGlzIHBsdWdpbiA9PiByZW1vdmUgaXQgZnJvbSB0
aGUgZmlsZS4KKyAgICAgICAgICAgICAgICBhcnJheS5yZW1vdmVBdChpLmkpOworICAgICAgICAg
ICAgICAgIHdyaXRlVG9DYWNoZUZpbGUoYXJyYXkpOworICAgICAgICAgICAgICAgIHJldHVybiBN
ZXRhRGF0YVJlc3VsdDo6Tm90QXZhaWxhYmxlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAob2JqZWN0LmNvbnRhaW5zKFFMYXRpbjFTdHJpbmcoInVubG9hZGFibGUiKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIE1ldGFEYXRhUmVzdWx0OjpVbmxvYWRhYmxlOworCisgICAgICAg
ICAgICAvLyBNYXRjaC4KKyAgICAgICAgICAgIHJlc3VsdC5uYW1lID0gb2JqZWN0LnZhbHVlKFFT
dHJpbmdMaXRlcmFsKCJuYW1lIikpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICByZXN1bHQuZGVz
Y3JpcHRpb24gPSBvYmplY3QudmFsdWUoUVN0cmluZ0xpdGVyYWwoImRlc2NyaXB0aW9uIikpLnRv
U3RyaW5nKCk7CisgICAgICAgICAgICByZXN1bHQubWltZURlc2NyaXB0aW9uID0gb2JqZWN0LnZh
bHVlKFFTdHJpbmdMaXRlcmFsKCJtaW1lRGVzY3JpcHRpb24iKSkudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQubWltZURlc2NyaXB0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgIC8vIE9ubHkgdGhlIG1pbWUgZGVzY3JpcHRpb24gaXMgbWFuZGF0b3J5LgorICAgICAg
ICAgICAgICAgIC8vIERvbid0IHRydXN0IGluIHRoZSBjYWNoZSBmaWxlIGlmIGl0IGlzIGVtcHR5
LgorICAgICAgICAgICAgICAgIGNhY2hlRmlsZSgpLT5yZW1vdmUoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWV0YURhdGFSZXN1bHQ6Ok5vdEF2YWlsYWJsZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIE1ldGFEYXRhUmVzdWx0OjpBdmFpbGFibGU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gTWV0YURhdGFSZXN1bHQ6Ok5vdEF2YWlsYWJsZTsKK30KKwog
Ym9vbCBQbHVnaW5Qcm9jZXNzUHJveHk6OnNjYW5QbHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5Q
YXRoLCBSYXdQbHVnaW5NZXRhRGF0YSYgcmVzdWx0KQogewotICAgIFFTdHJpbmcgY29tbWFuZExp
bmUgPSBRTGF0aW4xU3RyaW5nKCIlMSAlMiAlMyIpOwotICAgIGNvbW1hbmRMaW5lID0gY29tbWFu
ZExpbmUuYXJnKGV4ZWN1dGFibGVQYXRoT2ZQbHVnaW5Qcm9jZXNzKCkpOwotICAgIGNvbW1hbmRM
aW5lID0gY29tbWFuZExpbmUuYXJnKFFTdHJpbmdMaXRlcmFsKCItc2NhblBsdWdpbiIpKS5hcmco
c3RhdGljX2Nhc3Q8UVN0cmluZz4ocGx1Z2luUGF0aCkpOworICAgIFFGaWxlSW5mbyBwbHVnaW5G
aWxlSW5mbyhwbHVnaW5QYXRoKTsKKyAgICBpZiAoIXBsdWdpbkZpbGVJbmZvLmV4aXN0cygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBNZXRhRGF0YVJlc3VsdDo6VGFnIG1ldGFEYXRh
UmVzdWx0ID0gdHJ5UmVhZFBsdWdpbk1ldGFEYXRhRnJvbUNhY2hlRmlsZShwbHVnaW5GaWxlSW5m
by5jYW5vbmljYWxGaWxlUGF0aCgpLCByZXN1bHQpOworICAgIGlmIChtZXRhRGF0YVJlc3VsdCA9
PSBNZXRhRGF0YVJlc3VsdDo6QXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAobWV0YURhdGFSZXN1bHQgPT0gTWV0YURhdGFSZXN1bHQ6OlVubG9hZGFibGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIC8vIFNjYW4gdGhlIHBsdWdpbiB2aWEgdGhlIHBsdWdpbiBw
cm9jZXNzLgorICAgIFFTdHJpbmcgY29tbWFuZExpbmUgPSBRU3RyaW5nKGV4ZWN1dGFibGVQYXRo
T2ZQbHVnaW5Qcm9jZXNzKCkpICUgUUxhdGluMUNoYXIoJyAnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAlIFFTdHJpbmdMaXRlcmFsKCItc2NhblBsdWdpbiIpICUgUUxhdGluMUNoYXIoJyAn
KSAlIHBsdWdpbkZpbGVJbmZvLmNhbm9uaWNhbEZpbGVQYXRoKCk7CiAgICAgUVByb2Nlc3MgcHJv
Y2VzczsKICAgICBwcm9jZXNzLnNldFJlYWRDaGFubmVsKFFQcm9jZXNzOjpTdGFuZGFyZE91dHB1
dCk7CiAgICAgcHJvY2Vzcy5zdGFydChjb21tYW5kTGluZSk7CiAKLSAgICBpZiAoIXByb2Nlc3Mu
d2FpdEZvckZpbmlzaGVkKCkKLSAgICAgICAgfHwgcHJvY2Vzcy5leGl0U3RhdHVzKCkgIT0gUVBy
b2Nlc3M6Ok5vcm1hbEV4aXQKLSAgICAgICAgfHwgcHJvY2Vzcy5leGl0Q29kZSgpICE9IEVYSVRf
U1VDQ0VTUykgeworICAgIGJvb2wgcmFuU3VjY2Vzc2Z1bGx5ID0gcHJvY2Vzcy53YWl0Rm9yRmlu
aXNoZWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcHJvY2Vzcy5leGl0U3RhdHVz
KCkgPT0gUVByb2Nlc3M6Ok5vcm1hbEV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IHByb2Nlc3MuZXhpdENvZGUoKSA9PSBFWElUX1NVQ0NFU1M7CisgICAgaWYgKHJhblN1Y2Nlc3Nm
dWxseSkgeworICAgICAgICBRQnl0ZUFycmF5IG91dHB1dEJ5dGVzID0gcHJvY2Vzcy5yZWFkQWxs
KCk7CisgICAgICAgIEFTU0VSVCghKG91dHB1dEJ5dGVzLnNpemUoKSAlIHNpemVvZihVQ2hhcikp
KTsKKworICAgICAgICBTdHJpbmcgb3V0cHV0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihvdXRwdXRCeXRlcy5jb25zdERhdGEoKSksIG91dHB1dEJ5dGVzLnNpemUoKSAvIHNpemVvZihV
Q2hhcikpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBsaW5lczsKKyAgICAgICAgb3V0cHV0LnNw
bGl0KFVDaGFyKCdcbicpLCBsaW5lcyk7CisgICAgICAgIEFTU0VSVChsaW5lcy5zaXplKCkgPT0g
Myk7CisKKyAgICAgICAgcmVzdWx0Lm5hbWUuc3dhcChsaW5lc1swXSk7CisgICAgICAgIHJlc3Vs
dC5kZXNjcmlwdGlvbi5zd2FwKGxpbmVzWzFdKTsKKyAgICAgICAgcmVzdWx0Lm1pbWVEZXNjcmlw
dGlvbi5zd2FwKGxpbmVzWzJdKTsKKyAgICB9IGVsc2UKICAgICAgICAgcHJvY2Vzcy5raWxsKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBRQnl0ZUFycmF5IG91dHB1dEJ5
dGVzID0gcHJvY2Vzcy5yZWFkQWxsKCk7Ci0gICAgQVNTRVJUKCEob3V0cHV0Qnl0ZXMuc2l6ZSgp
ICUgc2l6ZW9mKFVDaGFyKSkpOworICAgIFFWYXJpYW50TWFwIG1hcDsKKyAgICBtYXBbUVN0cmlu
Z0xpdGVyYWwoInBhdGgiKV0gPSBRU3RyaW5nKHBsdWdpbkZpbGVJbmZvLmNhbm9uaWNhbEZpbGVQ
YXRoKCkpOworICAgIG1hcFtRU3RyaW5nTGl0ZXJhbCgidGltZXN0YW1wIildID0gUURhdGVUaW1l
OjpjdXJyZW50RGF0ZVRpbWUoKS50b1N0cmluZygpOworCisgICAgaWYgKCFyYW5TdWNjZXNzZnVs
bHkgfHwgcmVzdWx0Lm1pbWVEZXNjcmlwdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gV2Ug
ZmFpbGVkIGdldHRpbmcgdGhlIG1ldGEgZGF0YSBpbiBzb21lIHdheS4gQ2FjaGUgdGhpcyBpbmZv
cm1hdGlvbiwgc28gd2UgZG9uJ3QKKyAgICAgICAgLy8gbmVlZCB0byByZXNjYW4gc3VjaCBwbHVn
aW5zIGV2ZXJ5IHRpbWUuIFdlIHdpbGwgcmV0cnkgaXQgb25jZSB0aGUgcGx1Z2luIGlzIHVwZGF0
ZWQuCiAKLSAgICBTdHJpbmcgb3V0cHV0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihv
dXRwdXRCeXRlcy5jb25zdERhdGEoKSksIG91dHB1dEJ5dGVzLnNpemUoKSAvIHNpemVvZihVQ2hh
cikpOwotICAgIFZlY3RvcjxTdHJpbmc+IGxpbmVzOwotICAgIG91dHB1dC5zcGxpdChVQ2hhcign
XG4nKSwgbGluZXMpOwotICAgIEFTU0VSVChsaW5lcy5zaXplKCkgPT0gMyk7CisgICAgICAgIG1h
cFtRU3RyaW5nTGl0ZXJhbCgidW5sb2FkYWJsZSIpXSA9IFFTdHJpbmdMaXRlcmFsKCJ0cnVlIik7
CisgICAgICAgIGFwcGVuZFRvQ2FjaGVGaWxlKFFKc29uT2JqZWN0Ojpmcm9tVmFyaWFudE1hcCht
YXApKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIHJlc3VsdC5uYW1lLnN3
YXAobGluZXNbMF0pOwotICAgIHJlc3VsdC5kZXNjcmlwdGlvbi5zd2FwKGxpbmVzWzFdKTsKLSAg
ICByZXN1bHQubWltZURlc2NyaXB0aW9uLnN3YXAobGluZXNbMl0pOwotICAgIHJldHVybiAhcmVz
dWx0Lm1pbWVEZXNjcmlwdGlvbi5pc0VtcHR5KCk7CisgICAgbWFwW1FTdHJpbmdMaXRlcmFsKCJu
YW1lIildID0gUVN0cmluZyhyZXN1bHQubmFtZSk7CisgICAgbWFwW1FTdHJpbmdMaXRlcmFsKCJk
ZXNjcmlwdGlvbiIpXSA9IFFTdHJpbmcocmVzdWx0LmRlc2NyaXB0aW9uKTsKKyAgICBtYXBbUVN0
cmluZ0xpdGVyYWwoIm1pbWVEZXNjcmlwdGlvbiIpXSA9IFFTdHJpbmcocmVzdWx0Lm1pbWVEZXNj
cmlwdGlvbik7CisgICAgYXBwZW5kVG9DYWNoZUZpbGUoUUpzb25PYmplY3Q6OmZyb21WYXJpYW50
TWFwKG1hcCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0UXQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRRdC5jcHAKaW5kZXggNjc2
ZWNiNDdhNzcwMGQ0OWQ1NDM2NGNhYmFlMzIwNjIxM2FjYmUxNS4uM2YzOGRkMjg4OWYwNmVjMzA2
YzE5MGRhMjdjNjA0YTBjOGQ3M2M0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1dlYkNvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1dlYkNvbnRleHRRdC5jcHAKQEAgLTI5LDMzICsyOSwxOCBAQAogCiAjaW5jbHVkZSAiQXBwbGlj
YXRpb25DYWNoZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
UXREZWZhdWx0RGF0YUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCiAj
aWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uUHJvdmlkZXJR
dC5oIgogI2VuZGlmCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgog
I2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVkZSA8UVN0YW5kYXJkUGF0aHM+CiAj
aW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRUHJvY2Vzcz4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLXN0YXRpYyBRU3RyaW5nIGRlZmF1bHREYXRhTG9jYXRpb24oKQotewotICAgIHN0YXRpYyBR
U3RyaW5nIHNfZGF0YUxvY2F0aW9uOwotCi0gICAgaWYgKCFzX2RhdGFMb2NhdGlvbi5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBzX2RhdGFMb2NhdGlvbjsKLQotICAgIFFTdHJpbmcgZGF0YUxv
Y2F0aW9uID0gUVN0YW5kYXJkUGF0aHM6OndyaXRhYmxlTG9jYXRpb24oUVN0YW5kYXJkUGF0aHM6
OkRhdGFMb2NhdGlvbik7Ci0gICAgaWYgKGRhdGFMb2NhdGlvbi5pc0VtcHR5KCkpCi0gICAgICAg
IGRhdGFMb2NhdGlvbiA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChRRGlyOjpo
b21lUGF0aCgpLCBRQ29yZUFwcGxpY2F0aW9uOjphcHBsaWNhdGlvbk5hbWUoKSk7Ci0gICAgc19k
YXRhTG9jYXRpb24gPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YUxvY2F0
aW9uLCAiLlF0V2ViS2l0LyIpOwotICAgIFdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhzX2Rh
dGFMb2NhdGlvbik7Ci0gICAgcmV0dXJuIHNfZGF0YUxvY2F0aW9uOwotfQotCiBzdGF0aWMgUVN0
cmluZyBzX2RlZmF1bHREYXRhYmFzZURpcmVjdG9yeTsKIHN0YXRpYyBRU3RyaW5nIHNfZGVmYXVs
dExvY2FsU3RvcmFnZURpcmVjdG9yeTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>