<?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>44705</bug_id>
          
          <creation_ts>2010-08-26 12:04:41 -0700</creation_ts>
          <short_desc>Add audio distance effect files</short_desc>
          <delta_ts>2010-09-03 11:33:19 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>crogers</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270020</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-26 12:04:41 -0700</bug_when>
    <thetext>Add audio distance effect files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270022</commentid>
    <comment_count>1</comment_count>
      <attachid>65595</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-26 12:11:34 -0700</bug_when>
    <thetext>Created attachment 65595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270037</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-26 12:38:39 -0700</bug_when>
    <thetext>For use with the web audio API, these files implement the distance rolloff models as defined in OpenAL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271621</commentid>
    <comment_count>3</comment_count>
      <attachid>65595</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-30 14:12:24 -0700</bug_when>
    <thetext>Comment on attachment 65595
Patch

Generally looks good, but a few minor issues.

&gt; Index: WebCore/platform/audio/Distance.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/audio/Distance.cpp	(revision 0)
&gt; +++ WebCore/platform/audio/Distance.cpp	(revision 0)
&gt; @@ -0,0 +1,90 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if ENABLE(WEB_AUDIO)
&gt; +
&gt; +#include &quot;Distance.h&quot;
&gt; +
&gt; +#include &lt;math.h&gt;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +DistanceEffect::DistanceEffect()
&gt; +    : m_model(ModelInverse)
&gt; +    , m_isClamped(true)
&gt; +    , m_refDistance(1.0)
&gt; +    , m_maxDistance(10000.0)
&gt; +    , m_rolloffFactor(1.0)
&gt; +{
&gt; +}
&gt; +
&gt; +double DistanceEffect::gain(double distance)
&gt; +{
&gt; +    // don&apos;t go beyond maximum distance
&gt; +    distance = distance &lt; m_maxDistance ? distance : m_maxDistance;

Write this as std::min(distance, m_maxDistance). Requires #include &lt;algorithm&gt;.

&gt; +    // if clamped, don&apos;t get closer than reference distance
&gt; +    if (m_isClamped)
&gt; +        distance = distance &gt; m_refDistance ? distance : m_refDistance;

Similarly, std::max(distance, m_refDistance).

&gt; +    switch (m_model) {
&gt; +    case ModelLinear:
&gt; +        return linearGain(distance);
&gt; +        break;
&gt; +    case ModelInverse:
&gt; +        return inverseGain(distance);
&gt; +        break;
&gt; +    case ModelExponential:
&gt; +        return exponentialGain(distance);
&gt; +        break;
&gt; +
&gt; +    default:
&gt; +        return 0.0;
&gt; +    }
&gt; +}
&gt; +
&gt; +double DistanceEffect::linearGain(double distance)
&gt; +{
&gt; +    return (1.0 - m_rolloffFactor * (distance - m_refDistance)) / (m_maxDistance - m_refDistance);
&gt; +}
&gt; +
&gt; +double DistanceEffect::inverseGain(double distance)
&gt; +{
&gt; +    return m_refDistance / (m_refDistance + m_rolloffFactor * (distance - m_refDistance));
&gt; +}
&gt; +
&gt; +double DistanceEffect::exponentialGain(double distance)
&gt; +{
&gt; +    return pow(distance / m_refDistance, -m_rolloffFactor);
&gt; +}
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // ENABLE(WEB_AUDIO)
&gt; Index: WebCore/platform/audio/Distance.h
&gt; ===================================================================
&gt; --- WebCore/platform/audio/Distance.h	(revision 0)
&gt; +++ WebCore/platform/audio/Distance.h	(revision 0)
&gt; @@ -0,0 +1,80 @@
&gt; +/*
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#ifndef Distance_h
&gt; +#define Distance_h
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +// Distance models are defined according to the OpenAL specification
&gt; +
&gt; +class DistanceEffect {
&gt; +public:
&gt; +    enum {
&gt; +        ModelLinear = 0,
&gt; +        ModelInverse = 1,
&gt; +        ModelExponential = 2
&gt; +    };

This enum should have a name, for example ModelType.

&gt; +    DistanceEffect();
&gt; +
&gt; +    // Returns scalar gain for the given distance the current distance model is used
&gt; +    double gain(double distance);
&gt; +
&gt; +    int model() { return m_model; }

Should return enum name (e.g. ModelType).

&gt; +    void setModel(int model, bool clamped)
&gt; +    {
&gt; +        m_model = model;
&gt; +        m_isClamped = clamped;
&gt; +    }

Should take e.g. ModelType as first argument.

&gt; +    // Distance params
&gt; +    void setRefDistance(double refDistance) { m_refDistance = refDistance; }
&gt; +    void setMaxDistance(double maxDistance) { m_maxDistance = maxDistance; }
&gt; +    void setRolloffFactor(double rolloffFactor) { m_rolloffFactor = rolloffFactor; }
&gt; +
&gt; +    double refDistance() const { return m_refDistance; }
&gt; +    double maxDistance() const { return m_maxDistance; }
&gt; +    double rolloffFactor() const { return m_rolloffFactor; }
&gt; +
&gt; +protected:
&gt; +    double linearGain(double distance);
&gt; +    double inverseGain(double distance);
&gt; +    double exponentialGain(double distance);
&gt; +
&gt; +    int m_model;

Should use enum type.

&gt; +    bool m_isClamped;
&gt; +    double m_refDistance;
&gt; +    double m_maxDistance;
&gt; +    double m_rolloffFactor;
&gt; +};
&gt; +
&gt; +} // namespace WebCore
&gt; +
&gt; +#endif // Distance_h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271701</commentid>
    <comment_count>4</comment_count>
      <attachid>65970</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-30 15:31:27 -0700</bug_when>
    <thetext>Created attachment 65970
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272924</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-01 12:10:52 -0700</bug_when>
    <thetext>Addressed all comments with last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273652</commentid>
    <comment_count>6</comment_count>
      <attachid>65970</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 16:13:03 -0700</bug_when>
    <thetext>Comment on attachment 65970
Patch

Looks good; r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273704</commentid>
    <comment_count>7</comment_count>
      <attachid>65970</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-02 18:01:10 -0700</bug_when>
    <thetext>Comment on attachment 65970
Patch

Rejecting patch 65970 from commit-queue.

crogers@google.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/WebKitTools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in WebKitTools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274064</commentid>
    <comment_count>8</comment_count>
      <attachid>65970</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-03 11:33:15 -0700</bug_when>
    <thetext>Comment on attachment 65970
Patch

Clearing flags on attachment: 65970

Committed r66745: &lt;http://trac.webkit.org/changeset/66745&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274065</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-03 11:33:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65595</attachid>
            <date>2010-08-26 12:11:34 -0700</date>
            <delta_ts>2010-08-30 15:31:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44705-20100826121132.patch</filename>
            <type>text/plain</type>
            <size>7756</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjExOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDgtMjYgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYXVkaW8gZGlzdGFuY2UgZWZmZWN0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcwNQorCisgICAgICAgIE5vIHRlc3RzIHNpbmNlIG5v
dCBhc3NvY2lhdGVkIHdpdGggYW55IEpTIEFQSSB5ZXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpbzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRGlzdGFuY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0OjpEaXN0YW5jZUVmZmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXN0YW5jZUVmZmVjdDo6Z2Fpbik6CisgICAgICAgIChXZWJDb3Jl
OjpEaXN0YW5jZUVmZmVjdDo6bGluZWFyR2Fpbik6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5j
ZUVmZmVjdDo6aW52ZXJzZUdhaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6
OmV4cG9uZW50aWFsR2Fpbik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRGlzdGFuY2UuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5jZUVmZmVjdDo6KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3RhbmNlRWZmZWN0Ojptb2RlbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5j
ZUVmZmVjdDo6c2V0TW9kZWwpOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6OnNl
dFJlZkRpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0OjpzZXRNYXhE
aXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5jZUVmZmVjdDo6c2V0Um9sbG9mZkZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5jZUVmZmVjdDo6cmVmRGlzdGFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6Om1heERpc3RhbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0Ojpyb2xsb2ZmRmFjdG9yKToKKwogMjAxMC0wOC0yNiAg
WGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFy
dGluIFJvYmluc29uLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShX
RUJfQVVESU8pCisKKyNpbmNsdWRlICJEaXN0YW5jZS5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Rpc3RhbmNlRWZmZWN0OjpEaXN0YW5jZUVmZmVjdCgp
CisgICAgOiBtX21vZGVsKE1vZGVsSW52ZXJzZSkKKyAgICAsIG1faXNDbGFtcGVkKHRydWUpCisg
ICAgLCBtX3JlZkRpc3RhbmNlKDEuMCkKKyAgICAsIG1fbWF4RGlzdGFuY2UoMTAwMDAuMCkKKyAg
ICAsIG1fcm9sbG9mZkZhY3RvcigxLjApCit7Cit9CisKK2RvdWJsZSBEaXN0YW5jZUVmZmVjdDo6
Z2Fpbihkb3VibGUgZGlzdGFuY2UpCit7CisgICAgLy8gZG9uJ3QgZ28gYmV5b25kIG1heGltdW0g
ZGlzdGFuY2UKKyAgICBkaXN0YW5jZSA9IGRpc3RhbmNlIDwgbV9tYXhEaXN0YW5jZSA/IGRpc3Rh
bmNlIDogbV9tYXhEaXN0YW5jZTsKKworICAgIC8vIGlmIGNsYW1wZWQsIGRvbid0IGdldCBjbG9z
ZXIgdGhhbiByZWZlcmVuY2UgZGlzdGFuY2UKKyAgICBpZiAobV9pc0NsYW1wZWQpCisgICAgICAg
IGRpc3RhbmNlID0gZGlzdGFuY2UgPiBtX3JlZkRpc3RhbmNlID8gZGlzdGFuY2UgOiBtX3JlZkRp
c3RhbmNlOworCisgICAgc3dpdGNoIChtX21vZGVsKSB7CisgICAgY2FzZSBNb2RlbExpbmVhcjoK
KyAgICAgICAgcmV0dXJuIGxpbmVhckdhaW4oZGlzdGFuY2UpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIE1vZGVsSW52ZXJzZToKKyAgICAgICAgcmV0dXJuIGludmVyc2VHYWluKGRpc3RhbmNl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNb2RlbEV4cG9uZW50aWFsOgorICAgICAgICBy
ZXR1cm4gZXhwb25lbnRpYWxHYWluKGRpc3RhbmNlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gMC4wOworICAgIH0KK30KKworZG91YmxlIERpc3RhbmNl
RWZmZWN0OjpsaW5lYXJHYWluKGRvdWJsZSBkaXN0YW5jZSkKK3sKKyAgICByZXR1cm4gKDEuMCAt
IG1fcm9sbG9mZkZhY3RvciAqIChkaXN0YW5jZSAtIG1fcmVmRGlzdGFuY2UpKSAvIChtX21heERp
c3RhbmNlIC0gbV9yZWZEaXN0YW5jZSk7Cit9CisKK2RvdWJsZSBEaXN0YW5jZUVmZmVjdDo6aW52
ZXJzZUdhaW4oZG91YmxlIGRpc3RhbmNlKQoreworICAgIHJldHVybiBtX3JlZkRpc3RhbmNlIC8g
KG1fcmVmRGlzdGFuY2UgKyBtX3JvbGxvZmZGYWN0b3IgKiAoZGlzdGFuY2UgLSBtX3JlZkRpc3Rh
bmNlKSk7Cit9CisKK2RvdWJsZSBEaXN0YW5jZUVmZmVjdDo6ZXhwb25lbnRpYWxHYWluKGRvdWJs
ZSBkaXN0YW5jZSkKK3sKKyAgICByZXR1cm4gcG93KGRpc3RhbmNlIC8gbV9yZWZEaXN0YW5jZSwg
LW1fcm9sbG9mZkZhY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rpc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9EaXN0YW5jZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEaXN0YW5jZV9oCisjZGVmaW5lIERpc3Rh
bmNlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBEaXN0YW5jZSBtb2RlbHMgYXJlIGRl
ZmluZWQgYWNjb3JkaW5nIHRvIHRoZSBPcGVuQUwgc3BlY2lmaWNhdGlvbgorCitjbGFzcyBEaXN0
YW5jZUVmZmVjdCB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE1vZGVsTGluZWFyID0g
MCwKKyAgICAgICAgTW9kZWxJbnZlcnNlID0gMSwKKyAgICAgICAgTW9kZWxFeHBvbmVudGlhbCA9
IDIKKyAgICB9OworCisgICAgRGlzdGFuY2VFZmZlY3QoKTsKKworICAgIC8vIFJldHVybnMgc2Nh
bGFyIGdhaW4gZm9yIHRoZSBnaXZlbiBkaXN0YW5jZSB0aGUgY3VycmVudCBkaXN0YW5jZSBtb2Rl
bCBpcyB1c2VkCisgICAgZG91YmxlIGdhaW4oZG91YmxlIGRpc3RhbmNlKTsKKworICAgIGludCBt
b2RlbCgpIHsgcmV0dXJuIG1fbW9kZWw7IH0KKworICAgIHZvaWQgc2V0TW9kZWwoaW50IG1vZGVs
LCBib29sIGNsYW1wZWQpCisgICAgeworICAgICAgICBtX21vZGVsID0gbW9kZWw7CisgICAgICAg
IG1faXNDbGFtcGVkID0gY2xhbXBlZDsKKyAgICB9CisKKyAgICAvLyBEaXN0YW5jZSBwYXJhbXMK
KyAgICB2b2lkIHNldFJlZkRpc3RhbmNlKGRvdWJsZSByZWZEaXN0YW5jZSkgeyBtX3JlZkRpc3Rh
bmNlID0gcmVmRGlzdGFuY2U7IH0KKyAgICB2b2lkIHNldE1heERpc3RhbmNlKGRvdWJsZSBtYXhE
aXN0YW5jZSkgeyBtX21heERpc3RhbmNlID0gbWF4RGlzdGFuY2U7IH0KKyAgICB2b2lkIHNldFJv
bGxvZmZGYWN0b3IoZG91YmxlIHJvbGxvZmZGYWN0b3IpIHsgbV9yb2xsb2ZmRmFjdG9yID0gcm9s
bG9mZkZhY3RvcjsgfQorCisgICAgZG91YmxlIHJlZkRpc3RhbmNlKCkgY29uc3QgeyByZXR1cm4g
bV9yZWZEaXN0YW5jZTsgfQorICAgIGRvdWJsZSBtYXhEaXN0YW5jZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWF4RGlzdGFuY2U7IH0KKyAgICBkb3VibGUgcm9sbG9mZkZhY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1fcm9sbG9mZkZhY3RvcjsgfQorCitwcm90ZWN0ZWQ6CisgICAgZG91YmxlIGxpbmVhckdh
aW4oZG91YmxlIGRpc3RhbmNlKTsKKyAgICBkb3VibGUgaW52ZXJzZUdhaW4oZG91YmxlIGRpc3Rh
bmNlKTsKKyAgICBkb3VibGUgZXhwb25lbnRpYWxHYWluKGRvdWJsZSBkaXN0YW5jZSk7CisKKyAg
ICBpbnQgbV9tb2RlbDsKKyAgICBib29sIG1faXNDbGFtcGVkOworICAgIGRvdWJsZSBtX3JlZkRp
c3RhbmNlOworICAgIGRvdWJsZSBtX21heERpc3RhbmNlOworICAgIGRvdWJsZSBtX3JvbGxvZmZG
YWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBEaXN0YW5j
ZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65970</attachid>
            <date>2010-08-30 15:31:27 -0700</date>
            <delta_ts>2010-09-03 11:33:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44705-20100830153125.patch</filename>
            <type>text/plain</type>
            <size>7714</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDgtMzAgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYXVkaW8gZGlzdGFuY2UgZWZmZWN0IGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDcwNQorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBzaW5j
ZSBhdWRpbyBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0Rpc3RhbmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5jZUVm
ZmVjdDo6RGlzdGFuY2VFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6
OmdhaW4pOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6OmxpbmVhckdhaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6OmludmVyc2VHYWluKToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0OjpleHBvbmVudGlhbEdhaW4pOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFu
Y2VFZmZlY3Q6Om1vZGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0OjpzZXRN
b2RlbCk6CisgICAgICAgIChXZWJDb3JlOjpEaXN0YW5jZUVmZmVjdDo6c2V0UmVmRGlzdGFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFuY2VFZmZlY3Q6OnNldE1heERpc3RhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0OjpzZXRSb2xsb2ZmRmFjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3RhbmNlRWZmZWN0OjpyZWZEaXN0YW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXN0YW5jZUVmZmVjdDo6bWF4RGlzdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
dGFuY2VFZmZlY3Q6OnJvbGxvZmZGYWN0b3IpOgorCiAyMDEwLTA4LTMwICBLZW5uZXRoIFJ1c3Nl
bGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBNYXJyaW4u
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlzdGFuY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKwor
I2luY2x1ZGUgIkRpc3RhbmNlLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
bWF0aC5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0Rpc3RhbmNlRWZmZWN0OjpEaXN0YW5jZUVmZmVjdCgpCisgICAgOiBtX21vZGVsKE1vZGVsSW52
ZXJzZSkKKyAgICAsIG1faXNDbGFtcGVkKHRydWUpCisgICAgLCBtX3JlZkRpc3RhbmNlKDEuMCkK
KyAgICAsIG1fbWF4RGlzdGFuY2UoMTAwMDAuMCkKKyAgICAsIG1fcm9sbG9mZkZhY3RvcigxLjAp
Cit7Cit9CisKK2RvdWJsZSBEaXN0YW5jZUVmZmVjdDo6Z2Fpbihkb3VibGUgZGlzdGFuY2UpCit7
CisgICAgLy8gZG9uJ3QgZ28gYmV5b25kIG1heGltdW0gZGlzdGFuY2UKKyAgICBkaXN0YW5jZSA9
IG1pbihkaXN0YW5jZSwgbV9tYXhEaXN0YW5jZSk7CisKKyAgICAvLyBpZiBjbGFtcGVkLCBkb24n
dCBnZXQgY2xvc2VyIHRoYW4gcmVmZXJlbmNlIGRpc3RhbmNlCisgICAgaWYgKG1faXNDbGFtcGVk
KQorICAgICAgICBkaXN0YW5jZSA9IG1heChkaXN0YW5jZSwgbV9yZWZEaXN0YW5jZSk7CisKKyAg
ICBzd2l0Y2ggKG1fbW9kZWwpIHsKKyAgICBjYXNlIE1vZGVsTGluZWFyOgorICAgICAgICByZXR1
cm4gbGluZWFyR2FpbihkaXN0YW5jZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTW9kZWxJ
bnZlcnNlOgorICAgICAgICByZXR1cm4gaW52ZXJzZUdhaW4oZGlzdGFuY2UpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE1vZGVsRXhwb25lbnRpYWw6CisgICAgICAgIHJldHVybiBleHBvbmVu
dGlhbEdhaW4oZGlzdGFuY2UpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiAwLjA7CisgICAgfQorfQorCitkb3VibGUgRGlzdGFuY2VFZmZlY3Q6OmxpbmVh
ckdhaW4oZG91YmxlIGRpc3RhbmNlKQoreworICAgIHJldHVybiAoMS4wIC0gbV9yb2xsb2ZmRmFj
dG9yICogKGRpc3RhbmNlIC0gbV9yZWZEaXN0YW5jZSkpIC8gKG1fbWF4RGlzdGFuY2UgLSBtX3Jl
ZkRpc3RhbmNlKTsKK30KKworZG91YmxlIERpc3RhbmNlRWZmZWN0OjppbnZlcnNlR2Fpbihkb3Vi
bGUgZGlzdGFuY2UpCit7CisgICAgcmV0dXJuIG1fcmVmRGlzdGFuY2UgLyAobV9yZWZEaXN0YW5j
ZSArIG1fcm9sbG9mZkZhY3RvciAqIChkaXN0YW5jZSAtIG1fcmVmRGlzdGFuY2UpKTsKK30KKwor
ZG91YmxlIERpc3RhbmNlRWZmZWN0OjpleHBvbmVudGlhbEdhaW4oZG91YmxlIGRpc3RhbmNlKQor
eworICAgIHJldHVybiBwb3coZGlzdGFuY2UgLyBtX3JlZkRpc3RhbmNlLCAtbV9yb2xsb2ZmRmFj
dG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9BVURJTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRGlzdGFuY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Rpc3RhbmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERpc3RhbmNlX2gKKyNkZWZpbmUgRGlzdGFuY2VfaAorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIERpc3RhbmNlIG1vZGVscyBhcmUgZGVmaW5lZCBhY2NvcmRp
bmcgdG8gdGhlIE9wZW5BTCBzcGVjaWZpY2F0aW9uCisKK2NsYXNzIERpc3RhbmNlRWZmZWN0IHsK
K3B1YmxpYzoKKyAgICBlbnVtIE1vZGVsVHlwZSB7CisgICAgICAgIE1vZGVsTGluZWFyID0gMCwK
KyAgICAgICAgTW9kZWxJbnZlcnNlID0gMSwKKyAgICAgICAgTW9kZWxFeHBvbmVudGlhbCA9IDIK
KyAgICB9OworCisgICAgRGlzdGFuY2VFZmZlY3QoKTsKKworICAgIC8vIFJldHVybnMgc2NhbGFy
IGdhaW4gZm9yIHRoZSBnaXZlbiBkaXN0YW5jZSB0aGUgY3VycmVudCBkaXN0YW5jZSBtb2RlbCBp
cyB1c2VkCisgICAgZG91YmxlIGdhaW4oZG91YmxlIGRpc3RhbmNlKTsKKworICAgIE1vZGVsVHlw
ZSBtb2RlbCgpIHsgcmV0dXJuIG1fbW9kZWw7IH0KKworICAgIHZvaWQgc2V0TW9kZWwoTW9kZWxU
eXBlIG1vZGVsLCBib29sIGNsYW1wZWQpCisgICAgeworICAgICAgICBtX21vZGVsID0gbW9kZWw7
CisgICAgICAgIG1faXNDbGFtcGVkID0gY2xhbXBlZDsKKyAgICB9CisKKyAgICAvLyBEaXN0YW5j
ZSBwYXJhbXMKKyAgICB2b2lkIHNldFJlZkRpc3RhbmNlKGRvdWJsZSByZWZEaXN0YW5jZSkgeyBt
X3JlZkRpc3RhbmNlID0gcmVmRGlzdGFuY2U7IH0KKyAgICB2b2lkIHNldE1heERpc3RhbmNlKGRv
dWJsZSBtYXhEaXN0YW5jZSkgeyBtX21heERpc3RhbmNlID0gbWF4RGlzdGFuY2U7IH0KKyAgICB2
b2lkIHNldFJvbGxvZmZGYWN0b3IoZG91YmxlIHJvbGxvZmZGYWN0b3IpIHsgbV9yb2xsb2ZmRmFj
dG9yID0gcm9sbG9mZkZhY3RvcjsgfQorCisgICAgZG91YmxlIHJlZkRpc3RhbmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWZEaXN0YW5jZTsgfQorICAgIGRvdWJsZSBtYXhEaXN0YW5jZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF4RGlzdGFuY2U7IH0KKyAgICBkb3VibGUgcm9sbG9mZkZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fcm9sbG9mZkZhY3RvcjsgfQorCitwcm90ZWN0ZWQ6CisgICAgZG91Ymxl
IGxpbmVhckdhaW4oZG91YmxlIGRpc3RhbmNlKTsKKyAgICBkb3VibGUgaW52ZXJzZUdhaW4oZG91
YmxlIGRpc3RhbmNlKTsKKyAgICBkb3VibGUgZXhwb25lbnRpYWxHYWluKGRvdWJsZSBkaXN0YW5j
ZSk7CisKKyAgICBNb2RlbFR5cGUgbV9tb2RlbDsKKyAgICBib29sIG1faXNDbGFtcGVkOworICAg
IGRvdWJsZSBtX3JlZkRpc3RhbmNlOworICAgIGRvdWJsZSBtX21heERpc3RhbmNlOworICAgIGRv
dWJsZSBtX3JvbGxvZmZGYWN0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBEaXN0YW5jZV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>