WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED DUPLICATE of
bug 56758
Bug 56052
percentages are incorrectly rounded in WebKit
https://bugs.webkit.org/show_bug.cgi?id=56052
Summary
percentages are incorrectly rounded in WebKit
Rik Cabanier
Reported
2011-03-09 14:42:30 PST
WebCore stores percentages as fixed point with limited precision. Because of this, one of the layout tests (fast/css/percentage-non-integer.html) is not rendering correctly. The Length class should be updated to use float instead of fixed.
Attachments
First pass to get the results of the other platforms
(30.98 KB, patch)
2011-03-09 14:53 PST
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
First pass to get the results of the other platforms
(30.98 KB, patch)
2011-03-09 16:41 PST
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
test to see if the build bots can integrate my change
(30.98 KB, patch)
2011-03-10 20:32 PST
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
First pass to get the results of the other platforms
(30.97 KB, patch)
2011-03-11 09:25 PST
,
Rik Cabanier
hyatt
: review-
hyatt
: commit-queue-
Details
Formatted Diff
Diff
Update patch. Fixed variable name per David Hyatt
(31.09 KB, patch)
2011-03-11 14:18 PST
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
updated checksum file
(32 bytes, application/octet-stream)
2011-03-11 14:33 PST
,
Rik Cabanier
no flags
Details
Update patch. Fixed variable name per David Hyatt + updated pixel test
(51.58 KB, patch)
2011-03-11 14:41 PST
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
fixes for mac leopard
(53.57 KB, patch)
2011-03-16 12:56 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
Fixes for max leopard
(51.67 KB, patch)
2011-03-16 13:44 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
Fixes for max leopard
(51.48 KB, patch)
2011-03-16 13:57 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
Fixes for max leopard
(51.69 KB, patch)
2011-03-16 14:06 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
Fixed for mac 32 bit
(55.59 KB, patch)
2011-03-17 11:07 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
Fixes for mac 32bit
(55.60 KB, patch)
2011-03-17 11:15 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
used narrowPrecisionToFloat per Simon's review notes
(55.76 KB, patch)
2011-03-18 14:33 PDT
,
Rik Cabanier
simon.fraser
: review+
simon.fraser
: commit-queue-
Details
Formatted Diff
Diff
updated per Simon's review
(56.18 KB, patch)
2011-03-21 10:51 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
updated per Simon's review
(
deleted
)
2011-03-21 11:00 PDT
,
Rik Cabanier
no flags
Details
Formatted Diff
Diff
Show Obsolete
(16)
View All
Add attachment
proposed patch, testcase, etc.
Rik Cabanier
Comment 1
2011-03-09 14:53:59 PST
Created
attachment 85242
[details]
First pass to get the results of the other platforms
Rik Cabanier
Comment 2
2011-03-09 14:54:29 PST
As discussed with David Hyatt
Rik Cabanier
Comment 3
2011-03-09 16:41:38 PST
Created
attachment 85257
[details]
First pass to get the results of the other platforms
Rik Cabanier
Comment 4
2011-03-10 20:32:20 PST
Created
attachment 85432
[details]
test to see if the build bots can integrate my change
WebKit Review Bot
Comment 5
2011-03-10 20:36:07 PST
Attachment 85432
[details]
did not pass style-queue: Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1 Source/WebCore/ChangeLog:7: Line contains tab character. [whitespace/tab] [5] Total errors found: 1 in 10 files If any of these errors are false positives, please file a bug against check-webkit-style.
Rik Cabanier
Comment 6
2011-03-11 09:25:33 PST
Created
attachment 85482
[details]
First pass to get the results of the other platforms
Dave Hyatt
Comment 7
2011-03-11 13:24:14 PST
Comment on
attachment 85482
[details]
First pass to get the results of the other platforms View in context:
https://bugs.webkit.org/attachment.cgi?id=85482&action=review
> Source/WebCore/rendering/AutoTableLayout.cpp:272 > + // if there was no remaining percent, maxWidth is invalid. > + if (!remainingPercent && maxNonPercent) > + maxWidth = intMaxForLength;
This seems like a logic change... is there a test to go with it?
> Source/WebCore/rendering/FixedTableLayout.cpp:239 > + float totalRawPercent = 0;
Seems like this could be renamed to remove the "Raw" word.
> LayoutTests/ChangeLog:8 > + * platform/mac/fast/css/percentage-non-integer-expected.txt:
Missing a pixel result for the test?
Rik Cabanier
Comment 8
2011-03-11 14:18:40 PST
Created
attachment 85532
[details]
Update patch. Fixed variable name per David Hyatt
Rik Cabanier
Comment 9
2011-03-11 14:33:21 PST
Created
attachment 85536
[details]
updated checksum file
Rik Cabanier
Comment 10
2011-03-11 14:41:00 PST
Created
attachment 85538
[details]
Update patch. Fixed variable name per David Hyatt + updated pixel test
Dave Hyatt
Comment 11
2011-03-14 14:18:57 PDT
Comment on
attachment 85538
[details]
Update patch. Fixed variable name per David Hyatt + updated pixel test r=me
WebKit Commit Bot
Comment 12
2011-03-14 19:15:39 PDT
The commit-queue encountered the following flaky tests while processing
attachment 85538
[details]
: animations/suspend-resume-animation.html
bug 48161
(author:
cmarrin@apple.com
) The commit-queue is continuing to process your patch.
WebKit Commit Bot
Comment 13
2011-03-14 19:18:09 PDT
Comment on
attachment 85538
[details]
Update patch. Fixed variable name per David Hyatt + updated pixel test Clearing flags on attachment: 85538 Committed
r81097
: <
http://trac.webkit.org/changeset/81097
>
WebKit Commit Bot
Comment 14
2011-03-14 19:18:15 PDT
All reviewed patches have been landed. Closing bug.
WebKit Review Bot
Comment 15
2011-03-14 19:32:10 PDT
http://trac.webkit.org/changeset/81097
might have broken Leopard Intel Release (Build)
Mark Rowe (bdash)
Comment 16
2011-03-14 20:56:53 PDT
I rolled this out in
r81103
due to the fact it breaks the 32-bit Mac build and caused assertions failures on the Windows Debug build bot.
Rik Cabanier
Comment 17
2011-03-15 16:35:42 PDT
(In reply to
comment #16
)
> I rolled this out in
r81103
due to the fact it breaks the 32-bit Mac build and caused assertions failures on the Windows Debug build bot.
I found the mac leopard issue but am unable to find the windows debug issue. Where is the failure log located?
Rik Cabanier
Comment 18
2011-03-16 12:56:38 PDT
Created
attachment 85957
[details]
fixes for mac leopard
Rik Cabanier
Comment 19
2011-03-16 13:44:56 PDT
Created
attachment 85966
[details]
Fixes for max leopard
Rik Cabanier
Comment 20
2011-03-16 13:57:54 PDT
Created
attachment 85969
[details]
Fixes for max leopard
Rik Cabanier
Comment 21
2011-03-16 14:06:03 PDT
Created
attachment 85971
[details]
Fixes for max leopard
Rik Cabanier
Comment 22
2011-03-17 11:07:49 PDT
Created
attachment 86072
[details]
Fixed for mac 32 bit
Rik Cabanier
Comment 23
2011-03-17 11:15:30 PDT
Created
attachment 86075
[details]
Fixes for mac 32bit
Simon Fraser (smfr)
Comment 24
2011-03-18 14:19:08 PDT
Comment on
attachment 86075
[details]
Fixes for mac 32bit View in context:
https://bugs.webkit.org/attachment.cgi?id=86075&action=review
> Source/WebCore/page/animation/AnimationBase.cpp:116 > + return to.blend(from, static_cast<float>(progress));
This should use narrowPrecisionToFloat()
> Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp:35 > + return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, static_cast<float>(progress)), > + Length(m_y.type()).blend(m_y, static_cast<float>(progress)), > + Length(m_z.type()).blend(m_z, static_cast<float>(progress)), m_type);
Ditto
> Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp:41 > + return TranslateTransformOperation::create(m_x.blend(fromX, static_cast<float>(progress)), m_y.blend(fromY, static_cast<float>(progress)), m_z.blend(fromZ, static_cast<float>(progress)), m_type);
Ditto
Rik Cabanier
Comment 25
2011-03-18 14:33:33 PDT
Created
attachment 86214
[details]
used narrowPrecisionToFloat per Simon's review notes
Simon Fraser (smfr)
Comment 26
2011-03-21 10:19:00 PDT
Comment on
attachment 86214
[details]
used narrowPrecisionToFloat per Simon's review notes View in context:
https://bugs.webkit.org/attachment.cgi?id=86214&action=review
> Source/WebCore/platform/Length.h:76 > + m_floatValue = static_cast<float>(m_floatValue*v); > + else > + m_intValue = static_cast<int>(m_intValue*v);
Spaces around the * please.
> Source/WebCore/platform/Length.h:170 > + if (m_isFloat) > + return !m_floatValue; > + > + return !m_intValue;
Maybe slightly cleaner as return m_isFloat ? !m_floatValue : !m_intValue;
> Source/WebCore/platform/Length.h:196 > + float fromPercent = from.isZero() ? 0.f : from.percent(); > + float toPercent = isZero() ? 0.f : percent();
Is the 0.f required to fix a compiler issue? If not, stick with 0.
> Source/WebCore/platform/Length.h:201 > + float fromValue = from.isZero() ? 0.f : from.value(); > + float toValue = isZero() ? 0.f : value();
Ditto.
> Source/WebCore/rendering/AutoTableLayout.cpp:235 > + const float epsilon = 1 / 128.0f;
It's not obvious why you chose 1/128 here.
Rik Cabanier
Comment 27
2011-03-21 10:51:08 PDT
Created
attachment 86334
[details]
updated per Simon's review
Rik Cabanier
Comment 28
2011-03-21 10:55:28 PDT
Comment on
attachment 86334
[details]
updated per Simon's review
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 80665) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,42 @@ >+2011-03-09 Rik Cabanier <
cabanier@adobe.com
> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+
bug 56052
: percentages are incorrectly rounded in WebKit >+
https://bugs.webkit.org/show_bug.cgi?id=56052
>+ >+ test: fast/css/percentage-non-integer.html >+ >+ * css/CSSStyleSelector.cpp: >+ (WebCore::CSSStyleSelector::applyProperty): >+ * page/PrintContext.cpp: >+ (WebCore::PrintContext::pageProperty): >+ * platform/Length.h: >+ (WebCore::Length::Length): >+ (WebCore::Length::operator*=): >+ (WebCore::Length::value): >+ (WebCore::Length::percent): >+ (WebCore::Length::setValue): >+ (WebCore::Length::calcValue): >+ (WebCore::Length::calcMinValue): >+ (WebCore::Length::isUndefined): >+ (WebCore::Length::isZero): >+ (WebCore::Length::isPositive): >+ (WebCore::Length::isNegative): >+ * rendering/AutoTableLayout.cpp: >+ (WebCore::AutoTableLayout::recalcColumn): >+ (WebCore::AutoTableLayout::computePreferredLogicalWidths): >+ (WebCore::AutoTableLayout::calcEffectiveLogicalWidth): >+ (WebCore::AutoTableLayout::layout): >+ * rendering/FixedTableLayout.cpp: >+ (WebCore::FixedTableLayout::calcWidthArray): >+ (WebCore::FixedTableLayout::layout): >+ * rendering/RenderTableSection.cpp: >+ (WebCore::RenderTableSection::addCell): >+ (WebCore::RenderTableSection::layoutRows): >+ * rendering/style/BorderData.h: >+ (WebCore::BorderData::hasBorderRadius): >+ > 2011-03-09 James Robinson <
jamesr@chromium.org
> > > Reviewed by Kenneth Russell. >Index: Source/WebCore/css/CSSStyleSelector.cpp >=================================================================== >--- Source/WebCore/css/CSSStyleSelector.cpp (revision 80381) >+++ Source/WebCore/css/CSSStyleSelector.cpp (working copy) >@@ -5332,8 +5332,8 @@ void CSSStyleSelector::applyProperty(int > radiusHeight = Length(pair->second()->getDoubleValue(), Percent); > else > radiusHeight = Length(max(intMinForLength, min(intMaxForLength, pair->second()->computeLengthInt(style(), m_rootElementStyle, zoomFactor))), Fixed); >- int width = radiusWidth.rawValue(); >- int height = radiusHeight.rawValue(); >+ int width = radiusWidth.value(); >+ int height = radiusHeight.value(); > if (width < 0 || height < 0) > return; > if (width == 0) >Index: Source/WebCore/page/PrintContext.cpp >=================================================================== >--- Source/WebCore/page/PrintContext.cpp (revision 80381) >+++ Source/WebCore/page/PrintContext.cpp (working copy) >@@ -282,16 +282,16 @@ String PrintContext::pageProperty(Frame* > if (!strcmp(propertyName, "margin-left")) { > if (style->marginLeft().isAuto()) > return String("auto"); >- return String::number(style->marginLeft().rawValue()); >+ return String::number(style->marginLeft().value()); > } > if (!strcmp(propertyName, "line-height")) >- return String::number(style->lineHeight().rawValue()); >+ return String::number(style->lineHeight().value()); > if (!strcmp(propertyName, "font-size")) > return String::number(style->fontDescription().computedPixelSize()); > if (!strcmp(propertyName, "font-family")) > return style->fontDescription().family().family().string(); > if (!strcmp(propertyName, "size")) >- return makeString(String::number(style->pageSize().width().rawValue()), ' ', String::number(style->pageSize().height().rawValue())); >+ return makeString(String::number(style->pageSize().width().value()), ' ', String::number(style->pageSize().height().value())); > > return makeString("pageProperty() unimplemented for: ", propertyName); > } >Index: Source/WebCore/page/animation/AnimationBase.cpp >=================================================================== >--- Source/WebCore/page/animation/AnimationBase.cpp (revision 80381) >+++ Source/WebCore/page/animation/AnimationBase.cpp (working copy) >@@ -113,7 +113,7 @@ static inline Color blendFunc(const Anim > > static inline Length blendFunc(const AnimationBase*, const Length& from, const Length& to, double progress) > { >- return to.blend(from, progress); >+ return to.blend(from, narrowPrecisionToFloat(progress)); > } > > static inline LengthSize blendFunc(const AnimationBase* anim, const LengthSize& from, const LengthSize& to, double progress) >Index: Source/WebCore/platform/Length.h >=================================================================== >--- Source/WebCore/platform/Length.h (revision 80381) >+++ Source/WebCore/platform/Length.h (working copy) >@@ -1,6 +1,7 @@ > /* > Copyright (C) 1999 Lars Knoll (
knoll@kde.org
) > Copyright (C) 2006, 2008 Apple Inc. All rights reserved. >+ Copyright (C) 2011 Rik Cabanier (
cabanier@adobe.com
) > > This library is free software; you can redistribute it and/or > modify it under the terms of the GNU Library General Public >@@ -30,7 +31,6 @@ > namespace WebCore { > > const int undefinedLength = -1; >-const int percentScaleFactor = 128; > const int intMaxForLength = 0x7ffffff; // max value for a 28-bit int > const int intMinForLength = (-0x7ffffff - 1); // min value for a 28-bit int > >@@ -52,34 +52,40 @@ public: > Length(int v, LengthType t, bool q = false) > : m_intValue(v), m_quirk(q), m_type(t), m_isFloat(false) > { >- ASSERT(t != Percent); >+ } >+ >+ Length(float v, LengthType t, bool q = false) >+ : m_floatValue(v), m_quirk(q), m_type(t), m_isFloat(true) >+ { > } > > Length(double v, LengthType t, bool q = false) >- : m_quirk(q), m_type(t), m_isFloat(false) >- { >- if (m_type == Percent) >- m_intValue = static_cast<int>(v*percentScaleFactor); >- else { >- m_isFloat = true; >- m_floatValue = static_cast<float>(v); >- } >+ : m_quirk(q), m_type(t), m_isFloat(true) >+ { >+ m_floatValue = static_cast<float>(v); > } > > bool operator==(const Length& o) const { return (getFloatValue() == o.getFloatValue()) && (m_type == o.m_type) && (m_quirk == o.m_quirk); } > bool operator!=(const Length& o) const { return (getFloatValue() != o.getFloatValue()) || (m_type != o.m_type) || (m_quirk != o.m_quirk); } > >+ const Length& operator*=(float v) >+ { >+ if (m_isFloat) >+ m_floatValue = static_cast<float>(m_floatValue * v); >+ else >+ m_intValue = static_cast<int>(m_intValue * v); >+ >+ return *this; >+ } >+ > int value() const { >- ASSERT(type() != Percent); >- return rawValue(); >+ return getIntValue(); > } > >- int rawValue() const { return getIntValue(); } >- >- double percent() const >+ float percent() const > { > ASSERT(type() == Percent); >- return static_cast<double>(rawValue()) / percentScaleFactor; >+ return getFloatValue(); > } > > LengthType type() const { return static_cast<LengthType>(m_type); } >@@ -94,18 +100,17 @@ public: > > void setValue(int value) > { >- ASSERT(!value || type() != Percent); > setValue(Fixed, value); > } > >- void setValue(LengthType t, double value) >+ void setValue(LengthType t, float value) > { > m_type = t; >- m_floatValue = static_cast<float>(value); >+ m_floatValue = value; > m_isFloat = true; > } > >- void setValue(double value) >+ void setValue(float value) > { > *this = Length(value, Fixed); > } >@@ -119,7 +124,7 @@ public: > case Percent: > if (roundPercentages) > return static_cast<int>(round(maxValue * percent() / 100.0)); >- return maxValue * rawValue() / (100 * percentScaleFactor); >+ return static_cast<int>(maxValue * percent() / 100.0); > case Auto: > return maxValue; > default: >@@ -135,7 +140,7 @@ public: > case Percent: > if (roundPercentages) > return static_cast<int>(round(maxValue * percent() / 100.0)); >- return maxValue * rawValue() / (100 * percentScaleFactor); >+ return static_cast<int>(maxValue * percent() / 100.0); > case Auto: > default: > return 0; >@@ -156,10 +161,16 @@ public: > } > } > >- bool isUndefined() const { return rawValue() == undefinedLength; } >- bool isZero() const { return !getIntValue(); } >- bool isPositive() const { return rawValue() > 0; } >- bool isNegative() const { return rawValue() < 0; } >+ bool isUndefined() const { return value() == undefinedLength; } >+ bool isZero() const >+ { >+ return m_isFloat ? !m_floatValue : !m_intValue; >+ } >+ bool isPositive() const { return getFloatValue() > 0; } >+ bool isNegative() const { return getFloatValue() < 0; } > > bool isAuto() const { return type() == Auto; } > bool isRelative() const { return type() == Relative; } >@@ -167,7 +178,7 @@ public: > bool isFixed() const { return type() == Fixed; } > bool isIntrinsicOrAuto() const { return type() == Auto || type() == MinIntrinsic || type() == Intrinsic; } > >- Length blend(const Length& from, double progress) const >+ Length blend(const Length& from, float progress) const > { > // Blend two lengths to produce a new length that is in between them. Used for animation. > if (!from.isZero() && !isZero() && from.type() != type()) >@@ -181,29 +192,25 @@ public: > resultType = from.type(); > > if (resultType == Percent) { >- double fromPercent = from.isZero() ? 0. : from.percent(); >- double toPercent = isZero() ? 0. : percent(); >+ float fromPercent = from.isZero() ? 0 : from.percent(); >+ float toPercent = isZero() ? 0 : percent(); > return Length(fromPercent + (toPercent - fromPercent) * progress, Percent); > } > >- double fromValue = from.isZero() ? 0 : from.value(); >- double toValue = isZero() ? 0 : value(); >+ float fromValue = from.isZero() ? 0 : from.value(); >+ float toValue = isZero() ? 0 : value(); > return Length(fromValue + (toValue - fromValue) * progress, resultType); > } > > private: > int getIntValue() const > { >- if (m_isFloat) >- return static_cast<int>(m_floatValue); >- return m_intValue; >+ return m_isFloat ? static_cast<int>(m_floatValue) : m_intValue; > } > > float getFloatValue() const > { >- if (m_isFloat) >- return m_floatValue; >- return m_intValue; >+ return m_isFloat ? m_floatValue : m_intValue; > } > > union { >Index: Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp >=================================================================== >--- Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp (revision 80381) >+++ Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp (working copy) >@@ -21,6 +21,7 @@ > > #include "config.h" > #include "TranslateTransformOperation.h" >+#include "FloatConversion.h" > > namespace WebCore { > >@@ -30,15 +31,15 @@ PassRefPtr<TransformOperation> Translate > return this; > > if (blendToIdentity) >- return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, progress), >- Length(m_y.type()).blend(m_y, progress), >- Length(m_z.type()).blend(m_z, progress), m_type); >+ return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, narrowPrecisionToFloat(progress)), >+ Length(m_y.type()).blend(m_y, narrowPrecisionToFloat(progress)), >+ Length(m_z.type()).blend(m_z, narrowPrecisionToFloat(progress)), m_type); > > const TranslateTransformOperation* fromOp = static_cast<const TranslateTransformOperation*>(from); > Length fromX = fromOp ? fromOp->m_x : Length(m_x.type()); > Length fromY = fromOp ? fromOp->m_y : Length(m_y.type()); > Length fromZ = fromOp ? fromOp->m_z : Length(m_z.type()); >- return TranslateTransformOperation::create(m_x.blend(fromX, progress), m_y.blend(fromY, progress), m_z.blend(fromZ, progress), m_type); >+ return TranslateTransformOperation::create(m_x.blend(fromX, narrowPrecisionToFloat(progress)), m_y.blend(fromY, narrowPrecisionToFloat(progress)), m_z.blend(fromZ, narrowPrecisionToFloat(progress)), m_type); > } > > } // namespace WebCore >Index: Source/WebCore/rendering/AutoTableLayout.cpp >=================================================================== >--- Source/WebCore/rendering/AutoTableLayout.cpp (revision 80381) >+++ Source/WebCore/rendering/AutoTableLayout.cpp (working copy) >@@ -81,7 +81,7 @@ void AutoTableLayout::recalcColumn(int e > > Length cellLogicalWidth = cell->styleOrColLogicalWidth(); > // FIXME: What is this arbitrary value? >- if (cellLogicalWidth.rawValue() > 32760) >+ if (cellLogicalWidth.value() > 32760) > cellLogicalWidth.setValue(32760); > if (cellLogicalWidth.isNegative()) > cellLogicalWidth.setValue(0); >@@ -105,13 +105,13 @@ void AutoTableLayout::recalcColumn(int e > break; > case Percent: > m_hasPercent = true; >- if (cellLogicalWidth.isPositive() && (!columnLayout.logicalWidth.isPercent() || cellLogicalWidth.rawValue() > columnLayout.logicalWidth.rawValue())) >+ if (cellLogicalWidth.isPositive() && (!columnLayout.logicalWidth.isPercent() || cellLogicalWidth.value() > columnLayout.logicalWidth.value())) > columnLayout.logicalWidth = cellLogicalWidth; > break; > case Relative: > // FIXME: Need to understand this case and whether it makes sense to compare values > // which are not necessarily of the same type. >- if (cellLogicalWidth.isAuto() || (cellLogicalWidth.isRelative() && cellLogicalWidth.value() > columnLayout.logicalWidth.rawValue())) >+ if (cellLogicalWidth.isAuto() || (cellLogicalWidth.isRelative() && cellLogicalWidth.value() > columnLayout.logicalWidth.value())) > columnLayout.logicalWidth = cellLogicalWidth; > default: > break; >@@ -232,16 +232,16 @@ void AutoTableLayout::computePreferredLo > > // We substitute 0 percent by (epsilon / percentScaleFactor) percent in two places below to avoid division by zero. > // FIXME: Handle the 0% cases properly. >- const int epsilon = 1; >+ const float epsilon = 1 / 128.0f; > >- int remainingPercent = 100 * percentScaleFactor; >+ float remainingPercent = 100; > for (size_t i = 0; i < m_layoutStruct.size(); ++i) { > minWidth += m_layoutStruct[i].effectiveMinLogicalWidth; > maxWidth += m_layoutStruct[i].effectiveMaxLogicalWidth; > if (scaleColumns) { > if (m_layoutStruct[i].effectiveLogicalWidth.isPercent()) { >- int percent = min(m_layoutStruct[i].effectiveLogicalWidth.rawValue(), remainingPercent); >- float logicalWidth = static_cast<float>(m_layoutStruct[i].effectiveMaxLogicalWidth) * 100 * percentScaleFactor / max(percent, epsilon); >+ float percent = min(static_cast<float>(m_layoutStruct[i].effectiveLogicalWidth.percent()), remainingPercent); >+ float logicalWidth = static_cast<float>(m_layoutStruct[i].effectiveMaxLogicalWidth) * 100 / max(percent, epsilon); > maxPercent = max(logicalWidth, maxPercent); > remainingPercent -= percent; > } else >@@ -250,7 +250,7 @@ void AutoTableLayout::computePreferredLo > } > > if (scaleColumns) { >- maxNonPercent = maxNonPercent * 100 * percentScaleFactor / max(remainingPercent, epsilon); >+ maxNonPercent = maxNonPercent * 100 / max(remainingPercent, epsilon); > maxWidth = max(maxWidth, static_cast<int>(min(maxNonPercent, INT_MAX / 2.0f))); > maxWidth = max(maxWidth, static_cast<int>(min(maxPercent, INT_MAX / 2.0f))); > } >@@ -266,6 +266,10 @@ void AutoTableLayout::computePreferredLo > minWidth = max(minWidth, tableLogicalWidth.value()); > maxWidth = minWidth; > } >+ >+ // if there was no remaining percent, maxWidth is invalid. >+ if (!remainingPercent && maxNonPercent) >+ maxWidth = intMaxForLength; > } > > /* >@@ -300,7 +304,7 @@ int AutoTableLayout::calcEffectiveLogica > size_t lastCol = effCol; > int cellMinLogicalWidth = cell->minPreferredLogicalWidth() + spacingInRowDirection; > float cellMaxLogicalWidth = cell->maxPreferredLogicalWidth() + spacingInRowDirection; >- int totalPercent = 0; >+ float totalPercent = 0; > int spanMinLogicalWidth = 0; > float spanMaxLogicalWidth = 0; > bool allColsArePercent = true; >@@ -312,7 +316,7 @@ int AutoTableLayout::calcEffectiveLogica > Layout& columnLayout = m_layoutStruct[lastCol]; > switch (columnLayout.logicalWidth.type()) { > case Percent: >- totalPercent += columnLayout.logicalWidth.rawValue(); >+ totalPercent += columnLayout.logicalWidth.percent(); > allColsAreFixed = false; > break; > case Fixed: >@@ -339,7 +343,7 @@ int AutoTableLayout::calcEffectiveLogica > columnLayout.effectiveLogicalWidth = Length(); > allColsArePercent = false; > } else >- totalPercent += columnLayout.effectiveLogicalWidth.rawValue(); >+ totalPercent += columnLayout.effectiveLogicalWidth.percent(); > allColsAreFixed = false; > } > if (!columnLayout.emptyCellsOnly) >@@ -354,14 +358,14 @@ int AutoTableLayout::calcEffectiveLogica > > // adjust table max width if needed > if (cellLogicalWidth.isPercent()) { >- if (totalPercent > cellLogicalWidth.rawValue() || allColsArePercent) { >+ if (totalPercent > cellLogicalWidth.percent() || allColsArePercent) { > // can't satify this condition, treat as variable > cellLogicalWidth = Length(); > } else { >- maxLogicalWidth = max(maxLogicalWidth, max(spanMaxLogicalWidth, cellMaxLogicalWidth) * 100 * percentScaleFactor / cellLogicalWidth.rawValue()); >+ maxLogicalWidth = max(maxLogicalWidth, static_cast<float>(max(spanMaxLogicalWidth, cellMaxLogicalWidth) * 100 / cellLogicalWidth.percent())); > > // all non percent columns in the span get percent values to sum up correctly. >- int percentMissing = cellLogicalWidth.rawValue() - totalPercent; >+ float percentMissing = cellLogicalWidth.percent() - totalPercent; > float totalWidth = 0; > for (unsigned pos = effCol; pos < lastCol; ++pos) { > if (!m_layoutStruct[pos].effectiveLogicalWidth.isPercent()) >@@ -370,7 +374,7 @@ int AutoTableLayout::calcEffectiveLogica > > for (unsigned pos = effCol; pos < lastCol && totalWidth > 0; ++pos) { > if (!m_layoutStruct[pos].effectiveLogicalWidth.isPercent()) { >- int percent = static_cast<int>(percentMissing * static_cast<float>(m_layoutStruct[pos].effectiveMaxLogicalWidth) / totalWidth); >+ float percent = percentMissing * static_cast<float>(m_layoutStruct[pos].effectiveMaxLogicalWidth) / totalWidth; > totalWidth -= m_layoutStruct[pos].effectiveMaxLogicalWidth; > percentMissing -= percent; > if (percent > 0) >@@ -491,7 +495,7 @@ void AutoTableLayout::layout() > int numFixed = 0; > float totalAuto = 0; > float totalFixed = 0; >- int totalPercent = 0; >+ float totalPercent = 0; > int allocAuto = 0; > unsigned numAutoEmptyCellsOnly = 0; > >@@ -504,7 +508,7 @@ void AutoTableLayout::layout() > switch (logicalWidth.type()) { > case Percent: > havePercent = true; >- totalPercent += logicalWidth.rawValue(); >+ totalPercent += logicalWidth.percent(); > break; > case Relative: > totalRelative += logicalWidth.value(); >@@ -538,9 +542,9 @@ void AutoTableLayout::layout() > m_layoutStruct[i].computedLogicalWidth = cellLogicalWidth; > } > } >- if (totalPercent > 100 * percentScaleFactor) { >+ if (totalPercent > 100) { > // remove overallocated space from the last columns >- int excess = tableLogicalWidth * (totalPercent - 100 * percentScaleFactor) / (100 * percentScaleFactor); >+ int excess = tableLogicalWidth * (totalPercent - 100) / 100; > for (int i = nEffCols - 1; i >= 0; --i) { > if (m_layoutStruct[i].effectiveLogicalWidth.isPercent()) { > int cellLogicalWidth = m_layoutStruct[i].computedLogicalWidth; >@@ -607,13 +611,13 @@ void AutoTableLayout::layout() > } > > // spread over percent colums >- if (available > 0 && m_hasPercent && totalPercent < 100 * percentScaleFactor) { >+ if (available > 0 && m_hasPercent && totalPercent < 100) { > for (size_t i = 0; i < nEffCols; ++i) { > Length& logicalWidth = m_layoutStruct[i].effectiveLogicalWidth; > if (logicalWidth.isPercent()) { >- int cellLogicalWidth = available * logicalWidth.rawValue() / totalPercent; >+ int cellLogicalWidth = available * logicalWidth.percent() / totalPercent; > available -= cellLogicalWidth; >- totalPercent -= logicalWidth.rawValue(); >+ totalPercent -= logicalWidth.percent(); > m_layoutStruct[i].computedLogicalWidth += cellLogicalWidth; > if (!available || !totalPercent) > break; >Index: Source/WebCore/rendering/FixedTableLayout.cpp >=================================================================== >--- Source/WebCore/rendering/FixedTableLayout.cpp (revision 80381) >+++ Source/WebCore/rendering/FixedTableLayout.cpp (working copy) >@@ -118,7 +118,8 @@ int FixedTableLayout::calcWidthArray(int > spanInCurrentEffectiveColumn = m_table->spanOfEffCol(currentEffectiveColumn); > } > if ((w.isFixed() || w.isPercent()) && w.isPositive()) { >- m_width[currentEffectiveColumn].setValue(w.type(), w.rawValue() * spanInCurrentEffectiveColumn); >+ m_width[currentEffectiveColumn] = w; >+ m_width[currentEffectiveColumn] *= spanInCurrentEffectiveColumn; > usedWidth += effWidth * spanInCurrentEffectiveColumn; > } > span -= spanInCurrentEffectiveColumn; >@@ -164,10 +165,11 @@ int FixedTableLayout::calcWidthArray(int > int usedSpan = 0; > int i = 0; > while (usedSpan < span && cCol + i < nEffCols) { >- int eSpan = m_table->spanOfEffCol(cCol + i); >+ float eSpan = m_table->spanOfEffCol(cCol + i); > // Only set if no col element has already set it. > if (m_width[cCol + i].isAuto() && w.type() != Auto) { >- m_width[cCol + i].setValue(w.type(), w.rawValue() * eSpan / span); >+ m_width[cCol + i] = w; >+ m_width[cCol + i] *= eSpan / span; > usedWidth += effWidth * eSpan / span; > } > usedSpan += eSpan; >@@ -234,7 +236,7 @@ void FixedTableLayout::layout() > int autoSpan = 0; > int totalFixedWidth = 0; > int totalPercentWidth = 0; >- int totalRawPercent = 0; >+ float totalPercent = 0; > > // Compute requirements and try to satisfy fixed and percent widths. > // Percentages are of the table's width, so for example >@@ -247,7 +249,7 @@ void FixedTableLayout::layout() > } else if (m_width[i].isPercent()) { > calcWidth[i] = m_width[i].calcValue(tableLogicalWidth); > totalPercentWidth += calcWidth[i]; >- totalRawPercent += m_width[i].rawValue(); >+ totalPercent += m_width[i].percent(); > } else if (m_width[i].isAuto()) { > numAuto++; > autoSpan += m_table->spanOfEffCol(i); >@@ -270,11 +272,11 @@ void FixedTableLayout::layout() > } > } > } >- if (totalRawPercent) { >+ if (totalPercent) { > totalPercentWidth = 0; > for (int i = 0; i < nEffCols; i++) { > if (m_width[i].isPercent()) { >- calcWidth[i] = m_width[i].rawValue() * (tableLogicalWidth - totalFixedWidth) / totalRawPercent; >+ calcWidth[i] = m_width[i].percent() * (tableLogicalWidth - totalFixedWidth) / totalPercent; > totalPercentWidth += calcWidth[i]; > } > } >Index: Source/WebCore/rendering/RenderTableSection.cpp >=================================================================== >--- Source/WebCore/rendering/RenderTableSection.cpp (revision 80381) >+++ Source/WebCore/rendering/RenderTableSection.cpp (working copy) >@@ -199,7 +199,7 @@ void RenderTableSection::addCell(RenderT > switch (logicalHeight.type()) { > case Percent: > if (!(cRowLogicalHeight.isPercent()) || >- (cRowLogicalHeight.isPercent() && cRowLogicalHeight.rawValue() < logicalHeight.rawValue())) >+ (cRowLogicalHeight.isPercent() && cRowLogicalHeight.percent() < logicalHeight.percent())) > m_grid[m_cRow].logicalHeight = logicalHeight; > break; > case Fixed: >@@ -434,22 +434,22 @@ int RenderTableSection::layoutRows(int t > if (m_grid[r].logicalHeight.isAuto()) > numAuto++; > else if (m_grid[r].logicalHeight.isPercent()) >- totalPercent += m_grid[r].logicalHeight.rawValue(); >+ totalPercent += m_grid[r].logicalHeight.percent(); > } > if (totalPercent) { > // try to satisfy percent > int add = 0; >- totalPercent = min(totalPercent, 100 * percentScaleFactor); >+ totalPercent = min(totalPercent, 100); > int rh = m_rowPos[1] - m_rowPos[0]; > for (int r = 0; r < totalRows; r++) { > if (totalPercent > 0 && m_grid[r].logicalHeight.isPercent()) { >- int toAdd = min(dh, (totalHeight * m_grid[r].logicalHeight.rawValue() / (100 * percentScaleFactor)) - rh); >+ int toAdd = min(dh, static_cast<int>((totalHeight * m_grid[r].logicalHeight.percent() / 100) - rh)); > // If toAdd is negative, then we don't want to shrink the row (this bug > // affected Outlook Web Access). > toAdd = max(0, toAdd); > add += toAdd; > dh -= toAdd; >- totalPercent -= m_grid[r].logicalHeight.rawValue(); >+ totalPercent -= m_grid[r].logicalHeight.percent(); > } > if (r < totalRows - 1) > rh = m_rowPos[r + 2] - m_rowPos[r + 1]; >Index: Source/WebCore/rendering/style/BorderData.h >=================================================================== >--- Source/WebCore/rendering/style/BorderData.h (revision 80381) >+++ Source/WebCore/rendering/style/BorderData.h (working copy) >@@ -49,13 +49,13 @@ public: > > bool hasBorderRadius() const > { >- if (m_topLeft.width().rawValue() > 0) >+ if (!m_topLeft.width().isZero()) > return true; >- if (m_topRight.width().rawValue() > 0) >+ if (!m_topRight.width().isZero()) > return true; >- if (m_bottomLeft.width().rawValue() > 0) >+ if (!m_bottomLeft.width().isZero()) > return true; >- if (m_bottomRight.width().rawValue() > 0) >+ if (!m_bottomRight.width().isZero()) > return true; > return false; > } >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 80665) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,12 @@ >+2011-03-09 Rik Cabanier <
cabanier@gmail.com
> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+
bug 56052
: percentages are incorrectly rounded in WebKit >+
https://bugs.webkit.org/show_bug.cgi?id=56052
>+ >+ * platform/mac/fast/css/percentage-non-integer-expected.txt: >+ > 2011-03-09 James Robinson <
jamesr@chromium.org
> > > Reviewed by Kenneth Russell. >Index: LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.checksum >=================================================================== >--- LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.checksum (revision 80381) >+++ LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.checksum (working copy) >@@ -1 +1 @@ >-414caaa2ee09823fcc6b1200d30ec127 >\ No newline at end of file >+c6d9055341a9904929ccc49476c7bd9e >\ No newline at end of file >Index: LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.txt >=================================================================== >--- LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.txt (revision 80381) >+++ LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.txt (working copy) >@@ -29,7 +29,7 @@ layer at (0,0) size 800x585 > RenderBlock {DIV} at (0,44) size 910x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,48) size 910x4 >- RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] >+ RenderBlock {DIV} at (0,0) size 101x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,52) size 900x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,56) size 890x4 >@@ -49,7 +49,7 @@ layer at (0,0) size 800x585 > RenderBlock {DIV} at (0,84) size 840x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,88) size 835x4 >- RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] >+ RenderBlock {DIV} at (0,0) size 101x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,92) size 825x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,96) size 815x4 >@@ -84,61 +84,61 @@ layer at (8,126) size 1000x20 > RenderTable {TABLE} at (0,0) size 1000x20 > RenderTableSection {TBODY} at (0,0) size 1000x20 > RenderTableRow {TR} at (0,0) size 1000x20 >- RenderTableCell {TD} at (0,1) size 11x18 [bgcolor=#0000007F] [r=0 c=0 rs=1 cs=1] >+ RenderTableCell {TD} at (0,1) size 12x18 [bgcolor=#0000007F] [r=0 c=0 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (11,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=1 rs=1 cs=1] >+ RenderTableCell {TD} at (12,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=1 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (21,1) size 13x18 [bgcolor=#0000007F] [r=0 c=2 rs=1 cs=1] >+ RenderTableCell {TD} at (22,1) size 13x18 [bgcolor=#0000007F] [r=0 c=2 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (34,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=3 rs=1 cs=1] >+ RenderTableCell {TD} at (35,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=3 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (44,1) size 15x18 [bgcolor=#0000007F] [r=0 c=4 rs=1 cs=1] >+ RenderTableCell {TD} at (45,1) size 16x18 [bgcolor=#0000007F] [r=0 c=4 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (59,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=5 rs=1 cs=1] >+ RenderTableCell {TD} at (61,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=5 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (69,1) size 17x18 [bgcolor=#0000007F] [r=0 c=6 rs=1 cs=1] >+ RenderTableCell {TD} at (71,1) size 17x18 [bgcolor=#0000007F] [r=0 c=6 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (86,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=7 rs=1 cs=1] >+ RenderTableCell {TD} at (88,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=7 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (96,1) size 20x18 [bgcolor=#0000007F] [r=0 c=8 rs=1 cs=1] >+ RenderTableCell {TD} at (98,1) size 20x18 [bgcolor=#0000007F] [r=0 c=8 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (116,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=9 rs=1 cs=1] >+ RenderTableCell {TD} at (118,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=9 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (126,1) size 21x18 [bgcolor=#0000007F] [r=0 c=10 rs=1 cs=1] >+ RenderTableCell {TD} at (128,1) size 22x18 [bgcolor=#0000007F] [r=0 c=10 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (147,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=11 rs=1 cs=1] >+ RenderTableCell {TD} at (150,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=11 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (157,1) size 23x18 [bgcolor=#0000007F] [r=0 c=12 rs=1 cs=1] >+ RenderTableCell {TD} at (160,1) size 24x18 [bgcolor=#0000007F] [r=0 c=12 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (180,10) size 10x0 [bgcolor=#00FF007F] [r=0 c=13 rs=1 cs=1] >- RenderTableCell {TD} at (190,1) size 25x18 [bgcolor=#0000007F] [r=0 c=14 rs=1 cs=1] >+ RenderTableCell {TD} at (184,10) size 10x0 [bgcolor=#00FF007F] [r=0 c=13 rs=1 cs=1] >+ RenderTableCell {TD} at (194,1) size 25x18 [bgcolor=#0000007F] [r=0 c=14 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (215,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=15 rs=1 cs=1] >+ RenderTableCell {TD} at (219,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=15 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (225,1) size 27x18 [bgcolor=#0000007F] [r=0 c=16 rs=1 cs=1] >+ RenderTableCell {TD} at (229,1) size 27x18 [bgcolor=#0000007F] [r=0 c=16 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (252,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=17 rs=1 cs=1] >+ RenderTableCell {TD} at (256,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=17 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (262,1) size 30x18 [bgcolor=#0000007F] [r=0 c=18 rs=1 cs=1] >+ RenderTableCell {TD} at (266,1) size 30x18 [bgcolor=#0000007F] [r=0 c=18 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (292,1) size 708x18 [r=0 c=19 rs=1 cs=1] >+ RenderTableCell {TD} at (296,1) size 704x18 [r=0 c=19 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >Index: LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.png >=================================================================== >Cannot display: file marked as a binary type. >svn:mime-type = image/png
>
>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 >IECAAAECiwkIIIt5WZoAAQIECBAgQIAAgSUEBJAl8P4cq548efLP8bAekwABAgQIECBAgMAkAgLI >JIw2QoAAAQIECBAgQIDAaxEQQF6LkmUIECBAgAABAgQIEJhEQACZhNFGCBAgQIAAAQIECBB4LQIr >W/1yuQVXTq5c7m73XWWBrbsvO66rXI2HI0CAAAECBAgQILCYgCMgi3lZmgABAgQIECBAgACBJQQE >kCXwrEqAAAECBAgQIECAwGICAshiXpYmQIAAAQIECBAgQGAJAQFkCTyrEiBAgAABAgQIECCwmIAA >spiXpQkQIECAAAECBAgQWEJAAFkCz6oECBAgQIAAAQIECCwmIIAs5mVpAgQIECBAgAABAgSWELji >3wFZYttWJUCAAAECBAgQIECAwA4BR0B2cPiCAAECBAgQIECAAIHdFBBAdlPXtgkQIECAAAECBAgQ >2CEggOzg8AUBAgQIECBAgAABArspIIDspq5tEyBAgAABAgQIECCwQ0AA2cHhCwIECBAgQIAAAQIE >dlNAANlNXdsmQIAAAQIECBAgQGCHgACyg8MXBAgQIECAAAECBAjspoAAspu6tk2AAAECBAgQIECA >wA4BAWQHhy8IECBAgAABAgQIENhNAQFkN3VtmwABAgQIECBAgACBHQICyA4OXxAgQIAAAQIECBAg >sJsCAshu6to2AQIECBAgQIAAAQI7BASQHRy+IECAAAECBAgQIEBgNwUEkN3UtW0CBAgQIECAAAEC >BHYICCA7OHxBgAABAgQIECBAgMBuCgggu6lr2wQIECBAgAABAgQI7BAQQHZw+IIAAQIECBAgQIAA >gd0UmF1p4ysnV660yJ/uv6d/evefvpz7WSx3cu69l74j1tmtbY+PGI8Rlys9zj3DUov38Mpqw9W4 >javxWBkeN2oYe47PL9f39uUW/T6JbV/ucs9Fd86r4+Llpq4jyrj4Mf6ctUQ9cbln+PdP/2So6U/V >DJ/ds63Iu++eV+BFK/mSAAECBAgQSCPgCEiaUSiEAAECBAgQIECAwN4XEED2/ox1SIAAAQIECBAg >QCCNgACSZhQKIUCAAAECBAgQILD3BQSQvT9jHRIgQIAAAQIECBBIIyCApBmFQggQIECAAAECBAjs >fQEBZO/PWIcECBAgQIAAAQIE0ggIIGlGoRACBAgQIECAAAECe19AANn7M9YhAQIECBAgQIAAgTQC >AkiaUSiEAAECBAgQIECAwN4XEED2/ox1SIAAAQIECBAgQCCNgACSZhQKIUCAAAECBAgQILD3BQSQ >vT9jHRIgQIAAAQIECBBIIyCApBmFQggQIECAAAECBAjsfQEBZO/PWIcECBAgQIAAAQIE0ggIIGlG >oRACBAgQIECAAAECe19AANn7M9YhAQIECBAgQIAAgTQCAkiaUSiEAAECBAgQIECAwN4XEED2/ox1 >SIAAAQIECBAgQCCNgACSZhQKIUCAAAECBAgQILD3BVa2+mXvt6lDAgQIECBAgAABAgQyCDgCkmEK >aiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQI >ECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQI >ECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQI >EMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUE >BJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJh >CmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsE >CBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIE >CBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIE >CBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJF >BASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACS >YQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqb >BAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAEC >BAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAEC >BAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAEC >RQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AA >kmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxa >mwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQAB >AgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAAB >AgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAAB >AkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOA >AJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoM >WpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEA >AQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAA >AQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAA >AQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCD >gACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECK >DFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiB >AAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECA >AAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECA >AAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAg >g4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBA >igxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimo >gQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBA >gAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBA >gAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBA >IIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQ >QIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYp >qIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIg >QIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAg >QIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAg >QCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQR >EECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiG >KaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0S >IECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQ >IECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQ >IEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgU >ERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJI >himogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmht >EiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQI >ECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQI >ECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQI >FBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAIC >SIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJo >bRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIE >CBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIE >CBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIE >CBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwC >AkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACky >aG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYC >BAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAEC >BAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAEC >BAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEM >AgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAAp >MmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAG >AgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAAB >AgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAAB >AgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACB >DAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAA >KTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaag >BgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAA >AQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAA >AQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAA >gQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERA >ACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmm >oAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmA >AAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECA >AAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECA >AIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBE >QAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZ >pqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJ >gAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBA >gAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBA >gACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQ >REAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAgg >GaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1 >SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAg >QIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAg >QIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAg >UERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggI >IBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECFY6WxkAABdpSURB >VBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIE >CBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJF >BASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACS >YQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqb >BAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAEC >BAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAEC >BAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAEC >RQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AA >kmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxa >mwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQAB >AgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAAB >AgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAAB >AkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOA >AJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoM >WpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEA >AQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAA >AQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAA >AQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCD >gACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECK >DFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiB >AAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECA >AAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECA >AAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAg >g4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBA >igxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimo >gQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBA >gAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBA >gAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBA >IIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQ >QIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYp >qIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIg >QIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAg >QIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAg >QCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQR >EECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiG >KaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0S >IECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQ >IECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQ >IEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgU >ERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJI >himogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmht >EiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQI >ECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQI >ECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQI >FBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAIC >SIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJo >bRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIE >CBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMArPvfve7bTabtbW1tba+vj7UtLW11VZXV9v58+db >fB6Xs2fPttOnT1+4LZZ3IUCAAAECBAgQeLVA7EetrKwM+1jx+fjx6iXdQmB6gXPnzg378OP3YOzr >j/v14z5+3Ddexv39+Dru3/71uMx4/dhjj7Wbb755/PJV17HdeKztl7GeuN7c3GyzjY2N9pa3vGV4 >sAgV8YDxESvHAn/84x/bfff/rv3bf623Xz6yr/3PY7P2wtkIKn3DkU36htpNh7c/hs8JECBAgAAB >AvUEzvcdo9jv6vtR18022m03nGnv+cvWPvreA+3Ntx4aftEbO3fbd/zqIel4NwTGwBDXsfMf+/Sx >Hx9fv/jii+2ll15qb3jDG9rx48cvHGSI78PxI4JBXGL5MYDM+z594YUX2utf//pLthHrx3pRw/b1 >4/a4xO2//vWv2ywKuf3224cH277gmTNn2n333df+7kcPth/9+9H20LM3tf2H97cP/u1N7c4T17Uj >h145AtI3OIsHOtePlvQnVethamX28nV/5La10h8wklR/0PVY5dxWB4kGz7WVeJL2j7jZ+vx8/3j+ >eP3w+unnh5+f8TpwLe4/rPXRbfadndjfOX3mfPvP3z3ffn7fk+0/7n2p3f/Ic+2zHz3XPvDu423f >vn3DzmFfzIXAZAKxgz/u5Md17OjHR4SQuMT1I488Mnz/3XnnncORufHBY/9/XHe8bbzeng3G2558 >8skhO4xfj9fzthH3j/dFTadOnWqzSESRdOIJMRYQ4ePhhx9u//DT+9oPHjjefnPm1rZy06x96IO3 >tI/edawd2r/WQ0ffWi/4XN9Qzx6tP+/6P/1QYwSQft1baWv9/tX+jOxXLX4psNWX61ElFuxf9/WG >27ba2f6J9fn5/vH88frh9dPPDz8/r9X9h1d2i4b9mfhd8ptvO9wO3nig/f0//qE98My+1n72ZHvT >G063O956pO3fv3/Y9+qLuRCYRCB27GMnPz7iaEZ8Hdexbz9+xNspfvnLX7YjR460EydODEfkxoAR >642fX6mgeEvG+LaNKy07bjeu4xI1RPYYTsGKL+LJEA8cBcdpV7/4xS/azx9cbb/ZeHNb6U+go0f3 >tZuuXx+eMJv9mRVPrt5mDxTxUtHamZ4w+tNrCBqrs8giw0tIW+0LxttFtvr9sXSs2696+AikldbP >AOtfr1ifn+8fzx+vH/3F1Ounnx9+fl6b+w/DL1kjhQyXl3+5evzoejty/GB7ZrbWHnjqxvaDf3m6 >/dXtx4edt9e6Azdu0TWBywmMASSux/AR13GQIb7X4pSsCA7PPPNM+9WvftWuu+66dsstt1wIwheH >jzht63vf+1777Gc/+6qHjbdvXLx8LPTNb36zfepTn2qHDh26sM64XFxHCInMEev3s6dW2vPPPz8U >Eks/99xzw0e8weThF9/UVo/1J8+x/e3Ydevt8edbe+qFrX4EZLWt9ZAxPM/6AY2NfgQjgs1m//Vl >HIJsZ+MHyGqLM7Hi69XzL6evcxFCtvr7TOKB+m1nzsUb3fubUXoosT4/3z+eP14/vH76+eHn57W6 >/xAneKysDns4wxkfsW/z5PNb7diR2bDf81zf3/nX368OO2Bx1sn4i9/YJXIhsKzA9gAyvtF7PAIS >p1/F/YcPHx4+nn322Rbv44j9/6NHj14IIWMNP/7xj4cwEadafe5znxtvvnA9bvfCDa988p3vfKf9 >5Cc/GULLxz72sYvvHmqIx4zsMTtw4MDw5pRIRJGOoqi44+mnn25PrP91O3J0f7vh2L4eQPb1N5+v >tH9+uKeW1c1+alXEj5eDR5xUFU+0eI/Han/Px/q+nrTaZj8FqweQ/jHryX+th5PNzX44qH+c7+Ek >MOLUrY247ZUjI9bn5/vH88frh9dPPz/8/LwW9x/6rtPwi9n4Le+5sxt9HyeOgmz2ALLeVuJUkH46 >zO9fONriNPfY3xJAXrV/6oYlBMYAEuEgPsY3occ+fXzE/fE/YcX3XezzRwge9/kPHjw43P7QQw+1 >r3/96y2ux1OmxveQbC8ttnWp22OdJ554on31q19tP/zhD9sXvvCF9ra3vW3YVhz1iIMccWQlsscs >CojDM5FI4hDNWFx8vf9ga8f64cM4+nH86IEWBa73MDGb9VOxetBYWe1HM3oR/QBPDxLn2qy/Yuzr >z7G1niTiOMda/3VmvP08bl/vT7Z4c9ZmX26zPynP948IIGc3+nlqfWnr8/P94/nj9cPrp58ffn5e >q/sPsb+z2nfwts718NF/KbuxcaadPf1SO9NPNV9Z2WjnN9bbc/3sj9hxi32t2OeK/S8XAlMIjAEk >riOAjKdJjUEibhtP+4v3YEQIiEsEgvi4995729e+9rVXlfL444+/6rYIMJe6PcL1eLn//vvbl7/8 >5fbFL36xve997xsCUNQyvu98FsVECBmvo/AoOgp7/ezxtn7g5nb04L529HAPIIcOtwP7+7J9+ThV >ItJ+X7wfwXj5iMZ6P+dqvT+Z4mjHEDz65xFUZq+cmtUzR3/i9Y++ThykHALJ2c22sWX9eEHi5/vH >88frh9dPPz/8/Oz7Ddfg/sNa/6Vs/695+n5R3/nrR0DOnlltp9f7f/Jz+sW+77PVNg7O2vVnn+37 >RMeGfS4BZNxVdT2FQOzcxz58fMRO/njkY7w9joiMYSTeoxH7/rFMXOL2D33oQ+11r3td+8Y3vtF+ >+9vfDrfHP3HE5OJLrHup27cH6hMnTrTPf/7zF46AjLXFY8b3/nAEJDYSK8V1LBBvELnxxhvb6574 >XTtz4K7hPR+HDu1vR/tpWIcOH+pPnn6qULy3IwJIr6oH/f6m8h5M+tfxEW+ijN9mxxHH+C961/qf >DYnTImPZzf6bgFh+uI7wsjXrhyitz8/3j+eP1w+vn35++Pl57e4/9N2fvt8z66ea94+N/e30S+vt >xdP9DJN+Svrpfhjk4IG1dmLl2f6e2zdeCCDjDmBf1YXAUgJj0Ij9+PH7arwtfskdn8f+fRyliD/B >MQaQWDbWics73vGO9pWvfKX97Gc/a9/61rcunB11cWHjgYuLb48sEW9u/8xnPtM+8pGPDKeBjduP >x486YplYfwggwyevnBc2FvHWt7613frQT9ujpx5o6zd+sB3oPxkP9vBx6LpIQ62v/PJRjPhfH+Ko >RoSKfmZWiz9RGOGkvw1kOBeyh5x+NOTl94LEUY9+wGM4+tHPvBoOUca6G9bn5/vH88frh9dPPz/8 >/LyG9x/67177qekv/4J1s/9nPGvrfWep/8Gzc2dPtxfXZ+3ICw+0999+fnjT7/adv76aC4FJBOIo >R1xiZz929GPnfwwhYwCJ063uuuuuC6dgjcuM68T1Jz7xifbhD3+4ffvb377kkY54M/uljoB88pOf >bJ/+9KeHEBLbHcNHZIvYbpx6GCFkyB3jqVfj+YhReBT9gQ98oD344INt87f3tdOP9jdQHf+b4Q8G >9qOJQ/iY9edVhIv+/qr+Bwj7E64Hin52VlvrKSOCSD8A0o+C9I9+vRLX/ZkZYeNAv7+f4dU2enCJ >QBJHQs5GiLE+P98/nj9eP7x++vnh5+c1uv8Qf1x5DCAbPYDEEZGN0/0/lYj9oMfub+888r/t3Xe8 >vd1www3Djljsa7kQmEogdvDHgwixzdj5H6/jvjjyEf8N780339ze9a53DSFgWOCVf2KZcZ24Kd6K >8aUvfWnHbePyx44duxBgxtvielw+tjVe4vPxYzwCMpyCFWlp/BjTUhQQf2L94x//eNv4/vfbI3/8 >p3bq3kfa2Te/t537i/e162853tb6+0w24g9/9Es8ThzZON/fz7KvP5/ORfLvfW/04BGBJQwilMQT >MlLHmb5sPDPjTVpn+m3xBwmtz8/3j+eP1w+vn35++Pl5re4/DHGi788M+0R9H+mp/zvVnvrv/kvc >PzzQ7rzupfb+d76t3XbbbRf+RkK8KdiFwFQC405+hJD43oqd/fHN6HHqVfznUrG//573vGf4r3jH >x431Yr//4uvx/ktdxxGQKwXo7duLz6OuePz4PK5nUVx8xIPH9XiJO9/+9rcPDxDvjH/00Ufbi//z >vfbMg99sj/dGxg1vT0vjuq4JECBAgAABAlUF4qyS+J9Db73++nbr7be2Eyfu6h8n2vX969hxG/e9 >qvroe3qB2C+PS3xvxc5+/IdS8RHhI/7XqjiicccddwxHQCKcXHwZ9+svvv1SX8f7PC61jUstG9uN >j6hpDEdR4yz+K674YyQROLafzzWuEE+YeLNKBJBTp04NzcQDjMln+1GTSz2w2wgQIECAAAECVQTi >F7OxbxSnmUQIiT/0FqesxE5b3DbuIFbx0OfVEYid++07+mMAiUd/4xvfOHwPxvdl7PNPcVlkOxeH >j8ge/w9MMxM6KtjTlQAAAABJRU5ErkJggg==
>
Rik Cabanier
Comment 29
2011-03-21 11:00:00 PDT
Created
attachment 86335
[details]
updated per Simon's review
Eric Seidel (no email)
Comment 30
2011-03-21 11:00:28 PDT
Rik: How did you spam the bug like that? Did a tool go haywire? In any case, we should open a new bug for this (and we can dupe this one against that). But this bug should be closed now that it's impossible to read.
Rik Cabanier
Comment 31
2011-03-21 11:06:54 PDT
(In reply to
comment #30
)
> Rik: How did you spam the bug like that? Did a tool go haywire? > > In any case, we should open a new bug for this (and we can dupe this one against that). > > But this bug should be closed now that it's impossible to read.
Yes. Please close the bug and I'll open a new one. I click on "edit attachment as comment" and submitted by accident :-(
Rik Cabanier
Comment 32
2011-03-21 15:09:56 PDT
*** This bug has been marked as a duplicate of
bug 56758
***
WebKit Review Bot
Comment 33
2011-03-21 18:06:28 PDT
http://trac.webkit.org/changeset/81625
might have broken Qt Linux Release The following tests are not passing: css2.1/t09-c5526c-display-00-e.html
Nico Weber
Comment 34
2011-04-21 14:20:28 PDT
This caused
https://bugs.webkit.org/show_bug.cgi?id=59138
Marc-Antoine Ruel
Comment 35
2011-04-26 12:39:50 PDT
Comment on
attachment 86335
[details]
updated per Simon's review View in context:
https://bugs.webkit.org/attachment.cgi?id=86335&action=review
> Source/WebCore/platform/Length.h:198 > + float fromValue = from.isZero() ? 0 : from.value();
This causes: Source\WebCore\platform\Length.h(196) : warning C4244: 'initializing' : conversion from 'int' to 'float', possible loss of data This is genuine since value() returns an int. Either change the type to int or use getFloatValue() or the thing that is the more sensible here as I'm not familiar with this code.
Rik Cabanier
Comment 36
2011-04-26 12:41:59 PDT
(In reply to
comment #35
)
> (From update of
attachment 86335
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=86335&action=review
> > > Source/WebCore/platform/Length.h:198 > > + float fromValue = from.isZero() ? 0 : from.value(); > > This causes: > Source\WebCore\platform\Length.h(196) : warning C4244: 'initializing' : conversion from 'int' to 'float', possible loss of data > > This is genuine since value() returns an int. Either change the type to int or use getFloatValue() or the thing that is the more sensible here as I'm not familiar with this code.
What platform are you seeing this on?
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug