aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar caryclark <caryclark@google.com>2015-05-13 08:23:48 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-05-13 08:23:48 -0700
commitbca19f77479adfd8ba2171753382bc8bf4c2b4ca (patch)
tree767104fcb63f7fab8901f7f7597a12bb78bf2e1e
parent04d24a3f86b6f2382e5c6ffaf161ffc734a4d02a (diff)
deal more consistently with unsortable edges
Improve line/curve coincident detection and resolution. This fixed the remaining simple failures. When an edge is unsortable, use the ray intersection to determine the angles' winding. Deal with degenerate segments. TBR=reed@google.com BUG=skia:3588,skia:3762 Review URL: https://codereview.chromium.org/1140813002
-rwxr-xr-xsrc/pathops/SkOpCoincidence.cpp32
-rw-r--r--src/pathops/SkOpCoincidence.h2
-rw-r--r--src/pathops/SkOpSegment.cpp86
-rw-r--r--src/pathops/SkOpSegment.h23
-rwxr-xr-xsrc/pathops/SkOpSpan.cpp10
-rw-r--r--src/pathops/SkOpSpan.h1
-rw-r--r--src/pathops/SkPathOpsCommon.cpp94
-rw-r--r--src/pathops/SkPathOpsCommon.h4
-rw-r--r--src/pathops/SkPathOpsOp.cpp58
-rw-r--r--tests/PathOpsExtendedTest.cpp4
-rw-r--r--tests/PathOpsOpTest.cpp31
-rw-r--r--tests/PathOpsSimplifyTest.cpp8
-rw-r--r--tools/pathops_sorter.htm7
-rw-r--r--tools/pathops_visualizer.htm812
14 files changed, 657 insertions, 515 deletions
diff --git a/src/pathops/SkOpCoincidence.cpp b/src/pathops/SkOpCoincidence.cpp
index 4251d9fcd8..ed195641bf 100755
--- a/src/pathops/SkOpCoincidence.cpp
+++ b/src/pathops/SkOpCoincidence.cpp
@@ -8,6 +8,38 @@
#include "SkOpSegment.h"
#include "SkPathOpsTSect.h"
+bool SkOpCoincidence::extend(SkOpPtT* coinPtTStart, SkOpPtT* coinPtTEnd, SkOpPtT* oppPtTStart,
+ SkOpPtT* oppPtTEnd) {
+ // if there is an existing pair that overlaps the addition, extend it
+ SkCoincidentSpans* coinRec = fHead;
+ if (coinRec) {
+ do {
+ if (coinRec->fCoinPtTStart->segment() != coinPtTStart->segment()) {
+ continue;
+ }
+ if (coinRec->fOppPtTStart->segment() != oppPtTStart->segment()) {
+ continue;
+ }
+ if (coinRec->fCoinPtTStart->fT > coinPtTEnd->fT) {
+ continue;
+ }
+ if (coinRec->fCoinPtTEnd->fT < coinPtTStart->fT) {
+ continue;
+ }
+ if (coinRec->fCoinPtTStart->fT > coinPtTStart->fT) {
+ coinRec->fCoinPtTStart = coinPtTStart;
+ coinRec->fOppPtTStart = oppPtTStart;
+ }
+ if (coinRec->fCoinPtTEnd->fT < coinPtTEnd->fT) {
+ coinRec->fCoinPtTEnd = coinPtTEnd;
+ coinRec->fOppPtTEnd = oppPtTEnd;
+ }
+ return true;
+ } while ((coinRec = coinRec->fNext));
+ }
+ return false;
+}
+
void SkOpCoincidence::add(SkOpPtT* coinPtTStart, SkOpPtT* coinPtTEnd, SkOpPtT* oppPtTStart,
SkOpPtT* oppPtTEnd, SkChunkAlloc* allocator) {
SkASSERT(coinPtTStart->fT < coinPtTEnd->fT);
diff --git a/src/pathops/SkOpCoincidence.h b/src/pathops/SkOpCoincidence.h
index 4d906e1af1..ce57999b1d 100644
--- a/src/pathops/SkOpCoincidence.h
+++ b/src/pathops/SkOpCoincidence.h
@@ -40,6 +40,8 @@ public:
void detach(SkCoincidentSpans* );
void dump() const;
void expand();
+ bool extend(SkOpPtT* coinPtTStart, SkOpPtT* coinPtTEnd, SkOpPtT* oppPtTStart,
+ SkOpPtT* oppPtTEnd);
void fixUp(SkOpPtT* deleted, SkOpPtT* kept);
void mark();
diff --git a/src/pathops/SkOpSegment.cpp b/src/pathops/SkOpSegment.cpp
index de813cb7c9..01417d6b8f 100644
--- a/src/pathops/SkOpSegment.cpp
+++ b/src/pathops/SkOpSegment.cpp
@@ -43,18 +43,18 @@ static const bool gActiveEdge[kXOR_SkPathOp + 1][2][2][2][2] = {
#undef T
SkOpAngle* SkOpSegment::activeAngle(SkOpSpanBase* start, SkOpSpanBase** startPtr,
- SkOpSpanBase** endPtr, bool* done, bool* sortable) {
- if (SkOpAngle* result = activeAngleInner(start, startPtr, endPtr, done, sortable)) {
+ SkOpSpanBase** endPtr, bool* done) {
+ if (SkOpAngle* result = activeAngleInner(start, startPtr, endPtr, done)) {
return result;
}
- if (SkOpAngle* result = activeAngleOther(start, startPtr, endPtr, done, sortable)) {
+ if (SkOpAngle* result = activeAngleOther(start, startPtr, endPtr, done)) {
return result;
}
return NULL;
}
SkOpAngle* SkOpSegment::activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** startPtr,
- SkOpSpanBase** endPtr, bool* done, bool* sortable) {
+ SkOpSpanBase** endPtr, bool* done) {
SkOpSpan* upSpan = start->upCastable();
if (upSpan) {
if (upSpan->windValue() || upSpan->oppValue()) {
@@ -95,11 +95,11 @@ SkOpAngle* SkOpSegment::activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** sta
}
SkOpAngle* SkOpSegment::activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr,
- SkOpSpanBase** endPtr, bool* done, bool* sortable) {
+ SkOpSpanBase** endPtr, bool* done) {
SkOpPtT* oPtT = start->ptT()->next();
SkOpSegment* other = oPtT->segment();
SkOpSpanBase* oSpan = oPtT->span();
- return other->activeAngleInner(oSpan, startPtr, endPtr, done, sortable);
+ return other->activeAngleInner(oSpan, startPtr, endPtr, done);
}
bool SkOpSegment::activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xorSuMask,
@@ -311,6 +311,14 @@ void SkOpSegment::align() {
if (!span->aligned()) {
span->alignEnd(1, fPts[SkPathOpsVerbToPoints(fVerb)]);
}
+ if (this->collapsed()) {
+ SkOpSpan* span = &fHead;
+ do {
+ span->setWindValue(0);
+ span->setOppValue(0);
+ this->markDone(span);
+ } while ((span = span->next()->upCastable()));
+ }
debugValidate();
}
@@ -363,6 +371,10 @@ void SkOpSegment::checkAngleCoin(SkOpCoincidence* coincidences, SkChunkAlloc* al
} while ((base = span->next()));
}
+bool SkOpSegment::collapsed() const {
+ return fVerb == SkPath::kLine_Verb && fHead.pt() == fTail.pt();
+}
+
void SkOpSegment::ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle,
SkOpAngle::IncludeType includeType) {
SkOpSegment* baseSegment = baseAngle->segment();
@@ -1078,7 +1090,7 @@ SkOpSegment* SkOpSegment::nextChase(SkOpSpanBase** startPtr, int* stepPtr, SkOpS
return other;
}
-static void clear_visited(SkOpSpan* span) {
+static void clear_visited(SkOpSpanBase* span) {
// reset visited flag back to false
do {
SkOpPtT* ptT = span->ptT(), * stopPtT = ptT;
@@ -1086,7 +1098,7 @@ static void clear_visited(SkOpSpan* span) {
SkOpSegment* opp = ptT->segment();
opp->resetVisited();
}
- } while ((span = span->next()->upCastable()));
+ } while (!span->final() && (span = span->upCast()->next()));
}
// look for pairs of undetected coincident curves
@@ -1098,50 +1110,59 @@ void SkOpSegment::missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc
if (this->verb() != SkPath::kLine_Verb) {
return;
}
+ if (this->done()) {
+ return;
+ }
SkOpSpan* prior = NULL;
- SkOpSpan* span = &fHead;
+ SkOpSpanBase* spanBase = &fHead;
do {
- SkOpPtT* ptT = span->ptT(), * spanStopPtT = ptT;
- SkASSERT(ptT->span() == span);
+ SkOpPtT* ptT = spanBase->ptT(), * spanStopPtT = ptT;
+ SkASSERT(ptT->span() == spanBase);
while ((ptT = ptT->next()) != spanStopPtT) {
SkOpSegment* opp = ptT->span()->segment();
- if (!opp->setVisited()) {
+ if (opp->verb() == SkPath::kLine_Verb) {
continue;
}
- if (opp->verb() == SkPath::kLine_Verb) {
+ if (opp->done()) {
continue;
}
- if (span->containsCoincidence(opp)) { // FIXME: this assumes that if the opposite
- // segment is coincident then no more coincidence
- // needs to be detected. This may not be true.
+ // when opp is encounted the 1st time, continue; on 2nd encounter, look for coincidence
+ if (!opp->visited()) {
continue;
}
- if (span->containsCoinEnd(opp)) {
+ if (spanBase == &fHead) {
continue;
- }
- // if already visited and visited again, check for coin
- if (span == &fHead) {
+ }
+ SkOpSpan* span = spanBase->upCastable();
+ // FIXME?: this assumes that if the opposite segment is coincident then no more
+ // coincidence needs to be detected. This may not be true.
+ if (span && span->containsCoincidence(opp)) {
continue;
}
+ if (spanBase->containsCoinEnd(opp)) {
+ continue;
+ }
SkOpPtT* priorPtT = NULL, * priorStopPtT;
// find prior span containing opp segment
SkOpSegment* priorOpp = NULL;
- prior = span;
- while (!priorOpp && (prior = prior->prev())) {
- priorStopPtT = priorPtT = prior->ptT();
+ SkOpSpan* priorTest = spanBase->prev();
+ while (!priorOpp && priorTest) {
+ priorStopPtT = priorPtT = priorTest->ptT();
while ((priorPtT = priorPtT->next()) != priorStopPtT) {
SkOpSegment* segment = priorPtT->span()->segment();
if (segment == opp) {
+ prior = priorTest;
priorOpp = opp;
break;
}
}
+ priorTest = priorTest->prev();
}
if (!priorOpp) {
continue;
}
SkOpPtT* oppStart = prior->ptT();
- SkOpPtT* oppEnd = span->ptT();
+ SkOpPtT* oppEnd = spanBase->ptT();
bool swapped = priorPtT->fT > ptT->fT;
if (swapped) {
SkTSwap(priorPtT, ptT);
@@ -1154,7 +1175,7 @@ void SkOpSegment::missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc
}
{
// average t, find mid pt
- double midT = (prior->t() + span->t()) / 2;
+ double midT = (prior->t() + spanBase->t()) / 2;
SkPoint midPt = this->ptAtT(midT);
coincident = true;
// if the mid pt is not near either end pt, project perpendicular through opp seg
@@ -1182,9 +1203,10 @@ void SkOpSegment::missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc
}
if (coincident) {
// mark coincidence
- coincidences->add(priorPtT, ptT, oppStart, oppEnd, allocator);
+ if (!coincidences->extend(priorPtT, ptT, oppStart, oppEnd)) {
+ coincidences->add(priorPtT, ptT, oppStart, oppEnd, allocator);
+ }
clear_visited(&fHead);
- missingCoincidence(coincidences, allocator);
return;
}
swapBack:
@@ -1192,7 +1214,7 @@ void SkOpSegment::missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc
SkTSwap(priorPtT, ptT);
}
}
- } while ((span = span->next()->upCastable()));
+ } while ((spanBase = spanBase->final() ? NULL : spanBase->upCast()->next()));
clear_visited(&fHead);
}
@@ -1610,13 +1632,7 @@ int SkOpSegment::updateWinding(SkOpSpanBase* start, SkOpSpanBase* end) {
SkOpSpan* lesser = start->starter(end);
int winding = lesser->windSum();
if (winding == SK_MinS32) {
- SkOpGlobalState* globals = this->globalState();
- SkOpContour* contourHead = globals->contourHead();
- int windTry = 0;
- while (!lesser->sortableTop(contourHead) && ++windTry < SkOpGlobalState::kMaxWindingTries) {
- ;
- }
- winding = lesser->windSum();
+ winding = lesser->computeWindSum();
}
if (winding == SK_MinS32) {
return winding;
diff --git a/src/pathops/SkOpSegment.h b/src/pathops/SkOpSegment.h
index 13b99c6f46..1162c2cfaf 100644
--- a/src/pathops/SkOpSegment.h
+++ b/src/pathops/SkOpSegment.h
@@ -33,11 +33,11 @@ public:
}
SkOpAngle* activeAngle(SkOpSpanBase* start, SkOpSpanBase** startPtr, SkOpSpanBase** endPtr,
- bool* done, bool* sortable);
+ bool* done);
SkOpAngle* activeAngleInner(SkOpSpanBase* start, SkOpSpanBase** startPtr,
- SkOpSpanBase** endPtr, bool* done, bool* sortable);
+ SkOpSpanBase** endPtr, bool* done);
SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr,
- SkOpSpanBase** endPtr, bool* done, bool* sortable);
+ SkOpSpanBase** endPtr, bool* done);
bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xorSuMask,
SkPathOp op);
bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBase* end, SkPathOp op,
@@ -110,6 +110,7 @@ public:
void calcAngles(SkChunkAlloc*);
void checkAngleCoin(SkOpCoincidence* coincidences, SkChunkAlloc* allocator);
void checkNearCoincidence(SkOpAngle* );
+ bool collapsed() const;
static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle,
SkOpAngle::IncludeType );
static void ComputeOneSumReverse(SkOpAngle* baseAngle, SkOpAngle* nextAngle,
@@ -306,11 +307,8 @@ public:
fPrev = prev;
}
- bool setVisited() {
- if (fVisited) {
- return false;
- }
- return (fVisited = true);
+ void setVisited() {
+ fVisited = true;
}
void setUpWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* maxWinding, int* sumWinding) {
@@ -361,6 +359,15 @@ public:
return fVerb;
}
+ // look for two different spans that point to the same opposite segment
+ bool visited() {
+ if (!fVisited) {
+ fVisited = true;
+ return false;
+ }
+ return true;
+ }
+
SkScalar weight() const {
return fWeight;
}
diff --git a/src/pathops/SkOpSpan.cpp b/src/pathops/SkOpSpan.cpp
index 9c9e07f985..e89ec3e204 100755
--- a/src/pathops/SkOpSpan.cpp
+++ b/src/pathops/SkOpSpan.cpp
@@ -249,6 +249,16 @@ tryNextRemainder:
fSpanAdds += span->fSpanAdds;
}
+int SkOpSpan::computeWindSum() {
+ SkOpGlobalState* globals = this->globalState();
+ SkOpContour* contourHead = globals->contourHead();
+ int windTry = 0;
+ while (!this->sortableTop(contourHead) && ++windTry < SkOpGlobalState::kMaxWindingTries) {
+ ;
+ }
+ return this->windSum();
+}
+
bool SkOpSpan::containsCoincidence(const SkOpSegment* segment) const {
SkASSERT(this->segment() != segment);
const SkOpSpan* next = fCoincident;
diff --git a/src/pathops/SkOpSpan.h b/src/pathops/SkOpSpan.h
index 1d535d2635..9b44247341 100644
--- a/src/pathops/SkOpSpan.h
+++ b/src/pathops/SkOpSpan.h
@@ -341,6 +341,7 @@ public:
return true;
}
+ int computeWindSum();
bool containsCoincidence(const SkOpSegment* ) const;
bool containsCoincidence(const SkOpSpan* coin) const {
diff --git a/src/pathops/SkPathOpsCommon.cpp b/src/pathops/SkPathOpsCommon.cpp
index 734b5f0819..98cce15fb2 100644
--- a/src/pathops/SkPathOpsCommon.cpp
+++ b/src/pathops/SkPathOpsCommon.cpp
@@ -11,6 +11,55 @@
#include "SkPathWriter.h"
#include "SkTSort.h"
+const SkOpAngle* AngleWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* windingPtr,
+ bool* sortablePtr) {
+ // find first angle, initialize winding to computed fWindSum
+ SkOpSegment* segment = start->segment();
+ const SkOpAngle* angle = segment->spanToAngle(start, end);
+ if (!angle) {
+ *windingPtr = SK_MinS32;
+ return NULL;
+ }
+ bool computeWinding = false;
+ const SkOpAngle* firstAngle = angle;
+ bool loop = false;
+ bool unorderable = false;
+ int winding = SK_MinS32;
+ do {
+ angle = angle->next();
+ unorderable |= angle->unorderable();
+ if ((computeWinding = unorderable || (angle == firstAngle && loop))) {
+ break; // if we get here, there's no winding, loop is unorderable
+ }
+ loop |= angle == firstAngle;
+ segment = angle->segment();
+ winding = segment->windSum(angle);
+ } while (winding == SK_MinS32);
+ // if the angle loop contains an unorderable span, the angle order may be useless
+ // directly compute the winding in this case for each span
+ if (computeWinding) {
+ firstAngle = angle;
+ winding = SK_MinS32;
+ do {
+ SkOpSpanBase* startSpan = angle->start();
+ SkOpSpanBase* endSpan = angle->end();
+ SkOpSpan* lesser = startSpan->starter(endSpan);
+ int testWinding = lesser->windSum();
+ if (testWinding == SK_MinS32) {
+ testWinding = lesser->computeWindSum();
+ }
+ if (testWinding != SK_MinS32) {
+ segment = angle->segment();
+ winding = testWinding;
+ }
+ angle = angle->next();
+ } while (angle != firstAngle);
+ }
+ *sortablePtr = !unorderable;
+ *windingPtr = winding;
+ return angle;
+}
+
SkOpSegment* FindUndone(SkOpContourHead* contourList, SkOpSpanBase** startPtr,
SkOpSpanBase** endPtr) {
SkOpSegment* result;
@@ -31,14 +80,9 @@ SkOpSegment* FindChase(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase** startPtr,
chase->pop(&span);
SkOpSegment* segment = span->segment();
*startPtr = span->ptT()->next()->span();
- bool sortable = true;
bool done = true;
*endPtr = NULL;
- if (SkOpAngle* last = segment->activeAngle(*startPtr, startPtr, endPtr, &done,
- &sortable)) {
- if (last->unorderable()) {
- continue;
- }
+ if (SkOpAngle* last = segment->activeAngle(*startPtr, startPtr, endPtr, &done)) {
*startPtr = last->start();
*endPtr = last->end();
#if TRY_ROTATE
@@ -51,46 +95,38 @@ SkOpSegment* FindChase(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase** startPtr,
if (done) {
continue;
}
- if (!sortable) {
- continue;
- }
// find first angle, initialize winding to computed wind sum
- const SkOpAngle* angle = segment->spanToAngle(*startPtr, *endPtr);
- if (!angle) {
+ int winding;
+ bool sortable;
+ const SkOpAngle* angle = AngleWinding(*startPtr, *endPtr, &winding, &sortable);
+ if (winding == SK_MinS32) {
continue;
}
- const SkOpAngle* firstAngle = angle;
- bool loop = false;
- int winding = SK_MinS32;
- do {
- angle = angle->next();
- if (angle == firstAngle && loop) {
- break; // if we get here, there's no winding, loop is unorderable
- }
- loop |= angle == firstAngle;
+ int sumWinding SK_INIT_TO_AVOID_WARNING;
+ if (sortable) {
segment = angle->segment();
- winding = segment->windSum(angle);
- } while (winding == SK_MinS32);
- if (winding == SK_MinS32) {
- continue;
+ sumWinding = segment->updateWindingReverse(angle);
}
- int sumWinding = segment->updateWindingReverse(angle);
SkOpSegment* first = NULL;
- firstAngle = angle;
+ const SkOpAngle* firstAngle = angle;
while ((angle = angle->next()) != firstAngle) {
segment = angle->segment();
SkOpSpanBase* start = angle->start();
SkOpSpanBase* end = angle->end();
int maxWinding;
- segment->setUpWinding(start, end, &maxWinding, &sumWinding);
+ if (sortable) {
+ segment->setUpWinding(start, end, &maxWinding, &sumWinding);
+ }
if (!segment->done(angle)) {
- if (!first) {
+ if (!first && (sortable || start->starter(end)->windSum() != SK_MinS32)) {
first = segment;
*startPtr = start;
*endPtr = end;
}
// OPTIMIZATION: should this also add to the chase?
- (void) segment->markAngle(maxWinding, sumWinding, angle);
+ if (sortable) {
+ (void) segment->markAngle(maxWinding, sumWinding, angle);
+ }
}
}
if (first) {
diff --git a/src/pathops/SkPathOpsCommon.h b/src/pathops/SkPathOpsCommon.h
index 25faf8223e..b7fbf38b3d 100644
--- a/src/pathops/SkPathOpsCommon.h
+++ b/src/pathops/SkPathOpsCommon.h
@@ -14,12 +14,14 @@ class SkOpCoincidence;
class SkOpContour;
class SkPathWriter;
+const SkOpAngle* AngleWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* windingPtr,
+ bool* sortable);
void Assemble(const SkPathWriter& path, SkPathWriter* simple);
SkOpSegment* FindChase(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase** startPtr,
SkOpSpanBase** endPtr);
SkOpSpan* FindSortableTop(SkOpContourHead* );
SkOpSegment* FindUndone(SkOpContourHead* , SkOpSpanBase** startPtr,
- SkOpSpanBase** endPtr);
+ SkOpSpanBase** endPtr);
bool SortContourList(SkOpContourHead** , bool evenOdd, bool oppEvenOdd);
bool HandleCoincidence(SkOpContourHead* , SkOpCoincidence* , SkChunkAlloc* );
bool OpDebug(const SkPath& one, const SkPath& two, SkPathOp op, SkPath* result, bool expectSuccess);
diff --git a/src/pathops/SkPathOpsOp.cpp b/src/pathops/SkPathOpsOp.cpp
index f9a4fa3ca6..9c09eaf8f3 100644
--- a/src/pathops/SkPathOpsOp.cpp
+++ b/src/pathops/SkPathOpsOp.cpp
@@ -18,14 +18,9 @@ static SkOpSegment* findChaseOp(SkTDArray<SkOpSpanBase*>& chase, SkOpSpanBase**
// OPTIMIZE: prev makes this compatible with old code -- but is it necessary?
*startPtr = span->ptT()->prev()->span();
SkOpSegment* segment = (*startPtr)->segment();
- bool sortable = true;
bool done = true;
*endPtr = NULL;
- if (SkOpAngle* last = segment->activeAngle(*startPtr, startPtr, endPtr, &done,
- &sortable)) {
- if (last->unorderable()) {
- continue;
- }
+ if (SkOpAngle* last = segment->activeAngle(*startPtr, startPtr, endPtr, &done)) {
*startPtr = last->start();
*endPtr = last->end();
#if TRY_ROTATE
@@ -38,52 +33,43 @@ static SkOpSegment* findChaseOp(SkTDArray<SkOpSpanBase*>& chase, SkOpSpanBase**
if (done) {
continue;
}
- if (!sortable) {
- continue;
- }
- // find first angle, initialize winding to computed fWindSum
- const SkOpAngle* angle = segment->spanToAngle(*startPtr, *endPtr);
- if (!angle) {
- continue;
- }
- const SkOpAngle* firstAngle = angle;
- bool loop = false;
- int winding = SK_MinS32;
- do {
- angle = angle->next();
- if (angle == firstAngle && loop) {
- break; // if we get here, there's no winding, loop is unorderable
- }
- loop |= angle == firstAngle;
- segment = angle->segment();
- winding = segment->windSum(angle);
- } while (winding == SK_MinS32);
+ int winding;
+ bool sortable;
+ const SkOpAngle* angle = AngleWinding(*startPtr, *endPtr, &winding, &sortable);
if (winding == SK_MinS32) {
continue;
}
- int sumMiWinding = segment->updateWindingReverse(angle);
- int sumSuWinding = segment->updateOppWindingReverse(angle);
- if (segment->operand()) {
- SkTSwap<int>(sumMiWinding, sumSuWinding);
+ int sumMiWinding, sumSuWinding;
+ if (sortable) {
+ segment = angle->segment();
+ sumMiWinding = segment->updateWindingReverse(angle);
+ sumSuWinding = segment->updateOppWindingReverse(angle);
+ if (segment->operand()) {
+ SkTSwap<int>(sumMiWinding, sumSuWinding);
+ }
}
SkOpSegment* first = NULL;
- firstAngle = angle;
+ const SkOpAngle* firstAngle = angle;
while ((angle = angle->next()) != firstAngle) {
segment = angle->segment();
SkOpSpanBase* start = angle->start();
SkOpSpanBase* end = angle->end();
int maxWinding, sumWinding, oppMaxWinding, oppSumWinding;
- segment->setUpWindings(start, end, &sumMiWinding, &sumSuWinding,
- &maxWinding, &sumWinding, &oppMaxWinding, &oppSumWinding);
+ if (sortable) {
+ segment->setUpWindings(start, end, &sumMiWinding, &sumSuWinding,
+ &maxWinding, &sumWinding, &oppMaxWinding, &oppSumWinding);
+ }
if (!segment->done(angle)) {
- if (!first) {
+ if (!first && (sortable || start->starter(end)->windSum() != SK_MinS32)) {
first = segment;
*startPtr = start;
*endPtr = end;
}
// OPTIMIZATION: should this also add to the chase?
- (void) segment->markAngle(maxWinding, sumWinding, oppMaxWinding,
- oppSumWinding, angle);
+ if (sortable) {
+ (void) segment->markAngle(maxWinding, sumWinding, oppMaxWinding,
+ oppSumWinding, angle);
+ }
}
}
if (first) {
diff --git a/tests/PathOpsExtendedTest.cpp b/tests/PathOpsExtendedTest.cpp
index de5c6475b6..d2a677784c 100644
--- a/tests/PathOpsExtendedTest.cpp
+++ b/tests/PathOpsExtendedTest.cpp
@@ -331,7 +331,7 @@ static int comparePaths(skiatest::Reporter* reporter, const char* testName, cons
const int MAX_ERRORS = 8;
(void) pathsDrawTheSame(bitmap, scaledOne, scaledTwo, errors2x2);
if (!expectSuccess) {
- if (errors2x2 <= MAX_ERRORS) {
+ if (errors2x2 <= MAX_ERRORS && !flaky) {
REPORTER_ASSERT(reporter, 0);
}
return 0;
@@ -559,7 +559,7 @@ bool testPathOpCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath
bool testPathOpFailCheck(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
const SkPathOp shapeOp, const char* testName) {
- return innerPathOp(reporter, a, b, shapeOp, testName, false, false, false);
+ return innerPathOp(reporter, a, b, shapeOp, testName, false, false, true);
}
bool testPathFailOp(skiatest::Reporter* reporter, const SkPath& a, const SkPath& b,
diff --git a/tests/PathOpsOpTest.cpp b/tests/PathOpsOpTest.cpp
index bab678b8ed..637bd042d2 100644
--- a/tests/PathOpsOpTest.cpp
+++ b/tests/PathOpsOpTest.cpp
@@ -3659,7 +3659,7 @@ static void issue3517(skiatest::Reporter* reporter, const char* filename) {
const char strB[] = "M31.35 57.75L31.35 57.75C31.9 57.7514 32.45 57.7052 33 57.7587C33.55 57.8122 34.1 57.9986 34.65 58.0709C35.2 58.1431 35.75 58.1777 36.3 58.1921C36.85 58.2065 37.4 58.1857 37.95 58.1572C38.5 58.1288 39.05 58.0888 39.6 58.0214C40.15 57.954 40.7 57.7971 41.25 57.7528C41.8 57.7084 42.35 57.7038 42.9 57.7555C43.45 57.8072 44 57.9655 44.55 58.0627C45.1 58.16 45.65 58.2885 46.2 58.3389C46.75 58.3893 47.3 58.3629 47.85 58.3651C48.4 58.3673 48.95 58.356 49.5 58.3522C50.05 58.3484 50.6 58.3447 51.15 58.3421C51.7 58.3395 52.25 58.3399 52.8 58.3366C53.35 58.3333 53.9 58.3269 54.45 58.3224C55 58.318 55.55 58.3084 56.1 58.31C56.65 58.3116 57.2 58.322 57.75 58.332C58.3 58.342 58.85 58.3645 59.4 58.3701C59.95 58.3757 60.5 58.3662 61.05 58.3655C61.6 58.3648 62.15 58.376 62.7 58.366C63.25 58.3559 63.8 58.3269 64.35 58.305C64.9 58.2831 65.45 58.2468 66 58.2345C66.55 58.2222 67.1 58.2353 67.65 58.2313C68.2 58.2272 68.75 58.233 69.3 58.2104C69.85 58.1878 70.4 58.129 70.95 58.0956C71.5 58.0623 72.05 58.0332 72.6 58.0104C73.15 57.9877 73.7 57.955 74.25 57.9592C74.8 57.9635 75.35 57.9932 75.9 58.0359C76.45 58.0787 77 58.1756 77.55 58.2158C78.1 58.256 78.65 58.2837 79.2 58.2772C79.75 58.2707 80.3 58.21 80.85 58.1768C81.4 58.1437 81.95 58.104 82.5 58.0781C83.05 58.0522 83.6 58.0363 84.15 58.0213C84.7 58.0063 85.25 57.9989 85.8 57.9879C86.35 57.977 86.9 57.9589 87.45 57.9556C88 57.9523 88.55 57.9337 89.1 57.9682C89.65 58.0028 90.2 58.1874 90.75 58.163C91.3 58.1387 91.85 57.8912 92.4 57.8224C92.95 57.7535 93.5 57.7621 94.05 57.75C94.6 57.7379 95.15 57.75 95.7 57.75L95.7 57.75L31.35 57.75Z";
SkParsePath::FromSVGString(strB, &pathB);
- testPathOpCheck(reporter, path, pathB, kUnion_SkPathOp, filename, FLAGS_runFail);
+ testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
}
static void cubicOp119(skiatest::Reporter* reporter, const char* filename) {
@@ -5098,7 +5098,7 @@ void loops61i(skiatest::Reporter* reporter, const char* filename) {
pathB.moveTo(1, 5);
pathB.cubicTo(-6.33333302f, 0.666666627f, 8, -1, 0, 1);
pathB.close();
- testPathOpCheck(reporter, path, pathB, kIntersect_SkPathOp, filename, FLAGS_runFail);
+ testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
}
static void loops62i(skiatest::Reporter* reporter, const char* filename) {
@@ -5111,7 +5111,7 @@ static void loops62i(skiatest::Reporter* reporter, const char* filename) {
pathB.moveTo(1, 6);
pathB.cubicTo(-6.33333302f, 1.66666663f, 8, 0, 0, 2);
pathB.close();
- testPathOpCheck(reporter, path, pathB, kIntersect_SkPathOp, filename, FLAGS_runFail);
+ testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
}
static void loops63i(skiatest::Reporter* reporter, const char* filename) {
@@ -5124,7 +5124,7 @@ static void loops63i(skiatest::Reporter* reporter, const char* filename) {
pathB.moveTo(2, 4);
pathB.cubicTo(-4, -0.833333254f, 6, -3, 0, 1);
pathB.close();
- testPathOpCheck(reporter, path, pathB, kIntersect_SkPathOp, filename, FLAGS_runFail);
+ testPathOp(reporter, path, pathB, kIntersect_SkPathOp, filename);
}
static void cubics44d(skiatest::Reporter* reporter, const char* filename) {
@@ -5137,7 +5137,7 @@ static void cubics44d(skiatest::Reporter* reporter, const char* filename) {
pathB.moveTo(1, 3);
pathB.cubicTo(2, 6, 4, 3, 5, 2);
pathB.close();
- testPathOpCheck(reporter, path, pathB, kDifference_SkPathOp, filename, FLAGS_runFail);
+ testPathOp(reporter, path, pathB, kDifference_SkPathOp, filename);
}
static void cubics45u(skiatest::Reporter* reporter, const char* filename) {
@@ -5150,11 +5150,11 @@ static void cubics45u(skiatest::Reporter* reporter, const char* filename) {
pathB.moveTo(3, 4);
pathB.cubicTo(2, 5, 3, 1, 6, 2);
pathB.close();
- testPathOpCheck(reporter, path, pathB, kUnion_SkPathOp, filename, FLAGS_runFail);
+ testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
}
static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0;
-static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
+static void (*firstTest)(skiatest::Reporter* , const char* filename) = loops63i;
static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
#define TEST(name) { name, #name }
@@ -5497,16 +5497,17 @@ static struct TestDesc tests[] = {
static const size_t testCount = SK_ARRAY_COUNT(tests);
static struct TestDesc subTests[] = {
- TEST(cubics45u),
+ TEST(loops47i),
TEST(loops61i),
TEST(loops62i),
+ TEST(issue3517),
};
static const size_t subTestCount = SK_ARRAY_COUNT(subTests);
static void (*firstSubTest)(skiatest::Reporter* , const char* filename) = 0;
-static bool runSubTests = true;
+static bool runSubTests = false;
static bool runSubTestsFirst = true;
static bool runReverse = false;
@@ -5528,7 +5529,7 @@ static void bufferOverflow(skiatest::Reporter* reporter, const char* filename) {
path.addRect(0,0, 300,170141183460469231731687303715884105728.f);
SkPath pathB;
pathB.addRect(0,0, 300,16);
- testPathOpFailCheck(reporter, path, pathB, kUnion_SkPathOp, filename);
+ testPathOp(reporter, path, pathB, kUnion_SkPathOp, filename);
}
// m 100,0 60,170 -160,-110 200,0 -170,11000000000 z
@@ -5548,7 +5549,7 @@ static void fuzz433(skiatest::Reporter* reporter, const char* filename) {
path2.lineTo(-170 + 20,11000000000.0f + 20);
path2.close();
- testPathOpFailCheck(reporter, path1, path2, kIntersect_SkPathOp, filename);
+ testPathOpCheck(reporter, path1, path2, kIntersect_SkPathOp, filename, FLAGS_runFail);
}
static void fuzz433b(skiatest::Reporter* reporter, const char* filename) {
@@ -5571,7 +5572,7 @@ static void fuzz433b(skiatest::Reporter* reporter, const char* filename) {
path2.lineTo(190, 60);
path2.close();
- testPathOpFailCheck(reporter, path1, path2, kUnion_SkPathOp, filename);
+ testPathOpCheck(reporter, path1, path2, kUnion_SkPathOp, filename, FLAGS_runFail);
}
static void fuzz487a(skiatest::Reporter* reporter, const char* filename) {
@@ -5617,7 +5618,7 @@ path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
path.close();
SkPath path2(path);
- testPathOpFailCheck(reporter, path1, path2, (SkPathOp) 2, filename);
+ testPathOpCheck(reporter, path1, path2, (SkPathOp) 2, filename, FLAGS_runFail);
}
static void fuzz487b(skiatest::Reporter* reporter, const char* filename) {
@@ -5663,7 +5664,7 @@ path.lineTo(SkBits2Float(0x432c8000), SkBits2Float(0x42c00000));
path.close();
SkPath path2(path);
- testPathOpFailCheck(reporter, path1, path2, (SkPathOp) 2, filename);
+ testPathOpCheck(reporter, path1, path2, (SkPathOp) 2, filename, FLAGS_runFail);
}
static void fuzz714(skiatest::Reporter* reporter, const char* filename) {
@@ -5689,7 +5690,7 @@ path.lineTo(SkBits2Float(0x43200000), SkBits2Float(0x42700000));
path.close();
SkPath path2(path);
- testPathOpFailCheck(reporter, path1, path2, (SkPathOp) 2, filename);
+ testPathOpCheck(reporter, path1, path2, (SkPathOp) 2, filename, FLAGS_runFail);
}
static void fuzz1(skiatest::Reporter* reporter, const char* filename) {
diff --git a/tests/PathOpsSimplifyTest.cpp b/tests/PathOpsSimplifyTest.cpp
index de08bd81d9..8da3cab389 100644
--- a/tests/PathOpsSimplifyTest.cpp
+++ b/tests/PathOpsSimplifyTest.cpp
@@ -4752,11 +4752,19 @@ static void testTriangle2(skiatest::Reporter* reporter,const char* filename) {
testSimplify(reporter, path, filename);
}
+static void testArc(skiatest::Reporter* reporter,const char* filename) {
+ SkRect r = SkRect::MakeWH(150, 100);
+ SkPath path;
+ path.arcTo(r, 0, 0.0025f, false);
+ testSimplify(reporter, path, filename);
+}
+
static void (*skipTest)(skiatest::Reporter* , const char* filename) = 0;
static void (*firstTest)(skiatest::Reporter* , const char* filename) = 0;
static void (*stopTest)(skiatest::Reporter* , const char* filename) = 0;
static TestDesc tests[] = {
+ TEST(testArc),
TEST(testTriangle2),
TEST(testTriangle1),
TEST(testQuads64),
diff --git a/tools/pathops_sorter.htm b/tools/pathops_sorter.htm
index 3e71f610f2..3411505eb7 100644
--- a/tools/pathops_sorter.htm
+++ b/tools/pathops_sorter.htm
@@ -7,10 +7,9 @@
<div style="height:0">
<div id="sect1">
-SkOpAngle::afterPart {{{3,4}, {2.87721833,4.1227816}, {2.78458726,4.17018661}, {2.72210693,4.16072464}}} id=1
-SkOpAngle::afterPart {{{3,4}, {3.00020218,3.99986529}}} id=3
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=4
-
+{{{6, -3}, {0, 1}}} id=3
+{{{1.6714313f, -1.08141601f}, {2.24979973f, -1.14467525f}, {2.27122664f, -0.514151096f}, {0, 1}}} id=5
+{{{0.001119050197303295135, 0.9992539882659912109}, {4.001119136810302734, 6.999254226684570312}}},
</div>
</div>
diff --git a/tools/pathops_visualizer.htm b/tools/pathops_visualizer.htm
index 8f939313ab..5026ac5344 100644
--- a/tools/pathops_visualizer.htm
+++ b/tools/pathops_visualizer.htm
@@ -2,390 +2,432 @@
<head>
<div height="0" hidden="true">
-<div id="cubics45u_release">
-seg=-1 {{{1, 3}, {1.84861219f, 5.54583645f}, {3.41736698f, 3.77081728f}, {4.48402119f, 2.56391668f}}}
-seg=-1 {{{4.48402119f, 2.56391668f}, {4.67430639f, 2.34861207f}, {4.84861231f, 2.15138769f}, {5, 2}}}
-seg=-1 {{{5, 2}, {1, 3}}}
-op union
-seg=-1 {{{3, 4}, {2.61882615f, 4.38117361f}, {2.52823925f, 4.03588009f}, {2.7282393f, 3.51794004f}}}
-seg=-1 {{{2.7282393f, 3.51794004f}, {3.05293441f, 2.67707705f}, {4.14352131f, 1.38117373f}, {6, 2}}}
-seg=-1 {{{6, 2}, {3, 4}}}
-debugShowCubicIntersection wtTs[0]=1 {{{3,4}, {2.61882615,4.38117361}, {2.52823925,4.03588009}, {2.7282393,3.51794004}}} {{2.7282393,3.51794004}} wnTs[0]=0 {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}}
-debugShowCubicLineIntersection wtTs[0]=0 {{{3,4}, {2.61882615,4.38117361}, {2.52823925,4.03588009}, {2.7282393,3.51794004}}} {{3,4}} wnTs[0]=1 {{{6,2}, {3,4}}}
-debugShowCubicLineIntersection wtTs[0]=1 {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{6,2}} wnTs[0]=0 {{{6,2}, {3,4}}}
-debugShowCubicIntersection wtTs[0]=0 {{{3,4}, {2.61882615,4.38117361}, {2.52823925,4.03588009}, {2.7282393,3.51794004}}} {{3,4}} wtTs[1]=0.322114632 {{2.72210693,4.16072464}} wnTs[0]=0.589197 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} wnTs[1]=0.516302729
-SkOpSegment::addT insert t=0.589197265 segID=-1 spanID=-1
-SkOpSegment::addT insert t=0.322114632 segID=-1 spanID=-1
-SkOpSegment::addT insert t=0.516302729 segID=-1 spanID=-1
-debugShowCubicIntersection no intersect {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}}
-debugShowCubicIntersection no intersect {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}}
-debugShowCubicLineIntersection wtTs[0]=0.437504678 {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{3.5942049,2.35144877}} wnTs[0]=0.351449 {{{5,2}, {1,3}}}
-SkOpSegment::addT insert t=0.437504678 segID=-1 spanID=-1
-SkOpSegment::addT insert t=0.351448746 segID=-1 spanID=-1
-debugShowCubicLineIntersection wtTs[0]=0.589250227 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} {{3.00020218,3.99986529}} wnTs[0]=0.999933 {{{6,2}, {3,4}}}
-SkOpSegment::addT insert t=0.999932596 segID=-1 spanID=-1
-SkOpSegment::addT insert t=0.589250227 segID=-1 spanID=-1
-debugShowCubicLineIntersection no intersect {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}} {{{6,2}, {3,4}}}
-debugShowLineIntersection no intersect {{{6,2}, {3,4}}} {{{5,2}, {1,3}}}
-debugShowCubicIntersection wtTs[0]=1 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} {{4.48402119,2.56391668}} wnTs[0]=0 {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}}
-debugShowCubicLineIntersection wtTs[0]=0 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} {{1,3}} wnTs[0]=1 {{{5,2}, {1,3}}}
-debugShowCubicLineIntersection wtTs[0]=1 {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}} {{5,2}} wnTs[0]=0 {{{5,2}, {1,3}}}
-SkOpSegment::sortAngles [-1] tStart=0 [-1]
-SkOpAngle::after [-1/-1] 18/17 tStart=0 tEnd=0.322114632 < [-1/-1] 1/1 tStart=0.589197265 tEnd=0.589250227 < [-1/-1] 17/17 tStart=0.589197265 tEnd=0.516302729 T 5
-SkOpAngle::afterPart {{{3,4}, {2.87721833,4.1227816}, {2.78458726,4.17018661}, {2.72210693,4.16072464}}} id=-1
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=-1
-SkOpAngle::afterPart {{{3,4}, {2.9072112,4.06185918}, {2.81442231,4.11606536}, {2.72210693,4.16072464}}} id=-1
-SkOpAngle::after [-1/-1] 18/17 tStart=0 tEnd=0.322114632 < [-1/-1] 1/1 tStart=1 tEnd=0.999932596 < [-1/-1] 1/1 tStart=0.589197265 tEnd=0.589250227 F 11
-SkOpAngle::afterPart {{{3,4}, {2.87721833,4.1227816}, {2.78458726,4.17018661}, {2.72210693,4.16072464}}} id=-1
-SkOpAngle::afterPart {{{3,4}, {3.00020218,3.99986529}}} id=-1
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=-1
-SkOpAngle::after [-1/-1] 1/1 tStart=0.589197265 tEnd=0.589250227 < [-1/-1] 1/1 tStart=1 tEnd=0.999932596 < [-1/-1] 17/17 tStart=0.589197265 tEnd=0.516302729 T 12
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=-1
-SkOpAngle::afterPart {{{3,4}, {3.00020218,3.99986529}}} id=-1
-SkOpAngle::afterPart {{{3,4}, {2.9072112,4.06185918}, {2.81442231,4.11606536}, {2.72210693,4.16072464}}} id=-1
-SkOpSegment::sortAngles [-1] tStart=0.322114632 [-1]
-SkOpAngle::after [-1/-1] 29/1 tStart=0.322114632 tEnd=0 < [-1/-1] 17/13 tStart=0.516302729 tEnd=0 < [-1/-1] 13/5 tStart=0.322114632 tEnd=1 F 11
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.78458726,4.17018661}, {2.87721833,4.1227816}, {3,4}}} id=-1
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.06824885,4.47704065}, {1.43814079,4.31442231}, {1,3}}} id=-1
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.59061803,4.14081206}, {2.59266219,3.86904402}, {2.7282393,3.51794004}}} id=-1
-SkOpAngle::after [-1/-1] 29/1 tStart=0.322114632 tEnd=0 < [-1/-1] 1/1 tStart=0.516302729 tEnd=0.589197265 < [-1/-1] 13/5 tStart=0.322114632 tEnd=1 T 12
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.78458726,4.17018661}, {2.87721833,4.1227816}, {3,4}}} id=-1
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.81442231,4.11606536}, {2.9072112,4.06185918}, {3,4}}} id=-1
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.59061803,4.14081206}, {2.59266219,3.86904402}, {2.7282393,3.51794004}}} id=-1
-SkOpSegment::sortAngles [-1] tStart=0.437504678 [-1]
-SkOpAngle::after [-1/-1] 17/21 tStart=0.437504678 tEnd=0 < [-1/-1] 1/1 tStart=0.351448746 tEnd=0 < [-1/-1] 1/1 tStart=0.437504678 tEnd=1 T 11
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {3.15895005,2.69507766}, {2.87029493,3.15005855}, {2.7282393,3.51794004}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {5,2}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {4.15380764,1.9096486}, {4.95573942,1.65191312}, {6,2}}} id=-1
-SkOpAngle::after [-1/-1] 17/21 tStart=0.437504678 tEnd=0 < [-1/-1] 17/17 tStart=0.351448746 tEnd=1 < [-1/-1] 1/1 tStart=0.351448746 tEnd=0 F 12
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {3.15895005,2.69507766}, {2.87029493,3.15005855}, {2.7282393,3.51794004}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {1,3}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {5,2}}} id=-1
-SkOpAngle::after [-1/-1] 1/1 tStart=0.351448746 tEnd=0 < [-1/-1] 17/17 tStart=0.351448746 tEnd=1 < [-1/-1] 1/1 tStart=0.437504678 tEnd=1 F 5
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {5,2}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {1,3}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {4.15380764,1.9096486}, {4.95573942,1.65191312}, {6,2}}} id=-1
-SkOpAngle::after [-1/-1] 1/1 tStart=0.437504678 tEnd=1 < [-1/-1] 17/17 tStart=0.351448746 tEnd=1 < [-1/-1] 17/21 tStart=0.437504678 tEnd=0 T 11
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {4.15380764,1.9096486}, {4.95573942,1.65191312}, {6,2}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {1,3}}} id=-1
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {3.15895005,2.69507766}, {2.87029493,3.15005855}, {2.7282393,3.51794004}}} id=-1
-SkOpSegment::sortAngles [-1] tStart=0.999932596 [-1]
-SkOpAngle::after [-1/-1] 1/1 tStart=0.999932596 tEnd=0 < [-1/-1] 17/17 tStart=0.589250227 tEnd=0.589197265 < [-1/-1] 17/17 tStart=0.999932596 tEnd=1 T 11
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {6,2}}} id=-1
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3.00013476,3.99991025}, {3.00006742,3.99995506}, {3,4}}} id=-1
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3,4}}} id=-1
-SkOpAngle::after [-1/-1] 1/1 tStart=0.999932596 tEnd=0 < [-1/-1] 1/1 tStart=0.589250227 tEnd=1 < [-1/-1] 17/17 tStart=0.589250227 tEnd=0.589197265 T 12
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {6,2}}} id=-1
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3.52305312,3.65123542}, {4.04589321,3.05965083}, {4.48402119,2.56391668}}} id=-1
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3.00013476,3.99991025}, {3.00006742,3.99995506}, {3,4}}} id=-1
-SkOpSegment::sortAngles [-1] tStart=1 [-1]
-SkOpSegment::sortAngles [-1] tStart=0.516302729 [-1]
-SkOpSegment::sortAngles [-1] tStart=0.589197265 [-1]
-SkOpSegment::sortAngles [-1] tStart=0.589250227 [-1]
-SkOpSegment::sortAngles [-1] tStart=0.351448746 [-1]
-SkOpSegment::debugShowActiveSpans id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 (3,4) tEnd=0.322114632 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 (2.72210693,4.16072464) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 (2.7282393,3.51794004) tEnd=0.437504678 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 (3.5942049,2.35144877) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (6,2 3,4) t=0 (6,2) tEnd=0.999932596 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (6,2 3,4) t=0.999932596 (3.00020218,3.99986529) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 (1,3) tEnd=0.516302729 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 (2.72210693,4.16072464) tEnd=0.589197265 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589197265 (3,4) tEnd=0.589250227 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 (3.00020218,3.99986529) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 (4.48402119,2.56391668) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (5,2 1,3) t=0 (5,2) tEnd=0.351448746 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=-1 (5,2 1,3) t=0.351448746 (3.5942049,2.35144877) tEnd=1 windSum=? windValue=1
-SkOpSpan::sortableTop dir=kTop seg=-1 t=0.161057316 pt=(2.83844042,4.12995338)
-SkOpSpan::sortableTop [0] valid=1 operand=0 span=-1 ccw=0 seg=-1 {{{5, 2}, {1, 3}}} t=0.540389895 pt=(2.83844042,2.54039001) slope=(-4,1)
-SkOpSpan::sortableTop [1] valid=1 operand=1 span=-1 ccw=1 seg=-1 {{{2.7282393f, 3.51794004f}, {3.05293441f, 2.67707705f}, {4.14352131f, 1.38117373f}, {6, 2}}} t=0.0928134153 pt=(2.83844042,3.27394509) slope=(1.40059553,-2.71475011)
-SkOpSpan::sortableTop [2] valid=1 operand=0 span=-1 ccw=1 seg=-1 {{{1, 3}, {1.84861219f, 5.54583645f}, {3.41736698f, 3.77081728f}, {4.48402119f, 2.56391668f}}} t=0.546866125 pt=(2.83844042,4.09965467) slope=(3.81218461,-2.15374068)
-SkOpSpan::sortableTop [3] valid=1 operand=1 span=-1 ccw=0 seg=-1 {{{3, 4}, {2.61882615f, 4.38117361f}, {2.52823925f, 4.03588009f}, {2.7282393f, 3.51794004f}}} t=0.161057316 pt=(2.83844042,4.12995338) slope=(-0.862714624,0.484601174)
-SkOpSegment::markWinding id=-1 (5,2 1,3) t=0.351448746 [-1] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 [-1] (1,3) tEnd=0.516302729 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (5,2 1,3) t=0.351448746 [-1] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 [-1] (2.7282393,3.51794004) tEnd=0.437504678 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 [-1] (2.7282393,3.51794004) tEnd=0.437504678 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 [-1] (2.72210693,4.16072464) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 [-1] (2.72210693,4.16072464) tEnd=0.589197265 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 [-1] (2.72210693,4.16072464) tEnd=0.589197265 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 [-1] (3,4) tEnd=0.322114632 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 [-1] (3,4) tEnd=0.322114632 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::activeOp id=-1 t=0.322114632 tEnd=0 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
-SkOpSegment::markWinding id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589197265 [-1] (3,4) tEnd=0.589250227 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=-1 span=-1 windSum=?
-SkOpSegment::markWinding id=-1 (6,2 3,4) t=0.999932596 [-1] (3.00020218,3.99986529) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=-1 span=-1 windSum=-1
-SkOpSegment::findNextOp
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=18/17 s=0 [-1] e=0.322114632 [-1] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=0 operand
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=1/1 s=0.589197265 [-1] e=0.589250227 [-1] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=1/1 s=1 [-1] e=0.999932596 [-1] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=1 operand
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=17/17 s=0.589197265 [-1] e=0.516302729 [-1] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=-1
-SkOpSegment::activeOp id=-1 t=0.589197265 tEnd=0.589250227 op=union miFrom=0 miTo=1 suFrom=0 suTo=0 result=1
-SkOpSegment::findNextOp chase.append segment=-1 span=-1 windSum=-2147483647
-SkOpSegment::activeOp id=-1 t=1 tEnd=0.999932596 op=union miFrom=1 miTo=1 suFrom=0 suTo=1 result=0
-SkOpSegment::markDone id=-1 (6,2 3,4) t=0.999932596 [-1] (3.00020218,3.99986529) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::findNextOp chase.append segment=-1 span=-1 windSum=-1
-SkOpSegment::activeOp id=-1 t=0.589197265 tEnd=0.516302729 op=union miFrom=1 miTo=0 suFrom=1 suTo=1 result=0
-SkOpSegment::markDone id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 [-1] (2.72210693,4.16072464) tEnd=0.589197265 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markDone id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 [-1] (3,4) tEnd=0.322114632 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::findNextOp from:[-1] to:[-1] start=7083452 end=7084028
-bridgeOp current id=-1 from=(2.72210693,4.16072464) to=(3,4)
-path.moveTo(2.72210693,4.16072464);
-path.cubicTo(2.78458714,4.17018652, 2.87721825,4.12278175, 3,4);
-SkOpSegment::markDone id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589197265 [-1] (3,4) tEnd=0.589250227 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (6,2 3,4) t=0 [-1] (6,2) tEnd=0.999932596 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 [-1] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=-1 span=-1 windSum=1
-SkOpSegment::markWinding id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 [-1] (3.00020218,3.99986529) tEnd=1 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 [-1] (4.48402119,2.56391668) tEnd=1 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=-1 (5,2 1,3) t=0 [-1] (5,2) tEnd=0.351448746 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=-1 span=-1 windSum=1
-SkOpSegment::debugShowActiveSpans id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 (2.72210693,4.16072464) tEnd=1 windSum=-1 oppSum=1 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 (2.7282393,3.51794004) tEnd=0.437504678 windSum=-1 oppSum=1 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 (3.5942049,2.35144877) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (6,2 3,4) t=0 (6,2) tEnd=0.999932596 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 (1,3) tEnd=0.516302729 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 (3.00020218,3.99986529) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 (4.48402119,2.56391668) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (5,2 1,3) t=0 (5,2) tEnd=0.351448746 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=-1 (5,2 1,3) t=0.351448746 (3.5942049,2.35144877) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::activeOp id=-1 t=0.999932596 tEnd=0 op=union miFrom=0 miTo=0 suFrom=1 suTo=0 result=1
-SkOpSegment::findNextOp simple
-SkOpSegment::markDone id=-1 (6,2 3,4) t=0 [-1] (6,2) tEnd=0.999932596 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-bridgeOp current id=-1 from=(3.00020218,3.99986529) to=(6,2)
-SkOpSegment::findNextOp
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=1/1 s=0.437504678 [-1] e=1 [-1] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0 operand
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=17/17 s=0.351448746 [-1] e=1 [-1] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=17/21 s=0.437504678 [-1] e=0 [-1] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=1 operand
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=1/1 s=0.351448746 [-1] e=0 [-1] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpSegment::activeOp id=-1 t=0.351448746 tEnd=1 op=union miFrom=0 miTo=1 suFrom=1 suTo=1 result=0
-SkOpSegment::markDone id=-1 (5,2 1,3) t=0.351448746 [-1] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markDone id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 [-1] (1,3) tEnd=0.516302729 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::activeOp id=-1 t=0.437504678 tEnd=0 op=union miFrom=1 miTo=1 suFrom=1 suTo=0 result=0
-SkOpSegment::markDone id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 [-1] (2.7282393,3.51794004) tEnd=0.437504678 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markDone id=-1 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 [-1] (2.72210693,4.16072464) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::activeOp id=-1 t=0.351448746 tEnd=0 op=union miFrom=1 miTo=0 suFrom=0 suTo=0 result=1
-SkOpSegment::markDone id=-1 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 [-1] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::findNextOp from:[-1] to:[-1] start=7083836 end=7082508
-bridgeOp current id=-1 from=(6,2) to=(3.5942049,2.35144877)
-path.moveTo(3.00020218,3.99986529);
-path.lineTo(6,2);
-path.cubicTo(4.9557395,1.65191317, 4.15380764,1.90964866, 3.5942049,2.35144877);
-SkOpSegment::findNextOp simple
-SkOpSegment::markDone id=-1 (5,2 1,3) t=0 [-1] (5,2) tEnd=0.351448746 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-bridgeOp current id=-1 from=(3.5942049,2.35144877) to=(5,2)
-SkOpSegment::findNextOp simple
-SkOpSegment::markDone id=-1 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 [-1] (4.48402119,2.56391668) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-bridgeOp current id=-1 from=(5,2) to=(4.48402119,2.56391668)
-path.lineTo(5,2);
-path.cubicTo(4.84861231,2.15138769, 4.67430639,2.34861207, 4.48402119,2.56391668);
-SkOpSegment::findNextOp
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=1/1 s=0.589250227 [-1] e=1 [-1] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=17/17 s=0.589250227 [-1] e=0.589197265 [-1] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0 done unorderable
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=17/17 s=0.999932596 [-1] e=1 [-1] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=1 done unorderable operand
-SkOpAngle::dumpOne [-1/-1] next=-1/-1 sect=1/1 s=0.999932596 [-1] e=0 [-1] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0 done operand
-SkOpSegment::activeOp id=-1 t=0.589250227 tEnd=0.589197265 op=union miFrom=1 miTo=0 suFrom=0 suTo=0 result=1
-SkOpSegment::activeOp id=-1 t=0.999932596 tEnd=1 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
-SkOpSegment::activeOp id=-1 t=0.999932596 tEnd=0 op=union miFrom=0 miTo=0 suFrom=1 suTo=0 result=1
-SkOpSegment::markDone id=-1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 [-1] (3.00020218,3.99986529) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::findNextOp from:[-1] to:[-1] start=7083932 end=7083244
-bridgeOp current id=-1 from=(4.48402119,2.56391668) to=(3.00020218,3.99986529)
-path.cubicTo(4.04589319,3.0596509, 3.52305317,3.65123534, 3.00020218,3.99986529);
-path.close();
-</div>
-
-<div id="cubics45u_debug">
-seg=1 {{{1, 3}, {1.84861219f, 5.54583645f}, {3.41736698f, 3.77081728f}, {4.48402119f, 2.56391668f}}}
-seg=2 {{{4.48402119f, 2.56391668f}, {4.67430639f, 2.34861207f}, {4.84861231f, 2.15138769f}, {5, 2}}}
-seg=3 {{{5, 2}, {1, 3}}}
-op union
-seg=4 {{{3, 4}, {2.61882615f, 4.38117361f}, {2.52823925f, 4.03588009f}, {2.7282393f, 3.51794004f}}}
-seg=5 {{{2.7282393f, 3.51794004f}, {3.05293441f, 2.67707705f}, {4.14352131f, 1.38117373f}, {6, 2}}}
-seg=6 {{{6, 2}, {3, 4}}}
-debugShowCubicIntersection wtTs[0]=1 {{{3,4}, {2.61882615,4.38117361}, {2.52823925,4.03588009}, {2.7282393,3.51794004}}} {{2.7282393,3.51794004}} wnTs[0]=0 {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}}
-debugShowCubicLineIntersection wtTs[0]=0 {{{3,4}, {2.61882615,4.38117361}, {2.52823925,4.03588009}, {2.7282393,3.51794004}}} {{3,4}} wnTs[0]=1 {{{6,2}, {3,4}}}
-debugShowCubicLineIntersection wtTs[0]=1 {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{6,2}} wnTs[0]=0 {{{6,2}, {3,4}}}
-debugShowCubicIntersection wtTs[0]=0 {{{3,4}, {2.61882615,4.38117361}, {2.52823925,4.03588009}, {2.7282393,3.51794004}}} {{3,4}} wtTs[1]=0.322114632 {{2.72210693,4.16072464}} wnTs[0]=0.589197 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} wnTs[1]=0.516302729
-SkOpSegment::addT insert t=0.589197265 segID=1 spanID=13
-SkOpSegment::addT insert t=0.322114632 segID=4 spanID=14
-SkOpSegment::addT insert t=0.516302729 segID=1 spanID=15
-debugShowCubicIntersection no intersect {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}}
-debugShowCubicIntersection no intersect {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}}
-debugShowCubicLineIntersection wtTs[0]=0.437504678 {{{2.7282393,3.51794004}, {3.05293441,2.67707705}, {4.14352131,1.38117373}, {6,2}}} {{3.5942049,2.35144877}} wnTs[0]=0.351449 {{{5,2}, {1,3}}}
-SkOpSegment::addT insert t=0.437504678 segID=5 spanID=16
-SkOpSegment::addT insert t=0.351448746 segID=3 spanID=17
-debugShowCubicLineIntersection wtTs[0]=0.589250227 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} {{3.00020218,3.99986529}} wnTs[0]=0.999933 {{{6,2}, {3,4}}}
-SkOpSegment::addT insert t=0.999932596 segID=6 spanID=18
-SkOpSegment::addT insert t=0.589250227 segID=1 spanID=19
-debugShowCubicLineIntersection no intersect {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}} {{{6,2}, {3,4}}}
-debugShowLineIntersection no intersect {{{6,2}, {3,4}}} {{{5,2}, {1,3}}}
-debugShowCubicIntersection wtTs[0]=1 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} {{4.48402119,2.56391668}} wnTs[0]=0 {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}}
-debugShowCubicLineIntersection wtTs[0]=0 {{{1,3}, {1.84861219,5.54583645}, {3.41736698,3.77081728}, {4.48402119,2.56391668}}} {{1,3}} wnTs[0]=1 {{{5,2}, {1,3}}}
-debugShowCubicLineIntersection wtTs[0]=1 {{{4.48402119,2.56391668}, {4.67430639,2.34861207}, {4.84861231,2.15138769}, {5,2}}} {{5,2}} wnTs[0]=0 {{{5,2}, {1,3}}}
-SkOpSegment::sortAngles [4] tStart=0 [7]
-SkOpAngle::after [4/1] 18/17 tStart=0 tEnd=0.322114632 < [1/12] 1/1 tStart=0.589197265 tEnd=0.589250227 < [1/11] 17/17 tStart=0.589197265 tEnd=0.516302729 T 5
-SkOpAngle::afterPart {{{3,4}, {2.87721833,4.1227816}, {2.78458726,4.17018661}, {2.72210693,4.16072464}}} id=4
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=1
-SkOpAngle::afterPart {{{3,4}, {2.9072112,4.06185918}, {2.81442231,4.11606536}, {2.72210693,4.16072464}}} id=1
-SkOpAngle::after [4/1] 18/17 tStart=0 tEnd=0.322114632 < [6/8] 1/1 tStart=1 tEnd=0.999932596 < [1/12] 1/1 tStart=0.589197265 tEnd=0.589250227 F 11
-SkOpAngle::afterPart {{{3,4}, {2.87721833,4.1227816}, {2.78458726,4.17018661}, {2.72210693,4.16072464}}} id=4
-SkOpAngle::afterPart {{{3,4}, {3.00020218,3.99986529}}} id=6
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=1
-SkOpAngle::after [1/12] 1/1 tStart=0.589197265 tEnd=0.589250227 < [6/8] 1/1 tStart=1 tEnd=0.999932596 < [1/11] 17/17 tStart=0.589197265 tEnd=0.516302729 T 12
-SkOpAngle::afterPart {{{3,4}, {3.00006742,3.99995506}, {3.00013476,3.99991025}, {3.00020218,3.99986529}}} id=1
-SkOpAngle::afterPart {{{3,4}, {3.00020218,3.99986529}}} id=6
-SkOpAngle::afterPart {{{3,4}, {2.9072112,4.06185918}, {2.81442231,4.11606536}, {2.72210693,4.16072464}}} id=1
-SkOpSegment::sortAngles [4] tStart=0.322114632 [14]
-SkOpAngle::after [4/2] 29/1 tStart=0.322114632 tEnd=0 < [1/9] 17/13 tStart=0.516302729 tEnd=0 < [4/3] 13/5 tStart=0.322114632 tEnd=1 F 11
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.78458726,4.17018661}, {2.87721833,4.1227816}, {3,4}}} id=4
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.06824885,4.47704065}, {1.43814079,4.31442231}, {1,3}}} id=1
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.59061803,4.14081206}, {2.59266219,3.86904402}, {2.7282393,3.51794004}}} id=4
-SkOpAngle::after [4/2] 29/1 tStart=0.322114632 tEnd=0 < [1/10] 1/1 tStart=0.516302729 tEnd=0.589197265 < [4/3] 13/5 tStart=0.322114632 tEnd=1 T 12
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.78458726,4.17018661}, {2.87721833,4.1227816}, {3,4}}} id=4
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.81442231,4.11606536}, {2.9072112,4.06185918}, {3,4}}} id=1
-SkOpAngle::afterPart {{{2.72210693,4.16072464}, {2.59061803,4.14081206}, {2.59266219,3.86904402}, {2.7282393,3.51794004}}} id=4
-SkOpSegment::sortAngles [5] tStart=0.437504678 [16]
-SkOpAngle::after [5/4] 17/21 tStart=0.437504678 tEnd=0 < [3/15] 1/1 tStart=0.351448746 tEnd=0 < [5/5] 1/1 tStart=0.437504678 tEnd=1 T 11
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {3.15895005,2.69507766}, {2.87029493,3.15005855}, {2.7282393,3.51794004}}} id=5
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {5,2}}} id=3
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {4.15380764,1.9096486}, {4.95573942,1.65191312}, {6,2}}} id=5
-SkOpAngle::after [5/4] 17/21 tStart=0.437504678 tEnd=0 < [3/16] 17/17 tStart=0.351448746 tEnd=1 < [3/15] 1/1 tStart=0.351448746 tEnd=0 F 12
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {3.15895005,2.69507766}, {2.87029493,3.15005855}, {2.7282393,3.51794004}}} id=5
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {1,3}}} id=3
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {5,2}}} id=3
-SkOpAngle::after [3/15] 1/1 tStart=0.351448746 tEnd=0 < [3/16] 17/17 tStart=0.351448746 tEnd=1 < [5/5] 1/1 tStart=0.437504678 tEnd=1 F 5
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {5,2}}} id=3
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {1,3}}} id=3
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {4.15380764,1.9096486}, {4.95573942,1.65191312}, {6,2}}} id=5
-SkOpAngle::after [5/5] 1/1 tStart=0.437504678 tEnd=1 < [3/16] 17/17 tStart=0.351448746 tEnd=1 < [5/4] 17/21 tStart=0.437504678 tEnd=0 T 11
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {4.15380764,1.9096486}, {4.95573942,1.65191312}, {6,2}}} id=5
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {1,3}}} id=3
-SkOpAngle::afterPart {{{3.5942049,2.35144877}, {3.15895005,2.69507766}, {2.87029493,3.15005855}, {2.7282393,3.51794004}}} id=5
-SkOpSegment::sortAngles [6] tStart=0.999932596 [18]
-SkOpAngle::after [6/6] 1/1 tStart=0.999932596 tEnd=0 < [1/13] 17/17 tStart=0.589250227 tEnd=0.589197265 < [6/7] 17/17 tStart=0.999932596 tEnd=1 T 11
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {6,2}}} id=6
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3.00013476,3.99991025}, {3.00006742,3.99995506}, {3,4}}} id=1
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3,4}}} id=6
-SkOpAngle::after [6/6] 1/1 tStart=0.999932596 tEnd=0 < [1/14] 1/1 tStart=0.589250227 tEnd=1 < [1/13] 17/17 tStart=0.589250227 tEnd=0.589197265 T 12
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {6,2}}} id=6
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3.52305312,3.65123542}, {4.04589321,3.05965083}, {4.48402119,2.56391668}}} id=1
-SkOpAngle::afterPart {{{3.00020218,3.99986529}, {3.00013476,3.99991025}, {3.00006742,3.99995506}, {3,4}}} id=1
-SkOpSegment::sortAngles [6] tStart=1 [12]
-SkOpSegment::sortAngles [1] tStart=0.516302729 [15]
-SkOpSegment::sortAngles [1] tStart=0.589197265 [13]
-SkOpSegment::sortAngles [1] tStart=0.589250227 [19]
-SkOpSegment::sortAngles [3] tStart=0.351448746 [17]
-SkOpSegment::debugShowActiveSpans id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 (3,4) tEnd=0.322114632 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 (2.72210693,4.16072464) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 (2.7282393,3.51794004) tEnd=0.437504678 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 (3.5942049,2.35144877) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=6 (6,2 3,4) t=0 (6,2) tEnd=0.999932596 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=6 (6,2 3,4) t=0.999932596 (3.00020218,3.99986529) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 (1,3) tEnd=0.516302729 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 (2.72210693,4.16072464) tEnd=0.589197265 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589197265 (3,4) tEnd=0.589250227 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 (3.00020218,3.99986529) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=2 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 (4.48402119,2.56391668) tEnd=1 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=3 (5,2 1,3) t=0 (5,2) tEnd=0.351448746 windSum=? windValue=1
-SkOpSegment::debugShowActiveSpans id=3 (5,2 1,3) t=0.351448746 (3.5942049,2.35144877) tEnd=1 windSum=? windValue=1
-SkOpSpan::sortableTop dir=kTop seg=4 t=0.161057316 pt=(2.83844042,4.12995338)
-SkOpSpan::sortableTop [0] valid=1 operand=0 span=17 ccw=0 seg=3 {{{5, 2}, {1, 3}}} t=0.540389895 pt=(2.83844042,2.54039001) slope=(-4,1)
-SkOpSpan::sortableTop [1] valid=1 operand=1 span=9 ccw=1 seg=5 {{{2.7282393f, 3.51794004f}, {3.05293441f, 2.67707705f}, {4.14352131f, 1.38117373f}, {6, 2}}} t=0.0928134153 pt=(2.83844042,3.27394509) slope=(1.40059553,-2.71475011)
-SkOpSpan::sortableTop [2] valid=1 operand=0 span=15 ccw=1 seg=1 {{{1, 3}, {1.84861219f, 5.54583645f}, {3.41736698f, 3.77081728f}, {4.48402119f, 2.56391668f}}} t=0.546866125 pt=(2.83844042,4.09965467) slope=(3.81218461,-2.15374068)
-SkOpSpan::sortableTop [3] valid=1 operand=1 span=7 ccw=0 seg=4 {{{3, 4}, {2.61882615f, 4.38117361f}, {2.52823925f, 4.03588009f}, {2.7282393f, 3.51794004f}}} t=0.161057316 pt=(2.83844042,4.12995338) slope=(-0.862714624,0.484601174)
-SkOpSegment::markWinding id=3 (5,2 1,3) t=0.351448746 [17] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 [1] (1,3) tEnd=0.516302729 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=3 (5,2 1,3) t=0.351448746 [17] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 [9] (2.7282393,3.51794004) tEnd=0.437504678 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 [9] (2.7282393,3.51794004) tEnd=0.437504678 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 [14] (2.72210693,4.16072464) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 [15] (2.72210693,4.16072464) tEnd=0.589197265 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 [15] (2.72210693,4.16072464) tEnd=0.589197265 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 [7] (3,4) tEnd=0.322114632 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 [7] (3,4) tEnd=0.322114632 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::activeOp id=4 t=0.322114632 tEnd=0 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
-SkOpSegment::markWinding id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589197265 [13] (3,4) tEnd=0.589250227 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=1 span=19 windSum=?
-SkOpSegment::markWinding id=6 (6,2 3,4) t=0.999932596 [18] (3.00020218,3.99986529) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=6 span=18 windSum=-1
-SkOpSegment::findNextOp
-SkOpAngle::dumpOne [4/1] next=1/12 sect=18/17 s=0 [7] e=0.322114632 [14] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=0 operand
-SkOpAngle::dumpOne [1/12] next=6/8 sect=1/1 s=0.589197265 [13] e=0.589250227 [19] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpAngle::dumpOne [6/8] next=1/11 sect=1/1 s=1 [12] e=0.999932596 [18] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=1 operand
-SkOpAngle::dumpOne [1/11] next=4/1 sect=17/17 s=0.589197265 [13] e=0.516302729 [15] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=-1
-SkOpSegment::activeOp id=1 t=0.589197265 tEnd=0.589250227 op=union miFrom=0 miTo=1 suFrom=0 suTo=0 result=1
-SkOpSegment::findNextOp chase.append segment=1 span=19 windSum=-2147483647
-SkOpSegment::activeOp id=6 t=1 tEnd=0.999932596 op=union miFrom=1 miTo=1 suFrom=0 suTo=1 result=0
-SkOpSegment::markDone id=6 (6,2 3,4) t=0.999932596 [18] (3.00020218,3.99986529) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::findNextOp chase.append segment=6 span=18 windSum=-1
-SkOpSegment::activeOp id=1 t=0.589197265 tEnd=0.516302729 op=union miFrom=1 miTo=0 suFrom=1 suTo=1 result=0
-SkOpSegment::markDone id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.516302729 [15] (2.72210693,4.16072464) tEnd=0.589197265 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markDone id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0 [7] (3,4) tEnd=0.322114632 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::findNextOp from:[4] to:[1] start=11952148 end=11952772
-bridgeOp current id=4 from=(2.72210693,4.16072464) to=(3,4)
-path.moveTo(2.72210693,4.16072464);
-path.cubicTo(2.78458714,4.17018652, 2.87721825,4.12278175, 3,4);
-SkOpSegment::markDone id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589197265 [13] (3,4) tEnd=0.589250227 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markWinding id=6 (6,2 3,4) t=0 [11] (6,2) tEnd=0.999932596 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 [16] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=5 span=16 windSum=1
-SkOpSegment::markWinding id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 [19] (3.00020218,3.99986529) tEnd=1 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=2 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 [3] (4.48402119,2.56391668) tEnd=1 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markWinding id=3 (5,2 1,3) t=0 [5] (5,2) tEnd=0.351448746 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
-SkOpSegment::markAngle last segment=3 span=17 windSum=1
-SkOpSegment::debugShowActiveSpans id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 (2.72210693,4.16072464) tEnd=1 windSum=-1 oppSum=1 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 (2.7282393,3.51794004) tEnd=0.437504678 windSum=-1 oppSum=1 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 (3.5942049,2.35144877) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=6 (6,2 3,4) t=0 (6,2) tEnd=0.999932596 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 (1,3) tEnd=0.516302729 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 (3.00020218,3.99986529) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=2 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 (4.48402119,2.56391668) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=3 (5,2 1,3) t=0 (5,2) tEnd=0.351448746 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::debugShowActiveSpans id=3 (5,2 1,3) t=0.351448746 (3.5942049,2.35144877) tEnd=1 windSum=1 oppSum=0 windValue=1 oppValue=0
-SkOpSegment::activeOp id=6 t=0.999932596 tEnd=0 op=union miFrom=0 miTo=0 suFrom=1 suTo=0 result=1
-SkOpSegment::findNextOp simple
-SkOpSegment::markDone id=6 (6,2 3,4) t=0 [11] (6,2) tEnd=0.999932596 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-bridgeOp current id=6 from=(3.00020218,3.99986529) to=(6,2)
-SkOpSegment::findNextOp
-SkOpAngle::dumpOne [5/5] next=3/16 sect=1/1 s=0.437504678 [16] e=1 [10] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0 operand
-SkOpAngle::dumpOne [3/16] next=5/4 sect=17/17 s=0.351448746 [17] e=1 [6] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpAngle::dumpOne [5/4] next=3/15 sect=17/21 s=0.437504678 [16] e=0 [9] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=1 operand
-SkOpAngle::dumpOne [3/15] next=5/5 sect=1/1 s=0.351448746 [17] e=0 [5] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpSegment::activeOp id=3 t=0.351448746 tEnd=1 op=union miFrom=0 miTo=1 suFrom=1 suTo=1 result=0
-SkOpSegment::markDone id=3 (5,2 1,3) t=0.351448746 [17] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::markDone id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0 [1] (1,3) tEnd=0.516302729 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::activeOp id=5 t=0.437504678 tEnd=0 op=union miFrom=1 miTo=1 suFrom=1 suTo=0 result=0
-SkOpSegment::markDone id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0 [9] (2.7282393,3.51794004) tEnd=0.437504678 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::markDone id=4 (3,4 2.61882615,4.38117361 2.52823925,4.03588009 2.7282393,3.51794004) t=0.322114632 [14] (2.72210693,4.16072464) tEnd=1 newWindSum=-1 newOppSum=1 oppSum=1 windSum=-1 windValue=1 oppValue=0
-SkOpSegment::activeOp id=3 t=0.351448746 tEnd=0 op=union miFrom=1 miTo=0 suFrom=0 suTo=0 result=1
-SkOpSegment::markDone id=5 (2.7282393,3.51794004 3.05293441,2.67707705 4.14352131,1.38117373 6,2) t=0.437504678 [16] (3.5942049,2.35144877) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::findNextOp from:[5] to:[3] start=11952564 end=11951100
-bridgeOp current id=5 from=(6,2) to=(3.5942049,2.35144877)
-path.moveTo(3.00020218,3.99986529);
-path.lineTo(6,2);
-path.cubicTo(4.9557395,1.65191317, 4.15380764,1.90964866, 3.5942049,2.35144877);
-SkOpSegment::findNextOp simple
-SkOpSegment::markDone id=3 (5,2 1,3) t=0 [5] (5,2) tEnd=0.351448746 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-bridgeOp current id=3 from=(3.5942049,2.35144877) to=(5,2)
-SkOpSegment::findNextOp simple
-SkOpSegment::markDone id=2 (4.48402119,2.56391668 4.67430639,2.34861207 4.84861231,2.15138769 5,2) t=0 [3] (4.48402119,2.56391668) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-bridgeOp current id=2 from=(5,2) to=(4.48402119,2.56391668)
-path.lineTo(5,2);
-path.cubicTo(4.84861231,2.15138769, 4.67430639,2.34861207, 4.48402119,2.56391668);
-SkOpSegment::findNextOp
-SkOpAngle::dumpOne [1/14] next=1/13 sect=1/1 s=0.589250227 [19] e=1 [2] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0
-SkOpAngle::dumpOne [1/13] next=6/7 sect=17/17 s=0.589250227 [19] e=0.589197265 [13] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0 done unorderable
-SkOpAngle::dumpOne [6/7] next=6/6 sect=17/17 s=0.999932596 [18] e=1 [12] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=1 done unorderable operand
-SkOpAngle::dumpOne [6/6] next=1/14 sect=1/1 s=0.999932596 [18] e=0 [11] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0 done operand
-SkOpSegment::activeOp id=1 t=0.589250227 tEnd=0.589197265 op=union miFrom=1 miTo=0 suFrom=0 suTo=0 result=1
-SkOpSegment::activeOp id=6 t=0.999932596 tEnd=1 op=union miFrom=0 miTo=0 suFrom=0 suTo=1 result=1
-SkOpSegment::activeOp id=6 t=0.999932596 tEnd=0 op=union miFrom=0 miTo=0 suFrom=1 suTo=0 result=1
-SkOpSegment::markDone id=1 (1,3 1.84861219,5.54583645 3.41736698,3.77081728 4.48402119,2.56391668) t=0.589250227 [19] (3.00020218,3.99986529) tEnd=1 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
-SkOpSegment::findNextOp from:[1] to:[6] start=11952668 end=11951916
-bridgeOp current id=1 from=(4.48402119,2.56391668) to=(3.00020218,3.99986529)
-path.cubicTo(4.04589319,3.0596509, 3.52305317,3.65123534, 3.00020218,3.99986529);
+<div id="loops63i">
+seg=1 {{{0, 1}, {0.490384609f, 1.73557687f}, {0.499815077f, 2.00021958f}, {0.382070184f, 1.94870627f}}}
+seg=2 {{{0.382070184f, 1.94870627f}, {0.0196006298f, 1.79012585f}, {-1.54807687f, -1.36458325f}, {6, -3}}}
+seg=3 {{{6, -3}, {0, 1}}}
+op sect
+seg=4 {{{2, 4}, {-1.72877336f, 0.996266127f}, {0.721898317f, -0.977560639f}, {1.6714313f, -1.08141601f}}}
+seg=5 {{{1.6714313f, -1.08141601f}, {2.24979973f, -1.14467525f}, {2.27122664f, -0.514151096f}, {0, 1}}}
+seg=6 {{{0, 1}, {2, 4}}}
+debugShowCubicIntersection wtTs[0]=0.000769248274 {{{0,1}, {0.490384609,1.73557687}, {0.499815077,2.00021958}, {0.382070184,1.94870627}}} {{0.00113082887,1.00169671}} wtTs[1]=1 {{0.382070184,1.94870627}} wnTs[0]=0.324591 {{{0.382070184,1.94870627}, {0.0196006298,1.79012585}, {-1.54807687,-1.36458325}, {6,-3}}} wnTs[1]=0
+addT insert t=0.000769248274 segID=1 spanID=13
+addT insert t=0.324590897 segID=2 spanID=14
+debugShowCubicLineIntersection wtTs[0]=0 {{{0,1}, {0.490384609,1.73557687}, {0.499815077,2.00021958}, {0.382070184,1.94870627}}} {{0,1}} wnTs[0]=1 {{{6,-3}, {0,1}}}
+debugShowCubicLineIntersection wtTs[0]=0.325081142 {{{0.382070184,1.94870627}, {0.0196006298,1.79012585}, {-1.54807687,-1.36458325}, {6,-3}}} {{0.00104786863,0.999301434}} wtTs[1]=1 {{6,-3}} wnTs[0]=0.999825 {{{6,-3}, {0,1}}} wnTs[1]=0
+addT insert t=0.325081142 segID=2 spanID=15
+addT insert t=0.999825355 segID=3 spanID=16
+debugShowCubicIntersection wtTs[0]=0.000874182828 {{{0,1}, {0.490384609,1.73557687}, {0.499815077,2.00021958}, {0.382070184,1.94870627}}} {{0.00128495507,1.00192797}} wnTs[0]=0.39056 {{{2,4}, {-1.72877336,0.996266127}, {0.721898317,-0.977560639}, {1.6714313,-1.08141601}}}
+addT insert t=0.000874182828 segID=1 spanID=17
+addT insert t=0.390560161 segID=4 spanID=18
+debugShowCubicIntersection wtTs[0]=0 {{{0,1}, {0.490384609,1.73557687}, {0.499815077,2.00021958}, {0.382070184,1.94870627}}} {{0,1}} wnTs[0]=1 {{{1.6714313,-1.08141601}, {2.24979973,-1.14467525}, {2.27122664,-0.514151096}, {0,1}}}
+debugShowCubicLineIntersection wtTs[0]=0 {{{0,1}, {0.490384609,1.73557687}, {0.499815077,2.00021958}, {0.382070184,1.94870627}}} {{0,1}} wnTs[0]=0 {{{0,1}, {2,4}}}
+debugShowCubicIntersection wtTs[0]=0.311178311 {{{0.382070184,1.94870627}, {0.0196006298,1.79012585}, {-1.54807687,-1.36458325}, {6,-3}}} {{0.00457555428,1.06636167}} wtTs[1]=0.33834339 {{4.02102705e-06,0.93367821}} wtTs[2]=0.515074123 {{0.273102283,-0.0639350563}} wnTs[0]=0.380259 {{{2,4}, {-1.72877336,0.996266127}, {0.721898317,-0.977560639}, {1.6714313,-1.08141601}}} wnTs[1]=0.401625031 wnTs[2]=0.588973826
+addT insert t=0.311178311 segID=2 spanID=19
+addT insert t=0.380259358 segID=4 spanID=20
+addT insert t=0.33834339 segID=2 spanID=21
+addT insert t=0.401625031 segID=4 spanID=22
+addT insert t=0.515074123 segID=2 spanID=23
+addT insert t=0.588973826 segID=4 spanID=24
+debugShowCubicIntersection wtTs[0]=0.325081151 {{{0.382070184,1.94870627}, {0.0196006298,1.79012585}, {-1.54807687,-1.36458325}, {6,-3}}} {{0.00104786712,0.999301374}} wnTs[0]=0.999846 {{{1.6714313,-1.08141601}, {2.24979973,-1.14467525}, {2.27122664,-0.514151096}, {0,1}}}
+addT alias t=0.325081151 segID=2 spanID=15
+addT insert t=0.999846187 segID=5 spanID=25
+debugShowCubicLineIntersection wtTs[0]=0.324590993 {{{0.382070184,1.94870627}, {0.0196006298,1.79012585}, {-1.54807687,-1.36458325}, {6,-3}}} {{0.00113081234,1.00169623}} wnTs[0]=0.000565406 {{{0,1}, {2,4}}}
+addT alias t=0.324590993 segID=2 spanID=14
+addT insert t=0.000565406168 segID=6 spanID=26
+debugShowCubicLineIntersection wtTs[0]=0.390998296 {{{2,4}, {-1.72877336,0.996266127}, {0.721898317,-0.977560639}, {1.6714313,-1.08141601}}} {{0.00119023165,0.999206483}} wnTs[0]=0.999802 {{{6,-3}, {0,1}}}
+addT insert t=0.999801628 segID=3 spanID=27
+addT insert t=0.390998296 segID=4 spanID=28
+debugShowCubicLineIntersection wtTs[0]=1 {{{1.6714313,-1.08141601}, {2.24979973,-1.14467525}, {2.27122664,-0.514151096}, {0,1}}} {{0,1}} wnTs[0]=1 {{{6,-3}, {0,1}}}
+debugShowLineIntersection wtTs[0]=1 {{{6,-3}, {0,1}}} {{0,1}} wnTs[0]=0 {{{0,1}, {2,4}}}
+debugShowCubicIntersection wtTs[0]=0.390998305 {{{2,4}, {-1.72877336,0.996266127}, {0.721898317,-0.977560639}, {1.6714313,-1.08141601}}} {{0.00119022967,0.999206483}} wtTs[1]=1 {{1.6714313,-1.08141601}} wnTs[0]=0.999825 {{{1.6714313,-1.08141601}, {2.24979973,-1.14467525}, {2.27122664,-0.514151096}, {0,1}}} wnTs[1]=0
+addT alias t=0.390998305 segID=4 spanID=28
+addT insert t=0.999825287 segID=5 spanID=29
+debugShowCubicLineIntersection wtTs[0]=0 {{{2,4}, {-1.72877336,0.996266127}, {0.721898317,-0.977560639}, {1.6714313,-1.08141601}}} {{2,4}} wtTs[1]=0.390560259 {{0.00128493353,1.00192738}} wnTs[0]=1 {{{0,1}, {2,4}}} wnTs[1]=0.00064246676
+addT alias t=0.390560259 segID=4 spanID=18
+addT insert t=0.00064246676 segID=6 spanID=30
+debugShowCubicLineIntersection wtTs[0]=1 {{{1.6714313,-1.08141601}, {2.24979973,-1.14467525}, {2.27122664,-0.514151096}, {0,1}}} {{0,1}} wnTs[0]=0 {{{0,1}, {2,4}}}
+markDone id=6 (0,1 2,4) t=0 [11] (0,1) tEnd=0.000565406168 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
+markDone id=3 (6,-3 0,1) t=0.999825355 [16] (0.00104786863,0.999301434) tEnd=1 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
+markDone id=3 (6,-3 0,1) t=0.999801628 [27] (0.00119023165,0.999206483) tEnd=0.999825355 newWindSum=? newOppSum=? oppSum=? windSum=? windValue=0 oppValue=0
+sortAngles [1] tStart=0 [1]
+sortAngles [1] tStart=0.000769248274 [13]
+after [1/2] 9/9 tStart=0.000769248274 tEnd=0 < [2/8] 25/25 tStart=0.324590897 tEnd=0.311178311 < [1/3] 25/25 tStart=0.000769248274 tEnd=0.000874182828 T 11
+afterPart {{{0.00113082887,1.00169671}, {0.000754170394,1.00113142}, {0.000377227514,1.00056584}, {0,1}}} id=1
+afterPart {{{0.00113082887,1.00169671}, {0.0019015128,1.02353067}, {0.00305805582,1.04508925}, {0.00457555428,1.06636167}}} id=2
+afterPart {{{0.00113082887,1.00169671}, {0.00118220953,1.00177382}, {0.00123358499,1.00185087}, {0.00128495507,1.00192797}}} id=1
+after [1/2] 9/9 tStart=0.000769248274 tEnd=0 < [2/9] 9/9 tStart=0.324590897 tEnd=0.325081142 < [2/8] 25/25 tStart=0.324590897 tEnd=0.311178311 F 12
+afterPart {{{0.00113082887,1.00169671}, {0.000754170394,1.00113142}, {0.000377227514,1.00056584}, {0,1}}} id=1
+afterPart {{{0.00113082887,1.00169671}, {0.00110265955,1.00089865}, {0.00107500573,1.00010022}, {0.00104786863,0.999301434}}} id=2
+afterPart {{{0.00113082887,1.00169671}, {0.0019015128,1.02353067}, {0.00305805582,1.04508925}, {0.00457555428,1.06636167}}} id=2
+after [2/8] 25/25 tStart=0.324590897 tEnd=0.311178311 < [2/9] 9/9 tStart=0.324590897 tEnd=0.325081142 < [1/3] 25/25 tStart=0.000769248274 tEnd=0.000874182828 F 5
+afterPart {{{0.00113082887,1.00169671}, {0.0019015128,1.02353067}, {0.00305805582,1.04508925}, {0.00457555428,1.06636167}}} id=2
+afterPart {{{0.00113082887,1.00169671}, {0.00110265955,1.00089865}, {0.00107500573,1.00010022}, {0.00104786863,0.999301434}}} id=2
+afterPart {{{0.00113082887,1.00169671}, {0.00118220953,1.00177382}, {0.00123358499,1.00185087}, {0.00128495507,1.00192797}}} id=1
+after [1/3] 25/25 tStart=0.000769248274 tEnd=0.000874182828 < [2/9] 9/9 tStart=0.324590897 tEnd=0.325081142 < [1/2] 9/9 tStart=0.000769248274 tEnd=0 T 11
+afterPart {{{0.00113082887,1.00169671}, {0.00118220953,1.00177382}, {0.00123358499,1.00185087}, {0.00128495507,1.00192797}}} id=1
+afterPart {{{0.00113082887,1.00169671}, {0.00110265955,1.00089865}, {0.00107500573,1.00010022}, {0.00104786863,0.999301434}}} id=2
+afterPart {{{0.00113082887,1.00169671}, {0.000754170394,1.00113142}, {0.000377227514,1.00056584}, {0,1}}} id=1
+after [1/2] 9/9 tStart=0.000769248274 tEnd=0 < [6/32] 25/25 tStart=0.000565406168 tEnd=0.00064246676 < [2/8] 25/25 tStart=0.324590897 tEnd=0.311178311 F 11
+afterPart {{{0.00113082887,1.00169671}, {0.000754170394,1.00113142}, {0.000377227514,1.00056584}, {0,1}}} id=1
+afterPart {{{0.00113082887,1.00169671}, {0.00128495507,1.00192797}}} id=6
+afterPart {{{0.00113082887,1.00169671}, {0.0019015128,1.02353067}, {0.00305805582,1.04508925}, {0.00457555428,1.06636167}}} id=2
+after [2/8] 25/25 tStart=0.324590897 tEnd=0.311178311 < [6/32] 25/25 tStart=0.000565406168 tEnd=0.00064246676 < [1/3] 25/25 tStart=0.000769248274 tEnd=0.000874182828 F 7
+afterPart {{{0.00113082887,1.00169671}, {0.0019015128,1.02353067}, {0.00305805582,1.04508925}, {0.00457555428,1.06636167}}} id=2
+afterPart {{{0.00113082887,1.00169671}, {0.00128495507,1.00192797}}} id=6
+afterPart {{{0.00113082887,1.00169671}, {0.00118220953,1.00177382}, {0.00123358499,1.00185087}, {0.00128495507,1.00192797}}} id=1
+after [1/3] 25/25 tStart=0.000769248274 tEnd=0.000874182828 < [6/32] 25/25 tStart=0.000565406168 tEnd=0.00064246676 < [2/9] 9/9 tStart=0.324590897 tEnd=0.325081142 T 12
+afterPart {{{0.00113082887,1.00169671}, {0.00118220953,1.00177382}, {0.00123358499,1.00185087}, {0.00128495507,1.00192797}}} id=1
+afterPart {{{0.00113082887,1.00169671}, {0.00128495507,1.00192797}}} id=6
+afterPart {{{0.00113082887,1.00169671}, {0.00110265955,1.00089865}, {0.00107500573,1.00010022}, {0.00104786863,0.999301434}}} id=2
+sortAngles [1] tStart=0.000874182828 [17]
+after [1/4] 9/9 tStart=0.000874182828 tEnd=0.000769248274 < [4/19] 25/25 tStart=0.390560161 tEnd=0.380259358 < [1/5] 25/25 tStart=0.000874182828 tEnd=1 T 11
+afterPart {{{0.00128495507,1.00192797}, {0.00123358499,1.00185087}, {0.00118220953,1.00177382}, {0.00113082887,1.00169671}}} id=1
+afterPart {{{0.00128495507,1.00192797}, {0.00204163459,1.02326208}, {0.00313570279,1.04474029}, {0.00457555428,1.06636167}}} id=4
+afterPart {{{0.00128495507,1.00192797}, {0.490400999,1.73603928}, {0.499712146,2.00017455}, {0.382070184,1.94870627}}} id=1
+after [1/4] 9/9 tStart=0.000874182828 tEnd=0.000769248274 < [4/20] 9/9 tStart=0.390560161 tEnd=0.390998296 < [4/19] 25/25 tStart=0.390560161 tEnd=0.380259358 F 12
+afterPart {{{0.00128495507,1.00192797}, {0.00123358499,1.00185087}, {0.00118220953,1.00177382}, {0.00113082887,1.00169671}}} id=1
+afterPart {{{0.00128495507,1.00192797}, {0.00125277045,1.00102055}, {0.00122119614,1.00011339}, {0.00119023165,0.999206483}}} id=4
+afterPart {{{0.00128495507,1.00192797}, {0.00204163459,1.02326208}, {0.00313570279,1.04474029}, {0.00457555428,1.06636167}}} id=4
+after [4/19] 25/25 tStart=0.390560161 tEnd=0.380259358 < [4/20] 9/9 tStart=0.390560161 tEnd=0.390998296 < [1/5] 25/25 tStart=0.000874182828 tEnd=1 F 5
+afterPart {{{0.00128495507,1.00192797}, {0.00204163459,1.02326208}, {0.00313570279,1.04474029}, {0.00457555428,1.06636167}}} id=4
+afterPart {{{0.00128495507,1.00192797}, {0.00125277045,1.00102055}, {0.00122119614,1.00011339}, {0.00119023165,0.999206483}}} id=4
+afterPart {{{0.00128495507,1.00192797}, {0.490400999,1.73603928}, {0.499712146,2.00017455}, {0.382070184,1.94870627}}} id=1
+after [1/5] 25/25 tStart=0.000874182828 tEnd=1 < [4/20] 9/9 tStart=0.390560161 tEnd=0.390998296 < [1/4] 9/9 tStart=0.000874182828 tEnd=0.000769248274 T 11
+afterPart {{{0.00128495507,1.00192797}, {0.490400999,1.73603928}, {0.499712146,2.00017455}, {0.382070184,1.94870627}}} id=1
+afterPart {{{0.00128495507,1.00192797}, {0.00125277045,1.00102055}, {0.00122119614,1.00011339}, {0.00119023165,0.999206483}}} id=4
+afterPart {{{0.00128495507,1.00192797}, {0.00123358499,1.00185087}, {0.00118220953,1.00177382}, {0.00113082887,1.00169671}}} id=1
+after [1/4] 9/9 tStart=0.000874182828 tEnd=0.000769248274 < [6/33] 9/9 tStart=0.00064246676 tEnd=0.000565406168 < [4/19] 25/25 tStart=0.390560161 tEnd=0.380259358 T 12
+afterPart {{{0.00128495507,1.00192797}, {0.00123358499,1.00185087}, {0.00118220953,1.00177382}, {0.00113082887,1.00169671}}} id=1
+afterPart {{{0.00128495507,1.00192797}, {0.00113082887,1.00169671}}} id=6
+afterPart {{{0.00128495507,1.00192797}, {0.00204163459,1.02326208}, {0.00313570279,1.04474029}, {0.00457555428,1.06636167}}} id=4
+after [1/4] 9/9 tStart=0.000874182828 tEnd=0.000769248274 < [6/34] 25/25 tStart=0.00064246676 tEnd=1 < [6/33] 9/9 tStart=0.00064246676 tEnd=0.000565406168 F 5
+afterPart {{{0.00128495507,1.00192797}, {0.00123358499,1.00185087}, {0.00118220953,1.00177382}, {0.00113082887,1.00169671}}} id=1
+afterPart {{{0.00128495507,1.00192797}, {2,4}}} id=6
+afterPart {{{0.00128495507,1.00192797}, {0.00113082887,1.00169671}}} id=6
+after [6/33] 9/9 tStart=0.00064246676 tEnd=0.000565406168 < [6/34] 25/25 tStart=0.00064246676 tEnd=1 < [4/19] 25/25 tStart=0.390560161 tEnd=0.380259358 F 11
+afterPart {{{0.00128495507,1.00192797}, {0.00113082887,1.00169671}}} id=6
+afterPart {{{0.00128495507,1.00192797}, {2,4}}} id=6
+afterPart {{{0.00128495507,1.00192797}, {0.00204163459,1.02326208}, {0.00313570279,1.04474029}, {0.00457555428,1.06636167}}} id=4
+after [4/19] 25/25 tStart=0.390560161 tEnd=0.380259358 < [6/34] 25/25 tStart=0.00064246676 tEnd=1 < [1/5] 25/25 tStart=0.000874182828 tEnd=1 F 7
+afterPart {{{0.00128495507,1.00192797}, {0.00204163459,1.02326208}, {0.00313570279,1.04474029}, {0.00457555428,1.06636167}}} id=4
+afterPart {{{0.00128495507,1.00192797}, {2,4}}} id=6
+afterPart {{{0.00128495507,1.00192797}, {0.490400999,1.73603928}, {0.499712146,2.00017455}, {0.382070184,1.94870627}}} id=1
+after [1/5] 25/25 tStart=0.000874182828 tEnd=1 < [6/34] 25/25 tStart=0.00064246676 tEnd=1 < [4/20] 9/9 tStart=0.390560161 tEnd=0.390998296 T 12
+afterPart {{{0.00128495507,1.00192797}, {0.490400999,1.73603928}, {0.499712146,2.00017455}, {0.382070184,1.94870627}}} id=1
+afterPart {{{0.00128495507,1.00192797}, {2,4}}} id=6
+afterPart {{{0.00128495507,1.00192797}, {0.00125277045,1.00102055}, {0.00122119614,1.00011339}, {0.00119023165,0.999206483}}} id=4
+sortAngles [2] tStart=0.311178311 [19]
+after [2/6] 25/25 tStart=0.311178311 tEnd=0 < [4/17] 25/25 tStart=0.380259358 tEnd=0 < [2/7] 9/9 tStart=0.311178311 tEnd=0.324590897 F 12
+afterPart {{{0.00457555428,1.06636167}, {0.039782232,1.5598917}, {0.26927752,1.89935948}, {0.382070184,1.94870627}}} id=2
+afterPart {{{0.00457555428,1.06636167}, {0.0577283974,1.8645258}, {0.582099039,2.85780209}, {2,4}}} id=4
+afterPart {{{0.00457555428,1.06636167}, {0.00305805582,1.04508925}, {0.0019015128,1.02353067}, {0.00113082887,1.00169671}}} id=2
+after [2/6] 25/25 tStart=0.311178311 tEnd=0 < [4/18] 9/9 tStart=0.380259358 tEnd=0.390560161 < [2/7] 9/9 tStart=0.311178311 tEnd=0.324590897 T 11
+afterPart {{{0.00457555428,1.06636167}, {0.039782232,1.5598917}, {0.26927752,1.89935948}, {0.382070184,1.94870627}}} id=2
+afterPart {{{0.00457555428,1.06636167}, {0.00313570279,1.04474029}, {0.00204163459,1.02326208}, {0.00128495507,1.00192797}}} id=4
+afterPart {{{0.00457555428,1.06636167}, {0.00305805582,1.04508925}, {0.0019015128,1.02353067}, {0.00113082887,1.00169671}}} id=2
+sortAngles [2] tStart=0.324590897 [14]
+sortAngles [2] tStart=0.325081142 [15]
+after [2/10] 25/25 tStart=0.325081142 tEnd=0.324590897 < [5/29] 1/1 tStart=0.999846187 tEnd=0.999825287 < [2/11] 9/9 tStart=0.325081142 tEnd=0.33834339 T 4
+afterPart {{{0.00104786863,0.999301434}, {0.00107500573,1.00010022}, {0.00110265955,1.00089865}, {0.00113082887,1.00169671}}} id=2
+afterPart {{{0.00104786863,0.999301434}, {0.00109532382,0.999269793}, {0.00114277846,0.999238124}, {0.00119023165,0.999206483}}} id=5
+afterPart {{{0.00104786863,0.999301434}, {0.00031374693,0.977692314}, {-4.22273526e-05,0.955814396}, {4.02102705e-06,0.93367821}}} id=2
+after [2/10] 25/25 tStart=0.325081142 tEnd=0.324590897 < [5/30] 17/17 tStart=0.999846187 tEnd=1 < [5/29] 1/1 tStart=0.999846187 tEnd=0.999825287 F 4
+afterPart {{{0.00104786863,0.999301434}, {0.00107500573,1.00010022}, {0.00110265955,1.00089865}, {0.00113082887,1.00169671}}} id=2
+afterPart {{{0.00104786863,0.999301434}, {0.000698633821,0.999534287}, {0.000349343284,0.999767104}, {0,1}}} id=5
+afterPart {{{0.00104786863,0.999301434}, {0.00109532382,0.999269793}, {0.00114277846,0.999238124}, {0.00119023165,0.999206483}}} id=5
+after [5/29] 1/1 tStart=0.999846187 tEnd=0.999825287 < [5/30] 17/17 tStart=0.999846187 tEnd=1 < [2/11] 9/9 tStart=0.325081142 tEnd=0.33834339 F 4
+afterPart {{{0.00104786863,0.999301434}, {0.00109532382,0.999269793}, {0.00114277846,0.999238124}, {0.00119023165,0.999206483}}} id=5
+afterPart {{{0.00104786863,0.999301434}, {0.000698633821,0.999534287}, {0.000349343284,0.999767104}, {0,1}}} id=5
+afterPart {{{0.00104786863,0.999301434}, {0.00031374693,0.977692314}, {-4.22273526e-05,0.955814396}, {4.02102705e-06,0.93367821}}} id=2
+after [2/11] 9/9 tStart=0.325081142 tEnd=0.33834339 < [5/30] 17/17 tStart=0.999846187 tEnd=1 < [2/10] 25/25 tStart=0.325081142 tEnd=0.324590897 T 4
+afterPart {{{0.00104786863,0.999301434}, {0.00031374693,0.977692314}, {-4.22273526e-05,0.955814396}, {4.02102705e-06,0.93367821}}} id=2
+afterPart {{{0.00104786863,0.999301434}, {0.000698633821,0.999534287}, {0.000349343284,0.999767104}, {0,1}}} id=5
+afterPart {{{0.00104786863,0.999301434}, {0.00107500573,1.00010022}, {0.00110265955,1.00089865}, {0.00113082887,1.00169671}}} id=2
+sortAngles [2] tStart=0.33834339 [21]
+after [2/12] 21/25 tStart=0.33834339 tEnd=0.325081142 < [4/23] 25/25 tStart=0.401625031 tEnd=0.390998296 < [2/13] 5/5 tStart=0.33834339 tEnd=0.515074123 T 12
+afterPart {{{4.02102705e-06,0.93367821}, {-4.22273526e-05,0.955814396}, {0.00031374693,0.977692314}, {0.00104786863,0.999301434}}} id=2
+afterPart {{{4.02102705e-06,0.93367821}, {4.68720371e-05,0.955366912}, {0.000439203198,0.977209978}, {0.00119023165,0.999206483}}} id=4
+afterPart {{{4.02102705e-06,0.93367821}, {0.000620320001,0.638694712}, {0.0726626179,0.297848628}, {0.273102283,-0.0639350563}}} id=2
+after [2/12] 21/25 tStart=0.33834339 tEnd=0.325081142 < [4/24] 9/5 tStart=0.401625031 tEnd=0.588973826 < [4/23] 25/25 tStart=0.401625031 tEnd=0.390998296 F 5
+afterPart {{{4.02102705e-06,0.93367821}, {-4.22273526e-05,0.955814396}, {0.00031374693,0.977692314}, {0.00104786863,0.999301434}}} id=2
+afterPart {{{4.02102705e-06,0.93367821}, {-0.000751440063,0.551307505}, {0.107116791,0.216928359}, {0.273102283,-0.0639350563}}} id=4
+afterPart {{{4.02102705e-06,0.93367821}, {4.68720371e-05,0.955366912}, {0.000439203198,0.977209978}, {0.00119023165,0.999206483}}} id=4
+after [4/23] 25/25 tStart=0.401625031 tEnd=0.390998296 < [4/24] 9/5 tStart=0.401625031 tEnd=0.588973826 < [2/13] 5/5 tStart=0.33834339 tEnd=0.515074123 F 11
+afterPart {{{4.02102705e-06,0.93367821}, {4.68720371e-05,0.955366912}, {0.000439203198,0.977209978}, {0.00119023165,0.999206483}}} id=4
+afterPart {{{4.02102705e-06,0.93367821}, {-0.000751440063,0.551307505}, {0.107116791,0.216928359}, {0.273102283,-0.0639350563}}} id=4
+afterPart {{{4.02102705e-06,0.93367821}, {0.000620320001,0.638694712}, {0.0726626179,0.297848628}, {0.273102283,-0.0639350563}}} id=2
+after [2/13] 5/5 tStart=0.33834339 tEnd=0.515074123 < [4/24] 9/5 tStart=0.401625031 tEnd=0.588973826 < [2/12] 21/25 tStart=0.33834339 tEnd=0.325081142 T 12
+afterPart {{{4.02102705e-06,0.93367821}, {0.000620320001,0.638694712}, {0.0726626179,0.297848628}, {0.273102283,-0.0639350563}}} id=2
+afterPart {{{4.02102705e-06,0.93367821}, {-0.000751440063,0.551307505}, {0.107116791,0.216928359}, {0.273102283,-0.0639350563}}} id=4
+afterPart {{{4.02102705e-06,0.93367821}, {-4.22273526e-05,0.955814396}, {0.00031374693,0.977692314}, {0.00104786863,0.999301434}}} id=2
+sortAngles [2] tStart=0.515074123 [23]
+after [2/14] 21/21 tStart=0.515074123 tEnd=0.33834339 < [4/25] 21/21 tStart=0.588973826 tEnd=0.401625031 < [2/15] 5/1 tStart=0.515074123 tEnd=1 F 12
+afterPart {{{0.273102283,-0.0639350563}, {0.0726626179,0.297848628}, {0.000620320001,0.638694712}, {4.02102705e-06,0.93367821}}} id=2
+afterPart {{{0.273102283,-0.0639350563}, {0.107116791,0.216928359}, {-0.000751440063,0.551307505}, {4.02102705e-06,0.93367821}}} id=4
+afterPart {{{0.273102283,-0.0639350563}, {0.823082351,-1.05662188}, {2.33974221,-2.2069441}, {6,-3}}} id=2
+after [2/14] 21/21 tStart=0.515074123 tEnd=0.33834339 < [4/26] 5/1 tStart=0.588973826 tEnd=1 < [2/15] 5/1 tStart=0.515074123 tEnd=1 T 11
+afterPart {{{0.273102283,-0.0639350563}, {0.0726626179,0.297848628}, {0.000620320001,0.638694712}, {4.02102705e-06,0.93367821}}} id=2
+afterPart {{{0.273102283,-0.0639350563}, {0.637259321,-0.680123784}, {1.28114839,-1.03872873}, {1.6714313,-1.08141601}}} id=4
+afterPart {{{0.273102283,-0.0639350563}, {0.823082351,-1.05662188}, {2.33974221,-2.2069441}, {6,-3}}} id=2
+sortAngles [3] tStart=0.999801628 [27]
+after [3/16] 1/1 tStart=0.999801628 tEnd=0 < [4/22] 9/9 tStart=0.390998296 tEnd=0.401625031 < [4/21] 25/25 tStart=0.390998296 tEnd=0.390560161 T 4
+afterPart {{{0.00119023165,0.999206483}, {6,-3}}} id=3
+afterPart {{{0.00119023165,0.999206483}, {0.000439203198,0.977209978}, {4.68720371e-05,0.955366912}, {4.02102705e-06,0.93367821}}} id=4
+afterPart {{{0.00119023165,0.999206483}, {0.00122119614,1.00011339}, {0.00125277045,1.00102055}, {0.00128495507,1.00192797}}} id=4
+after [3/16] 1/1 tStart=0.999801628 tEnd=0 < [5/27] 1/5 tStart=0.999825287 tEnd=0 < [4/22] 9/9 tStart=0.390998296 tEnd=0.401625031 T 7
+afterPart {{{0.00119023165,0.999206483}, {6,-3}}} id=3
+afterPart {{{0.00119023165,0.999206483}, {2.27121914,-0.514371368}, {2.24969868,-1.1446642}, {1.6714313,-1.08141601}}} id=5
+afterPart {{{0.00119023165,0.999206483}, {0.000439203198,0.977209978}, {4.68720371e-05,0.955366912}, {4.02102705e-06,0.93367821}}} id=4
+after [3/16] 1/1 tStart=0.999801628 tEnd=0 < [5/28] 17/17 tStart=0.999825287 tEnd=0.999846187 < [5/27] 1/5 tStart=0.999825287 tEnd=0 F 5
+afterPart {{{0.00119023165,0.999206483}, {6,-3}}} id=3
+afterPart {{{0.00119023165,0.999206483}, {0.00114277846,0.999238124}, {0.00109532382,0.999269793}, {0.00104786863,0.999301434}}} id=5
+afterPart {{{0.00119023165,0.999206483}, {2.27121914,-0.514371368}, {2.24969868,-1.1446642}, {1.6714313,-1.08141601}}} id=5
+after [5/27] 1/5 tStart=0.999825287 tEnd=0 < [5/28] 17/17 tStart=0.999825287 tEnd=0.999846187 < [4/22] 9/9 tStart=0.390998296 tEnd=0.401625031 F 4
+afterPart {{{0.00119023165,0.999206483}, {2.27121914,-0.514371368}, {2.24969868,-1.1446642}, {1.6714313,-1.08141601}}} id=5
+afterPart {{{0.00119023165,0.999206483}, {0.00114277846,0.999238124}, {0.00109532382,0.999269793}, {0.00104786863,0.999301434}}} id=5
+afterPart {{{0.00119023165,0.999206483}, {0.000439203198,0.977209978}, {4.68720371e-05,0.955366912}, {4.02102705e-06,0.93367821}}} id=4
+after [4/22] 9/9 tStart=0.390998296 tEnd=0.401625031 < [5/28] 17/17 tStart=0.999825287 tEnd=0.999846187 < [4/21] 25/25 tStart=0.390998296 tEnd=0.390560161 T 4
+afterPart {{{0.00119023165,0.999206483}, {0.000439203198,0.977209978}, {4.68720371e-05,0.955366912}, {4.02102705e-06,0.93367821}}} id=4
+afterPart {{{0.00119023165,0.999206483}, {0.00114277846,0.999238124}, {0.00109532382,0.999269793}, {0.00104786863,0.999301434}}} id=5
+afterPart {{{0.00119023165,0.999206483}, {0.00122119614,1.00011339}, {0.00125277045,1.00102055}, {0.00128495507,1.00192797}}} id=4
+sortAngles [4] tStart=0.380259358 [20]
+sortAngles [4] tStart=0.390560161 [18]
+sortAngles [4] tStart=0.390998296 [28]
+sortAngles [4] tStart=0.401625031 [22]
+sortAngles [4] tStart=0.588973826 [24]
+sortAngles [5] tStart=0.999825287 [29]
+sortAngles [5] tStart=0.999846187 [25]
+sortAngles [5] tStart=1 [10]
+sortAngles [6] tStart=0.000565406168 [26]
+sortAngles [6] tStart=0.00064246676 [30]
+debugShowCoincidence - id=1 t=0 tEnd=0.000769248274
+debugShowCoincidence + id=6 t=0 tEnd=0.000565406168
+debugShowCoincidence - id=5 t=0.999846187 tEnd=1
+debugShowCoincidence + id=3 t=0.999825355 tEnd=1
+debugShowCoincidence - id=5 t=0.999825287 tEnd=0.999846187
+debugShowCoincidence + id=3 t=0.999801628 tEnd=0.999825355
+debugShowActiveSpans id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0 (0,1) tEnd=0.000769248274 windSum=? oppSum=? windValue=1 oppValue=1
+debugShowActiveSpans id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000769248274 (0.00113082887,1.00169671) tEnd=0.000874182828 windSum=? windValue=1
+debugShowActiveSpans id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000874182828 (0.00128495507,1.00192797) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0 (0.382070184,1.94870627) tEnd=0.311178311 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.311178311 (0.00457555428,1.06636167) tEnd=0.324590897 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.324590897 (0.00113082887,1.00169671) tEnd=0.325081142 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.325081142 (0.00104786863,0.999301434) tEnd=0.33834339 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 (4.02102705e-06,0.93367821) tEnd=0.515074123 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.515074123 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=3 (6,-3 0,1) t=0 (6,-3) tEnd=0.999801628 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0 (2,4) tEnd=0.380259358 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.380259358 (0.00457555428,1.06636167) tEnd=0.390560161 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390560161 (0.00128495507,1.00192797) tEnd=0.390998296 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390998296 (0.00119023165,0.999206483) tEnd=0.401625031 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.401625031 (4.02102705e-06,0.93367821) tEnd=0.588973826 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.588973826 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0 (1.6714313,-1.08141601) tEnd=0.999825287 windSum=? windValue=1
+debugShowActiveSpans id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0.999825287 (0.00119023165,0.999206483) tEnd=0.999846187 windSum=? oppSum=? windValue=1 oppValue=1
+debugShowActiveSpans id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0.999846187 (0.00104786863,0.999301434) tEnd=1 windSum=? oppSum=? windValue=1 oppValue=1
+debugShowActiveSpans id=6 (0,1 2,4) t=0.000565406168 (0.00113082887,1.00169671) tEnd=0.00064246676 windSum=? windValue=1
+debugShowActiveSpans id=6 (0,1 2,4) t=0.00064246676 (0.00128495507,1.00192797) tEnd=1 windSum=? windValue=1
+sortableTop dir=kLeft seg=1 t=0.000384624137 pt=(0.000565627823,1.00084853)
+sortableTop [0] valid=1 operand=0 span=1 ccw=0 seg=1 {{{0, 1}, {0.490384609f, 1.73557687f}, {0.499815077f, 2.00021958f}, {0.382070184f, 1.94870627f}}} t=0.000384624137 pt=(0.000565627823,1.00084853) slope=(1.47004406,2.20564388)
+markWinding id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0 [1] (0,1) tEnd=0.000769248274 newWindSum=1 newOppSum=1 oppSum=1 windSum=1 windValue=1 oppValue=1
+markWinding id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0 [1] (0,1) tEnd=0.000769248274 newWindSum=1 newOppSum=1 oppSum=1 windSum=1 windValue=1 oppValue=1
+nextChase mismatched signs
+markWinding id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0.999846187 [25] (0.00104786863,0.999301434) tEnd=1 newWindSum=1 newOppSum=1 oppSum=? windSum=? windValue=1 oppValue=1
+activeOp id=1 t=0.000769248274 tEnd=0 op=sect miFrom=1 miTo=0 suFrom=1 suTo=0 result=1
+nextChase mismatched signs
+findNextOp simple
+markDone id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0 [1] (0,1) tEnd=0.000769248274 newWindSum=1 newOppSum=1 oppSum=1 windSum=1 windValue=1 oppValue=1
+bridgeOp current id=1 from=(0.00113082887,1.00169671) to=(0,1)
+path.moveTo(0.00113082887,1.00169671);
+path.cubicTo(0.000754170411,1.00113142, 0.000377227523,1.00056589, 0,1);
+markWinding id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.324590897 [14] (0.00113082887,1.00169671) tEnd=0.325081142 newWindSum=1 newOppSum=1 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=2 span=14 windSum=1
+markWinding id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0.999825287 [29] (0.00119023165,0.999206483) tEnd=0.999846187 newWindSum=1 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=1
+markAngle last segment=5 span=29 windSum=1
+markWinding id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.325081142 [15] (0.00104786863,0.999301434) tEnd=0.33834339 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=2 span=21 windSum=?
+findNextOp
+dumpOne [5/30] next=2/10 sect=17/17 s=0.999846187 [25] e=1 [10] sgn=-1 windVal=1 windSum=1 oppVal=1 oppSum=1 operand
+dumpOne [2/10] next=5/29 sect=25/25 s=0.325081142 [15] e=0.324590897 [14] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=1
+dumpOne [5/29] next=2/11 sect=1/1 s=0.999846187 [25] e=0.999825287 [29] sgn=1 windVal=1 windSum=1 oppVal=1 oppSum=-1 operand
+dumpOne [2/11] next=5/30 sect=9/9 s=0.325081142 [15] e=0.33834339 [21] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=0
+activeOp id=2 t=0.325081142 tEnd=0.324590897 op=sect miFrom=1 miTo=0 suFrom=1 suTo=1 result=1
+findNextOp chase.append segment=2 span=14 windSum=1
+activeOp id=5 t=0.999846187 tEnd=0.999825287 op=sect miFrom=0 miTo=1 suFrom=1 suTo=0 result=0
+markDone id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0.999825287 [29] (0.00119023165,0.999206483) tEnd=0.999846187 newWindSum=1 newOppSum=-1 oppSum=-1 windSum=1 windValue=1 oppValue=1
+findNextOp chase.append segment=5 span=29 windSum=1
+activeOp id=2 t=0.325081142 tEnd=0.33834339 op=sect miFrom=1 miTo=0 suFrom=0 suTo=0 result=0
+markDone id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.325081142 [15] (0.00104786863,0.999301434) tEnd=0.33834339 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+findNextOp chase.append segment=2 span=21 windSum=-2147483647
+markDone id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0.999846187 [25] (0.00104786863,0.999301434) tEnd=1 newWindSum=1 newOppSum=1 oppSum=1 windSum=1 windValue=1 oppValue=1
+findNextOp from:[5] to:[2] start=25208280 end=25208144
+bridgeOp current id=5 from=(0,1) to=(0.00104786863,0.999301434)
+path.cubicTo(0.000349343289,0.999767125, 0.000698633841,0.999534309, 0.00104786863,0.999301434);
+markWinding id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.311178311 [19] (0.00457555428,1.06636167) tEnd=0.324590897 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=2 span=19 windSum=-1
+markWinding id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000769248274 [13] (0.00113082887,1.00169671) tEnd=0.000874182828 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=1 span=17 windSum=?
+markWinding id=6 (0,1 2,4) t=0.000565406168 [26] (0.00113082887,1.00169671) tEnd=0.00064246676 newWindSum=1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=6 span=30 windSum=?
+findNextOp
+dumpOne [2/9] next=1/2 sect=9/9 s=0.324590897 [14] e=0.325081142 [15] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=1
+dumpOne [1/2] next=2/8 sect=9/9 s=0.000769248274 [13] e=0 [1] sgn=1 windVal=1 windSum=1 oppVal=1 oppSum=1 done
+dumpOne [2/8] next=1/3 sect=25/25 s=0.324590897 [14] e=0.311178311 [19] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=0
+dumpOne [1/3] next=6/32 sect=25/25 s=0.000769248274 [13] e=0.000874182828 [17] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=0
+dumpOne [6/32] next=2/9 sect=25/25 s=0.000565406168 [26] e=0.00064246676 [30] sgn=-1 windVal=1 windSum=1 oppVal=0 oppSum=0 operand
+activeOp id=1 t=0.000769248274 tEnd=0 op=sect miFrom=1 miTo=0 suFrom=1 suTo=0 result=1
+activeOp id=2 t=0.324590897 tEnd=0.311178311 op=sect miFrom=0 miTo=1 suFrom=0 suTo=0 result=0
+markDone id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.311178311 [19] (0.00457555428,1.06636167) tEnd=0.324590897 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+findNextOp chase.append segment=2 span=19 windSum=-1
+activeOp id=1 t=0.000769248274 tEnd=0.000874182828 op=sect miFrom=1 miTo=0 suFrom=0 suTo=0 result=0
+markDone id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000769248274 [13] (0.00113082887,1.00169671) tEnd=0.000874182828 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+findNextOp chase.append segment=1 span=17 windSum=-2147483647
+activeOp id=6 t=0.000565406168 tEnd=0.00064246676 op=sect miFrom=0 miTo=0 suFrom=0 suTo=1 result=0
+markDone id=6 (0,1 2,4) t=0.000565406168 [26] (0.00113082887,1.00169671) tEnd=0.00064246676 newWindSum=1 newOppSum=0 oppSum=0 windSum=1 windValue=1 oppValue=0
+findNextOp chase.append segment=6 span=30 windSum=-2147483647
+markDone id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.324590897 [14] (0.00113082887,1.00169671) tEnd=0.325081142 newWindSum=1 newOppSum=1 oppSum=1 windSum=1 windValue=1 oppValue=0
+findNextOp from:[2] to:[1] start=25208008 end=1606414720
+bridgeOp current id=2 from=(0.00104786863,0.999301434) to=(0.00113082887,1.00169671)
+path.cubicTo(0.00107500574,1.00010026, 0.0011026595,1.0008986, 0.00113082887,1.00169671);
path.close();
+markWinding id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.380259358 [20] (0.00457555428,1.06636167) tEnd=0.390560161 newWindSum=-2 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=4 span=20 windSum=-2
+markWinding id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000874182828 [17] (0.00128495507,1.00192797) tEnd=1 newWindSum=-1 newOppSum=-2 oppSum=? windSum=? windValue=1 oppValue=0
+markWinding id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0 [3] (0.382070184,1.94870627) tEnd=0.311178311 newWindSum=-1 newOppSum=-2 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=2 span=19 windSum=-1
+markWinding id=6 (0,1 2,4) t=0.00064246676 [30] (0.00128495507,1.00192797) tEnd=1 newWindSum=-2 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markWinding id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0 [7] (2,4) tEnd=0.380259358 newWindSum=-2 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=4 span=20 windSum=-2
+markWinding id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390560161 [18] (0.00128495507,1.00192797) tEnd=0.390998296 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=4 span=28 windSum=?
+debugShowActiveSpans id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000874182828 (0.00128495507,1.00192797) tEnd=1 windSum=-1 oppSum=-2 windValue=1 oppValue=0
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0 (0.382070184,1.94870627) tEnd=0.311178311 windSum=-1 oppSum=-2 windValue=1 oppValue=0
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 (4.02102705e-06,0.93367821) tEnd=0.515074123 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.515074123 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=3 (6,-3 0,1) t=0 (6,-3) tEnd=0.999801628 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0 (2,4) tEnd=0.380259358 windSum=-2 oppSum=0 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.380259358 (0.00457555428,1.06636167) tEnd=0.390560161 windSum=-2 oppSum=-1 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390560161 (0.00128495507,1.00192797) tEnd=0.390998296 windSum=-1 oppSum=0 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390998296 (0.00119023165,0.999206483) tEnd=0.401625031 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.401625031 (4.02102705e-06,0.93367821) tEnd=0.588973826 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.588973826 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0 (1.6714313,-1.08141601) tEnd=0.999825287 windSum=? windValue=1
+debugShowActiveSpans id=6 (0,1 2,4) t=0.00064246676 (0.00128495507,1.00192797) tEnd=1 windSum=-2 oppSum=0 windValue=1 oppValue=0
+activeOp id=4 t=0.390560161 tEnd=0.380259358 op=sect miFrom=1 miTo=1 suFrom=1 suTo=1 result=0
+markDone id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.380259358 [20] (0.00457555428,1.06636167) tEnd=0.390560161 newWindSum=-2 newOppSum=-1 oppSum=-1 windSum=-2 windValue=1 oppValue=0
+bridgeOp chase.append id=4 windSum=-2
+debugShowActiveSpans id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000874182828 (0.00128495507,1.00192797) tEnd=1 windSum=-1 oppSum=-2 windValue=1 oppValue=0
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0 (0.382070184,1.94870627) tEnd=0.311178311 windSum=-1 oppSum=-2 windValue=1 oppValue=0
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 (4.02102705e-06,0.93367821) tEnd=0.515074123 windSum=? windValue=1
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.515074123 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=3 (6,-3 0,1) t=0 (6,-3) tEnd=0.999801628 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0 (2,4) tEnd=0.380259358 windSum=-2 oppSum=0 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390560161 (0.00128495507,1.00192797) tEnd=0.390998296 windSum=-1 oppSum=0 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390998296 (0.00119023165,0.999206483) tEnd=0.401625031 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.401625031 (4.02102705e-06,0.93367821) tEnd=0.588973826 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.588973826 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0 (1.6714313,-1.08141601) tEnd=0.999825287 windSum=? windValue=1
+debugShowActiveSpans id=6 (0,1 2,4) t=0.00064246676 (0.00128495507,1.00192797) tEnd=1 windSum=-2 oppSum=0 windValue=1 oppValue=0
+activeOp id=2 t=0.311178311 tEnd=0 op=sect miFrom=0 miTo=1 suFrom=1 suTo=1 result=1
+findNextOp simple
+markDone id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0 [3] (0.382070184,1.94870627) tEnd=0.311178311 newWindSum=-1 newOppSum=-2 oppSum=-2 windSum=-1 windValue=1 oppValue=0
+bridgeOp current id=2 from=(0.00457555428,1.06636167) to=(0.382070184,1.94870627)
+path.moveTo(0.00457555428,1.06636167);
+path.cubicTo(0.0397822335,1.5598917, 0.269277513,1.89935946, 0.382070184,1.94870627);
+findNextOp
+dumpOne [1/5] next=6/34 sect=25/25 s=0.000874182828 [17] e=1 [2] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=-2
+dumpOne [6/34] next=4/20 sect=25/25 s=0.00064246676 [30] e=1 [12] sgn=-1 windVal=1 windSum=-2 oppVal=0 oppSum=0 operand
+dumpOne [4/20] next=1/4 sect=9/9 s=0.390560161 [18] e=0.390998296 [28] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=0 operand
+dumpOne [1/4] next=6/33 sect=9/9 s=0.000874182828 [17] e=0.000769248274 [13] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=0 done
+dumpOne [6/33] next=4/19 sect=9/9 s=0.00064246676 [30] e=0.000565406168 [26] sgn=1 windVal=1 windSum=1 oppVal=0 oppSum=0 done operand
+dumpOne [4/19] next=1/5 sect=25/25 s=0.390560161 [18] e=0.380259358 [20] sgn=1 windVal=1 windSum=-2 oppVal=0 oppSum=-1 done operand
+activeOp id=6 t=0.00064246676 tEnd=1 op=sect miFrom=0 miTo=0 suFrom=1 suTo=1 result=0
+markDone id=6 (0,1 2,4) t=0.00064246676 [30] (0.00128495507,1.00192797) tEnd=1 newWindSum=-2 newOppSum=0 oppSum=0 windSum=-2 windValue=1 oppValue=0
+markDone id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0 [7] (2,4) tEnd=0.380259358 newWindSum=-2 newOppSum=0 oppSum=0 windSum=-2 windValue=1 oppValue=0
+activeOp id=4 t=0.390560161 tEnd=0.390998296 op=sect miFrom=0 miTo=0 suFrom=1 suTo=0 result=0
+markDone id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390560161 [18] (0.00128495507,1.00192797) tEnd=0.390998296 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+activeOp id=1 t=0.000874182828 tEnd=0.000769248274 op=sect miFrom=0 miTo=1 suFrom=0 suTo=0 result=0
+activeOp id=6 t=0.00064246676 tEnd=0.000565406168 op=sect miFrom=1 miTo=1 suFrom=0 suTo=1 result=1
+activeOp id=4 t=0.390560161 tEnd=0.380259358 op=sect miFrom=1 miTo=1 suFrom=1 suTo=1 result=0
+markDone id=1 (0,1 0.490384609,1.73557687 0.499815077,2.00021958 0.382070184,1.94870627) t=0.000874182828 [17] (0.00128495507,1.00192797) tEnd=1 newWindSum=-1 newOppSum=-2 oppSum=-2 windSum=-1 windValue=1 oppValue=0
+findNextOp from:[1] to:[6] start=41944776 end=25209856
+bridgeOp current id=1 from=(0.382070184,1.94870627) to=(0.00128495507,1.00192797)
+path.cubicTo(0.499712139,2.00017452, 0.490401,1.73603928, 0.00128495507,1.00192797);
+markWinding id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390998296 [28] (0.00119023165,0.999206483) tEnd=0.401625031 newWindSum=-1 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=4 span=28 windSum=-1
+markWinding id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 [21] (4.02102705e-06,0.93367821) tEnd=0.515074123 newWindSum=-1 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=2 span=23 windSum=?
+markWinding id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.401625031 [22] (4.02102705e-06,0.93367821) tEnd=0.588973826 newWindSum=-1 newOppSum=0 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=4 span=24 windSum=?
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 (4.02102705e-06,0.93367821) tEnd=0.515074123 windSum=-1 oppSum=-1 windValue=1 oppValue=0
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.515074123 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=3 (6,-3 0,1) t=0 (6,-3) tEnd=0.999801628 windSum=? windValue=1
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390998296 (0.00119023165,0.999206483) tEnd=0.401625031 windSum=-1 oppSum=-1 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.401625031 (4.02102705e-06,0.93367821) tEnd=0.588973826 windSum=-1 oppSum=0 windValue=1 oppValue=0
+debugShowActiveSpans id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.588973826 (0.273102283,-0.0639350563) tEnd=1 windSum=? windValue=1
+debugShowActiveSpans id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0 (1.6714313,-1.08141601) tEnd=0.999825287 windSum=? windValue=1
+activeOp id=4 t=0.401625031 tEnd=0.390998296 op=sect miFrom=1 miTo=1 suFrom=0 suTo=1 result=1
+markWinding id=3 (6,-3 0,1) t=0 [5] (6,-3) tEnd=0.999801628 newWindSum=-1 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markWinding id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.515074123 [23] (0.273102283,-0.0639350563) tEnd=1 newWindSum=-1 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=2 span=23 windSum=-1
+markWinding id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0 [9] (1.6714313,-1.08141601) tEnd=0.999825287 newWindSum=-2 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markWinding id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.588973826 [24] (0.273102283,-0.0639350563) tEnd=1 newWindSum=-2 newOppSum=-1 oppSum=? windSum=? windValue=1 oppValue=0
+markAngle last segment=4 span=24 windSum=-2
+findNextOp
+dumpOne [4/22] next=5/28 sect=9/9 s=0.390998296 [28] e=0.401625031 [22] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=-1 operand
+dumpOne [5/28] next=4/21 sect=17/17 s=0.999825287 [29] e=0.999846187 [25] sgn=-1 windVal=1 windSum=1 oppVal=1 oppSum=-1 done operand
+dumpOne [4/21] next=3/16 sect=25/25 s=0.390998296 [28] e=0.390560161 [18] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=0 done operand
+dumpOne [3/16] next=5/27 sect=1/1 s=0.999801628 [27] e=0 [5] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=-1
+dumpOne [5/27] next=4/22 sect=1/5 s=0.999825287 [29] e=0 [9] sgn=1 windVal=1 windSum=-2 oppVal=0 oppSum=-1 operand
+activeOp id=5 t=0.999825287 tEnd=0.999846187 op=sect miFrom=1 miTo=0 suFrom=0 suTo=1 result=0
+activeOp id=4 t=0.390998296 tEnd=0.390560161 op=sect miFrom=0 miTo=0 suFrom=1 suTo=0 result=0
+activeOp id=3 t=0.999801628 tEnd=0 op=sect miFrom=0 miTo=1 suFrom=0 suTo=0 result=0
+markDone id=3 (6,-3 0,1) t=0 [5] (6,-3) tEnd=0.999801628 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=0
+markDone id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.515074123 [23] (0.273102283,-0.0639350563) tEnd=1 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=0
+findNextOp chase.append segment=2 span=23 windSum=-1
+activeOp id=5 t=0.999825287 tEnd=0 op=sect miFrom=1 miTo=1 suFrom=0 suTo=1 result=1
+findNextOp chase.append segment=4 span=24 windSum=-2
+markDone id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.390998296 [28] (0.00119023165,0.999206483) tEnd=0.401625031 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=0
+findNextOp from:[4] to:[5] start=41944600 end=25207400
+bridgeOp current id=4 from=(4.02102705e-06,0.93367821) to=(0.00119023165,0.999206483)
+path.moveTo(4.02102705e-06,0.93367821);
+path.cubicTo(4.68720355e-05,0.95536691, 0.000439203199,0.977209985, 0.00119023165,0.999206483);
+findNextOp simple
+markDone id=5 (1.6714313,-1.08141601 2.24979973,-1.14467525 2.27122664,-0.514151096 0,1) t=0 [9] (1.6714313,-1.08141601) tEnd=0.999825287 newWindSum=-2 newOppSum=-1 oppSum=-1 windSum=-2 windValue=1 oppValue=0
+bridgeOp current id=5 from=(0.00119023165,0.999206483) to=(1.6714313,-1.08141601)
+path.cubicTo(2.27121925,-0.514371395, 2.24969864,-1.14466417, 1.6714313,-1.08141601);
+findNextOp
+dumpOne [4/26] next=2/15 sect=5/1 s=0.588973826 [24] e=1 [8] sgn=-1 windVal=1 windSum=-2 oppVal=0 oppSum=-1 operand
+dumpOne [2/15] next=4/25 sect=5/1 s=0.515074123 [23] e=1 [4] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=-1 done
+dumpOne [4/25] next=2/14 sect=21/21 s=0.588973826 [24] e=0.401625031 [22] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=0 operand
+dumpOne [2/14] next=4/26 sect=21/21 s=0.515074123 [23] e=0.33834339 [21] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=-1
+activeOp id=2 t=0.515074123 tEnd=1 op=sect miFrom=1 miTo=0 suFrom=1 suTo=1 result=1
+activeOp id=4 t=0.588973826 tEnd=0.401625031 op=sect miFrom=0 miTo=0 suFrom=1 suTo=1 result=0
+markDone id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.401625031 [22] (4.02102705e-06,0.93367821) tEnd=0.588973826 newWindSum=-1 newOppSum=0 oppSum=0 windSum=-1 windValue=1 oppValue=0
+activeOp id=2 t=0.515074123 tEnd=0.33834339 op=sect miFrom=0 miTo=1 suFrom=1 suTo=1 result=1
+markDone id=4 (2,4 -1.72877336,0.996266127 0.721898317,-0.977560639 1.6714313,-1.08141601) t=0.588973826 [24] (0.273102283,-0.0639350563) tEnd=1 newWindSum=-2 newOppSum=-1 oppSum=-1 windSum=-2 windValue=1 oppValue=0
+findNextOp from:[4] to:[2] start=25209368 end=25206496
+bridgeOp current id=4 from=(1.6714313,-1.08141601) to=(0.273102283,-0.0639350563)
+path.cubicTo(1.28114843,-1.03872871, 0.637259305,-0.680123806, 0.273102283,-0.0639350563);
+findNextOp simple
+path.cubicTo(0.823082328,-1.05662191, 2.33974218,-2.20694399, 6,-3);
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 (4.02102705e-06,0.93367821) tEnd=0.515074123 windSum=-1 oppSum=-1 windValue=1 oppValue=0
+debugShowActiveSpans id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 (4.02102705e-06,0.93367821) tEnd=0.515074123 windSum=-1 oppSum=-1 windValue=1 oppValue=0
+activeOp id=2 t=0.515074123 tEnd=0.33834339 op=sect miFrom=0 miTo=1 suFrom=1 suTo=1 result=1
+findNextOp
+dumpOne [2/13] next=4/24 sect=5/5 s=0.33834339 [21] e=0.515074123 [23] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=-1
+dumpOne [4/24] next=2/12 sect=9/5 s=0.401625031 [22] e=0.588973826 [24] sgn=-1 windVal=1 windSum=-1 oppVal=0 oppSum=0 done operand
+dumpOne [2/12] next=4/23 sect=21/25 s=0.33834339 [21] e=0.325081142 [15] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=0 done
+dumpOne [4/23] next=2/13 sect=25/25 s=0.401625031 [22] e=0.390998296 [28] sgn=1 windVal=1 windSum=-1 oppVal=0 oppSum=-1 done operand
+activeOp id=4 t=0.401625031 tEnd=0.588973826 op=sect miFrom=0 miTo=0 suFrom=1 suTo=0 result=0
+activeOp id=2 t=0.33834339 tEnd=0.325081142 op=sect miFrom=0 miTo=1 suFrom=0 suTo=0 result=0
+activeOp id=4 t=0.401625031 tEnd=0.390998296 op=sect miFrom=1 miTo=1 suFrom=0 suTo=1 result=1
+markDone id=2 (0.382070184,1.94870627 0.0196006298,1.79012585 -1.54807687,-1.36458325 6,-3) t=0.33834339 [21] (4.02102705e-06,0.93367821) tEnd=0.515074123 newWindSum=-1 newOppSum=-1 oppSum=-1 windSum=-1 windValue=1 oppValue=0
+findNextOp from:[2] to:[4] start=25209232 end=25210128
+bridgeOp current id=2 from=(0.273102283,-0.0639350563) to=(4.02102705e-06,0.93367821)
+path.moveTo(0.273102283,-0.0639350563);
+path.cubicTo(0.0726626143,0.297848642, 0.000620319974,0.638694704, 4.02102705e-06,0.93367821);
</div>
</div>
@@ -393,8 +435,8 @@ path.close();
<script type="text/javascript">
var testDivs = [
- cubics45u_release,
- cubics45u_debug,
+ loops63i,
+
];
var decimal_places = 3; // make this 3 to show more precision