importing fastop extension in this repo
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Thu, 20 Feb 2014 12:56:57 -0800
changeset 801 f49d4774b999
parent 790 5af309865040 (diff)
parent 800 ad2060da7ffa (current diff)
child 802 80e078959129
importing fastop extension in this repo This repo is dedicated to experimentation on mutable history topic. Fastop is appropriate there.
README
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,16 @@
+syntax: re
+/figures/[^/]+\.png$
+^docs/build/
+^docs/html/
+^html/
+\.pyc$
+~$
+\.swp$
+\.orig$
+\.rej$
+\.err$
+^tests/easy_run.sh$
+^build/
+^MANIFEST$
+^docs/tutorials/.*\.rst$
+\.ico$
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,21 @@
+6c6bb7a23bb5125bf06da73265f039dd3447dafa 0.1.0
+d3f20770b86a31dba56ae7b252089e12b34702da 0.2.0
+c046b083a5e0b21af69027f31cee141800cf894b 0.3.0
+9bbcd274689829d9239978236e16610688978233 0.4.0
+4ecbaec1d664b1e6f8ebc78292e1ced77a8e69c0 0.4.1
+7ef8ab8c6feadb8a9d9e13af144a17cb23e9a38d 0.5
+4a5488c01a66be4729252175cea0ea739a88a540 0.6
+18a0d96ed559089edf90206c469f3f8c26681c64 0.7
+18a0d96ed559089edf90206c469f3f8c26681c64 0.7
+1b2757c1bd918509184f6c1d06b2329a847e31b0 0.7
+b18b000363550f02f413aed008f8e306318c608c 1.0.0
+ca5bb72d14aeb6e6053e3a53c064a2b7dc8010e5 1.0.1
+b1bdcb4506defef0e857e2710633f7686d8034a5 1.0.2
+5559e5a4b656978c592d364f242edc62369d7e84 1.0.2
+c062edbcaf13135d0312fd2039deca74573ff4f0 1.1.0
+22cacfce2a65ab965c6179ae862b148f4abc7d8a 1.1.0
+d43e80504e55db9ad4826e860e50530103a27b0f 2.0.0
+f9d305deeff3dba782e65faf4ef3fd1569995859 2.1.0
+862b6b71a35836e81f090ba7229c2888e8ed2f9f 3.0.0
+cdb52bbbe5b8770d5e68943b7e73bee4ba136ecc 3.1.0
+c3ba8a965a7a173e388d84819e936ea9bae9797f 3.2.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/COPYING	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MANIFEST.in	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,17 @@
+recursive-include docs/figures *.svg
+include docs/figures/hgview-example.png
+include docs/*.rst
+include docs/*.py
+include docs/tutorials/*.t
+include docs/makefile
+include docs/static/*.svg
+include hgext/__init__.py
+include hgext/evolve.py
+include hgext/pushexperiment.py
+include setup.py
+include README
+include COPYING
+include tests/*.t
+include tests/*.py
+exclude tests/test-oldconvert.t
+exclude tests/test-qsync.t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,38 @@
+PYTHON=python
+HG=`which hg`
+VERSION=$(shell python setup.py --version)
+
+
+help:
+	@echo 'Commonly used make targets:'
+	@echo '  tests              - run all tests in the automatic test suite'
+	@echo '  all-version-tests - run all tests against many hg versions'
+	@echo '  tests-%s           - run all tests in the specified hg version'
+
+all: help
+
+tests:
+	cd tests && $(PYTHON) run-tests.py --with-hg=$(HG) $(TESTFLAGS)
+
+test-%:
+	cd tests && $(PYTHON) run-tests.py --with-hg=$(HG) $(TESTFLAGS) $@
+
+tests-%:
+	@echo "Path to crew repo is $(CREW) - set this with CREW= if needed."
+	hg -R $(CREW) checkout $$(echo $@ | sed s/tests-//) && \
+	(cd $(CREW) ; $(MAKE) clean ) && \
+	cd tests && $(PYTHON) $(CREW)/tests/run-tests.py $(TESTFLAGS)
+
+all-version-tests: tests-1.3.1 tests-1.4.3 tests-1.5.4 \
+                   tests-1.6.4 tests-1.7.5 tests-1.8 tests-tip
+
+deb-prepare:
+	python setup.py sdist --dist-dir ..
+	mv -f ../hg-evolve-$(VERSION).tar.gz ../mercurial-evolve_$(VERSION).orig.tar.gz
+	tar xf ../mercurial-evolve_$(VERSION).orig.tar.gz
+	rm -rf ../mercurial-evolve_$(VERSION).orig
+	mv hg-evolve-$(VERSION) ../mercurial-evolve_$(VERSION).orig
+	cp -r debian/ ../mercurial-evolve_$(VERSION).orig/
+	@cd ../mercurial-evolve_$(VERSION).orig && echo 'debian build directory ready at' `pwd`
+
+.PHONY: tests all-version-tests
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/README	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,197 @@
+=============================
+Mutable History For Mercurial
+=============================
+
+This package supplies the ``evolve`` extension for Mercurial, which
+provides several commands to mutate history and deal with the
+resulting issues.
+
+It also:
+
+    - enables the "changeset obsolescence" feature of Mercurial
+    - issues several warning messages when trouble appears in your repository
+
+**This extension is experimental and not yet meant for production.**
+
+You can enable it by adding the line below to the ``extensions``
+section of your hgrc::
+
+    evolve = PATH/TO/mutable-history/hgext/evolve.py
+
+We recommend reading the documentation first. An online version is
+available here:
+
+    http://hg-lab.logilab.org/doc/mutable-history/html/
+
+Or see the ``doc/`` directory for a local copy.
+
+Contribute
+==========
+
+The simplest way to contribute is to issue a pull request on Bitbucket
+(https://bitbucket.org/marmoute/mutable-history).
+
+However, some cutting-edge changes may be found in a mutable repository hosted
+by logilab before they are published.
+
+    http://hg-lab.logilab.org/wip/mutable-history/
+
+Be sure to check latest draft changeset before submitting new changesets.
+
+
+Changelog
+=========
+
+3.3.0 --
+
+- added Augie Facklers `fastop` extension (usage not recommended yet)
+- add verbose hint about how to handle corner case by hand.
+  This should help people until evolve is able to to it itself.
+- removed the qsync extension. The only user I knew about (logilab) is not
+  using it anymore. It not compatible with coming Mercurial version 2.9.
+- add progress indicator for long evolve command
+- report troubles creation from `hg import`
+
+3.2.0 -- 2013-11-15
+
+- conform to the Mercurial custom of lowercase messages
+- added a small extension to experiment with obsolescence marker push
+- amend: drop the deprecated note option
+- amend: use core mechanism for amend (fix multiple bugs)
+- parents command: add "working directory parent is obsolete" message
+- evolve command: allow updating to the successor if the parent is
+  obsolete
+- gdown and gup commands: add next and previous alias, respectively
+- make grab aliases compatible with Mercurial 2.8
+- Tested with 2.6, 2.7 and 2.8
+
+3.1.0 -- 2013-02-11
+
+- amend: drop deprecated --change option for amend
+- alias: add a grab aliast to be used instead of graft -O
+- touch: add a --duplicate option to *not* obsolete the old version
+- touch: fix touching multiple revision at the same time
+- evolve: add a --all option
+- prune: various minor improvements
+- prune: add option to prune a specific bookmark
+- prune: add -u and -d option to control metadata
+
+3.0.0 -- 2013-02-02
+
+- compatibility with 2.5
+
+2.2.0 --
+
+- make evolve smarter at picking next troubled to solved without --any
+
+2.1.0 -- 2012-12-03
+
+- qsync fixes
+- have qfold ask for commit message
+
+2.0.0 -- 2012-10-26
+
+- compat with mercurial 2.4
+
+1.1.0 -- 2012-10-26
+
+- fix troubles creation reporting from rebase
+- rename latecomer to bumped
+- renamed conflicting to divergent
+- smarter divergent handling
+
+1.0.2 -- 2012-09-19
+
+- fix hg fold bug
+- fix hg pull --rebase
+- fix detection of conflict with external tools
+- adapt to core movement (caches and --amend)
+
+1.0.1 -- 2012-08-31
+
+- documentation improvement
+- fix a performance bug with hgweb
+
+1.0 -- 2012-08-29
+
+- Align with Mercurial version 2.3 (drop 2.2 support).
+- stabilize handle killed parent
+- stabilize handle late comer
+- stabilize handle conflicting
+- stabilize get a --continue switch
+- merge and update ignore extinct changeset in most case.
+- new "troubled()" revset
+- summary now reports troubles changesets
+- new touch command
+- new fold command
+- new basic olog alias
+
+- rebase refuse to work on public changeset again
+- rebase explicitly state that there is nothing to rebase because everything is
+  extinct() when that happen.
+- amend now cleanly abort when --change switch is misused
+
+
+0.7 -- 2012-08-06
+
+- hook: work around insanely huge value in obsolete pushkey call
+- pushkey: properly handle abort during obsolete markers push
+- amend: wrap the whole process in a single transaction.
+- evolve: tweak and add EOL to kill warning
+- obsolete: fix doc, rebase no longer aborts with --keep
+- obsolete/evolve: fix grammar in prerequisite messages
+- evolve: avoid duplication in graft wrapper
+- evolve: graft --continue is optional, test
+
+0.6 -- 2012-07-31
+
+- obsolete: change warning output to match mercurial core on
+- qsync: ignore unexistent nodes
+- make compat server both compatible with "dump" and "dump%i" version
+
+0.5 -- 2012-07-16
+
+- obsolete: Detect conflicting changeset!
+- obsolete: adapt to core: marker are written in transaction now
+- evolve: add the solve alias to obsolete
+- doc: big update of terms and summary of the concept
+- evolve: switch the official name for "kill" to prune
+
+
+0.4.1 -- 2012-07-10
+
+- [convert] properly exclude null successors from convertion
+- Ignore buggy marker in newerversion
+
+
+0.4.0 -- 2012-07-06
+
+- obsolete: public changeset are no longer latecomer.
+- obsolete: move to official binary format
+- adapt for new mercurial
+- obsolete: we are not compatible with 2.1 any more
+
+0.3.0 -- 2012-06-27
+
+- 
+- obsolete:  Add "latecomer" error detection (stabilize does not handle resolution yet)
+- evolve:    Introduce a new `uncommit` command to remove change from a changeset
+- rebase:    allow the use of --keep again
+- commit:    --amend option create obsolete marker (but still strip)
+- obsolete:  fewer marker are created when collapsing revision.
+- revset:    add, successors(), allsuccessors(), precursors(), allprecursors(),
+             latecomer() and hidden()
+- evolve:    add `prune` alias to `kill`.
+- stabilize: clearly state that stabilize does nto handle conflict
+- template:  add an {obsolete} keyword
+
+0.2.0 -- 2012-06-20
+
+- stabilize: improve choice of the next changeset to stabilize
+- stabilize: improve resolution of several corner case
+- rebase:    handle removing empty changesets
+- rebase:    handle --collapse
+- evolve:   add `obsolete` alias to `kill`
+- evolve:   add `evolve` alias to `stabilize`
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/nopushpublish.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,36 @@
+# Extension which prevent changeset to be turn public by push operation
+#
+# Copyright 2011 Logilab SA        <contact@logilab.fr>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+
+from mercurial import extensions, util
+from mercurial import discovery
+
+def checkpublish(orig, repo, remote, outgoing, *args):
+
+    # is remote publishing?
+    publish = True
+    if 'phases' in remote.listkeys('namespaces'):
+        remotephases = remote.listkeys('phases')
+        publish = remotephases.get('publishing', False)
+
+    npublish = 0
+    if publish:
+        for rev in outgoing.missing:
+            if repo[rev].phase():
+                npublish += 1
+    if npublish:
+        repo.ui.warn("Push would publish %s changesets" % npublish)
+
+    ret = orig(repo, remote, outgoing, *args)
+    if npublish:
+        raise util.Abort("Publishing push forbiden",
+                         hint="Use `hg phase -p <rev>` to manually publish them")
+
+    return ret
+
+def uisetup(ui):
+    extensions.wrapfunction(discovery, 'checkheads', checkpublish)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/changelog	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,42 @@
+mercurial-evolve (3.2.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Julien Cristau <julien.cristau@logilab.fr>  Tue, 04 Jun 2013 17:28:02 +0200
+
+mercurial-evolve (3.1.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Pierre-Yves David <pierre-yves.david@logilab.fr>  Mon, 04 Mar 2013 18:02:15 +0100
+
+mercurial-evolve (2.1.0-1) UNRELEASED; urgency=low
+
+  * New upstream release
+
+ -- Pierre-Yves David <pierre-yves.david@logilab.fr>  Mon, 03 Dec 2012 15:19:19 +0100
+
+mercurial-evolve (1.1.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Pierre-Yves David <pierre-yves.david@logilab.fr>  Tue, 20 Nov 2012 16:28:12 +0100
+
+mercurial-evolve (1.0.2-1) UNRELEASED; urgency=low
+
+  * New upstream Release
+
+ -- Pierre-Yves David <pierre-yves.david@logilab.fr>  Wed, 19 Sep 2012 17:38:47 +0200
+
+mercurial-evolve (1.0.1-1) UNRELEASED; urgency=low
+
+  * New bug fix release
+  * remove conflicting __init__.py
+
+ -- Pierre-Yves David <pierre-yves.david@logilab.fr>  Fri, 31 Aug 2012 11:31:03 +0200
+
+mercurial-evolve (1.0.0-1) UNRELEASED; urgency=low
+
+  * Initial release.
+
+ -- Julien Cristau <jcristau@debian.org>  Fri, 24 Aug 2012 16:46:30 +0200
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/compat	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1 @@
+8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/control	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,39 @@
+Source: mercurial-evolve
+Section: vcs
+Priority: optional
+Maintainer: Logilab <contact@logilab.fr>
+Uploaders:
+ Julien Cristau <julien.cristau@logilab.fr>,
+ Pierre-Yves David <pierre-yves.david@logilab.fr>,
+Standards-Version: 3.9.3
+Build-Depends:
+ mercurial (>=2.6~),
+ python,
+ debhelper (>= 8),
+ python-sphinx (>= 1.0.8),
+ imagemagick,
+ librsvg2-bin,
+Python-Version: >= 2.6
+Homepage: https://bitbucket.org/marmoute/mutable-history
+
+Package: mercurial-evolve
+Architecture: all
+Depends:
+ ${python:Depends},
+ ${misc:Depends},
+ mercurial (>= 2.6),
+Description: evolve extension for Mercurial
+ This package provides the experimental "evolve" extension for the Mercurial
+ DVCS.
+ .
+ This extension provides several commands to mutate history and deal with issues
+ it may raise.
+ .
+ It also:
+  - enables the "Changeset Obsolescence" feature of mercurial,
+  - alters core command and extension that rewrite history to use this feature,
+  - improves some aspects of the early implementation in Mercurial 2.3.
+ .
+ **These extensions are experimental and are not meant for production.**
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/copyright	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,15 @@
+This software was downloaded from
+https://bitbucket.org/marmoute/mutable-history
+
+Copyright 2011 Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
+               Logilab SA        <contact@logilab.fr>
+               Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+	       Patrick Mezard <patrick@mezard.eu>
+
+
+This software may be used and distributed according to the terms of the GNU
+General Public License version 2 or any later version.
+
+On Debian systems, the complete text of the GNU General Public License version
+2 can be found in `/usr/share/common-licenses/GPL-2'.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/docs	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1 @@
+html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/rules	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,27 @@
+#!/usr/bin/make -f
+
+clean %:
+	dh $@ --with python2 --buildsystem=python_distutils
+
+build:
+	dh build --with python2 --buildsystem=python_distutils
+	$(MAKE) -C docs
+
+ifeq (,$(filter nocheck, $(DEB_BUILD_OPTIONS)))
+override_dh_auto_test:
+	cd tests &&  python run-tests.py --with-hg=`which hg`
+endif
+
+override_dh_python2:
+	# avoid conflict with mercurial's own hgext/__init__.py
+	find debian -name __init__.py -delete
+	dh_python2
+
+clean: clean-docs
+
+clean-docs:
+	rm -rf html
+	rm -f docs/static/logo-evolve.ico
+	rm -f docs/tutorials/tutorial.rst
+
+.PHONY: build clean clean-docs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/source/format	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1 @@
+3.0 (quilt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/README	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+doc generated with sphinx. tutorial exported using sphinxedhg
+
+http://hg.piranha.org.ua/sphinxedhg/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/conf.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,124 @@
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = []
+#autoclass_content = 'both'
+# Add any paths that contain templates here, relative to this directory.
+#templates_path = []
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General substitutions.
+project = 'Obsolete experimentation'
+copyright = '2010-2011, pierre-yves.david@logilab.fr'
+
+# The default replacements for |version| and |release|, also used in various
+# other places throughout the built documents.
+#
+# The short X.Y version.
+version = '0.0'
+# The full version, including alpha/beta/rc tags.
+release = '0.0'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+unused_docs = []
+
+# List of directories, relative to source directories, that shouldn't be searched
+# for source files.
+#exclude_dirs = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+
+# Options for HTML output
+# -----------------------
+
+# The style sheet to use for HTML and HTML Help pages. A file of that name
+# must exist either in Sphinx' static/ path, or in one of the custom paths
+# given in html_static_path.
+#html_style = 'sphinx-default.css'
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+html_title = project
+html_theme = 'haiku'
+html_theme_path = ['.']
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (within the static path) to place at the top of
+# the sidebar.
+#html_logo = 'logo-evolve.svg'
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+html_favicon = 'logo-evolve.ico'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_use_modindex = False
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+#html_copy_source = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = '.html'
+
+# Output file base name for HTML help builder.
+#htmlhelp_basename = ''
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/evolve-collaboration.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,135 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+------------------------------------------------
+Collaboration Using Evolve: A user story
+------------------------------------------------
+
+
+After having written some code for ticket #42, Alice starts a patch
+(this will be kind of like a 'work-in-progress' checkpoint
+initially)::
+
+    $ hg ci -m '[entities] remove magic'
+
+Instant patch! Note how the default phase of this changeset is (still)
+in "draft" state.
+
+This is easily checkable::
+
+    $ hg phase tip
+    827: draft
+
+See? Until the day it becomes a "public" changeset, this can be
+altered to no end. How? It happens with an explicit::
+
+    $ hg phase --public
+
+In practice, pushing to a "publishing" repository can also turn draft
+changesets into public ones. Older Mercurial releases are automatically
+"publishing" since they do not have the notion of non-public changesets
+(or mutable history).
+
+During the transition from older Mercurial servers to new ones, this will
+happen often, so be careful.
+
+Now let's come back to our patch. Next hour sees good progress and Alice
+wants to complete the patch with the recent stuff (all that's shown by
+an "hg diff") to share with a co-worker, Bob::
+
+    $ hg amend -m '[entities] fix frobulator (closes #42)'
+
+Note that we also fix the commit message. (For recovering MQ users: this
+is just like "hg qrefresh -m").
+
+Before leaving, let's push to the central shared repository. That will
+give Bob the signal that something is ripe for review / further amendments::
+
+    $ hg push # was done with a modern mercurial, draft phase is preserved
+
+The next day, Bob, who arrives very early, can immediately work out
+some glitches in the patch.
+
+He then starts two others, for ticket #43 and #44 and finally commits them.
+Then, as original worker arrives, he pushes his stuff.
+
+Alice, now equipped with enough properly sugared coffee to survive the
+next two hours::
+
+    $ hg pull
+
+Then::
+
+    $ hg up "tip ~ 2"
+
+brings her to yesterday's patch. Indeed the patch serial number has
+increased (827 still exists but has been obsoleted).
+
+She understands that her original patch has been altered. But how did it
+evolve?
+
+The enhanced hgview shows the two patches. By default only the most
+recent version of a patch is shown.
+
+Now, when Alice installed the mutable-history extensions, she got an alias
+that allows her to see the diff between two amendments, defined like this::
+
+    odiff=diff --rev 'limit(obsparents(.),1)' --rev .
+
+She can see exactly how Bob amended her work.
+
+* odiff
+
+
+Amend ... Stabilize
+--------------------
+
+Almost perfect! Alice just needs to fix a half dozen grammar oddities in
+the new docstrings and it will be publishable.
+
+Then, another round of:
+
+    $ hg amend
+
+and a quick look at hgview ... shows something strange (at first).
+
+Ticket #42 yesterday's version is still showing up, with two descendant lineages:
+
+* the next version, containing grammar fixes,
+
+* the two stacked changesets for tickets #43 .. 44 committed by Bob.
+
+Indeed, since this changeset still has non-obsolete descendant
+changesets it cannot be hidden. This branch (old version of #42 and
+the two descendants by C.W.) is said to be _unstable_.
+
+Why would one want such a state? Why not auto-stabilize each time "hg
+amend" is typed out?
+
+Alice for one, wouldn't want to merge each time she amends something that
+might conflict with the descendant changesets. Remember she is
+currently updating the very middle of an history!
+
+Being now done with grammar and typo fixes, Alice decides it is time to
+stabilize again the tree. She does::
+
+    $ hg evolve
+
+two times, one for each unstable descendant. The last time, hgview
+shows her a straight line again. Wow! that feels a bit like a
+well-planned surgical operation. At the end, the patient tree has
+been properly trimmed and any conflict properly handled.
+
+Of course nothing fancy really happened: each "stablilize" can be
+understood in terms of a rebase of the next unstable descendant to the
+newest version of its parent (including the possible manual conflict
+resolution intermission ...).
+
+Except that rebase is a destructive (it removes information from the
+repository), unrecoverable operation, and the "evolve + obsolete"
+combo, using changeset copy and obsolescence marker, provides evolution
+semantics by only adding new information to the repository (but more
+on that later).
+
+She pushes again.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/evolve-faq.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,215 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+---------------------------------------------------------------------
+Evolve How To
+---------------------------------------------------------------------
+
+
+
+Add a changeset: ``commit``
+------------------------------------------------------------
+
+Just use commit as usual. New changesets will be in the `draft` phase.
+
+Rewrite a changeset: ``commit --amend``
+------------------------------------------------------------
+
+It writes a new changeset combining working-directory parent changes and parent.
+It will work on any `draft` or `secret` changeset. It will not work on `public`
+changesets.
+
+To understand what the result of amend will be I use the two following
+aliases   [#]_::
+
+    # diff what amend will look like
+    pdiff=diff --rev .^
+
+    # status what amend will look like
+    pstatus=status --rev .^
+
+This command can even be invoked on changesets with children, provided
+none are public.
+
+.. [#] (defined by the evolve extension for you)
+
+
+
+Move a changeset: ``grab``
+------------------------------------------------------------
+
+You can use ``hg grab <rev>`` to move a rev at your current location, making the
+old version obsolete.
+
+.. note:: grab is an alias for ``hg rebase --dest . --rev $@; hg up <result>``
+
+
+Delete a changeset: ``prune``
+------------------------------------------------------------
+
+A new ``prune`` command allows removing a changeset.
+
+Just use ``hg prune <some-rev>``.
+
+
+Moving within the history: ``gdown`` and ``gup``
+------------------------------------------------------------
+
+While working on mutable part of the history you often need to move between
+mutable commits.
+
+You just need to use standard update to work with evolve. For convenience, you
+can use ``hg gup`` to move to the child commit or ``hg gdown`` to move to the parent commit.
+
+Those command have ``previous`` and ``next`` alias.
+
+.. note:: Those commands only exist for the convenience of getting qpush and qpop
+          feeling back.
+
+Collapse changesets: ``fold``
+------------------------------------------------------------
+
+You can use ``hg fold`` to collapse multiple changesets in a single one.
+
+It takes two forms:
+
+``hg fold <rev>`` folds everything from you current changeset to `<rev>`
+
+``hg fold -r <revset>`` fold everything changeset matching the revset together.
+
+Getting changes out of a commit
+------------------------------------------------------------
+
+The ``hg uncommit`` command lets you rewrite the parent commit without
+selected changed files. Target files content is not altered and
+appears again as "modified"::
+
+  $ hg st
+  M babar
+  M celestine
+  $ hg commit babar celestine
+  $ hg st
+  $ hg uncommit celestine
+  $ hg status
+  M celestine
+
+Split a changeset
+-----------------------
+
+To split on file boundaries, just use ``uncommit`` command.
+
+If you need a fine-grained split, there is no official command for that yet.
+However, it is easily achieved by manual operation::
+
+  ### you want to split changeset A: 42
+  # update to A parent
+  $ hg up 42^
+  # restore content from A
+  $ hg revert -r 42 --all
+  # partially commit the first part
+  $ hg record
+  # commit the second part
+  $ hg commit
+  # informs mercurial of what appened
+  # current changeset (.) and previous one (.^) replace A (42)
+  $ hg prune --new . --new .^ 42
+
+For more complexe scenario we recommend the use of the histedit_ extension.
+
+.. _histedit: http://mercurial.selenic.com/wiki/HisteditExtension
+
+
+Update my current work in progress after a pull
+----------------------------------------------
+
+Whenever you are working on some changesets, it is more likely that a pull
+will, eventually, import new changesets in your tree.
+
+And it is likely that you will want your work in progress changesets to be
+rebased on the top of this newly imported subtree.
+
+Doing so is only a matter of rebasing.
+
+
+
+Move multiple changesets: ``rebase``
+------------------------------------------------------------
+
+You can still use rebase to move a whole segment of the changeset graph together.
+
+.. warning:: Beware that rebasing changesets already obsolete will likely result in
+             divergent versions of the changesets.
+
+Resolve history troubles: ``evolve``
+------------------------------------------------------------
+
+When you rewrite (amend) a changeset with children without rewriting
+those children you create *unstable* changesets and *suspended
+obsolete* changesets.
+
+When you are finished amending a given changeset, you will want to
+declare it stable, in other words rebase its former descendants on its
+newest version.
+
+You can also use evolve to solve `bumped` and `divergent` changeset/
+
+
+Fix my history afterward: ``prune -n``
+------------------------------------------------------------
+
+Sometimes you need to create an obsolete marker by hand. This may happen when
+upstream has applied some of your patches for example.
+
+you can use ``hg prune <old-changeset> --succ <new-changeset>`` to add obsolete
+marker.
+
+View diff from the last amend
+------------------------------------------------------------
+
+An ``odiff`` alias have been added by ``enable.sh``
+
+::
+    [alias]
+    odiff = diff --rev 'limit(precursors(.),1)' --rev .
+
+View obsolete markers
+------------------------------------------------------------
+
+hgview_ is the only viewer that currently supports this feature. You
+need version 1.6.2
+
+.. _hgview: http://www.logilab.org/project/hgview/
+
+.. image:: figures/hgview-example.png
+    :scale: 50%
+
+
+You can also use a debug command
+
+    $ hg debugobsolete
+      5eb72dbe0cb4 e8db4aa611f6
+      c4cbebac3751 4f1c269eab68
+
+
+
+Important Note
+=====================================================================
+
+View change to your file
+------------------------------------------------------------
+
+Extinct changesets are hidden using the *hidden* feature of mercurial.
+
+Only ``hg log`` and ``hgview`` support it, other
+graphical viewer do not.
+
+You can use ``hg log --graph --hidden`` from the command line
+
+
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/evolve-good-practice.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,47 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+-----------------------------------------
+Good practice for (early) users of evolve
+-----------------------------------------
+
+Avoid unstability
+--------------------------------
+
+The less unstability you have the less you need to resolve.
+
+Evolve is not yet able to detect and solve every situation. And your mind is
+not ready neither.
+
+Branch as much as possible
+--------------------------------
+
+This is not MQ; you are not constrained to linear history.
+
+Making a branch per independent branch will help you avoid unstability
+and conflict.
+
+Rewrite your changes only
+------------------------------------------------
+
+There is no descent conflict detection and handling right now.
+Rewriting other people's changesets guarantees that you will get
+conflicts. Communicate with your fellow developers before trying to
+touch other people's work (which is a good pratice in any case).
+
+Using multiple branches will help you to achieve this goal.
+
+Prefer pushing unstability to touching other people changesets
+--------------------------------------------------------------
+
+
+If you have children changesets from other people that you don't really care
+about, prefer not altering them to risking a conflict by stabilizing them.
+
+
+Do not get too confident
+---------------------------
+
+This is an experimental extension and a complex concept. This is beautiful,
+powerful and robust on paper, but the tool and your mind may not be prepared for
+all situations yet.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/edit-is-rewrite-step1.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,509 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="773.15637"
+   height="740.48505"
+   id="svg3404"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="edit-is-rewrite-step1.svg">
+  <defs
+     id="defs3406">
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL"
+       style="overflow:visible">
+      <path
+         id="path6390"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path6334"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path6352"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6,0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path6331"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective3411" />
+    <inkscape:perspective
+       id="perspective5699"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5753"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5784"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.57"
+     inkscape:cx="215.04832"
+     inkscape:cy="422.53048"
+     inkscape:document-units="px"
+     showgrid="false"
+     inkscape:snap-global="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="776"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g6029"
+     fit-margin-top="5"
+     fit-margin-right="5"
+     fit-margin-bottom="5"
+     fit-margin-left="5">
+    <inkscape:grid
+       type="xygrid"
+       id="grid6315"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="5.0135572px"
+       originy="4.9994442px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3409">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="babar"
+     transform="translate(12.275017,-145.05915)">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot5626"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"><flowRegion
+         id="flowRegion5628"><rect
+           id="rect5630"
+           width="120.20815"
+           height="52.527931"
+           x="153.54318"
+           y="706.89001"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" /></flowRegion><flowPara
+         id="flowPara5636" /></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot5653"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><flowRegion
+         id="flowRegion5655"><rect
+           id="rect5657"
+           width="145"
+           height="49.285713"
+           x="565.71429"
+           y="683.07648" /></flowRegion><flowPara
+         id="flowPara5659" /></flowRoot>    <g
+       id="g10759"
+       transform="translate(582.45614,-14.035088)">
+      <g
+         transform="translate(-422.06809,-8.1395349)"
+         id="g6029">
+        <rect
+           style="fill:#ffffff;stroke:#000000;stroke-width:4.09652519;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3414"
+           width="291.61774"
+           height="107.33205"
+           x="68.11969"
+           y="793.33905" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+           x="75.714279"
+           y="835.2193"
+           id="text5643"><tspan
+             sodipodi:role="line"
+             id="tspan5645"
+             x="75.714279"
+             y="835.2193"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">&quot;;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan5889">Alice</tspan>;Babar&quot;</tspan><tspan
+             sodipodi:role="line"
+             x="75.714279"
+             y="885.2193"
+             id="tspan5649"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">⟶ <tspan
+   id="tspan6297"
+   style="fill:#c8ab37;stroke:#c8ab37">19b08111</tspan></tspan></text>
+      </g>
+      <g
+         transform="translate(-602.95683,-59.767404)"
+         id="g6023">
+        <rect
+           style="fill:#ffffff;stroke:#000000;stroke-width:6.09169483;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3414-7"
+           width="657.06445"
+           height="105.33688"
+           x="66.285065"
+           y="639.61066" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+           x="72.882072"
+           y="680.49335"
+           id="text5643-6"><tspan
+             sodipodi:role="line"
+             id="tspan5645-5"
+             x="72.882072"
+             y="680.49335"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">&quot;<tspan
+   id="tspan6203"
+   style="fill:#c8c4b7;stroke:#c8c4b7;stroke-opacity:1">19b08111</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan5885">Alice</tspan>;Babar<tspan
+   id="tspan6287"
+   style="fill:#ff0000;stroke:#ff0000">,Celeste</tspan>&quot;</tspan><tspan
+             sodipodi:role="line"
+             x="72.882072"
+             y="730.49335"
+             id="tspan5649-6"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">⟶ <tspan
+   id="tspan6035"
+   style="stroke:#009400;stroke-opacity:1"><tspan
+     id="tspan6039"
+     style="stroke:#00b500;stroke-opacity:1"><tspan
+       id="tspan6043"
+       style="stroke:#00ae00;stroke-opacity:1"><tspan
+         id="tspan6045"
+         style="stroke:#00ad00;stroke-opacity:1"><tspan
+           id="tspan6047"
+           style="stroke:#00ac00;stroke-opacity:1"><tspan
+             id="tspan6051"
+             style="stroke:#00aa00;stroke-opacity:1"><tspan
+               id="tspan6053"
+               style="stroke:#00a800;stroke-opacity:1"><tspan
+                 id="tspan6055"
+                 style="stroke:#00a600;stroke-opacity:1"><tspan
+                   id="tspan6057"
+                   style="stroke:#00a400;stroke-opacity:1"><tspan
+                     id="tspan6059"
+                     style="stroke:#00a100;stroke-opacity:1"><tspan
+                       id="tspan6061"
+                       style="stroke:#009f00;stroke-opacity:1"><tspan
+                         id="tspan6063"
+                         style="stroke:#009d00;stroke-opacity:1"><tspan
+                           id="tspan6065"
+                           style="stroke:#009900;stroke-opacity:1"><tspan
+                             id="tspan6067"
+                             style="stroke:#009800;stroke-opacity:1"><tspan
+                               id="tspan6069"
+                               style="stroke:#009700;stroke-opacity:1"><tspan
+                                 id="tspan6071"
+                                 style="stroke:#009800;stroke-opacity:1"><tspan
+                                   id="tspan6073"
+                                   style="stroke:#009900;stroke-opacity:1"><tspan
+                                   id="tspan6077"
+                                   style="stroke:#009c00;stroke-opacity:1"><tspan
+                                   id="tspan6079"
+                                   style="stroke:#009d00;stroke-opacity:1"><tspan
+                                   id="tspan6081"
+                                   style="stroke:#009e00;stroke-opacity:1"><tspan
+                                   id="tspan6083"
+                                   style="stroke:#009f00;stroke-opacity:1"><tspan
+                                   id="tspan6085"
+                                   style="stroke:#00a100;stroke-opacity:1"><tspan
+                                   id="tspan6087"
+                                   style="stroke:#00a200;stroke-opacity:1"><tspan
+                                   id="tspan6089"
+                                   style="stroke:#00a500;stroke-opacity:1"><tspan
+                                   id="tspan6091"
+                                   style="stroke:#00a600;stroke-opacity:1"><tspan
+                                   id="tspan6093"
+                                   style="stroke:#00a500;stroke-opacity:1"><tspan
+                                   id="tspan6095"
+                                   style="stroke:#00a200;stroke-opacity:1"><tspan
+                                   id="tspan6097"
+                                   style="stroke:#00a100;stroke-opacity:1"><tspan
+                                   id="tspan6099"
+                                   style="stroke:#009f00;stroke-opacity:1"><tspan
+                                   id="tspan6101"
+                                   style="stroke:#009c00;stroke-opacity:1"><tspan
+                                   id="tspan6103"
+                                   style="stroke:#009700;stroke-opacity:1"><tspan
+                                   id="tspan6105"
+                                   style="stroke:#009200;stroke-opacity:1"><tspan
+                                   id="tspan6107"
+                                   style="stroke:#008b00;stroke-opacity:1"><tspan
+                                   id="tspan6109"
+                                   style="stroke:#008500;stroke-opacity:1"><tspan
+                                   id="tspan6111"
+                                   style="stroke:#007c00;stroke-opacity:1"><tspan
+                                   id="tspan6113"
+                                   style="stroke:#007500;stroke-opacity:1"><tspan
+                                   id="tspan6115"
+                                   style="stroke:#006b00;stroke-opacity:1"><tspan
+                                   id="tspan6117"
+                                   style="stroke:#006100;stroke-opacity:1"><tspan
+                                   id="tspan6119"
+                                   style="stroke:#005800;stroke-opacity:1"><tspan
+                                   id="tspan6121"
+                                   style="stroke:#004d00;stroke-opacity:1"><tspan
+                                   id="tspan6123"
+                                   style="stroke:#004500;stroke-opacity:1"><tspan
+                                   id="tspan6125"
+                                   style="stroke:#003b00;stroke-opacity:1"><tspan
+                                   id="tspan6127"
+                                   style="stroke:#003300;stroke-opacity:1"><tspan
+                                   id="tspan6129"
+                                   style="stroke:#002900;stroke-opacity:1"><tspan
+                                   id="tspan6131"
+                                   style="stroke:#002200;stroke-opacity:1"><tspan
+                                   id="tspan6133"
+                                   style="stroke:#001900;stroke-opacity:1"><tspan
+                                   id="tspan6135"
+                                   style="stroke:#001300;stroke-opacity:1"><tspan
+                                   id="tspan6137"
+                                   style="stroke:#000b00;stroke-opacity:1"><tspan
+                                   id="tspan6139"
+                                   style="stroke:#000700;stroke-opacity:1"><tspan
+                                   id="tspan6141"
+                                   style="stroke:#000000;stroke-opacity:1"><tspan
+                                   id="tspan6145"
+                                   style="stroke:#d00000;stroke-opacity:1"><tspan
+                                   id="tspan6147"
+                                   style="stroke:#d10000;stroke-opacity:1"><tspan
+                                   id="tspan6149"
+                                   style="stroke:#d30000;stroke-opacity:1"><tspan
+                                   id="tspan6151"
+                                   style="stroke:#d80000;stroke-opacity:1"><tspan
+                                   id="tspan6153"
+                                   style="stroke:#db0000;stroke-opacity:1"><tspan
+                                   id="tspan6155"
+                                   style="stroke:#e10000;stroke-opacity:1"><tspan
+                                   id="tspan6157"
+                                   style="stroke:#e40000;stroke-opacity:1"><tspan
+                                   id="tspan6159"
+                                   style="stroke:#eb0000;stroke-opacity:1"><tspan
+                                   id="tspan6161"
+                                   style="stroke:#ef0000;stroke-opacity:1"><tspan
+                                   id="tspan6163"
+                                   style="stroke:#f50000;stroke-opacity:1"><tspan
+                                   id="tspan6165"
+                                   style="stroke:#f90000;stroke-opacity:1"><tspan
+                                   id="tspan6167"
+                                   style="stroke:#fd0000;stroke-opacity:1"><tspan
+                                   id="tspan6169"
+                                   style="stroke:#ff0000;stroke-opacity:1"><tspan
+                                   id="tspan6185"
+                                   style="fill:#010000;fill-opacity:1"><tspan
+                                   id="tspan6187"
+                                   style="fill:#4c0000;fill-opacity:1"><tspan
+                                   id="tspan6189"
+                                   style="fill:#810000;fill-opacity:1"><tspan
+                                   id="tspan6191"
+                                   style="fill:#c70000;fill-opacity:1"><tspan
+                                   id="tspan6193"
+                                   style="fill:#ee0000;fill-opacity:1"><tspan
+                                   id="tspan6195"
+                                   style="fill:#ff0000;fill-opacity:1"><tspan
+                                   id="tspan6279"
+                                   style="fill:#c8ab37"><tspan
+                                   id="tspan6281"
+                                   style="stroke:#c8ab37">925d8319          </tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></text>
+      </g>
+      <g
+         transform="translate(-582.55815,-32.55814)"
+         id="g6009">
+        <rect
+           style="fill:#ffffff;stroke:#000000;stroke-width:5.109797;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3414-7-0"
+           width="458.04636"
+           height="106.31878"
+           x="145.39543"
+           y="199.2028" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+           x="152.48338"
+           y="240.57646"
+           id="text5643-6-0"><tspan
+             sodipodi:role="line"
+             x="152.48338"
+             y="240.57646"
+             id="tspan5649-6-7"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">&quot;<tspan
+   id="tspan6305"
+   style="fill:#c8c4b7;stroke:#c8c4b7">6fcdd7fe</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan5877">Bob</tspan>;Babar&quot;</tspan><tspan
+             sodipodi:role="line"
+             x="152.48338"
+             y="290.57648"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="tspan5823"><tspan
+               id="tspan6309"
+               style="fill:#c8ab37;stroke:#c8ab37">⟶ebc2b5a1      </tspan></tspan><tspan
+             sodipodi:role="line"
+             x="152.48338"
+             y="340.57648"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="tspan5825" /></text>
+      </g>
+      <g
+         transform="translate(-574.4186,-84.34382)"
+         id="g6016">
+        <rect
+           style="fill:#ffffff;stroke:#000000;stroke-width:6.52355862;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3414-7-0-7"
+           width="756.63257"
+           height="104.90502"
+           x="-12.03722"
+           y="458.04919" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+           x="-5.6561542"
+           y="498.71597"
+           id="text5643-6-0-7"><tspan
+             sodipodi:role="line"
+             x="-5.6561542"
+             y="498.71597"
+             id="tspan5649-6-7-5"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">&quot;<tspan
+   id="tspan6289"
+   style="fill:#c8c4b7;stroke:#c8c4b7">925d8319</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan5881">Alice</tspan>;Babar,Celeste<tspan
+   id="tspan6303"
+   style="fill:#ff0000;stroke:#ff0000">,flore</tspan>&quot;</tspan><tspan
+             sodipodi:role="line"
+             x="-5.6561542"
+             y="548.71594"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="tspan5809">⟶ <tspan
+   id="tspan6299"
+   style="fill:#c8ab37;stroke:#c8ab37">6fcdd7fe                     </tspan></tspan><tspan
+             sodipodi:role="line"
+             x="-5.6561542"
+             y="598.71594"
+             style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="tspan5811" /></text>
+      </g>
+      <path
+         inkscape:connection-start="#g6016"
+         inkscape:connection-end="#g6009"
+         inkscape:connector-type="polyline"
+         id="path6317"
+         d="m -208.13954,373.70537 0,-100.74193"
+         style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g6023"
+         inkscape:connection-start="#g6029"
+         inkscape:connector-type="polyline"
+         id="path6321"
+         d="m -208.13953,785.19952 -1e-5,-100.01938"
+         style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2.79999995;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g6023"
+         inkscape:connection-start="#g6016"
+         inkscape:connector-type="polyline"
+         id="path6323"
+         d="m -208.13954,478.6104 0,101.23285"
+         style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#DotM)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/edit-is-rewrite-step2.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,832 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1597.0645"
+   height="768.49182"
+   id="svg3404"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="edit-is-rewrite-step2.svg">
+  <defs
+     id="defs3406">
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL"
+       style="overflow:visible">
+      <path
+         id="path6390"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mstart"
+       style="overflow:visible">
+      <path
+         id="path6334"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path6352"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6,0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path6331"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective3411" />
+    <inkscape:perspective
+       id="perspective5699"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5753"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective5784"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective11514"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-8"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker11520"
+       style="overflow:visible">
+      <path
+         id="path11522"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.57"
+     inkscape:cx="1091.46"
+     inkscape:cy="493.26469"
+     inkscape:document-units="px"
+     showgrid="false"
+     inkscape:snap-global="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="776"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer4"
+     fit-margin-top="5"
+     fit-margin-right="5"
+     fit-margin-bottom="5"
+     fit-margin-left="5">
+    <inkscape:grid
+       type="xygrid"
+       id="grid6315"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="424.40857px"
+       originy="4.9994042px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3409">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="babar"
+     transform="translate(888.68669,-124.06992)">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot5626"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"><flowRegion
+         id="flowRegion5628"><rect
+           id="rect5630"
+           width="120.20815"
+           height="52.527931"
+           x="153.54318"
+           y="706.89001"
+           style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" /></flowRegion><flowPara
+         id="flowPara5636" /></flowRoot>    <flowRoot
+       xml:space="preserve"
+       id="flowRoot5653"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><flowRegion
+         id="flowRegion5655"><rect
+           id="rect5657"
+           width="145"
+           height="49.285713"
+           x="565.71429"
+           y="683.07648" /></flowRegion><flowPara
+         id="flowPara5659" /></flowRoot>    <g
+       id="g6029"
+       transform="translate(-296.62861,-15.157079)">
+      <rect
+         y="793.33905"
+         x="68.11969"
+         height="107.33205"
+         width="291.61774"
+         id="rect3414"
+         style="fill:#ffffff;stroke:#000000;stroke-width:4.09652519000000037;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         id="text5643"
+         y="835.2193"
+         x="75.714279"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="835.2193"
+           x="75.714279"
+           id="tspan5645"
+           sodipodi:role="line">&quot;;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan12068">Alice</tspan>;Babar&quot;</tspan><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649"
+           y="885.2193"
+           x="75.714279"
+           sodipodi:role="line">⟶ <tspan
+   style="fill:#c8ab37;stroke:#c8ab37"
+   id="tspan6297">19b08111</tspan></tspan></text>
+    </g>
+    <g
+       id="g6023"
+       transform="translate(-897.69367,-93.100738)"
+       style="opacity:0.5">
+      <rect
+         y="639.61066"
+         x="66.285065"
+         height="105.33688"
+         width="657.06445"
+         id="rect3414-7"
+         style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 10;stroke-dashoffset:0" />
+      <text
+         id="text5643-6"
+         y="680.49335"
+         x="72.882072"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="680.49335"
+           x="72.882072"
+           id="tspan5645-5"
+           sodipodi:role="line">&quot;<tspan
+   style="fill:#c8c4b7;stroke:#c8c4b7;stroke-opacity:1"
+   id="tspan6203">19b08111</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan12072">Alice</tspan>;Babar<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan6287">,Celeste</tspan>&quot;</tspan><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649-6"
+           y="730.49335"
+           x="72.882072"
+           sodipodi:role="line">⟶ <tspan
+   style="stroke:#009400;stroke-opacity:1"
+   id="tspan6035"><tspan
+     style="stroke:#00b500;stroke-opacity:1"
+     id="tspan6039"><tspan
+       style="stroke:#00ae00;stroke-opacity:1"
+       id="tspan6043"><tspan
+         style="stroke:#00ad00;stroke-opacity:1"
+         id="tspan6045"><tspan
+           style="stroke:#00ac00;stroke-opacity:1"
+           id="tspan6047"><tspan
+             style="stroke:#00aa00;stroke-opacity:1"
+             id="tspan6051"><tspan
+               style="stroke:#00a800;stroke-opacity:1"
+               id="tspan6053"><tspan
+                 style="stroke:#00a600;stroke-opacity:1"
+                 id="tspan6055"><tspan
+                   style="stroke:#00a400;stroke-opacity:1"
+                   id="tspan6057"><tspan
+                     style="stroke:#00a100;stroke-opacity:1"
+                     id="tspan6059"><tspan
+                       style="stroke:#009f00;stroke-opacity:1"
+                       id="tspan6061"><tspan
+                         style="stroke:#009d00;stroke-opacity:1"
+                         id="tspan6063"><tspan
+                           style="stroke:#009900;stroke-opacity:1"
+                           id="tspan6065"><tspan
+                             style="stroke:#009800;stroke-opacity:1"
+                             id="tspan6067"><tspan
+                               style="stroke:#009700;stroke-opacity:1"
+                               id="tspan6069"><tspan
+                                 style="stroke:#009800;stroke-opacity:1"
+                                 id="tspan6071"><tspan
+                                   style="stroke:#009900;stroke-opacity:1"
+                                   id="tspan6073"><tspan
+                                   style="stroke:#009c00;stroke-opacity:1"
+                                   id="tspan6077"><tspan
+                                   style="stroke:#009d00;stroke-opacity:1"
+                                   id="tspan6079"><tspan
+                                   style="stroke:#009e00;stroke-opacity:1"
+                                   id="tspan6081"><tspan
+                                   style="stroke:#009f00;stroke-opacity:1"
+                                   id="tspan6083"><tspan
+                                   style="stroke:#00a100;stroke-opacity:1"
+                                   id="tspan6085"><tspan
+                                   style="stroke:#00a200;stroke-opacity:1"
+                                   id="tspan6087"><tspan
+                                   style="stroke:#00a500;stroke-opacity:1"
+                                   id="tspan6089"><tspan
+                                   style="stroke:#00a600;stroke-opacity:1"
+                                   id="tspan6091"><tspan
+                                   style="stroke:#00a500;stroke-opacity:1"
+                                   id="tspan6093"><tspan
+                                   style="stroke:#00a200;stroke-opacity:1"
+                                   id="tspan6095"><tspan
+                                   style="stroke:#00a100;stroke-opacity:1"
+                                   id="tspan6097"><tspan
+                                   style="stroke:#009f00;stroke-opacity:1"
+                                   id="tspan6099"><tspan
+                                   style="stroke:#009c00;stroke-opacity:1"
+                                   id="tspan6101"><tspan
+                                   style="stroke:#009700;stroke-opacity:1"
+                                   id="tspan6103"><tspan
+                                   style="stroke:#009200;stroke-opacity:1"
+                                   id="tspan6105"><tspan
+                                   style="stroke:#008b00;stroke-opacity:1"
+                                   id="tspan6107"><tspan
+                                   style="stroke:#008500;stroke-opacity:1"
+                                   id="tspan6109"><tspan
+                                   style="stroke:#007c00;stroke-opacity:1"
+                                   id="tspan6111"><tspan
+                                   style="stroke:#007500;stroke-opacity:1"
+                                   id="tspan6113"><tspan
+                                   style="stroke:#006b00;stroke-opacity:1"
+                                   id="tspan6115"><tspan
+                                   style="stroke:#006100;stroke-opacity:1"
+                                   id="tspan6117"><tspan
+                                   style="stroke:#005800;stroke-opacity:1"
+                                   id="tspan6119"><tspan
+                                   style="stroke:#004d00;stroke-opacity:1"
+                                   id="tspan6121"><tspan
+                                   style="stroke:#004500;stroke-opacity:1"
+                                   id="tspan6123"><tspan
+                                   style="stroke:#003b00;stroke-opacity:1"
+                                   id="tspan6125"><tspan
+                                   style="stroke:#003300;stroke-opacity:1"
+                                   id="tspan6127"><tspan
+                                   style="stroke:#002900;stroke-opacity:1"
+                                   id="tspan6129"><tspan
+                                   style="stroke:#002200;stroke-opacity:1"
+                                   id="tspan6131"><tspan
+                                   style="stroke:#001900;stroke-opacity:1"
+                                   id="tspan6133"><tspan
+                                   style="stroke:#001300;stroke-opacity:1"
+                                   id="tspan6135"><tspan
+                                   style="stroke:#000b00;stroke-opacity:1"
+                                   id="tspan6137"><tspan
+                                   style="stroke:#000700;stroke-opacity:1"
+                                   id="tspan6139"><tspan
+                                   style="stroke:#000000;stroke-opacity:1"
+                                   id="tspan6141"><tspan
+                                   style="stroke:#d00000;stroke-opacity:1"
+                                   id="tspan6145"><tspan
+                                   style="stroke:#d10000;stroke-opacity:1"
+                                   id="tspan6147"><tspan
+                                   style="stroke:#d30000;stroke-opacity:1"
+                                   id="tspan6149"><tspan
+                                   style="stroke:#d80000;stroke-opacity:1"
+                                   id="tspan6151"><tspan
+                                   style="stroke:#db0000;stroke-opacity:1"
+                                   id="tspan6153"><tspan
+                                   style="stroke:#e10000;stroke-opacity:1"
+                                   id="tspan6155"><tspan
+                                   style="stroke:#e40000;stroke-opacity:1"
+                                   id="tspan6157"><tspan
+                                   style="stroke:#eb0000;stroke-opacity:1"
+                                   id="tspan6159"><tspan
+                                   style="stroke:#ef0000;stroke-opacity:1"
+                                   id="tspan6161"><tspan
+                                   style="stroke:#f50000;stroke-opacity:1"
+                                   id="tspan6163"><tspan
+                                   style="stroke:#f90000;stroke-opacity:1"
+                                   id="tspan6165"><tspan
+                                   style="stroke:#fd0000;stroke-opacity:1"
+                                   id="tspan6167"><tspan
+                                   style="stroke:#ff0000;stroke-opacity:1"
+                                   id="tspan6169"><tspan
+                                   style="fill:#010000;fill-opacity:1"
+                                   id="tspan6185"><tspan
+                                   style="fill:#4c0000;fill-opacity:1"
+                                   id="tspan6187"><tspan
+                                   style="fill:#810000;fill-opacity:1"
+                                   id="tspan6189"><tspan
+                                   style="fill:#c70000;fill-opacity:1"
+                                   id="tspan6191"><tspan
+                                   style="fill:#ee0000;fill-opacity:1"
+                                   id="tspan6193"><tspan
+                                   style="fill:#ff0000;fill-opacity:1"
+                                   id="tspan6195"><tspan
+                                   style="fill:#c8ab37"
+                                   id="tspan6279"><tspan
+                                   style="stroke:#c8ab37"
+                                   id="tspan6281">925d8319          </tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></text>
+    </g>
+    <g
+       id="g6009"
+       transform="translate(-877.29499,-65.891474)"
+       style="opacity:0.5">
+      <rect
+         y="199.2028"
+         x="145.39543"
+         height="106.31878"
+         width="458.04636"
+         id="rect3414-7-0"
+         style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 10;stroke-dashoffset:0" />
+      <text
+         id="text5643-6-0"
+         y="240.57646"
+         x="152.48338"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649-6-7"
+           y="240.57646"
+           x="152.48338"
+           sodipodi:role="line">&quot;<tspan
+   style="fill:#c8c4b7;stroke:#c8c4b7"
+   id="tspan6305">6fcdd7fe</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan12080">Bob</tspan>;Babar&quot;</tspan><tspan
+           id="tspan5823"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="290.57648"
+           x="152.48338"
+           sodipodi:role="line"><tspan
+             style="fill:#c8ab37;stroke:#c8ab37"
+             id="tspan6309">⟶ebc2b5a1      </tspan></tspan><tspan
+           id="tspan5825"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="340.57648"
+           x="152.48338"
+           sodipodi:role="line" /></text>
+    </g>
+    <g
+       id="g6016"
+       transform="translate(-869.15544,-117.67716)"
+       style="opacity:0.5">
+      <rect
+         y="458.04919"
+         x="-12.03722"
+         height="104.90502"
+         width="756.63257"
+         id="rect3414-7-0-7"
+         style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 10;stroke-dashoffset:0" />
+      <text
+         id="text5643-6-0-7"
+         y="498.71597"
+         x="-5.6561542"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649-6-7-5"
+           y="498.71597"
+           x="-5.6561542"
+           sodipodi:role="line">&quot;<tspan
+   style="fill:#c8c4b7;stroke:#c8c4b7"
+   id="tspan6289">925d8319</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan12076">Alice</tspan>;Babar,Celeste<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan6303">,flore<tspan
+   style="fill:#000000;stroke:#000000"
+   id="tspan6313">&quot;</tspan></tspan></tspan><tspan
+           id="tspan5809"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="548.71594"
+           x="-5.6561542"
+           sodipodi:role="line">⟶ <tspan
+   style="fill:#c8ab37;stroke:#c8ab37"
+   id="tspan6299">6fcdd7fe                     </tspan></tspan><tspan
+           id="tspan5811"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="598.71594"
+           x="-5.6561542"
+           sodipodi:role="line" /></text>
+    </g>
+    <path
+       style="opacity:0.5;fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
+       d="m -502.87638,340.37203 0,-100.74192"
+       id="path6317"
+       inkscape:connector-type="polyline"
+       inkscape:connection-end="#g6009"
+       inkscape:connection-start="#g6016"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end-point="d4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="opacity:0.5;fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2.79999995000000013;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
+       d="M -179.61512,778.18197 -407.76284,651.8468"
+       id="path6321"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g6029"
+       inkscape:connection-end="#g6023"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end-point="d4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="opacity:0.5;fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#DotM)"
+       d="m -502.87638,445.27706 0,101.23286"
+       id="path6323"
+       inkscape:connector-type="polyline"
+       inkscape:connection-end="#g6023"
+       inkscape:connection-start="#g6016"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end-point="d4"
+       inkscape:connector-curvature="0" />
+    <g
+       id="g6023-5"
+       transform="translate(-72.254198,-94.854246)">
+      <rect
+         y="639.61066"
+         x="66.285065"
+         height="105.33688"
+         width="657.06445"
+         id="rect3414-7-5"
+         style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         id="text5643-6-3"
+         y="680.49335"
+         x="72.882072"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="680.49335"
+           x="72.882072"
+           id="tspan5645-5-0"
+           sodipodi:role="line">&quot;<tspan
+   style="fill:#c8c4b7;stroke:#c8c4b7;stroke-opacity:1"
+   id="tspan6203-2">19b08111</tspan>;<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan12040">Bob</tspan>;Babar,Celeste&quot;</tspan><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649-6-70"
+           y="730.49335"
+           x="72.882072"
+           sodipodi:role="line">⟶ <tspan
+   style="stroke:#009400;stroke-opacity:1"
+   id="tspan6035-4"><tspan
+     style="stroke:#00b500;stroke-opacity:1"
+     id="tspan6039-3"><tspan
+       style="stroke:#00ae00;stroke-opacity:1"
+       id="tspan6043-2"><tspan
+         style="stroke:#00ad00;stroke-opacity:1"
+         id="tspan6045-5"><tspan
+           style="stroke:#00ac00;stroke-opacity:1"
+           id="tspan6047-2"><tspan
+             style="stroke:#00aa00;stroke-opacity:1"
+             id="tspan6051-8"><tspan
+               style="stroke:#00a800;stroke-opacity:1"
+               id="tspan6053-9"><tspan
+                 style="stroke:#00a600;stroke-opacity:1"
+                 id="tspan6055-1"><tspan
+                   style="stroke:#00a400;stroke-opacity:1"
+                   id="tspan6057-7"><tspan
+                     style="stroke:#00a100;stroke-opacity:1"
+                     id="tspan6059-2"><tspan
+                       style="stroke:#009f00;stroke-opacity:1"
+                       id="tspan6061-8"><tspan
+                         style="stroke:#009d00;stroke-opacity:1"
+                         id="tspan6063-7"><tspan
+                           style="stroke:#009900;stroke-opacity:1"
+                           id="tspan6065-4"><tspan
+                             style="stroke:#009800;stroke-opacity:1"
+                             id="tspan6067-1"><tspan
+                               style="stroke:#009700;stroke-opacity:1"
+                               id="tspan6069-4"><tspan
+                                 style="stroke:#009800;stroke-opacity:1"
+                                 id="tspan6071-7"><tspan
+                                   style="stroke:#009900;stroke-opacity:1"
+                                   id="tspan6073-8"><tspan
+                                   style="stroke:#009c00;stroke-opacity:1"
+                                   id="tspan6077-6"><tspan
+                                   style="stroke:#009d00;stroke-opacity:1"
+                                   id="tspan6079-8"><tspan
+                                   style="stroke:#009e00;stroke-opacity:1"
+                                   id="tspan6081-8"><tspan
+                                   style="stroke:#009f00;stroke-opacity:1"
+                                   id="tspan6083-3"><tspan
+                                   style="stroke:#00a100;stroke-opacity:1"
+                                   id="tspan6085-6"><tspan
+                                   style="stroke:#00a200;stroke-opacity:1"
+                                   id="tspan6087-0"><tspan
+                                   style="stroke:#00a500;stroke-opacity:1"
+                                   id="tspan6089-0"><tspan
+                                   style="stroke:#00a600;stroke-opacity:1"
+                                   id="tspan6091-3"><tspan
+                                   style="stroke:#00a500;stroke-opacity:1"
+                                   id="tspan6093-6"><tspan
+                                   style="stroke:#00a200;stroke-opacity:1"
+                                   id="tspan6095-1"><tspan
+                                   style="stroke:#00a100;stroke-opacity:1"
+                                   id="tspan6097-5"><tspan
+                                   style="stroke:#009f00;stroke-opacity:1"
+                                   id="tspan6099-8"><tspan
+                                   style="stroke:#009c00;stroke-opacity:1"
+                                   id="tspan6101-8"><tspan
+                                   style="stroke:#009700;stroke-opacity:1"
+                                   id="tspan6103-6"><tspan
+                                   style="stroke:#009200;stroke-opacity:1"
+                                   id="tspan6105-2"><tspan
+                                   style="stroke:#008b00;stroke-opacity:1"
+                                   id="tspan6107-1"><tspan
+                                   style="stroke:#008500;stroke-opacity:1"
+                                   id="tspan6109-0"><tspan
+                                   style="stroke:#007c00;stroke-opacity:1"
+                                   id="tspan6111-9"><tspan
+                                   style="stroke:#007500;stroke-opacity:1"
+                                   id="tspan6113-5"><tspan
+                                   style="stroke:#006b00;stroke-opacity:1"
+                                   id="tspan6115-0"><tspan
+                                   style="stroke:#006100;stroke-opacity:1"
+                                   id="tspan6117-9"><tspan
+                                   style="stroke:#005800;stroke-opacity:1"
+                                   id="tspan6119-7"><tspan
+                                   style="stroke:#004d00;stroke-opacity:1"
+                                   id="tspan6121-7"><tspan
+                                   style="stroke:#004500;stroke-opacity:1"
+                                   id="tspan6123-3"><tspan
+                                   style="stroke:#003b00;stroke-opacity:1"
+                                   id="tspan6125-5"><tspan
+                                   style="stroke:#003300;stroke-opacity:1"
+                                   id="tspan6127-6"><tspan
+                                   style="stroke:#002900;stroke-opacity:1"
+                                   id="tspan6129-8"><tspan
+                                   style="stroke:#002200;stroke-opacity:1"
+                                   id="tspan6131-6"><tspan
+                                   style="stroke:#001900;stroke-opacity:1"
+                                   id="tspan6133-2"><tspan
+                                   style="stroke:#001300;stroke-opacity:1"
+                                   id="tspan6135-7"><tspan
+                                   style="stroke:#000b00;stroke-opacity:1"
+                                   id="tspan6137-6"><tspan
+                                   style="stroke:#000700;stroke-opacity:1"
+                                   id="tspan6139-8"><tspan
+                                   style="stroke:#000000;stroke-opacity:1"
+                                   id="tspan6141-5"><tspan
+                                   style="stroke:#d00000;stroke-opacity:1"
+                                   id="tspan6145-5"><tspan
+                                   style="stroke:#d10000;stroke-opacity:1"
+                                   id="tspan6147-1"><tspan
+                                   style="stroke:#d30000;stroke-opacity:1"
+                                   id="tspan6149-3"><tspan
+                                   style="stroke:#d80000;stroke-opacity:1"
+                                   id="tspan6151-7"><tspan
+                                   style="stroke:#db0000;stroke-opacity:1"
+                                   id="tspan6153-2"><tspan
+                                   style="stroke:#e10000;stroke-opacity:1"
+                                   id="tspan6155-6"><tspan
+                                   style="stroke:#e40000;stroke-opacity:1"
+                                   id="tspan6157-3"><tspan
+                                   style="stroke:#eb0000;stroke-opacity:1"
+                                   id="tspan6159-5"><tspan
+                                   style="stroke:#ef0000;stroke-opacity:1"
+                                   id="tspan6161-3"><tspan
+                                   style="stroke:#f50000;stroke-opacity:1"
+                                   id="tspan6163-3"><tspan
+                                   style="stroke:#f90000;stroke-opacity:1"
+                                   id="tspan6165-5"><tspan
+                                   style="stroke:#fd0000;stroke-opacity:1"
+                                   id="tspan6167-1"><tspan
+                                   style="stroke:#ff0000;stroke-opacity:1"
+                                   id="tspan6169-8"><tspan
+                                   style="fill:#010000;fill-opacity:1"
+                                   id="tspan6185-8"><tspan
+                                   style="fill:#4c0000;fill-opacity:1"
+                                   id="tspan6187-3"><tspan
+                                   style="fill:#810000;fill-opacity:1"
+                                   id="tspan6189-7"><tspan
+                                   style="fill:#c70000;fill-opacity:1"
+                                   id="tspan6191-5"><tspan
+                                   style="fill:#ee0000;fill-opacity:1"
+                                   id="tspan6193-3"><tspan
+                                   style="fill:#ff0000;fill-opacity:1"
+                                   id="tspan6195-6"><tspan
+                                   style="fill:#c8ab37"
+                                   id="tspan6279-2"><tspan
+                                   style="stroke:#c8ab37"
+                                   id="tspan6281-0">1a25964c          </tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></text>
+    </g>
+    <g
+       id="g6009-2"
+       transform="matrix(1.0149773,0,0,1,-61.013248,-67.644986)">
+      <rect
+         y="199.28004"
+         x="136.82903"
+         height="106.1643"
+         width="487.27863"
+         id="rect3414-7-0-9"
+         style="fill:#ffffff;stroke:#000000;stroke-width:5.15333318999999968;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         id="text5643-6-0-8"
+         y="240.57646"
+         x="152.48338"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649-6-7-0"
+           y="240.57646"
+           x="152.48338"
+           sodipodi:role="line">&quot;<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan6305-8">6d9e1549</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan12088">Bob</tspan>;Babar&quot;</tspan><tspan
+           id="tspan5823-0"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="290.57648"
+           x="152.48338"
+           sodipodi:role="line"><tspan
+             style="fill:#c8ab37;stroke:#c8ab37"
+             id="tspan6309-7"><tspan
+               style="fill:#000000;stroke:#000000"
+               id="tspan12060">⟶<tspan
+   style="fill:#c8ab37"
+   id="tspan12064"><tspan
+     style="stroke:#c8ab37"
+     id="tspan12066">dda72e36      </tspan></tspan></tspan></tspan></tspan><tspan
+           id="tspan5825-4"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="340.57648"
+           x="152.48338"
+           sodipodi:role="line" /></text>
+    </g>
+    <g
+       id="g6016-0"
+       transform="translate(-43.715968,-119.43067)">
+      <rect
+         y="458.04919"
+         x="-12.03722"
+         height="104.90502"
+         width="756.63257"
+         id="rect3414-7-0-7-4"
+         style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         id="text5643-6-0-7-1"
+         y="498.71597"
+         x="-5.6561542"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="tspan5649-6-7-5-4"
+           y="498.71597"
+           x="-5.6561542"
+           sodipodi:role="line">&quot;<tspan
+   style="fill:#c8c4b7;stroke:#c8c4b7"
+   id="tspan12056">1a25964c</tspan>;<tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan12084">Alice</tspan>;Babar,Celeste,<tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan12050">F</tspan>lore&quot;</tspan><tspan
+           id="tspan5809-3"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="548.71594"
+           x="-5.6561542"
+           sodipodi:role="line">⟶ <tspan
+   style="fill:#c8ab37;stroke:#c8ab37"
+   id="tspan6299-4">6d9e1549                     </tspan></tspan><tspan
+           id="tspan5811-3"
+           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           y="598.71594"
+           x="-5.6561542"
+           sodipodi:role="line" /></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
+       d="m 323.22154,338.61852 1.26559,-100.81916"
+       id="path6317-8"
+       inkscape:connector-type="polyline"
+       inkscape:connection-end="#g6009-2"
+       inkscape:connection-start="#g6016-0"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end-point="d4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#DotM)"
+       d="m 322.5631,443.52355 -1e-5,101.23286"
+       id="path6323-8"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g6016-0"
+       inkscape:connection-end="#g6023-5"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end-point="d4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker11520)"
+       d="M 231.51159,650.09329 10.076033,778.18197"
+       id="path11833"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g6023-5"
+       inkscape:connection-end="#g6029"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end-point="d4"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/error-conflicting.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="342 1890 349 427" width="349pt" height="427pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="blue"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id465_Graphic" filter="url(#Shadow)"/><use xl:href="#id466_Graphic" filter="url(#Shadow)"/><use xl:href="#id472_Graphic" filter="url(#Shadow)"/><use xl:href="#id471_Graphic" filter="url(#Shadow)"/><use xl:href="#id475_Graphic" filter="url(#Shadow)"/><use xl:href="#id718_Graphic" filter="url(#Shadow)"/><use xl:href="#id722_Graphic" filter="url(#Shadow)"/></g><g id="id465_Graphic"><rect x="362.1148" y="1906.3591" width="308.04614" height="386.30615" fill="white" fill-opacity=".5"/><rect x="362.1148" y="1906.3591" width="308.04614" height="386.30615" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id466_Graphic"><path d="M 460.24097 2058.0142 C 471.311 2069.0842 471.311 2087.032 460.24097 2098.102 C 449.171 2109.1721 431.22305 2109.1721 420.15308 2098.102 C 409.08304 2087.032 409.08304 2069.0842 420.15308 2058.0142 C 431.22305 2046.9441 449.171 2046.9441 460.24097 2058.0142" fill="yellow"/><path d="M 460.24097 2058.0142 C 471.311 2069.0842 471.311 2087.032 460.24097 2098.102 C 449.171 2109.1721 431.22305 2109.1721 420.15308 2098.102 C 409.08304 2087.032 409.08304 2069.0842 420.15308 2058.0142 C 431.22305 2046.9441 449.171 2046.9441 460.24097 2058.0142" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><text transform="translate(422.51984 2062.5581)" fill="maroon"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="maroon" x="6.1180782" y="25" textLength="23.118164">A’</tspan></text></g><line x1="508.74466" y1="2219.2893" x2="453.23264" y2="2104.9158" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id472_Graphic"><path d="M 525.1753 2222.4712 C 530.71033 2228.0061 530.71033 2236.9802 525.1753 2242.5151 C 519.64032 2248.0503 510.66632 2248.0503 505.13132 2242.5151 C 499.5963 2236.9802 499.5963 2228.0061 505.13132 2222.4712 C 510.66632 2216.936 519.64032 2216.936 525.1753 2222.4712" fill="black"/><path d="M 525.1753 2222.4712 C 530.71033 2228.0061 530.71033 2236.9802 525.1753 2242.5151 C 519.64032 2248.0503 510.66632 2248.0503 505.13132 2242.5151 C 499.5963 2236.9802 499.5963 2228.0061 505.13132 2222.4712 C 510.66632 2216.936 519.64032 2216.936 525.1753 2222.4712" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id471_Graphic"><path d="M 525.1753 2268.4714 C 530.71033 2274.0063 530.71033 2282.9805 525.1753 2288.5154 C 519.64032 2294.0505 510.66632 2294.0505 505.13132 2288.5154 C 499.5963 2282.9805 499.5963 2274.0063 505.13132 2268.4714 C 510.66632 2262.9363 519.64032 2262.9363 525.1753 2268.4714" fill="black"/><path d="M 525.1753 2268.4714 C 530.71033 2274.0063 530.71033 2282.9805 525.1753 2288.5154 C 519.64032 2294.0505 510.66632 2294.0505 505.13132 2288.5154 C 499.5963 2282.9805 499.5963 2274.0063 505.13132 2268.4714 C 510.66632 2262.9363 519.64032 2262.9363 525.1753 2268.4714" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="515.15332" y1="2247.1665" x2="515.15332" y2="2263.8201" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="515.15332" y1="2217.8198" x2="515.15332" y2="2168.1504" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id475_Graphic"><path d="M 535.19727 2119.26 C 546.26727 2130.3301 546.26727 2148.2778 535.19727 2159.3479 C 524.12732 2170.418 506.17935 2170.418 495.10938 2159.3479 C 484.03934 2148.2778 484.03934 2130.3301 495.10938 2119.26 C 506.17935 2108.19 524.12732 2108.19 535.19727 2119.26" fill="yellow" fill-opacity=".5"/><path d="M 535.19727 2119.26 C 546.26727 2130.3301 546.26727 2148.2778 535.19727 2159.3479 C 524.12732 2170.418 506.17935 2170.418 495.10938 2159.3479 C 484.03934 2148.2778 484.03934 2130.3301 495.10938 2119.26 C 506.17935 2108.19 524.12732 2108.19 535.19727 2119.26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(497.47614 2123.804)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="463.31088" y1="2096.9441" x2="482.01135" y2="2112.2239" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><g id="id718_Graphic"><path d="M 618.86163 2058.0142 C 629.93164 2069.0842 629.93164 2087.032 618.86163 2098.102 C 607.7917 2109.1721 589.8437 2109.1721 578.77374 2098.102 C 567.70374 2087.032 567.70374 2069.0842 578.77374 2058.0142 C 589.8437 2046.9441 607.7917 2046.9441 618.86163 2058.0142" fill="#ff6"/><path d="M 618.86163 2058.0142 C 629.93164 2069.0842 629.93164 2087.032 618.86163 2098.102 C 607.7917 2109.1721 589.8437 2109.1721 578.77374 2098.102 C 567.70374 2087.032 567.70374 2069.0842 578.77374 2058.0142 C 589.8437 2046.9441 607.7917 2046.9441 618.86163 2058.0142" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><text transform="translate(581.14056 2062.5581)" fill="maroon"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="maroon" x="3.2298946" y="25" textLength="28.894531">A’’</tspan></text></g><line x1="522.14453" y1="2219.5881" x2="584.5973" y2="2104.3074" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="574.73132" y1="2095.6902" x2="549.68903" y2="2114.0222" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="470.04346" y1="2078.1025" x2="568.97186" y2="2078.2505" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="7"/><g id="id722_Graphic"><path d="M 419.06274 2052.1411 C 459.63675 2034.4656 555.9978 2028.5737 616.85608 2041.7183 C 677.71497 2054.8606 641.8429 2119.8875 608.87634 2121.7026 C 575.90967 2123.5149 553.70416 2096.4143 553.70416 2096.4148 L 498.5315 2097.185 C 498.5315 2097.185 500.21146 2125.1155 452.02893 2119.2227 C 403.84808 2113.3301 378.49112 2069.8181 419.06274 2052.1411 Z" fill="red" fill-opacity=".15000001"/><path d="M 419.06274 2052.1411 C 459.63675 2034.4656 555.9978 2028.5737 616.85608 2041.7183 C 677.71497 2054.8606 641.8429 2119.8875 608.87634 2121.7026 C 575.90967 2123.5149 553.70416 2096.4143 553.70416 2096.4148 L 498.5315 2097.185 C 498.5315 2097.185 500.21146 2125.1155 452.02893 2119.2227 C 403.84808 2113.3301 378.49112 2069.8181 419.06274 2052.1411 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><text transform="translate(481.40805 1999.724)" fill="red"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="red" x=".11987305" y="16" textLength="43.429688">Confl</tspan><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="red" x="43.54956" y="16" textLength="45.330566">icting</tspan></text></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/error-extinct.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="286 1306 644 435" width="644pt" height="435pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="blue"><g><path d="M 1.6 0 L .8 -.60000002 L 0 0 L .8 .60000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id581_Graphic" filter="url(#Shadow)"/><use xl:href="#id423_Graphic" filter="url(#Shadow)"/><use xl:href="#id422_Graphic" filter="url(#Shadow)"/><use xl:href="#id415_Graphic" filter="url(#Shadow)"/><use xl:href="#id567_Graphic" filter="url(#Shadow)"/><use xl:href="#id588_Graphic" filter="url(#Shadow)"/><use xl:href="#id565_Graphic" filter="url(#Shadow)"/><use xl:href="#id592_Graphic" filter="url(#Shadow)"/><use xl:href="#id595_Graphic" filter="url(#Shadow)"/><use xl:href="#id597_Graphic" filter="url(#Shadow)"/><use xl:href="#id599_Graphic" filter="url(#Shadow)"/><use xl:href="#id604_Graphic" filter="url(#Shadow)"/></g><g id="id581_Graphic"><rect x="538.9198" y="1322.60815" width="371" height="394" fill="white" fill-opacity=".5"/><rect x="538.9198" y="1322.60815" width="371" height="394" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id423_Graphic"><rect x="306.04608" y="1379.2305" width="160" height="280.84644" fill="white" fill-opacity=".5"/><rect x="306.04608" y="1379.2305" width="160" height="280.84644" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id422_Graphic"><circle cx="384.04633" cy="1522.2869" r="28.346533" fill="red"/><circle cx="384.04633" cy="1522.2869" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(366.36917 1506.7869)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="371.27045" y1="1496.4152" x2="353.8865" y2="1461.212" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 394.06836 1589.8818 C 399.60336 1595.4169 399.60336 1604.3907 394.06836 1609.9258 C 388.53336 1615.4608 379.55936 1615.4608 374.02435 1609.9258 C 368.48935 1604.3907 368.48935 1595.4169 374.02435 1589.8818 C 379.55936 1584.3468 388.53336 1584.3468 394.06836 1589.8818" fill="black"/><path d="M 394.06836 1589.8818 C 399.60336 1595.4169 399.60336 1604.3907 394.06836 1609.9258 C 388.53336 1615.4608 379.55936 1615.4608 374.02435 1609.9258 C 368.48935 1604.3907 368.48935 1595.4169 374.02435 1589.8818 C 379.55936 1584.3468 388.53336 1584.3468 394.06836 1589.8818" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 394.06836 1635.8817 C 399.60336 1641.4167 399.60336 1650.3906 394.06836 1655.9257 C 388.53336 1661.4607 379.55936 1661.4607 374.02435 1655.9257 C 368.48935 1650.3906 368.48935 1641.4167 374.02435 1635.8817 C 379.55936 1630.3467 388.53336 1630.3467 394.06836 1635.8817" fill="black"/><path d="M 394.06836 1635.8817 C 399.60336 1641.4167 399.60336 1650.3906 394.06836 1655.9257 C 388.53336 1661.4607 379.55936 1661.4607 374.02435 1655.9257 C 368.48935 1650.3906 368.48935 1641.4167 374.02435 1635.8817 C 379.55936 1630.3467 388.53336 1630.3467 394.06836 1635.8817" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="384.05234" y1="1614.577" x2="384.05911" y2="1631.2305" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id415_Graphic"><circle cx="341.11066" cy="1435.3403" r="28.346533" fill="yellow"/><circle cx="341.11066" cy="1435.3403" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(323.43347 1419.8403)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="384.04633" y1="1551.1333" x2="384.04636" y2="1585.2306" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id567_Graphic"><path d="M 649.09058 1405.5331 C 665.0907 1366.53296 703.09058 1353.5331 727.09058 1382.5331 C 751.0899 1411.5319 743.091 1543.5331 730.0907 1547.5327 C 717.09076 1551.5322 681.09106 1566.5331 662.09082 1553.533 C 643.0905 1540.5328 633.091 1444.5325 649.09058 1405.5331 Z" fill="blue" fill-opacity=".15000001"/><path d="M 649.09058 1405.5331 C 665.0907 1366.53296 703.09058 1353.5331 727.09058 1382.5331 C 751.0899 1411.5319 743.091 1543.5331 730.0907 1547.5327 C 717.09076 1551.5322 681.09106 1566.5331 662.09082 1553.533 C 643.0905 1540.5328 633.091 1444.5325 649.09058 1405.5331 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><line x1="670.96875" y1="1499.7141" x2="608.7143" y2="1440.1655" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 763.18304 1609.1852 C 768.7181 1614.7202 768.7181 1623.6941 763.18304 1629.2291 C 757.64807 1634.7642 748.67407 1634.7642 743.1391 1629.2291 C 737.60406 1623.6941 737.60406 1614.7202 743.1391 1609.1852 C 748.67407 1603.6501 757.64807 1603.6501 763.18304 1609.1852" fill="black"/><path d="M 763.18304 1609.1852 C 768.7181 1614.7202 768.7181 1623.6941 763.18304 1629.2291 C 757.64807 1634.7642 748.67407 1634.7642 743.1391 1629.2291 C 737.60406 1623.6941 737.60406 1614.7202 743.1391 1609.1852 C 748.67407 1603.6501 757.64807 1603.6501 763.18304 1609.1852" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 763.18304 1655.1852 C 768.7181 1660.7202 768.7181 1669.6941 763.18304 1675.2291 C 757.64807 1680.7642 748.67407 1680.7642 743.1391 1675.2291 C 737.60406 1669.6941 737.60406 1660.7202 743.1391 1655.1852 C 748.67407 1649.6501 757.64807 1649.6501 763.18304 1655.1852" fill="black"/><path d="M 763.18304 1655.1852 C 768.7181 1660.7202 768.7181 1669.6941 763.18304 1675.2291 C 757.64807 1680.7642 748.67407 1680.7642 743.1391 1675.2291 C 737.60406 1669.6941 737.60406 1660.7202 743.1391 1655.1852 C 748.67407 1649.6501 757.64807 1649.6501 763.18304 1655.1852" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="753.16107" y1="1633.8804" x2="753.16107" y2="1650.5339" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id588_Graphic"><circle cx="587.5074" cy="1419.88025" r="28.346518" fill="yellow"/><path d="M 607.55133 1399.8363 C 618.62134 1410.90625 618.62134 1428.85425 607.55133 1439.9242 C 596.4814 1450.9943 578.5334 1450.9943 567.46344 1439.9242 C 556.39343 1428.85425 556.39343 1410.90625 567.46344 1399.8363 C 578.5334 1388.7662 596.4814 1388.7662 607.55133 1399.8363" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="16,9"/><text transform="translate(569.83026 1404.38025)" fill="red"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="red" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><g id="id565_Graphic"><circle cx="691.8144" cy="1519.6537" r="28.346518" fill="red" fill-opacity=".5"/><path d="M 711.85834 1499.6097 C 722.92834 1510.6797 722.92834 1528.6277 711.85834 1539.6976 C 700.7884 1550.7677 682.8404 1550.7677 671.77045 1539.6976 C 660.70044 1528.6277 660.70044 1510.6797 671.77045 1499.6097 C 682.8404 1488.5397 700.7884 1488.5397 711.85834 1499.6097" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(674.13727 1504.1537)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="706.95093" y1="1544.2173" x2="745.4616" y2="1606.7125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="784.66077" y1="1519.52405" x2="730.5608" y2="1519.5996" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><g id="id592_Graphic"><circle cx="813.5072" cy="1519.4838" r="28.346518" fill="red"/><circle cx="813.5072" cy="1519.4838" r="28.346518" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(795.8301 1503.9838)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">A'</tspan></text></g><line x1="798.56934" y1="1544.1689" x2="760.75946" y2="1606.6506" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id595_Graphic"><circle cx="426.39252" cy="1435.3403" r="28.346533" fill="#ff8000"/><circle cx="426.39252" cy="1435.3403" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(408.71533 1419.8403)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="8.2889767" y="25" textLength="18.776367">C</tspan></text></g><line x1="396.6806" y1="1496.3458" x2="413.75824" y2="1461.2814" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id597_Graphic"><circle cx="817.5072" cy="1419.88025" r="28.346518" fill="#ff8000"/><circle cx="817.5072" cy="1419.88025" r="28.346518" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(799.8301 1404.38025)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="5.807043" y="25" textLength="23.740234">C'</tspan></text></g><line x1="816.34967" y1="1448.7037" x2="814.66473" y2="1490.6603" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id599_Graphic"><circle cx="691.8144" cy="1419.88025" r="28.346518" fill="#ff8000" fill-opacity=".5"/><path d="M 711.85834 1399.8363 C 722.92834 1410.90625 722.92834 1428.85425 711.85834 1439.9242 C 700.7884 1450.9943 682.8404 1450.9943 671.77045 1439.9242 C 660.70044 1428.85425 660.70044 1410.90625 671.77045 1399.8363 C 682.8404 1388.7662 700.7884 1388.7662 711.85834 1399.8363" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(674.13727 1404.38025)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="8.2889767" y="25" textLength="18.776367">C</tspan></text></g><line x1="691.8196" y1="1448.7267" x2="691.82715" y2="1490.80725" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="788.66077" y1="1419.88025" x2="730.56085" y2="1419.88025" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><text transform="translate(557.16095 1491.30725)" fill="blue"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="blue" x=".13012695" y="16" textLength="72.739746">Obsolete</tspan></text><g id="id604_Graphic"><path d="M 548.05884 1393.9442 C 562.8297 1376.26746 597.9101 1370.3754 620.06622 1383.5195 C 642.22168 1396.6632 634.83734 1456.4924 622.8358 1458.3053 C 610.83466 1460.118 577.60083 1466.9171 560.06024 1461.0248 C 542.51978 1455.1326 533.28845 1411.6206 548.05884 1393.9442 Z" fill="#ff8000" fill-opacity=".15000001"/><path d="M 548.05884 1393.9442 C 562.8297 1376.26746 597.9101 1370.3754 620.06622 1383.5195 C 642.22168 1396.6632 634.83734 1456.4924 622.8358 1458.3053 C 610.83466 1460.118 577.60083 1466.9171 560.06024 1461.0248 C 542.51978 1455.1326 533.28845 1411.6206 548.05884 1393.9442 Z" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><text transform="translate(551.5074 1339.08044)" fill="#ff8000"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="#ff8000" x=".103271484" y="16" textLength="71.793457">Unstable</tspan></text><line x1="631.31445" y1="1469.267" x2="752.31433" y2="1469.267" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="4,3,1,3"/><text transform="translate(712.3343 1373.30725)" fill="maroon"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="maroon" x=".103271484" y="16" textLength="54.793457">extinct</tspan></text><text transform="translate(580.1609 1539.234)" fill="#008040"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="#008040" x=".13012695" y="16" textLength="89.739746">suspended</tspan></text></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/error-obsolete.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="125 130 278 413" width="278pt" height="413pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="blue"><g><path d="M 1.6 0 L .8 -.60000002 L 0 0 L .8 .60000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id411_Graphic" filter="url(#Shadow)"/><use xl:href="#id410_Graphic" filter="url(#Shadow)"/><use xl:href="#id408_Graphic" filter="url(#Shadow)"/><use xl:href="#id407_Graphic" filter="url(#Shadow)"/><use xl:href="#id395_Graphic" filter="url(#Shadow)"/><use xl:href="#id394_Graphic" filter="url(#Shadow)"/><use xl:href="#id391_Graphic" filter="url(#Shadow)"/><use xl:href="#id390_Graphic" filter="url(#Shadow)"/><use xl:href="#id724_Graphic" filter="url(#Shadow)"/></g><g id="id411_Graphic"><rect x="145" y="146" width="238" height="373" fill="white" fill-opacity=".5"/><rect x="145" y="146" width="238" height="373" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id410_Graphic"><circle cx="290.34644" cy="351.50146" r="28.34651" fill="red"/><circle cx="290.34644" cy="351.50146" r="28.34651" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(272.66928 336.0015)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="216.72533" y1="434.68497" x2="271.22772" y2="373.10342" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id408_Graphic"><circle cx="207.00024" cy="445.67322" r="14.173263" fill="black"/><circle cx="207.00024" cy="445.67322" r="14.173263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id407_Graphic"><circle cx="206.30316" cy="488.67325" r="14.173263" fill="black"/><circle cx="206.30316" cy="488.67325" r="14.173263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="206.7624" y1="460.34457" x2="206.541" y2="474.0019" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id395_Graphic"><circle cx="206.30315" cy="266.11322" r="24.803194" fill="#ff8000" fill-opacity=".5"/><path d="M 223.8416 248.57477 C 233.52788 258.26099 233.52788 273.96545 223.8416 283.65167 C 214.15538 293.33795 198.45091 293.33795 188.76469 283.65167 C 179.07841 273.96545 179.07841 258.26099 188.76469 248.57477 C 198.45091 238.88849 214.15538 238.88849 223.8416 248.57477" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(191.46063 250.61322)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="5.4543362" y="25" textLength="18.776367">C</tspan></text></g><g id="id394_Graphic"><circle cx="206.30315" cy="351.50146" r="24.803194" fill="yellow" fill-opacity=".5"/><path d="M 223.8416 333.96301 C 233.52788 343.64923 233.52788 359.3537 223.8416 369.03992 C 214.15538 378.7262 198.45091 378.7262 188.76469 369.03992 C 179.07841 359.3537 179.07841 343.64923 188.76469 333.96301 C 198.45091 324.27673 214.15538 324.27673 223.8416 333.96301" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(191.46063 336.00146)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.1716213" y="25" textLength="17.341797">B</tspan></text></g><line x1="206.89162" y1="431.00034" x2="206.49045" y2="376.80396" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="206.30315" y1="326.1983" x2="206.30315" y2="291.41638" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id391_Graphic"><circle cx="290.34644" cy="269.6565" r="28.346504" fill="yellow"/><circle cx="290.34644" cy="269.6565" r="28.346504" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(272.66928 254.15652)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.1180782" y="25" textLength="23.118164">B’</tspan></text></g><g id="id390_Graphic"><circle cx="290.34644" cy="187.80643" r="28.3465" fill="#ff8000"/><circle cx="290.34644" cy="187.80643" r="28.3465" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(272.66928 172.30643)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="5.400793" y="25" textLength="24.552734">C’</tspan></text></g><line x1="290.34644" y1="322.655" x2="290.34644" y2="298.50296" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="290.3464" y1="240.81003" x2="290.3464" y2="216.65289" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="269.24112" y1="207.47118" x2="232.0592" y2="242.11519" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><line x1="269.68039" y1="289.78198" x2="231.52318" y2="326.9411" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><text transform="translate(154.02574 177.80643)" fill="blue"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="blue" x=".13012695" y="16" textLength="72.739746">Obsolete</tspan></text><g id="id724_Graphic"><path d="M 167.93994 250.66768 C 182.56549 215.87003 217.30066 204.27097 239.23875 230.14594 C 261.17621 256.02005 253.8645 373.79715 241.98106 377.36597 C 230.09801 380.93442 197.19122 394.31873 179.82327 382.71951 C 162.45541 371.1203 153.31494 285.46457 167.93994 250.66768 Z" fill="blue" fill-opacity=".15000001"/><path d="M 167.93994 250.66768 C 182.56549 215.87003 217.30066 204.27097 239.23875 230.14594 C 261.17621 256.02005 253.8645 373.79715 241.98106 377.36597 C 230.09801 380.93442 197.19122 394.31873 179.82327 382.71951 C 162.45541 371.1203 153.31494 285.46457 167.93994 250.66768 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/error-unstable.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="305 746 658 435" width="658pt" height="435pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="blue"><g><path d="M 1.6 0 L .8 -.60000002 L 0 0 L .8 .60000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id672_Graphic" filter="url(#Shadow)"/><use xl:href="#id673_Graphic" filter="url(#Shadow)"/><use xl:href="#id674_Graphic" filter="url(#Shadow)"/><use xl:href="#id680_Graphic" filter="url(#Shadow)"/><use xl:href="#id689_Graphic" filter="url(#Shadow)"/><use xl:href="#id692_Graphic" filter="url(#Shadow)"/><use xl:href="#id702_Graphic" filter="url(#Shadow)"/><use xl:href="#id714_Graphic" filter="url(#Shadow)"/><use xl:href="#id688_Graphic" filter="url(#Shadow)"/></g><g id="id672_Graphic"><rect x="571.2267" y="762.23743" width="371" height="394" fill="white" fill-opacity=".5"/><rect x="571.2267" y="762.23743" width="371" height="394" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id673_Graphic"><rect x="325.28735" y="817.17517" width="160" height="280.84595" fill="white" fill-opacity=".5"/><rect x="325.28735" y="817.17517" width="160" height="280.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id674_Graphic"><circle cx="403.28784" cy="960.2316" r="28.346495" fill="red"/><circle cx="403.28784" cy="960.2316" r="28.346495" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(385.61066 944.73157)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="390.51233" y1="934.3598" x2="373.12732" y2="899.1533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 413.30957 1027.8263 C 418.84457 1033.3613 418.84457 1042.3352 413.30957 1047.87024 C 407.77457 1053.4053 398.80057 1053.4053 393.26556 1047.87024 C 387.73056 1042.3352 387.73056 1033.3613 393.26556 1027.8263 C 398.80057 1022.29126 407.77457 1022.29126 413.30957 1027.8263" fill="black"/><path d="M 413.30957 1027.8263 C 418.84457 1033.3613 418.84457 1042.3352 413.30957 1047.87024 C 407.77457 1053.4053 398.80057 1053.4053 393.26556 1047.87024 C 387.73056 1042.3352 387.73056 1033.3613 393.26556 1027.8263 C 398.80057 1022.29126 407.77457 1022.29126 413.30957 1027.8263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 413.30957 1073.8263 C 418.84457 1079.3613 418.84457 1088.3352 413.30957 1093.87024 C 407.77457 1099.4053 398.80057 1099.4053 393.26556 1093.87024 C 387.73056 1088.3352 387.73056 1079.3613 393.26556 1073.8263 C 398.80057 1068.29126 407.77457 1068.29126 413.30957 1073.8263" fill="black"/><path d="M 413.30957 1073.8263 C 418.84457 1079.3613 418.84457 1088.3352 413.30957 1093.87024 C 407.77457 1099.4053 398.80057 1099.4053 393.26556 1093.87024 C 387.73056 1088.3352 387.73056 1079.3613 393.26556 1073.8263 C 398.80057 1068.29126 407.77457 1068.29126 413.30957 1073.8263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="403.1737" y1="1052.5211" x2="403.04446" y2="1069.1771" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id680_Graphic"><circle cx="360.3518" cy="873.2816" r="28.346495" fill="yellow"/><circle cx="360.3518" cy="873.2816" r="28.346495" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.67462 857.7816)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="403.28772" y1="989.078" x2="403.2876" y2="1023.17505" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="718.2204" y1="930.3955" x2="718.53784" y2="874.86414" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 789.4242 1048.76624 C 794.95923 1054.3013 794.95923 1063.27515 789.4242 1068.8102 C 783.8892 1074.3452 774.9152 1074.3452 769.38025 1068.8102 C 763.8452 1063.27515 763.8452 1054.3013 769.38025 1048.76624 C 774.9152 1043.2312 783.8892 1043.2312 789.4242 1048.76624" fill="black"/><path d="M 789.4242 1048.76624 C 794.95923 1054.3013 794.95923 1063.27515 789.4242 1068.8102 C 783.8892 1074.3452 774.9152 1074.3452 769.38025 1068.8102 C 763.8452 1063.27515 763.8452 1054.3013 769.38025 1048.76624 C 774.9152 1043.2312 783.8892 1043.2312 789.4242 1048.76624" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 789.4242 1094.7661 C 794.95923 1100.30115 794.95923 1109.275 789.4242 1114.81006 C 783.8892 1120.3451 774.9152 1120.3451 769.38025 1114.81006 C 763.8452 1109.275 763.8452 1100.30115 769.38025 1094.7661 C 774.9152 1089.2311 783.8892 1089.2311 789.4242 1094.7661" fill="black"/><path d="M 789.4242 1094.7661 C 794.95923 1100.30115 794.95923 1109.275 789.4242 1114.81006 C 783.8892 1120.3451 774.9152 1120.3451 769.38025 1114.81006 C 763.8452 1109.275 763.8452 1100.30115 769.38025 1094.7661 C 774.9152 1089.2311 783.8892 1089.2311 789.4242 1094.7661" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="779.4223" y1="1073.4614" x2="779.44507" y2="1090.1149" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id689_Graphic"><circle cx="718.0555" cy="959.24146" r="28.34648" fill="red" fill-opacity=".5"/><path d="M 738.09943 939.19757 C 749.16943 950.2675 749.16943 968.2155 738.09943 979.28546 C 727.0295 990.35547 709.0815 990.35547 698.01154 979.28546 C 686.94153 968.2155 686.94153 950.2675 698.01154 939.19757 C 709.0815 928.12756 727.0295 928.12756 738.09943 939.19757" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(700.37836 943.7415)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="733.1928" y1="983.8047" x2="771.7024" y2="1046.2938" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="800.166" y1="959.2338" x2="756.80194" y2="959.2374" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><g id="id692_Graphic"><circle cx="829.01245" cy="959.23145" r="28.34648" fill="red"/><circle cx="829.01245" cy="959.23145" r="28.34648" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(811.33533 943.73145)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">A'</tspan></text></g><line x1="816.1477" y1="985.059" x2="785.96265" y2="1045.65894" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><text transform="translate(687.9198 889.0216)" fill="blue"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="blue" x=".13012695" y="16" textLength="72.739746">Obsolete</tspan></text><g id="id702_Graphic"><path d="M 678.60693 819.58557 C 693.37787 801.90887 728.45825 796.0167 750.6144 809.16083 C 772.7699 822.3045 765.3855 882.13373 753.38397 883.94666 C 741.3828 885.75934 708.149 892.5584 690.6084 886.66614 C 673.06793 880.7739 663.8366 837.26196 678.60693 819.58557 Z" fill="#ff8000" fill-opacity=".15000001"/><path d="M 678.60693 819.58557 C 693.37787 801.90887 728.45825 796.0167 750.6144 809.16083 C 772.7699 822.3045 765.3855 882.13373 753.38397 883.94666 C 741.3828 885.75934 708.149 892.5584 690.6084 886.66614 C 673.06793 880.7739 663.8366 837.26196 678.60693 819.58557 Z" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><text transform="translate(674.40198 774.87)" fill="#ff8000"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="#ff8000" x=".103271484" y="16" textLength="71.793457">Unstable</tspan></text><g id="id714_Graphic"><path d="M 679.4558 933.30554 C 694.08136 915.6288 728.81653 909.73657 750.75464 922.88074 C 772.6921 936.0244 765.38037 995.85364 753.49695 997.66656 C 741.6139 999.47925 708.7071 1006.2783 691.33917 1000.3861 C 673.9713 994.49384 664.8308 950.9819 679.4558 933.30554 Z" fill="blue" fill-opacity=".15000001"/><path d="M 679.4558 933.30554 C 694.08136 915.6288 728.81653 909.73657 750.75464 922.88074 C 772.6921 936.0244 765.38037 995.85364 753.49695 997.66656 C 741.6139 999.47925 708.7071 1006.2783 691.33917 1000.3861 C 673.9713 994.49384 664.8308 950.9819 679.4558 933.30554 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><g id="id688_Graphic"><circle cx="718.0555" cy="845.52167" r="28.34648" fill="yellow"/><path d="M 738.09943 825.47766 C 749.16943 836.5476 749.16943 854.4956 738.09943 865.56555 C 727.0295 876.63556 709.0815 876.63556 698.01154 865.56555 C 686.94153 854.4956 686.94153 836.5476 698.01154 825.47766 C 709.0815 814.40765 727.0295 814.40765 738.09943 825.47766" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="16,9"/><text transform="translate(700.37836 830.0216)" fill="red"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="red" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/example-1-update.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="47 621 426 249" width="426pt" height="249pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id464_Graphic" filter="url(#Shadow)"/><use xl:href="#id463_Graphic" filter="url(#Shadow)"/><use xl:href="#id465_Graphic" filter="url(#Shadow)"/><use xl:href="#id466_Graphic" filter="url(#Shadow)"/><use xl:href="#id472_Graphic" filter="url(#Shadow)"/><use xl:href="#id471_Graphic" filter="url(#Shadow)"/><use xl:href="#id475_Graphic" filter="url(#Shadow)"/></g><g id="id464_Graphic"><rect x="67" y="637.9972" width="141" height="207.84595" fill="white" fill-opacity=".5"/><rect x="67" y="637.9972" width="141" height="207.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id463_Graphic"><circle cx="128.71246" cy="718.34644" r="28.346489" fill="red"/><circle cx="128.71246" cy="718.34644" r="28.346489" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(111.035286 702.84644)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="128.93794" y1="770.9975" x2="128.83687" y2="747.19263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><circle cx="129.000244" cy="785.6706" r="14.173275" fill="black"/><circle cx="129.000244" cy="785.6706" r="14.173275" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="129.000244" cy="831.6706" r="14.173275" fill="black"/><circle cx="129.000244" cy="831.6706" r="14.173275" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="128.96199" y1="800.3438" x2="128.91855" y2="816.99756" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id465_Graphic"><rect x="277" y="637.99725" width="176" height="207.84595" fill="white" fill-opacity=".5"/><rect x="277" y="637.99725" width="176" height="207.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id466_Graphic"><circle cx="407.34644" cy="703.95215" r="28.346495" fill="red"/><circle cx="407.34644" cy="703.95215" r="28.346495" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(389.66928 688.45215)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.1180782" y="25" textLength="23.118164">A’</tspan></text></g><line x1="378.9428" y1="772.1349" x2="396.34451" y2="730.6261" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id472_Graphic"><circle cx="373.26825" cy="785.67053" r="14.173267" fill="black"/><circle cx="373.26825" cy="785.67053" r="14.173267" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id471_Graphic"><circle cx="373.26825" cy="831.67053" r="14.173267" fill="black"/><circle cx="373.26825" cy="831.67053" r="14.173267" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="373.26837" y1="800.34375" x2="373.26852" y2="816.9973" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="365.1879" y1="773.41925" x2="335.23688" y2="728.00824" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id475_Graphic"><circle cx="319.30762" cy="703.95215" r="28.346495" fill="red" fill-opacity=".5"/><path d="M 339.35156 683.9082 C 350.4216 694.97815 350.4216 712.92615 339.35156 723.9961 C 328.28159 735.0661 310.33365 735.0661 299.26367 723.9961 C 288.19363 712.92615 288.19363 694.97815 299.26367 683.9082 C 310.33365 672.8382 328.28159 672.8382 339.35156 683.9082" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(301.63046 688.45215)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="378.49997" y1="703.95215" x2="362.1041" y2="703.95215" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/example-2-split.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="27 1004 488 344" width="488pt" height="344pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98045" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id478_Graphic" filter="url(#Shadow)"/><use xl:href="#id479_Graphic" filter="url(#Shadow)"/><use xl:href="#id481_Graphic" filter="url(#Shadow)"/><use xl:href="#id482_Graphic" filter="url(#Shadow)"/><use xl:href="#id485_Graphic" filter="url(#Shadow)"/><use xl:href="#id488_Graphic" filter="url(#Shadow)"/><use xl:href="#id489_Graphic" filter="url(#Shadow)"/><use xl:href="#id491_Graphic" filter="url(#Shadow)"/><use xl:href="#id492_Graphic" filter="url(#Shadow)"/><use xl:href="#id495_Graphic" filter="url(#Shadow)"/></g><g id="id478_Graphic"><rect x="47" y="1087.16406" width="143" height="202.84595" fill="white" fill-opacity=".5"/><rect x="47" y="1087.16406" width="143" height="202.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id479_Graphic"><circle cx="118.50046" cy="1155.5105" r="28.346527" fill="#ff8000"/><circle cx="118.50046" cy="1155.5105" r="28.346527" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.823296 1140.0105)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.50029" y1="1215.66406" x2="118.50038" y2="1184.3569" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id481_Graphic"><path d="M 128.52223 1220.3153 C 134.05725 1225.85034 134.05725 1234.8242 128.52223 1240.35925 C 122.98724 1245.8943 114.013245 1245.8943 108.478256 1240.35925 C 102.94323 1234.8242 102.94323 1225.85034 108.478256 1220.3153 C 114.013245 1214.7803 122.98724 1214.7803 128.52223 1220.3153" fill="black"/><path d="M 128.52223 1220.3153 C 134.05725 1225.85034 134.05725 1234.8242 128.52223 1240.35925 C 122.98724 1245.8943 114.013245 1245.8943 108.478256 1240.35925 C 102.94323 1234.8242 102.94323 1225.85034 108.478256 1220.3153 C 114.013245 1214.7803 122.98724 1214.7803 128.52223 1220.3153" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id482_Graphic"><path d="M 128.52223 1265.8153 C 134.05725 1271.35034 134.05725 1280.3242 128.52223 1285.85925 C 122.98724 1291.3943 114.013245 1291.3943 108.478256 1285.85925 C 102.94323 1280.3242 102.94323 1271.35034 108.478256 1265.8153 C 114.013245 1260.2803 122.98724 1260.2803 128.52223 1265.8153" fill="black"/><path d="M 128.52223 1265.8153 C 134.05725 1271.35034 134.05725 1280.3242 128.52223 1285.85925 C 122.98724 1291.3943 114.013245 1291.3943 108.478256 1285.85925 C 102.94323 1280.3242 102.94323 1271.35034 108.478256 1265.8153 C 114.013245 1260.2803 122.98724 1260.2803 128.52223 1265.8153" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="118.500244" y1="1245.0105" x2="118.500244" y2="1261.1641" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id485_Graphic"><rect x="277" y="1020" width="218" height="303.08691" fill="white" fill-opacity=".5"/><rect x="277" y="1020" width="218" height="303.08691" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="384.58325" y1="1251.5149" x2="356.10718" y2="1212.0704" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id488_Graphic"><path d="M 403.19525 1253.3916 C 408.73026 1258.9266 408.73026 1267.9005 403.19525 1273.43555 C 397.66025 1278.9706 388.68625 1278.9706 383.15125 1273.43555 C 377.61624 1267.9005 377.61624 1258.9266 383.15125 1253.3916 C 388.68625 1247.8566 397.66025 1247.8566 403.19525 1253.3916" fill="black"/><path d="M 403.19525 1253.3916 C 408.73026 1258.9266 408.73026 1267.9005 403.19525 1273.43555 C 397.66025 1278.9706 388.68625 1278.9706 383.15125 1273.43555 C 377.61624 1267.9005 377.61624 1258.9266 383.15125 1253.3916 C 388.68625 1247.8566 397.66025 1247.8566 403.19525 1253.3916" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id489_Graphic"><path d="M 403.19525 1298.8916 C 408.73026 1304.4266 408.73026 1313.4005 403.19525 1318.93555 C 397.66025 1324.4706 388.68625 1324.4706 383.15125 1318.93555 C 377.61624 1313.4005 377.61624 1304.4266 383.15125 1298.8916 C 388.68625 1293.3566 397.66025 1293.3566 403.19525 1298.8916" fill="black"/><path d="M 403.19525 1298.8916 C 408.73026 1304.4266 408.73026 1313.4005 403.19525 1318.93555 C 397.66025 1324.4706 388.68625 1324.4706 383.15125 1318.93555 C 377.61624 1313.4005 377.61624 1304.4266 383.15125 1298.8916 C 388.68625 1293.3566 397.66025 1293.3566 403.19525 1298.8916" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="393.17325" y1="1278.0868" x2="393.17325" y2="1294.24036" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id491_Graphic"><circle cx="437.34644" cy="1188.5874" r="28.346533" fill="red"/><circle cx="437.34644" cy="1188.5874" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(419.66928 1171.0874)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="4.8351192" y="25" textLength="17.341797">A</tspan><tspan font-family="Helvetica" font-size="15" font-weight="500" x="22.176916" y="32" textLength="8.342285">1</tspan></text></g><g id="id492_Graphic"><circle cx="437.34644" cy="1105.34644" r="28.346533" fill="yellow"/><circle cx="437.34644" cy="1105.34644" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(419.66928 1087.84644)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="4.8351192" y="25" textLength="17.341797">A</tspan><tspan font-family="Helvetica" font-size="15" font-weight="500" x="22.176916" y="32" textLength="8.342285">2</tspan></text></g><line x1="400.63443" y1="1250.7749" x2="422.67834" y2="1213.4341" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="437.3464" y1="1159.741" x2="437.3464" y2="1134.1929" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id495_Graphic"><circle cx="339.34644" cy="1188.5874" r="28.346533" fill="#ff8000"/><path d="M 359.39038 1168.54346 C 370.46042 1179.6134 370.46042 1197.5614 359.39038 1208.63135 C 348.3204 1219.7014 330.37247 1219.7014 319.30249 1208.63135 C 308.23245 1197.5614 308.23245 1179.6134 319.30249 1168.54346 C 330.37247 1157.4734 348.3204 1157.4734 359.39038 1168.54346" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(321.66928 1173.0874)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="393.50046" y1="1152" x2="374.81244" y2="1164.626" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="417.8144" y1="1126.5746" x2="393.50046" y2="1153" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="416.74606" y1="1168.3948" x2="399" y2="1151" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/explain-troubles-concurrent-10-solution.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,929 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1290.3188"
+   height="561.80957"
+   id="svg12094"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="explain-troubles-concurrent-10-solution.svg">
+  <defs
+     id="defs12096">
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path4197"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMstart"
+       style="overflow:visible">
+      <path
+         id="path4188"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotS"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotS"
+       style="overflow:visible">
+      <path
+         id="path6396"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.2,0,0,0.2,1.48,0.2)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12102" />
+    <pattern
+       patternUnits="userSpaceOnUse"
+       width="165"
+       height="162.14285"
+       patternTransform="matrix(0.60606061,0,0,0.61674011,-218.21429,419.14788)"
+       id="pattern12110">
+      <rect
+         ry="78.664986"
+         y="2.4064403"
+         x="2.4064403"
+         height="157.32997"
+         width="160.18712"
+         id="rect12108"
+         style="opacity:0.75;fill:#008000;fill-opacity:0;fill-rule:nonzero;stroke:#008000;stroke-width:4.81288052;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    </pattern>
+    <inkscape:perspective
+       id="perspective12641"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12674"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12705"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12705-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12811"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12838"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12869"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective12869-3"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective8199"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective8230"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6393-0"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3407"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3409"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3411"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3413"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3415"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3417"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4197-6"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3421"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3423"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-15"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6393-08"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3824"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3826"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3828"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3830"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3832"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3834"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4197-67"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker3838"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3840"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="746.41279"
+     inkscape:cy="248.41683"
+     inkscape:document-units="px"
+     inkscape:current-layer="g3367-2"
+     showgrid="false"
+     inkscape:window-width="1215"
+     inkscape:window-height="776"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     fit-margin-left="5"
+     fit-margin-top="5"
+     fit-margin-right="5"
+     fit-margin-bottom="5" />
+  <metadata
+     id="metadata12099">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(1002.1836,-116.82843)">
+    <flowRoot
+       transform="translate(-214.28571,111.42857)"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       id="flowRoot12902"
+       xml:space="preserve"><flowRegion
+         id="flowRegion12904"><rect
+           y="320.93362"
+           x="-924.28571"
+           height="435.71429"
+           width="301.42856"
+           id="rect12906" /></flowRegion><flowPara
+         id="flowPara12908" /></flowRoot>    <g
+       id="g3367">
+      <g
+         style="opacity:0.5"
+         id="g8425">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-822.54358"
+           y="362.2431"
+           id="text12629-9-3-1"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0"
+             x="-822.54358"
+             y="362.2431">B</tspan></text>
+      </g>
+      <g
+         id="g10287">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-821.49023"
+           y="498.90979"
+           id="text12629-9-3-1-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7"
+             x="-821.49023"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(-10.776028,0)"
+         id="g12957">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <path
+         inkscape:connector-type="polyline"
+         id="path12950"
+         d="m -808.27602,393.39505 0,42.40522"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957"
+         inkscape:connector-type="polyline"
+         id="path12962"
+         d="m -808.27602,532.73368 0,39.73323"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <g
+         style="fill:#0000ff;stroke:#0000ff"
+         id="g8286">
+        <path
+           sodipodi:type="arc"
+           style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
+           x="-684.68646"
+           y="272.78107"
+           id="text12629-9-3-1-4"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76"
+             x="-684.68646"
+             y="272.78107">B'</tspan></text>
+      </g>
+      <g
+         style="fill:#008000;stroke:#008000"
+         id="g8294">
+        <path
+           sodipodi:type="arc"
+           style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
+           x="-960.40076"
+           y="272.78107"
+           id="text12629-9-3-1-4-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76-6"
+             x="-960.40076"
+             y="272.78107">B''</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g10287"
+         inkscape:connection-start="#g8286"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8303"
+         d="M 301.69976,93.326264 214.85234,235.78314"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g10287"
+         inkscape:connection-start="#g8294"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8305"
+         d="M 76.995186,93.326264 163.84261,235.78314"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425"
+         inkscape:connection-start="#g8286"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8430"
+         d="M 286.10442,78.162204 230.44767,114.28051"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425"
+         inkscape:connection-start="#g8294"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8432"
+         d="M 92.590525,78.162204 148.24727,114.28051"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g3367-2"
+       transform="translate(902.50523,0.6852693)">
+      <g
+         style="opacity:0.5"
+         id="g8425-2">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-64"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-822.54358"
+           y="362.2431"
+           id="text12629-9-3-1-6"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-1"
+             x="-822.54358"
+             y="362.2431">B</tspan></text>
+      </g>
+      <g
+         id="g10287-0">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-821.49023"
+           y="498.90979"
+           id="text12629-9-3-1-8-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-9"
+             x="-821.49023"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(-10.776028,0)"
+         id="g12957-1">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-0"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <path
+         inkscape:connector-type="polyline"
+         id="path12950-6"
+         d="m -808.27602,393.39505 0,42.40522"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957-1"
+         inkscape:connector-type="polyline"
+         id="path12962-4"
+         d="m -808.27602,532.73368 0,39.73323"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <g
+         style="opacity:0.5;fill:#0000ff;stroke:#0000ff"
+         id="g8286-9">
+        <path
+           sodipodi:type="arc"
+           style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
+           x="-684.68646"
+           y="272.78107"
+           id="text12629-9-3-1-4-0"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76-0"
+             x="-684.68646"
+             y="272.78107">B'</tspan></text>
+      </g>
+      <g
+         style="opacity:0.5;fill:#008000;stroke:#008000"
+         id="g8294-9">
+        <path
+           sodipodi:type="arc"
+           style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-2-8"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
+           x="-960.40076"
+           y="272.78107"
+           id="text12629-9-3-1-4-8-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76-6-0"
+             x="-960.40076"
+             y="272.78107">B''</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g10287-0"
+         inkscape:connection-start="#g8286-9"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8303-7"
+         d="M 301.69976,93.326264 214.85234,235.78314"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g10287-0"
+         inkscape:connection-start="#g8294-9"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8305-3"
+         d="M 76.995186,93.326264 163.84261,235.78314"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425-2"
+         inkscape:connection-start="#g8286-9"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8430-0"
+         d="M 286.10442,78.162204 230.44767,114.28051"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425-2"
+         inkscape:connection-start="#g8294-9"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8432-1"
+         d="M 92.590525,78.162204 148.24727,114.28051"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
+         d="m 1045.7143,-14.223969 -54.28573,30"
+         id="path5991"
+         inkscape:connector-curvature="0"
+         transform="translate(-1900.1287,205.96263)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
+         d="M 1141.4286,-4.2239685 1185.7143,24.34746"
+         id="path5993"
+         inkscape:connector-curvature="0"
+         transform="translate(-1900.1287,205.96263)" />
+      <path
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker3832)"
+         d="m 1068.5714,11.490317 -62.8571,88.571433 70,132.85714"
+         id="path5995"
+         inkscape:connector-curvature="0"
+         transform="translate(-1900.1287,205.96263)" />
+    </g>
+    <g
+       id="g5033">
+      <path
+         transform="matrix(0.33294398,0,0,0.48990327,-283.50522,302.96994)"
+         d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+         sodipodi:ry="100"
+         sodipodi:rx="147.14285"
+         sodipodi:cy="399.50504"
+         sodipodi:cx="-172.85715"
+         id="path12627-8-4-1-3"
+         style="opacity:0.5;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <text
+         id="text12629-9-3-1-0"
+         y="513.3316"
+         x="-355.32452"
+         style="font-size:40px;font-style:normal;font-weight:normal;opacity:0.5;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="513.3316"
+           x="-355.32452"
+           id="tspan12631-6-9-0-8"
+           sodipodi:role="line">B</tspan></text>
+    </g>
+    <g
+       id="g5028">
+      <path
+         transform="matrix(0.33294398,0,0,0.48990327,-146.5298,215.57827)"
+         d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+         sodipodi:ry="100"
+         sodipodi:rx="147.14285"
+         sodipodi:cy="399.50504"
+         sodipodi:cx="-172.85715"
+         id="path12627-8-4-1-5-1"
+         style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <text
+         id="text12629-9-3-1-4-9"
+         y="425.93994"
+         x="-218.34914"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="425.93994"
+           x="-218.34914"
+           id="tspan12631-6-9-0-76-8"
+           sodipodi:role="line">B'</tspan></text>
+    </g>
+    <g
+       id="g5023">
+      <path
+         transform="matrix(0.33294398,0,0,0.48990327,-422.14656,215.91205)"
+         d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+         sodipodi:ry="100"
+         sodipodi:rx="147.14285"
+         sodipodi:cy="399.50504"
+         sodipodi:cx="-172.85715"
+         id="path12627-8-4-1-5-2-4"
+         style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <text
+         id="text12629-9-3-1-4-8-3"
+         y="426.27371"
+         x="-493.96588"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="426.27371"
+           x="-493.96588"
+           id="tspan12631-6-9-0-76-6-4"
+           sodipodi:role="line">B''</tspan></text>
+    </g>
+    <g
+       id="g5018">
+      <path
+         transform="matrix(0.33294398,0,0,0.48990327,-285.48057,130.5673)"
+         d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+         sodipodi:ry="100"
+         sodipodi:rx="147.14285"
+         sodipodi:cy="399.50504"
+         sodipodi:cx="-172.85715"
+         id="path12627-8-4-1-5-1-4"
+         style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#007d7d;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <text
+         id="text12629-9-3-1-4-9-5"
+         y="340.92896"
+         x="-357.2999"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#007d7d;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="340.92896"
+           x="-357.2999"
+           id="tspan12631-6-9-0-76-8-9"
+           sodipodi:role="line"
+           style="fill:#007d7d;fill-opacity:1">B*</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
+       d="m 696.38676,145.20902 55.35962,33.86937"
+       id="path5038"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="3"
+       inkscape:connection-start="#g5018"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end="#g5028"
+       inkscape:connection-end-point="d4"
+       transform="translate(-997.6235,206.6479)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
+       d="m 613.03214,145.59088 -53.54791,33.43943"
+       id="path5040"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="3"
+       inkscape:connection-start="#g5018"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end="#g5023"
+       inkscape:connection-end-point="d4"
+       transform="translate(-997.6235,206.6479)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
+       d="m 559.41952,231.03876 55.65269,34.94632"
+       id="path5042"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="3"
+       inkscape:connection-start="#g5023"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end="#g5033"
+       inkscape:connection-end-point="d4"
+       transform="translate(-997.6235,206.6479)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
+       d="M 752.23638,231.00256 697.87211,265.6875"
+       id="path5044"
+       inkscape:connector-type="polyline"
+       inkscape:connector-curvature="3"
+       inkscape:connection-start="#g5028"
+       inkscape:connection-start-point="d4"
+       inkscape:connection-end="#g5033"
+       inkscape:connection-end-point="d4"
+       transform="translate(-997.6235,206.6479)" />
+    <g
+       transform="translate(441.1231,-152.43362)"
+       id="g5018-9">
+      <path
+         transform="matrix(0.33294398,0,0,0.48990327,-285.48057,130.5673)"
+         d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+         sodipodi:ry="100"
+         sodipodi:rx="147.14285"
+         sodipodi:cy="399.50504"
+         sodipodi:cx="-172.85715"
+         id="path12627-8-4-1-5-1-4-7"
+         style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#007d7d;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <text
+         id="text12629-9-3-1-4-9-5-1"
+         y="340.92896"
+         x="-357.2999"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#007d7d;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="340.92896"
+           x="-357.2999"
+           id="tspan12631-6-9-0-76-8-9-4"
+           sodipodi:role="line"
+           style="fill:#007d7d;fill-opacity:1">B*</tspan></text>
+    </g>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/explain-troubles-concurrent-10-sumup.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1451 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1424.2434"
+   height="1058.7501"
+   id="svg12964"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="explain-troubles-concurrent-10-sumup.svg">
+  <defs
+     id="defs12966">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4078"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4072"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4069"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12972" />
+    <inkscape:perspective
+       id="perspective13312"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13318"
+       style="overflow:visible">
+      <path
+         id="path13320"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13418"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         id="path6393-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13424"
+       style="overflow:visible">
+      <path
+         id="path13426"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13428"
+       style="overflow:visible">
+      <path
+         id="path13430"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13432"
+       style="overflow:visible">
+      <path
+         id="path13434"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path6456"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13438"
+       style="overflow:visible">
+      <path
+         id="path13440"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13583"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         id="path6393-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13589"
+       style="overflow:visible">
+      <path
+         id="path13591"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13593"
+       style="overflow:visible">
+      <path
+         id="path13595"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13743"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13749"
+       style="overflow:visible">
+      <path
+         id="path13751"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13753"
+       style="overflow:visible">
+      <path
+         id="path13755"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13757"
+       style="overflow:visible">
+      <path
+         id="path13759"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-3"
+       style="overflow:visible">
+      <path
+         id="path6456-4"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13763"
+       style="overflow:visible">
+      <path
+         id="path13765"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         id="path4072-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4072-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-29"
+       style="overflow:visible">
+      <path
+         id="path4072-70"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18500"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-4"
+       style="overflow:visible">
+      <path
+         id="path6393-20"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18588"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-47"
+       style="overflow:visible">
+      <path
+         id="path6393-22"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18594"
+       style="overflow:visible">
+      <path
+         id="path18596"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-31"
+       style="overflow:visible">
+      <path
+         id="path4197"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18791"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective18959"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-6"
+       style="overflow:visible">
+      <path
+         id="path6393-21"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18965"
+       style="overflow:visible">
+      <path
+         id="path18967"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1-4"
+       style="overflow:visible">
+      <path
+         id="path6393-3"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-2"
+       style="overflow:visible">
+      <path
+         id="path4197-2"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective19288"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-44"
+       style="overflow:visible">
+      <path
+         id="path6393-9"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker19294"
+       style="overflow:visible">
+      <path
+         id="path19296"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective20729"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-8"
+       style="overflow:visible">
+      <path
+         id="path6393-7"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker20735"
+       style="overflow:visible">
+      <path
+         id="path20737"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective20952"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-42"
+       style="overflow:visible">
+      <path
+         id="path6393-0"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker20958"
+       style="overflow:visible">
+      <path
+         id="path20960"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker20962"
+       style="overflow:visible">
+      <path
+         id="path20964"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-8"
+       style="overflow:visible">
+      <path
+         id="path4197-7"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective21100"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-22"
+       style="overflow:visible">
+      <path
+         id="path6393-8"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker21106"
+       style="overflow:visible">
+      <path
+         id="path21108"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker21110"
+       style="overflow:visible">
+      <path
+         id="path21112"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-313"
+       style="overflow:visible">
+      <path
+         id="path4197-6"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective21316"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-3"
+       style="overflow:visible">
+      <path
+         id="path6393-80"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker21322"
+       style="overflow:visible">
+      <path
+         id="path21324"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker21326"
+       style="overflow:visible">
+      <path
+         id="path21328"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker21330"
+       style="overflow:visible">
+      <path
+         id="path21332"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-6"
+       style="overflow:visible">
+      <path
+         id="path4197-66"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker21336"
+       style="overflow:visible">
+      <path
+         id="path21338"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.58"
+     inkscape:cx="455.19061"
+     inkscape:cy="725.32431"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="776"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata12969">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(312.26788,374.46262)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="290.07355"
+       y="683.72107"
+       id="text13894"><tspan
+         sodipodi:role="line"
+         id="tspan13896"
+         x="290.07355"
+         y="683.72107">Local</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="176.47943"
+       y="147.90836"
+       id="text13898"><tspan
+         sodipodi:role="line"
+         id="tspan13900"
+         x="176.47943"
+         y="147.90836">Distant</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="731.52625"
+       y="360.52893"
+       id="text13902"><tspan
+         sodipodi:role="line"
+         id="tspan13904"
+         x="731.52625"
+         y="360.52893">final = <tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan14035">divergent</tspan></tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M -149.51243,71.715908 116.10904,-98.285798"
+       id="path14093" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M -136.88118,173.93586 140.19146,310.32109"
+       id="path14093-1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 358.73418,-10.742763 276.5932,40.995518"
+       id="path14093-4"
+       inkscape:transform-center-x="38.2665"
+       inkscape:transform-center-y="-14.191534" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M 385.49434,405.82501 666.42726,306.55019"
+       id="path14093-42" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="-316.03741"
+       y="327.08148"
+       id="text13894-3"><tspan
+         sodipodi:role="line"
+         id="tspan13896-8"
+         x="-316.03741"
+         y="327.08148">initial</tspan></text>
+    <g
+       transform="translate(536.95625,-391.35879)"
+       id="g20705">
+      <g
+         transform="translate(0,5.2380981)"
+         id="g12933-0">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-98"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-811.76758"
+           y="357.005"
+           id="text12629-9-3-1-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-3"
+             x="-811.76758"
+             y="357.005">B</tspan></text>
+      </g>
+      <g
+         id="g12945">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         id="g12957">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g12945"
+         inkscape:connection-start="#g12933-0"
+         inkscape:connector-type="polyline"
+         id="path12950-93"
+         d="m -797.5,393.91867 0,41.35798"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957"
+         inkscape:connection-start="#g12945"
+         inkscape:connector-type="polyline"
+         id="path12962"
+         d="m -797.5,533.2573 0,38.68599"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="translate(1065.0106,-10.420874)"
+       id="g20918">
+      <g
+         style="opacity:0.5"
+         id="g8425">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-91"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-822.54358"
+           y="362.2431"
+           id="text12629-9-3-1-3"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-8"
+             x="-822.54358"
+             y="362.2431">B</tspan></text>
+      </g>
+      <g
+         id="g10287">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-821.49023"
+           y="498.90979"
+           id="text12629-9-3-1-8-1"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-6"
+             x="-821.49023"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(-10.776028,0)"
+         id="g12957-7">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-4"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-9"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904"><rect
+             id="rect12906"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908" /></flowRoot>      <path
+         inkscape:connector-type="polyline"
+         id="path12950-6"
+         d="m -808.27602,393.39505 0,42.40522"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957-7"
+         inkscape:connector-type="polyline"
+         id="path12962-1"
+         d="m -808.27602,532.73368 0,39.73323"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <g
+         style="fill:#0000ff;stroke:#0000ff"
+         id="g8286">
+        <path
+           sodipodi:type="arc"
+           style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
+           x="-684.68646"
+           y="272.78107"
+           id="text12629-9-3-1-4"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76-6"
+             x="-684.68646"
+             y="272.78107">B'</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g10287"
+         inkscape:connection-start="#g8286"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8303"
+         d="M 301.69976,93.326264 214.85234,235.78314"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425"
+         inkscape:connection-start="#g8286"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8430"
+         d="M 286.10442,78.162204 230.44767,114.28051"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="translate(1068.385,-581.11052)"
+       id="g21066">
+      <g
+         style="opacity:0.5"
+         id="g8425-4">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-50"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-822.54358"
+           y="362.2431"
+           id="text12629-9-3-1-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-9"
+             x="-822.54358"
+             y="362.2431">B</tspan></text>
+      </g>
+      <g
+         id="g10287-2">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-5"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-821.49023"
+           y="498.90979"
+           id="text12629-9-3-1-8-7"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-9"
+             x="-821.49023"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(-10.776028,0)"
+         id="g12957-71">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-47"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-0"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-66"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902-9"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904-70"><rect
+             id="rect12906-8"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908-61" /></flowRoot>      <path
+         inkscape:connector-type="polyline"
+         id="path12950-7"
+         d="m -808.27602,393.39505 0,42.40522"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957-71"
+         inkscape:connector-type="polyline"
+         id="path12962-3"
+         d="m -808.27602,532.73368 0,39.73323"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <g
+         style="fill:#008000;stroke:#008000"
+         id="g8294">
+        <path
+           sodipodi:type="arc"
+           style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
+           x="-960.40076"
+           y="272.78107"
+           id="text12629-9-3-1-4-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76-6-5"
+             x="-960.40076"
+             y="272.78107">B''</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g10287-2"
+         inkscape:connection-start="#g8294"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8305"
+         d="M 76.995186,93.326264 163.84261,235.78314"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425-4"
+         inkscape:connection-start="#g8294"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8432"
+         d="M 92.590525,78.162204 148.24727,114.28051"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="translate(1682.2151,-370.76569)"
+       id="g21276">
+      <g
+         style="opacity:0.5"
+         id="g8425-1">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-822.54358"
+           y="362.2431"
+           id="text12629-9-3-1"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0"
+             x="-822.54358"
+             y="362.2431">B</tspan></text>
+      </g>
+      <g
+         id="g10287-7">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-821.49023"
+           y="498.90979"
+           id="text12629-9-3-1-8-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-1"
+             x="-821.49023"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(-10.776028,0)"
+         id="g12957-9">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-0"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-3"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-6"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902-3"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904-7"><rect
+             id="rect12906-6"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908-5" /></flowRoot>      <path
+         inkscape:connector-type="polyline"
+         id="path12950"
+         d="m -808.27602,393.39505 0,42.40522"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957-9"
+         inkscape:connector-type="polyline"
+         id="path12962-5"
+         d="m -808.27602,532.73368 0,39.73323"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <g
+         style="fill:#ff0000;stroke:#ff0000"
+         id="g8286-2">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-4"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
+           x="-684.68646"
+           y="272.78107"
+           id="text12629-9-3-1-4-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76"
+             x="-684.68646"
+             y="272.78107">B'</tspan></text>
+      </g>
+      <g
+         style="fill:#ff0000;stroke:#ff0000"
+         id="g8294-2">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-2-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
+           x="-960.40076"
+           y="272.78107"
+           id="text12629-9-3-1-4-8-3"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-76-6-59"
+             x="-960.40076"
+             y="272.78107">B''</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g10287-7"
+         inkscape:connection-start="#g8286-2"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8303-8"
+         d="M 301.69976,93.326264 214.85234,235.78314"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g10287-7"
+         inkscape:connection-start="#g8294-2"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8305-0"
+         d="M 76.995186,93.326264 163.84261,235.78314"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425-1"
+         inkscape:connection-start="#g8286-2"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8430-0"
+         d="M 286.10442,78.162204 230.44767,114.28051"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g8425-1"
+         inkscape:connection-start="#g8294-2"
+         inkscape:connector-type="polyline"
+         transform="translate(-997.6235,206.6479)"
+         id="path8432-1"
+         d="M 92.590525,78.162204 148.24727,114.28051"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/explain-troubles-latecomer-10-sumup.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1039 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1311.8625"
+   height="879.2406"
+   id="svg12964"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="explain-troubles-latecomer-10-sumup.svg">
+  <defs
+     id="defs12966">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4078"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4072"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4069"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12972" />
+    <inkscape:perspective
+       id="perspective13312"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13318"
+       style="overflow:visible">
+      <path
+         id="path13320"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13418"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         id="path6393-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13424"
+       style="overflow:visible">
+      <path
+         id="path13426"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13428"
+       style="overflow:visible">
+      <path
+         id="path13430"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13432"
+       style="overflow:visible">
+      <path
+         id="path13434"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path6456"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13438"
+       style="overflow:visible">
+      <path
+         id="path13440"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13583"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         id="path6393-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13589"
+       style="overflow:visible">
+      <path
+         id="path13591"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13593"
+       style="overflow:visible">
+      <path
+         id="path13595"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13743"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13749"
+       style="overflow:visible">
+      <path
+         id="path13751"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13753"
+       style="overflow:visible">
+      <path
+         id="path13755"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13757"
+       style="overflow:visible">
+      <path
+         id="path13759"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-3"
+       style="overflow:visible">
+      <path
+         id="path6456-4"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13763"
+       style="overflow:visible">
+      <path
+         id="path13765"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         id="path4072-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4072-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-29"
+       style="overflow:visible">
+      <path
+         id="path4072-70"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18500"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-4"
+       style="overflow:visible">
+      <path
+         id="path6393-20"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18588"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-47"
+       style="overflow:visible">
+      <path
+         id="path6393-22"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18594"
+       style="overflow:visible">
+      <path
+         id="path18596"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-31"
+       style="overflow:visible">
+      <path
+         id="path4197"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18791"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective18959"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-6"
+       style="overflow:visible">
+      <path
+         id="path6393-21"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18965"
+       style="overflow:visible">
+      <path
+         id="path18967"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1-4"
+       style="overflow:visible">
+      <path
+         id="path6393-3"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-2"
+       style="overflow:visible">
+      <path
+         id="path4197-2"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective19288"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-44"
+       style="overflow:visible">
+      <path
+         id="path6393-9"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker19294"
+       style="overflow:visible">
+      <path
+         id="path19296"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.58"
+     inkscape:cx="455.19061"
+     inkscape:cy="630.49672"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1918"
+     inkscape:window-height="1165"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata12969">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(312.26788,289.78072)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="279.72873"
+       y="588.89349"
+       id="text13894"><tspan
+         sodipodi:role="line"
+         id="tspan13896"
+         x="279.72873"
+         y="588.89349">Local</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="176.47943"
+       y="147.90836"
+       id="text13898"><tspan
+         sodipodi:role="line"
+         id="tspan13900"
+         x="176.47943"
+         y="147.90836">Distant</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="731.52625"
+       y="360.52893"
+       id="text13902"><tspan
+         sodipodi:role="line"
+         id="tspan13904"
+         x="731.52625"
+         y="360.52893">final = <tspan
+   style="fill:#ff0000;stroke:#ff0000"
+   id="tspan14035">tardif</tspan></tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M -149.51243,71.715908 116.10904,-98.285798"
+       id="path14093" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M -136.88118,173.93586 140.19146,310.32109"
+       id="path14093-1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 358.73418,-10.742763 276.5932,40.995518"
+       id="path14093-4"
+       inkscape:transform-center-x="38.2665"
+       inkscape:transform-center-y="-14.191534" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M 385.49434,405.82501 666.42726,306.55019"
+       id="path14093-42" />
+    <g
+       transform="translate(536.84443,-411.12056)"
+       id="g18477">
+      <g
+         id="g12945">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         id="g12957">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904"><rect
+             id="rect12906"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908" /></flowRoot>      <path
+         inkscape:connection-end="#g12957"
+         inkscape:connection-start="#g12945"
+         inkscape:connector-type="polyline"
+         id="path12962"
+         d="m -797.5,533.2573 0,38.68599"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+    </g>
+    <g
+       transform="translate(1048.9196,-141.60299)"
+       id="g18559">
+      <g
+         style="opacity:0.5"
+         id="g12945-6">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-5"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-9"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         id="g12957-33">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-80"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-1"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-0"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902-9"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904-8"><rect
+             id="rect12906-6"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908-3" /></flowRoot>      <path
+         inkscape:connection-end="#g12957-33"
+         inkscape:connection-start="#g12945-6"
+         inkscape:connector-type="polyline"
+         id="path12962-09"
+         d="m -797.5,533.2573 0,38.68599"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <g
+         id="g3273">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-4"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-598.58143,208.13369)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-669.34741"
+           y="418.49533"
+           id="text12629-9-3-1-8-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-7-4"
+             x="-669.34741"
+             y="418.49533">A'</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g12957-33"
+         inkscape:connection-start="#g3273"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,352.36219)"
+         id="path3278"
+         d="M 166.11979,92.547868 78.227679,227.51388"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connection-end="#g12945-6"
+         inkscape:connection-start="#g3273"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,352.36219)"
+         id="path3280"
+         d="M 150.2668,75.717222 94.08067,107.67788"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="-316.03741"
+       y="327.08148"
+       id="text13894-3"><tspan
+         sodipodi:role="line"
+         id="tspan13896-8"
+         x="-316.03741"
+         y="327.08148">initial</tspan></text>
+    <g
+       transform="translate(1607.395,-370.37344)"
+       id="g18925">
+      <g
+         transform="translate(0,5.2380981)"
+         id="g12933">
+        <path
+           sodipodi:type="arc"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
+           x="-841.76758"
+           y="358.43356"
+           id="text12629-9-3-1"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0"
+             x="-841.76758"
+             y="358.43356">v4.2</tspan></text>
+      </g>
+      <g
+         id="g12945-7">
+        <path
+           sodipodi:type="arc"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8-25"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-1"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         id="g12957-38">
+        <path
+           sodipodi:type="arc"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-4"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-8"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-6"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902-3"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904-7"><rect
+             id="rect12906-4"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908-6" /></flowRoot>      <path
+         inkscape:connection-start="#g12933"
+         inkscape:connection-end="#g12945-7"
+         inkscape:connector-type="polyline"
+         id="path12950"
+         d="m -797.5,393.91867 0,41.35798"
+         style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connection-end="#g12957-38"
+         inkscape:connection-start="#g12945-7"
+         inkscape:connector-type="polyline"
+         id="path12962-2"
+         d="m -797.5,533.2573 0,38.68599"
+         style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <g
+         id="g7062">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-4-1"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-601.73896,221.4909)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
+           x="-672.50494"
+           y="431.85254"
+           id="text12629-9-3-1-8-2-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-7"
+             x="-672.50494"
+             y="431.85254">A'</tspan></text>
+      </g>
+      <path
+         inkscape:connection-end="#g12957-38"
+         inkscape:connection-start="#g7062"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,296.10995)"
+         id="path7067"
+         d="M 162.19312,161.64503 78.99682,284.27841"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1)" />
+      <path
+         inkscape:connection-end="#g12945-7"
+         inkscape:connection-start="#g7062"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,296.10995)"
+         id="path7069"
+         d="M 145.61323,142.48988 95.576703,166.76692"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)" />
+    </g>
+    <g
+       transform="translate(1040.2927,-585.89067)"
+       id="g19264">
+      <g
+         id="g12933-2"
+         transform="translate(0,5.2380981)">
+        <path
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           sodipodi:ry="100"
+           sodipodi:rx="147.14285"
+           sodipodi:cy="399.50504"
+           sodipodi:cx="-172.85715"
+           id="path12627-8-4-1-3"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           sodipodi:type="arc" />
+        <text
+           id="text12629-9-3-1-80"
+           y="358.43356"
+           x="-841.76758"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
+           xml:space="preserve"><tspan
+             y="358.43356"
+             x="-841.76758"
+             id="tspan12631-6-9-0-76"
+             sodipodi:role="line">v4.2</tspan></text>
+      </g>
+      <g
+         id="g12945-76">
+        <path
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           sodipodi:ry="100"
+           sodipodi:rx="147.14285"
+           sodipodi:cy="399.50504"
+           sodipodi:cx="-172.85715"
+           id="path12627-8-4-1-9-29"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           sodipodi:type="arc" />
+        <text
+           id="text12629-9-3-1-8-9"
+           y="498.90979"
+           x="-810.71423"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           xml:space="preserve"><tspan
+             y="498.90979"
+             x="-810.71423"
+             id="tspan12631-6-9-0-7-0"
+             sodipodi:role="line">A</tspan></text>
+      </g>
+      <g
+         id="g12957-39">
+        <path
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           sodipodi:ry="100"
+           sodipodi:rx="147.14285"
+           sodipodi:cy="399.50504"
+           sodipodi:cx="-172.85715"
+           id="path12627-8-4-1-6-81"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           sodipodi:type="arc" />
+        <text
+           id="text12629-9-3-1-83-7"
+           y="635.57648"
+           x="-810.71423"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           xml:space="preserve"><tspan
+             y="635.57648"
+             x="-810.71423"
+             id="tspan12631-6-9-0-5-08"
+             sodipodi:role="line">Z</tspan></text>
+      </g>
+      <path
+         style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         d="m -797.5,393.91867 0,41.35798"
+         id="path12950-9"
+         inkscape:connector-type="polyline"
+         inkscape:connection-end="#g12945-76"
+         inkscape:connection-start="#g12933-2" />
+      <path
+         style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         d="m -797.5,533.2573 0,38.68599"
+         id="path12962-0"
+         inkscape:connector-type="polyline"
+         inkscape:connection-start="#g12945-76"
+         inkscape:connection-end="#g12957-39" />
+    </g>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/explain-troubles-latecomer-15-solution.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,994 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="557.31696"
+   height="487.83316"
+   id="svg12964"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="explain-troubles-latecomer-15-solution.svg">
+  <defs
+     id="defs12966">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4078"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4072"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4069"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12972" />
+    <inkscape:perspective
+       id="perspective13312"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13318"
+       style="overflow:visible">
+      <path
+         id="path13320"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13418"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         id="path6393-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13424"
+       style="overflow:visible">
+      <path
+         id="path13426"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13428"
+       style="overflow:visible">
+      <path
+         id="path13430"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13432"
+       style="overflow:visible">
+      <path
+         id="path13434"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path6456"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13438"
+       style="overflow:visible">
+      <path
+         id="path13440"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13583"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         id="path6393-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13589"
+       style="overflow:visible">
+      <path
+         id="path13591"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13593"
+       style="overflow:visible">
+      <path
+         id="path13595"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13743"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13749"
+       style="overflow:visible">
+      <path
+         id="path13751"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13753"
+       style="overflow:visible">
+      <path
+         id="path13755"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13757"
+       style="overflow:visible">
+      <path
+         id="path13759"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-3"
+       style="overflow:visible">
+      <path
+         id="path6456-4"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13763"
+       style="overflow:visible">
+      <path
+         id="path13765"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         id="path4072-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4072-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-29"
+       style="overflow:visible">
+      <path
+         id="path4072-70"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18500"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-4"
+       style="overflow:visible">
+      <path
+         id="path6393-20"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18588"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-47"
+       style="overflow:visible">
+      <path
+         id="path6393-22"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18594"
+       style="overflow:visible">
+      <path
+         id="path18596"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-31"
+       style="overflow:visible">
+      <path
+         id="path4197"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective18791"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective18959"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-6"
+       style="overflow:visible">
+      <path
+         id="path6393-21"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker18965"
+       style="overflow:visible">
+      <path
+         id="path18967"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1-4"
+       style="overflow:visible">
+      <path
+         id="path6393-3"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-2"
+       style="overflow:visible">
+      <path
+         id="path4197-2"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective19288"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-44"
+       style="overflow:visible">
+      <path
+         id="path6393-9"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker19294"
+       style="overflow:visible">
+      <path
+         id="path19296"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6393-6"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker6176"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6178"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6393-1-6"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-8"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6456-0"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.58"
+     inkscape:cx="588.77184"
+     inkscape:cy="64.133389"
+     inkscape:document-units="px"
+     inkscape:current-layer="g7062-0"
+     showgrid="false"
+     inkscape:window-width="1215"
+     inkscape:window-height="776"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     fit-margin-top="5"
+     fit-margin-right="5"
+     fit-margin-left="5"
+     fit-margin-bottom="5" />
+  <metadata
+     id="metadata12969">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(170.29334,188.87454)">
+    <g
+       id="g6078">
+      <g
+         id="g18925"
+         transform="translate(683.25707,-378.99413)">
+        <g
+           id="g12933"
+           transform="translate(0,5.2380981)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1"
+             style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1"
+             y="358.43356"
+             x="-841.76758"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="358.43356"
+               x="-841.76758"
+               id="tspan12631-6-9-0"
+               sodipodi:role="line">v4.2</tspan></text>
+        </g>
+        <g
+           id="g12945-7">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9-2"
+             style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8-25"
+             y="498.90979"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="498.90979"
+               x="-810.71423"
+               id="tspan12631-6-9-0-7-1"
+               sodipodi:role="line">A</tspan></text>
+        </g>
+        <g
+           id="g12957-38">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-6-4"
+             style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-83-8"
+             y="635.57648"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="635.57648"
+               x="-810.71423"
+               id="tspan12631-6-9-0-5-6"
+               sodipodi:role="line">Z</tspan></text>
+        </g>
+        <flowRoot
+           transform="translate(-214.28571,111.42857)"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="flowRoot12902-3"
+           xml:space="preserve"><flowRegion
+             id="flowRegion12904-7"><rect
+               y="320.93362"
+               x="-924.28571"
+               height="435.71429"
+               width="301.42856"
+               id="rect12906-4" /></flowRegion><flowPara
+             id="flowPara12908-6" /></flowRoot>        <path
+           inkscape:connector-curvature="0"
+           inkscape:connection-end-point="d4"
+           inkscape:connection-start-point="d4"
+           style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -797.5,393.91867 0,41.35798"
+           id="path12950"
+           inkscape:connector-type="polyline"
+           inkscape:connection-end="#g12945-7"
+           inkscape:connection-start="#g12933" />
+        <path
+           inkscape:connector-curvature="0"
+           inkscape:connection-end-point="d4"
+           inkscape:connection-start-point="d4"
+           style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -797.5,533.2573 0,38.68599"
+           id="path12962-2"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12945-7"
+           inkscape:connection-end="#g12957-38" />
+        <g
+           id="g7062">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-601.73896,221.4909)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9-4-1"
+             style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8-2-2"
+             y="431.85254"
+             x="-672.50494"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="431.85254"
+               x="-672.50494"
+               id="tspan12631-6-9-0-7-7"
+               sodipodi:role="line">A'</tspan></text>
+        </g>
+        <path
+           inkscape:connector-curvature="0"
+           inkscape:connection-end-point="d4"
+           inkscape:connection-start-point="d4"
+           style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1)"
+           d="M 162.19312,161.64503 78.99682,284.27841"
+           id="path7067"
+           transform="translate(-848.99032,296.10995)"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g7062"
+           inkscape:connection-end="#g12957-38" />
+        <path
+           inkscape:connector-curvature="0"
+           inkscape:connection-end-point="d4"
+           inkscape:connection-start-point="d4"
+           style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
+           d="M 145.61323,142.48988 95.576703,166.76692"
+           id="path7069"
+           transform="translate(-848.99032,296.10995)"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g7062"
+           inkscape:connection-end="#g12945-7" />
+      </g>
+    </g>
+    <g
+       transform="translate(990.2654,-377.97948)"
+       id="g18925-6">
+      <g
+         transform="translate(0,5.2380981)"
+         id="g12933-0">
+        <path
+           sodipodi:type="arc"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-8"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
+           x="-841.76758"
+           y="358.43356"
+           id="text12629-9-3-1-9"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-4"
+             x="-841.76758"
+             y="358.43356">v4.2</tspan></text>
+      </g>
+      <g
+         id="g12945-7-0">
+        <path
+           sodipodi:type="arc"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-2-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8-25-0"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-1-0"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         id="g12957-38-9">
+        <path
+           sodipodi:type="arc"
+           style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-4-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-8-7"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-6-6"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <flowRoot
+         xml:space="preserve"
+         id="flowRoot12902-3-4"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         transform="translate(-214.28571,111.42857)"><flowRegion
+           id="flowRegion12904-7-4"><rect
+             id="rect12906-4-2"
+             width="301.42856"
+             height="435.71429"
+             x="-924.28571"
+             y="320.93362" /></flowRegion><flowPara
+           id="flowPara12908-6-9" /></flowRoot>      <path
+         inkscape:connection-start="#g12933-0"
+         inkscape:connection-end="#g12945-7-0"
+         inkscape:connector-type="polyline"
+         id="path12950-5"
+         d="m -797.5,393.91867 0,41.35798"
+         style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connection-end="#g12957-38-9"
+         inkscape:connection-start="#g12945-7-0"
+         inkscape:connector-type="polyline"
+         id="path12962-2-2"
+         d="m -797.5,533.2573 0,38.68599"
+         style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end-point="d4"
+         inkscape:connector-curvature="0" />
+      <g
+         id="g7062-0">
+        <path
+           sodipodi:type="arc"
+           style="opacity:0.5;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-4-1-8"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-601.73896,221.4909)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;opacity:0.5;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
+           x="-672.50494"
+           y="431.85254"
+           id="text12629-9-3-1-8-2-2-6"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-7-2"
+             x="-672.50494"
+             y="431.85254">A'</tspan></text>
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-4-1-8-3"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-602.70567,72.41019)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
+           x="-671.47168"
+           y="282.77182"
+           id="text12629-9-3-1-8-2-2-6-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-7-2-8"
+             x="-671.47168"
+             y="282.77182">Aᵟ</tspan></text>
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend-8)"
+           d="m 643.10345,205.10267 0,51.72414"
+           id="path6304"
+           inkscape:connector-curvature="0"
+           transform="translate(-1302.5333,110.19876)" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1-7)"
+           d="m -697.8407,298.53986 -80.747,140.6978"
+           id="path6306"
+           inkscape:connector-curvature="0" />
+      </g>
+      <path
+         inkscape:connector-type="polyline"
+         id="path7067-4"
+         d="m -695.12005,452.57296 -84.97116,125.65959"
+         style="opacity:0.5;fill:#000000;stroke:#000000;stroke-width:3.06777191;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1)"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-type="polyline"
+         id="path7069-5"
+         d="m -705.04154,428.01168 -51.05239,29.6913"
+         style="opacity:0.5;fill:#000000;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/explain-troubles-unstable-10-sumup.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="1414.5707"
+   height="1196.5396"
+   id="svg12964"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="explain-troubles-unstable-10-sumup.svg">
+  <defs
+     id="defs12966">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Mend"
+       style="overflow:visible;">
+      <path
+         id="path4078"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.4) rotate(180) translate(10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path4072"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4069"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12972" />
+    <inkscape:perspective
+       id="perspective13312"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13318"
+       style="overflow:visible">
+      <path
+         id="path13320"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13418"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         id="path6393-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13424"
+       style="overflow:visible">
+      <path
+         id="path13426"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13428"
+       style="overflow:visible">
+      <path
+         id="path13430"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13432"
+       style="overflow:visible">
+      <path
+         id="path13434"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path6456"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13438"
+       style="overflow:visible">
+      <path
+         id="path13440"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13583"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         id="path6393-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13589"
+       style="overflow:visible">
+      <path
+         id="path13591"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13593"
+       style="overflow:visible">
+      <path
+         id="path13595"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13743"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13749"
+       style="overflow:visible">
+      <path
+         id="path13751"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13753"
+       style="overflow:visible">
+      <path
+         id="path13755"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13757"
+       style="overflow:visible">
+      <path
+         id="path13759"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-3"
+       style="overflow:visible">
+      <path
+         id="path6456-4"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13763"
+       style="overflow:visible">
+      <path
+         id="path13765"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         id="path4072-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4072-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-29"
+       style="overflow:visible">
+      <path
+         id="path4072-70"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.58"
+     inkscape:cx="460.47484"
+     inkscape:cy="579.06827"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1918"
+     inkscape:window-height="1165"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata12969">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(317.55211,451.61155)">
+    <g
+       id="g16677">
+      <g
+         transform="translate(63.770124,322.85714)"
+         id="g13934">
+        <g
+           transform="translate(994.04378,-358.66548)"
+           id="g13382">
+          <g
+             style="opacity:0.5"
+             transform="translate(0,5.2380981)"
+             id="g12933-9">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-8"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-811.76758"
+               y="357.005"
+               id="text12629-9-3-1-4"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-9"
+                 x="-811.76758"
+                 y="357.005">B</tspan></text>
+          </g>
+          <g
+             style="opacity:0.5"
+             id="g12945-3">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-9-9"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-810.71423"
+               y="498.90979"
+               id="text12629-9-3-1-8-9"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-7-0"
+                 x="-810.71423"
+                 y="498.90979">A</tspan></text>
+          </g>
+          <g
+             id="g12957-8">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-6-3"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-810.71423"
+               y="635.57648"
+               id="text12629-9-3-1-83-0"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-5-1"
+                 x="-810.71423"
+                 y="635.57648">Z</tspan></text>
+          </g>
+          <path
+             inkscape:connection-end="#g12945-3"
+             inkscape:connection-start="#g12933-9"
+             inkscape:connector-type="polyline"
+             id="path12950-7"
+             d="m -797.5,393.91867 0,41.35798"
+             style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+          <path
+             inkscape:connection-end="#g12957-8"
+             inkscape:connection-start="#g12945-3"
+             inkscape:connector-type="polyline"
+             id="path12962-0"
+             d="m -797.5,533.2573 0,38.68599"
+             style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+          <g
+             id="g14080">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-67"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-651.82935"
+               y="291.59058"
+               id="text12629-9-3-1-2"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-77"
+                 x="-651.82935"
+                 y="291.59058">B'</tspan></text>
+          </g>
+          <g
+             id="g14034">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-9-2"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-650.776"
+               y="428.25726"
+               id="text12629-9-3-1-8-0"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-7-7"
+                 x="-650.776"
+                 y="428.25726">A'</tspan></text>
+          </g>
+          <path
+             inkscape:connection-end="#g12957-8"
+             inkscape:connection-start="#g14034"
+             inkscape:connector-type="polyline"
+             transform="translate(-848.99032,225.45742)"
+             id="path14087"
+             d="M 181.50292,226.948 81.415976,356.68521"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+          <path
+             inkscape:connection-end="#g14034"
+             inkscape:connection-start="#g14080"
+             inkscape:connector-type="polyline"
+             transform="translate(-848.99032,225.45742)"
+             id="path14089"
+             d="m 211.42857,100.48065 0,38.68604"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+          <path
+             inkscape:connection-end="#g12945-3"
+             inkscape:connection-start="#g14034"
+             inkscape:connector-type="polyline"
+             transform="translate(-848.99032,225.45742)"
+             id="path14463"
+             d="M 166.6047,207.95791 96.314201,239.00866"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+          <path
+             inkscape:connection-start="#g14080"
+             inkscape:connection-end="#g12933-9"
+             transform="translate(-848.99032,225.45742)"
+             inkscape:connector-type="polyline"
+             id="path14465"
+             d="M 166.6047,71.29122 97.24687,101.92996"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+        </g>
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="224.57932"
+           y="372.93292"
+           id="text13894"><tspan
+             sodipodi:role="line"
+             id="tspan13896"
+             x="224.57932"
+             y="372.93292">Local</tspan></text>
+      </g>
+      <g
+         transform="translate(53.152706,-930.19704)"
+         id="g13910">
+        <g
+           transform="translate(999.11715,331.93758)"
+           id="g13554">
+          <g
+             transform="translate(2.11198,-3.2921448)"
+             id="g12933-2">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-1"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-811.76758"
+               y="357.005"
+               id="text12629-9-3-1-0"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-1"
+                 x="-811.76758"
+                 y="357.005">B</tspan></text>
+          </g>
+          <g
+             transform="translate(2.11198,-4.265152)"
+             id="g12945-7">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-9-0"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-810.71423"
+               y="498.90979"
+               id="text12629-9-3-1-8-8"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-7-07"
+                 x="-810.71423"
+                 y="498.90979">A</tspan></text>
+          </g>
+          <g
+             transform="translate(2.11198,0)"
+             id="g12957-6">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-6-7"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-810.71423"
+               y="635.57648"
+               id="text12629-9-3-1-83-3"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-5-9"
+                 x="-810.71423"
+                 y="635.57648">Z</tspan></text>
+          </g>
+          <path
+             inkscape:connector-curvature="0"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-end="#g12945-7"
+             inkscape:connection-start="#g12933-2"
+             inkscape:connector-type="polyline"
+             id="path12950-8"
+             d="m -795.38802,389.71981 0,43.48719"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+          <path
+             inkscape:connector-curvature="0"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-end="#g12957-6"
+             inkscape:connection-start="#g12945-7"
+             inkscape:connector-type="polyline"
+             id="path12962-3"
+             d="m -795.38802,531.14792 0,40.81523"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+          <g
+             transform="translate(-2.11198,0)"
+             id="g13397">
+            <path
+               sodipodi:type="arc"
+               style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-0"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-735.72429,2.41941)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-807.54364"
+               y="212.78105"
+               id="text12629-9-3-1-7"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-6"
+                 x="-807.54364"
+                 y="212.78105">C</tspan></text>
+          </g>
+          <path
+             inkscape:connector-curvature="0"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-end="#g12933-2"
+             inkscape:connection-start="#g13397"
+             inkscape:connector-type="polyline"
+             transform="translate(-848.99032,296.10995)"
+             id="path13402"
+             d="m 53.602303,-49.001257 0,44.6701979"
+             style="fill:#0000ff;stroke:#0000ff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#DotM)" />
+        </g>
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="130.22327"
+           y="1072.933"
+           id="text13898"><tspan
+             sodipodi:role="line"
+             id="tspan13900"
+             x="130.22327"
+             y="1072.933">Distant</tspan></text>
+      </g>
+    </g>
+    <g
+       id="g14037"
+       transform="translate(-12.610837,-438.21686)">
+      <g
+         id="g13702"
+         transform="translate(1669.5314,38.478002)">
+        <g
+           id="g12933-3"
+           transform="translate(0.68341,5.2381)"
+           style="opacity:0.5">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-5"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-28"
+             y="357.005"
+             x="-811.76758"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="357.005"
+               x="-811.76758"
+               id="tspan12631-6-9-0-73"
+               sodipodi:role="line">B</tspan></text>
+        </g>
+        <g
+           id="g12945-5"
+           style="opacity:0.5"
+           transform="translate(0.68341,0)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9-8"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8-87"
+             y="498.90979"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="498.90979"
+               x="-810.71423"
+               id="tspan12631-6-9-0-7-3"
+               sodipodi:role="line">A</tspan></text>
+        </g>
+        <g
+           id="g12957-3"
+           transform="translate(0.68341,0)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-6-8"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-83-5"
+             y="635.57648"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="635.57648"
+               x="-810.71423"
+               id="tspan12631-6-9-0-5-4"
+               sodipodi:role="line">Z</tspan></text>
+        </g>
+        <path
+           style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -796.81659,393.91659 0,41.36213"
+           id="path12950-85"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12933-3"
+           inkscape:connection-end="#g12945-5"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <path
+           style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -796.81659,533.25522 0,38.69014"
+           id="path12962-4"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12945-5"
+           inkscape:connection-end="#g12957-3"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g14080-8">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-67-4"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-2-2"
+             y="291.59058"
+             x="-651.82935"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="291.59058"
+               x="-651.82935"
+               id="tspan12631-6-9-0-77-5"
+               sodipodi:role="line">B'</tspan></text>
+        </g>
+        <g
+           id="g14034-8">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9-2-4"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8-0-4"
+             y="428.25726"
+             x="-650.776"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="428.25726"
+               x="-650.776"
+               id="tspan12631-6-9-0-7-7-3"
+               sodipodi:role="line">A'</tspan></text>
+        </g>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="M 181.58323,227.00991 81.848934,356.84479"
+           id="path14087-4"
+           transform="translate(-848.99032,225.45742)"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g14034-8"
+           inkscape:connection-end="#g12957-3"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m 211.42857,100.48065 0,38.68604"
+           id="path14089-8"
+           transform="translate(-848.99032,225.45742)"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g14080-8"
+           inkscape:connection-end="#g14034-8"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)"
+           d="M 166.63618,208.02892 96.585,239.10674"
+           id="path14463-7"
+           transform="translate(-848.99032,225.45742)"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g14034-8"
+           inkscape:connection-end="#g12945-5"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)"
+           d="M 166.63618,71.362225 97.512165,102.02871"
+           id="path14465-9"
+           inkscape:connector-type="polyline"
+           transform="translate(-848.99032,225.45742)"
+           inkscape:connection-end="#g12933-3"
+           inkscape:connection-start="#g14080-8"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g5583"
+           transform="translate(-0.68341,0)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path4918"
+             style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text4920"
+             y="211.59058"
+             x="-810.40076"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="211.59058"
+               x="-810.40076"
+               id="tspan4922"
+               sodipodi:role="line">C</tspan></text>
+        </g>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 52.173733,20.478573 0,50.004102"
+           id="path5588"
+           inkscape:connector-type="polyline"
+           inkscape:connector-curvature="3"
+           inkscape:connection-start="#g5583"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end="#g12933-3"
+           inkscape:connection-end-point="d4"
+           transform="translate(-848.99032,225.45742)" />
+      </g>
+      <text
+         id="text13902"
+         y="781.50439"
+         x="801.03363"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="781.50439"
+           x="801.03363"
+           id="tspan13904"
+           sodipodi:role="line">final = <tspan
+   id="tspan14035"
+   style="fill:#ff0000;stroke:#ff0000">instable</tspan></tspan></text>
+    </g>
+    <g
+       id="g14074"
+       transform="translate(12.068966,-361.47806)">
+      <g
+         id="g13288"
+         transform="translate(531.43821,-33.336839)">
+        <g
+           id="g12933"
+           transform="translate(0,5.2380981)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1"
+             y="357.005"
+             x="-811.76758"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="357.005"
+               x="-811.76758"
+               id="tspan12631-6-9-0"
+               sodipodi:role="line">B</tspan></text>
+        </g>
+        <g
+           id="g12945">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8"
+             y="498.90979"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="498.90979"
+               x="-810.71423"
+               id="tspan12631-6-9-0-7"
+               sodipodi:role="line">A</tspan></text>
+        </g>
+        <g
+           id="g12957">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-6"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-83"
+             y="635.57648"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="635.57648"
+               x="-810.71423"
+               id="tspan12631-6-9-0-5"
+               sodipodi:role="line">Z</tspan></text>
+        </g>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -797.5,393.91867 0,41.35798"
+           id="path12950"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12933"
+           inkscape:connection-end="#g12945" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -797.5,533.2573 0,38.68599"
+           id="path12962"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12945"
+           inkscape:connection-end="#g12957" />
+      </g>
+      <text
+         id="text13906"
+         y="704.36151"
+         x="-321.08133"
+         style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="704.36151"
+           x="-321.08133"
+           id="tspan13908"
+           sodipodi:role="line">initial</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M -148.90439,71.107869 115.52431,-150.21739"
+       id="path14093" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M -116.60064,185.59571 141.08898,310.8959"
+       id="path14093-1" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="m 377.16638,-147.48298 351.94233,55.511595"
+       id="path14093-4"
+       inkscape:transform-center-x="48.58484"
+       inkscape:transform-center-y="-19.640393" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:8.96527767;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
+       d="M 516.3549,303.21782 766.85794,121.81435"
+       id="path14093-42" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/explain-troubles-unstable-15-solution.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1006 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="637.31207"
+   height="614.44788"
+   id="svg12964"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="explain-troubles-unstable-15-solution.svg">
+  <defs
+     id="defs12966">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4078"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4072"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4069"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12972" />
+    <inkscape:perspective
+       id="perspective13312"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13318"
+       style="overflow:visible">
+      <path
+         id="path13320"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13418"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         id="path6393-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13424"
+       style="overflow:visible">
+      <path
+         id="path13426"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13428"
+       style="overflow:visible">
+      <path
+         id="path13430"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13432"
+       style="overflow:visible">
+      <path
+         id="path13434"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path6456"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13438"
+       style="overflow:visible">
+      <path
+         id="path13440"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13583"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         id="path6393-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13589"
+       style="overflow:visible">
+      <path
+         id="path13591"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13593"
+       style="overflow:visible">
+      <path
+         id="path13595"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13743"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13749"
+       style="overflow:visible">
+      <path
+         id="path13751"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13753"
+       style="overflow:visible">
+      <path
+         id="path13755"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13757"
+       style="overflow:visible">
+      <path
+         id="path13759"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-3"
+       style="overflow:visible">
+      <path
+         id="path6456-4"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13763"
+       style="overflow:visible">
+      <path
+         id="path13765"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         id="path4072-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4072-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-29"
+       style="overflow:visible">
+      <path
+         id="path4072-70"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-6"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6393-3"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8630"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8632"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8634"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8636"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8638"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8640"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path6456-7"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker8644"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path8646"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.58"
+     inkscape:cx="446.08569"
+     inkscape:cy="388.21623"
+     inkscape:document-units="px"
+     inkscape:current-layer="g13702-1"
+     showgrid="false"
+     inkscape:window-width="1215"
+     inkscape:window-height="776"
+     inkscape:window-x="65"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     fit-margin-top="5"
+     fit-margin-right="5"
+     fit-margin-bottom="5"
+     fit-margin-left="5" />
+  <metadata
+     id="metadata12969">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-804.0536,336.234)">
+    <g
+       transform="translate(1656.9206,-399.73886)"
+       id="g13702">
+      <g
+         style="opacity:0.5"
+         transform="translate(0.68341,5.2381)"
+         id="g12933-3">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-811.76758"
+           y="357.005"
+           id="text12629-9-3-1-28"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-73"
+             x="-811.76758"
+             y="357.005">B</tspan></text>
+      </g>
+      <g
+         transform="translate(0.68341,0)"
+         style="opacity:0.5"
+         id="g12945-5">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-8"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8-87"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-3"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(0.68341,0)"
+         id="g12957-3">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-8"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-4"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12945-5"
+         inkscape:connection-start="#g12933-3"
+         inkscape:connector-type="polyline"
+         id="path12950-85"
+         d="m -796.81659,393.9166 0,41.36212"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12957-3"
+         inkscape:connection-start="#g12945-5"
+         inkscape:connector-type="polyline"
+         id="path12962-4"
+         d="m -796.81659,533.25522 0,38.69014"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <g
+         id="g14080-8">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-67-4"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-651.82935"
+           y="291.59058"
+           id="text12629-9-3-1-2-2"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-77-5"
+             x="-651.82935"
+             y="291.59058">B'</tspan></text>
+      </g>
+      <g
+         id="g14034-8">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-2-4"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-650.776"
+           y="428.25726"
+           id="text12629-9-3-1-8-0-4"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-7-3"
+             x="-650.776"
+             y="428.25726">A'</tspan></text>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12957-3"
+         inkscape:connection-start="#g14034-8"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,225.45742)"
+         id="path14087-4"
+         d="M 181.58323,227.00991 81.848934,356.84479"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g14034-8"
+         inkscape:connection-start="#g14080-8"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,225.45742)"
+         id="path14089-8"
+         d="m 211.42857,100.48065 0,38.68604"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12945-5"
+         inkscape:connection-start="#g14034-8"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,225.45742)"
+         id="path14463-7"
+         d="M 166.63618,208.02892 96.585,239.10674"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-start="#g14080-8"
+         inkscape:connection-end="#g12933-3"
+         transform="translate(-848.99032,225.45742)"
+         inkscape:connector-type="polyline"
+         id="path14465-9"
+         d="M 166.63618,71.362225 97.512166,102.02872"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+      <g
+         transform="translate(-0.68341,0)"
+         id="g5583">
+        <path
+           sodipodi:type="arc"
+           style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path4918"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
+           x="-810.40076"
+           y="211.59058"
+           id="text4920"><tspan
+             sodipodi:role="line"
+             id="tspan4922"
+             x="-810.40076"
+             y="211.59058">C</tspan></text>
+      </g>
+      <path
+         transform="translate(-848.99032,225.45742)"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-end="#g12933-3"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-start="#g5583"
+         inkscape:connector-curvature="3"
+         inkscape:connector-type="polyline"
+         id="path5588"
+         d="m 52.173733,20.478573 0,50.004103"
+         style="opacity:0.98000004;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker8638)" />
+    </g>
+    <g
+       transform="translate(2022.8785,-401.87475)"
+       id="g13702-1">
+      <g
+         style="opacity:0.5"
+         transform="translate(0.68341,5.2381)"
+         id="g12933-3-2">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-5-9"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-811.76758"
+           y="357.005"
+           id="text12629-9-3-1-28-1"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-73-6"
+             x="-811.76758"
+             y="357.005">B</tspan></text>
+      </g>
+      <g
+         transform="translate(0.68341,0)"
+         style="opacity:0.5"
+         id="g12945-5-4">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-8-0"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="498.90979"
+           id="text12629-9-3-1-8-87-7"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-3-6"
+             x="-810.71423"
+             y="498.90979">A</tspan></text>
+      </g>
+      <g
+         transform="translate(0.68341,0)"
+         id="g12957-3-9">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-6-8-4"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-810.71423"
+           y="635.57648"
+           id="text12629-9-3-1-83-5-9"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-5-4-8"
+             x="-810.71423"
+             y="635.57648">Z</tspan></text>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12945-5-4"
+         inkscape:connection-start="#g12933-3-2"
+         inkscape:connector-type="polyline"
+         id="path12950-85-4"
+         d="m -796.81659,393.9166 0,41.36212"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12957-3-9"
+         inkscape:connection-start="#g12945-5-4"
+         inkscape:connector-type="polyline"
+         id="path12962-4-3"
+         d="m -796.81659,533.25522 0,38.69014"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <g
+         id="g14080-8-5">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-67-4-3"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-651.82935"
+           y="291.59058"
+           id="text12629-9-3-1-2-2-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-77-5-6"
+             x="-651.82935"
+             y="291.59058">B'</tspan></text>
+      </g>
+      <g
+         id="g14034-8-4">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-9-2-4-3"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="-650.776"
+           y="428.25726"
+           id="text12629-9-3-1-8-0-4-6"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-7-7-3-3"
+             x="-650.776"
+             y="428.25726">A'</tspan></text>
+      </g>
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12957-3-9"
+         inkscape:connection-start="#g14034-8-4"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,225.45742)"
+         id="path14087-4-0"
+         d="M 181.58323,227.00991 81.848934,356.84479"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g14034-8-4"
+         inkscape:connection-start="#g14080-8-5"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,225.45742)"
+         id="path14089-8-4"
+         d="m 211.42857,100.48065 0,38.68604"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-end="#g12945-5-4"
+         inkscape:connection-start="#g14034-8-4"
+         inkscape:connector-type="polyline"
+         transform="translate(-848.99032,225.45742)"
+         id="path14463-7-3"
+         d="M 166.63618,208.02892 96.585,239.10674"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+      <path
+         inkscape:connector-curvature="0"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-start="#g14080-8-5"
+         inkscape:connection-end="#g12933-3-2"
+         transform="translate(-848.99032,225.45742)"
+         inkscape:connector-type="polyline"
+         id="path14465-9-9"
+         d="M 166.63618,71.362225 97.512166,102.02872"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
+      <g
+         transform="translate(-0.68341,0)"
+         id="g5583-2"
+         style="opacity:0.5;fill:#000000;stroke:#000000">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path4918-6"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
+           x="-810.40076"
+           y="211.59058"
+           id="text4920-1"><tspan
+             sodipodi:role="line"
+             id="tspan4922-9"
+             x="-810.40076"
+             y="211.59058">C</tspan></text>
+      </g>
+      <path
+         transform="translate(-848.99032,225.45742)"
+         inkscape:connection-end-point="d4"
+         inkscape:connection-end="#g12933-3-2"
+         inkscape:connection-start-point="d4"
+         inkscape:connection-start="#g5583-2"
+         inkscape:connector-curvature="3"
+         inkscape:connector-type="polyline"
+         id="path5588-9"
+         d="m 52.173733,20.478573 0,50.004103"
+         style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker8638)" />
+      <g
+         transform="translate(-4.5930013,-154.28292)"
+         id="g14080-8-5-0"
+         style="fill:#0000ff;stroke:#0000ff">
+        <path
+           sodipodi:type="arc"
+           style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           id="path12627-8-4-1-67-4-3-2"
+           sodipodi:cx="-172.85715"
+           sodipodi:cy="399.50504"
+           sodipodi:rx="147.14285"
+           sodipodi:ry="100"
+           d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+           transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
+           x="-651.82935"
+           y="291.59058"
+           id="text12629-9-3-1-2-2-5-5"><tspan
+             sodipodi:role="line"
+             id="tspan12631-6-9-0-77-5-6-1"
+             x="-651.82935"
+             y="291.59058">C'</tspan></text>
+      </g>
+    </g>
+    <path
+       style="fill:#0000ff;stroke:#0000ff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker8638)"
+       d="m 1380.7238,-230.93407 0,58.53617"
+       id="path9998"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker8644)"
+       d="m 1653.4483,189.643 -63.7931,37.93103"
+       id="path10000"
+       inkscape:connector-curvature="0"
+       transform="translate(-317.55211,-451.61155)" />
+  </g>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/git.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,863 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="910.36212"
+   height="598.43103"
+   id="svg12964"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="git.svg">
+  <defs
+     id="defs12966">
+    <marker
+       inkscape:stockid="Arrow1Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Mend"
+       style="overflow:visible">
+      <path
+         id="path4078"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4072"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path4069"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective12972" />
+    <inkscape:perspective
+       id="perspective13312"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path6393"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13318"
+       style="overflow:visible">
+      <path
+         id="path13320"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13418"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-1"
+       style="overflow:visible">
+      <path
+         id="path6393-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13424"
+       style="overflow:visible">
+      <path
+         id="path13426"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13428"
+       style="overflow:visible">
+      <path
+         id="path13430"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13432"
+       style="overflow:visible">
+      <path
+         id="path13434"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend"
+       style="overflow:visible">
+      <path
+         id="path6456"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13438"
+       style="overflow:visible">
+      <path
+         id="path13440"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13583"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         id="path6393-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13589"
+       style="overflow:visible">
+      <path
+         id="path13591"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13593"
+       style="overflow:visible">
+      <path
+         id="path13595"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective13743"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         id="path6393-2"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13749"
+       style="overflow:visible">
+      <path
+         id="path13751"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13753"
+       style="overflow:visible">
+      <path
+         id="path13755"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13757"
+       style="overflow:visible">
+      <path
+         id="path13759"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="EmptyDiamondMend-3"
+       style="overflow:visible">
+      <path
+         id="path6456-4"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="EmptyDiamondMend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker13763"
+       style="overflow:visible">
+      <path
+         id="path13765"
+         d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.4,0,0,0.4,-2.6,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-2"
+       style="overflow:visible">
+      <path
+         id="path4072-8"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-6"
+       style="overflow:visible">
+      <path
+         id="path4072-7"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <inkscape:perspective
+       id="perspective15593-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-29"
+       style="overflow:visible">
+      <path
+         id="path4072-70"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="267.70686"
+     inkscape:cy="266.91354"
+     inkscape:document-units="px"
+     inkscape:current-layer="g13382"
+     showgrid="false"
+     inkscape:window-width="1280"
+     inkscape:window-height="776"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     fit-margin-top="5"
+     fit-margin-bottom="5"
+     fit-margin-right="5"
+     fit-margin-left="5" />
+  <metadata
+     id="metadata12969">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-120.93016,350.21716)">
+    <g
+       id="g16677"
+       transform="translate(-83.33333,-403.33333)">
+      <g
+         transform="translate(63.770124,322.85714)"
+         id="g13934">
+        <g
+           transform="translate(994.04378,-358.66548)"
+           id="g13382">
+          <g
+             style="opacity:0.5"
+             transform="translate(0,5.2380981)"
+             id="g12933-9">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-8"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-811.76758"
+               y="357.005"
+               id="text12629-9-3-1-4"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-9"
+                 x="-811.76758"
+                 y="357.005">B</tspan></text>
+          </g>
+          <g
+             style="opacity:0.5"
+             id="g12945-3">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-9-9"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-810.71423"
+               y="498.90979"
+               id="text12629-9-3-1-8-9"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-7-0"
+                 x="-810.71423"
+                 y="498.90979">A</tspan></text>
+          </g>
+          <g
+             id="g12957-8">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-6-3"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-810.71423"
+               y="635.57648"
+               id="text12629-9-3-1-83-0"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-5-1"
+                 x="-810.71423"
+                 y="635.57648">Z</tspan></text>
+          </g>
+          <path
+             inkscape:connector-type="polyline"
+             id="path12950-7"
+             d="m -797.5,393.91867 0,41.35798"
+             style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+             inkscape:connector-curvature="0"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-end="#g12945-3"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-start="#g12933-9" />
+          <path
+             inkscape:connector-type="polyline"
+             id="path12962-0"
+             d="m -797.5,533.2573 0,38.68599"
+             style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+             inkscape:connector-curvature="0"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-end="#g12957-8"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-start="#g12945-3" />
+          <g
+             id="g14080">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-67"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-651.82935"
+               y="291.59058"
+               id="text12629-9-3-1-2"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-77"
+                 x="-651.82935"
+                 y="291.59058">B'</tspan></text>
+          </g>
+          <g
+             id="g14034">
+            <path
+               sodipodi:type="arc"
+               style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               id="path12627-8-4-1-9-2"
+               sodipodi:cx="-172.85715"
+               sodipodi:cy="399.50504"
+               sodipodi:rx="147.14285"
+               sodipodi:ry="100"
+               d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+               transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
+            <text
+               xml:space="preserve"
+               style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+               x="-650.776"
+               y="428.25726"
+               id="text12629-9-3-1-8-0"><tspan
+                 sodipodi:role="line"
+                 id="tspan12631-6-9-0-7-7"
+                 x="-650.776"
+                 y="428.25726">A'</tspan></text>
+          </g>
+          <path
+             inkscape:connector-type="polyline"
+             transform="translate(-848.99032,225.45742)"
+             id="path14087"
+             d="M 181.50292,226.948 81.415976,356.68521"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+             inkscape:connector-curvature="0"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-start="#g14034"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-end="#g12957-8" />
+          <path
+             inkscape:connector-type="polyline"
+             transform="translate(-848.99032,225.45742)"
+             id="path14089"
+             d="m 211.42857,100.48065 0,38.68604"
+             style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+             inkscape:connector-curvature="0"
+             inkscape:connection-end-point="d4"
+             inkscape:connection-end="#g14034"
+             inkscape:connection-start-point="d4"
+             inkscape:connection-start="#g14080" />
+        </g>
+        <text
+           xml:space="preserve"
+           style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="224.57932"
+           y="372.93292"
+           id="text13894"><tspan
+             sodipodi:role="line"
+             id="tspan13896"
+             x="224.57932"
+             y="372.93292" /></text>
+      </g>
+    </g>
+    <g
+       id="g14037"
+       transform="translate(-209.2775,-468.21686)">
+      <g
+         id="g13702"
+         transform="translate(1669.5314,38.478002)">
+        <g
+           id="g12933-3"
+           transform="translate(0.68341,5.2381)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-5"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-28"
+             y="357.005"
+             x="-811.76758"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="357.005"
+               x="-811.76758"
+               id="tspan12631-6-9-0-73"
+               sodipodi:role="line">B</tspan></text>
+        </g>
+        <g
+           id="g12945-5"
+           transform="translate(0.68341,0)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9-8"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8-87"
+             y="498.90979"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="498.90979"
+               x="-810.71423"
+               id="tspan12631-6-9-0-7-3"
+               sodipodi:role="line">A</tspan></text>
+        </g>
+        <g
+           id="g12957-3"
+           transform="translate(0.68341,0)">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-6-8"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-83-5"
+             y="635.57648"
+             x="-810.71423"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="635.57648"
+               x="-810.71423"
+               id="tspan12631-6-9-0-5-4"
+               sodipodi:role="line">Z</tspan></text>
+        </g>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -796.81659,393.9166 0,41.36212"
+           id="path12950-85"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12933-3"
+           inkscape:connection-end="#g12945-5"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m -796.81659,533.25522 0,38.69014"
+           id="path12962-4"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g12945-5"
+           inkscape:connection-end="#g12957-3"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0" />
+        <g
+           id="g14080-8">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-67-4"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-2-2"
+             y="291.59058"
+             x="-651.82935"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="291.59058"
+               x="-651.82935"
+               id="tspan12631-6-9-0-77-5"
+               sodipodi:role="line">B'</tspan></text>
+        </g>
+        <g
+           id="g14034-8">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path12627-8-4-1-9-2-4"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text12629-9-3-1-8-0-4"
+             y="428.25726"
+             x="-650.776"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="428.25726"
+               x="-650.776"
+               id="tspan12631-6-9-0-7-7-3"
+               sodipodi:role="line">A'</tspan></text>
+        </g>
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="M 181.58323,227.00991 81.848934,356.84479"
+           id="path14087-4"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g14034-8"
+           inkscape:connection-end="#g12957-3"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0"
+           transform="translate(-848.99032,225.45742)" />
+        <path
+           style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
+           d="m 211.42857,100.48065 0,38.68604"
+           id="path14089-8"
+           inkscape:connector-type="polyline"
+           inkscape:connection-start="#g14080-8"
+           inkscape:connection-end="#g14034-8"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end-point="d4"
+           inkscape:connector-curvature="0"
+           transform="translate(-848.99032,225.45742)" />
+        <g
+           id="g5583"
+           transform="translate(-0.68341,0)"
+           style="fill:#000000;stroke:#000000">
+          <path
+             transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)"
+             d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
+             sodipodi:ry="100"
+             sodipodi:rx="147.14285"
+             sodipodi:cy="399.50504"
+             sodipodi:cx="-172.85715"
+             id="path4918"
+             style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+             sodipodi:type="arc" />
+          <text
+             id="text4920"
+             y="211.59058"
+             x="-810.40076"
+             style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
+             xml:space="preserve"><tspan
+               y="211.59058"
+               x="-810.40076"
+               id="tspan4922"
+               sodipodi:role="line">C</tspan></text>
+        </g>
+        <path
+           style="fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 52.173733,20.478573 0,50.004103"
+           id="path5588"
+           inkscape:connector-type="polyline"
+           inkscape:connector-curvature="3"
+           inkscape:connection-start="#g5583"
+           inkscape:connection-start-point="d4"
+           inkscape:connection-end="#g12933-3"
+           inkscape:connection-end-point="d4"
+           transform="translate(-848.99032,225.45742)" />
+      </g>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="199.11453"
+       y="-241.73866"
+       id="text17638"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan17640"
+         x="199.11453"
+         y="-241.73866"
+         style="fill:#0000ff;stroke:#0000ff">feature-babar</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="531.01886"
+       y="-314.82654"
+       id="text17638-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan17640-9"
+         x="531.01886"
+         y="-314.82654"
+         style="fill:#0000ff;stroke:#0000ff"><tspan
+   style="fill:#008000;stroke:#008000"
+   id="tspan17684">other/</tspan>feature-babar</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       x="751.01886"
+       y="-222.82655"
+       id="text17638-9-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan17640-9-8"
+         x="751.01886"
+         y="-222.82655"
+         style="fill:#0000ff;stroke:#0000ff">feature-babar</tspan></text>
+  </g>
+</svg>
Binary file docs/figures/hgview-example.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/simple-3-merge.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="27 1677 497 345" width="497pt" height="345pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id500_Graphic" filter="url(#Shadow)"/><use xl:href="#id501_Graphic" filter="url(#Shadow)"/><use xl:href="#id503_Graphic" filter="url(#Shadow)"/><use xl:href="#id504_Graphic" filter="url(#Shadow)"/><use xl:href="#id507_Graphic" filter="url(#Shadow)"/><use xl:href="#id509_Graphic" filter="url(#Shadow)"/><use xl:href="#id510_Graphic" filter="url(#Shadow)"/><use xl:href="#id516_Graphic" filter="url(#Shadow)"/><use xl:href="#id284_Graphic" filter="url(#Shadow)"/><use xl:href="#id520_Graphic" filter="url(#Shadow)"/><use xl:href="#id523_Graphic" filter="url(#Shadow)"/></g><g id="id500_Graphic"><rect x="47" y="1726.5562" width="143" height="260.96387" fill="white" fill-opacity=".5"/><rect x="47" y="1726.5562" width="143" height="260.96387" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id501_Graphic"><circle cx="118.50044" cy="1853.0206" r="28.346527" fill="red"/><circle cx="118.50044" cy="1853.0206" r="28.346527" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82328 1837.5206)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.50028" y1="1913.1742" x2="118.500366" y2="1881.8672" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id503_Graphic"><path d="M 128.52223 1917.8254 C 134.05725 1923.3605 134.05725 1932.3344 128.52223 1937.8694 C 122.98724 1943.4044 114.013245 1943.4044 108.478256 1937.8694 C 102.94323 1932.3344 102.94323 1923.3605 108.478256 1917.8254 C 114.013245 1912.2904 122.98724 1912.2904 128.52223 1917.8254" fill="black"/><path d="M 128.52223 1917.8254 C 134.05725 1923.3605 134.05725 1932.3344 128.52223 1937.8694 C 122.98724 1943.4044 114.013245 1943.4044 108.478256 1937.8694 C 102.94323 1932.3344 102.94323 1923.3605 108.478256 1917.8254 C 114.013245 1912.2904 122.98724 1912.2904 128.52223 1917.8254" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id504_Graphic"><path d="M 128.52223 1963.3254 C 134.05725 1968.8605 134.05725 1977.8344 128.52223 1983.3694 C 122.98724 1988.9044 114.013245 1988.9044 108.478256 1983.3694 C 102.94323 1977.8344 102.94323 1968.8605 108.478256 1963.3254 C 114.013245 1957.7904 122.98724 1957.7904 128.52223 1963.3254" fill="black"/><path d="M 128.52223 1963.3254 C 134.05725 1968.8605 134.05725 1977.8344 128.52223 1983.3694 C 122.98724 1988.9044 114.013245 1988.9044 108.478256 1983.3694 C 102.94323 1977.8344 102.94323 1968.8605 108.478256 1963.3254 C 114.013245 1957.7904 122.98724 1957.7904 128.52223 1963.3254" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="118.500244" y1="1942.5206" x2="118.500244" y2="1958.6742" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id507_Graphic"><rect x="285.5" y="1693.958" width="218" height="303.08691" fill="white" fill-opacity=".5"/><rect x="285.5" y="1693.958" width="218" height="303.08691" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="393.10345" y1="1925.458" x2="364.69406" y2="1885.965" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id509_Graphic"><path d="M 411.69525 1927.3492 C 417.23026 1932.8843 417.23026 1941.8582 411.69525 1947.3932 C 406.16025 1952.9282 397.18625 1952.9282 391.65125 1947.3932 C 386.11624 1941.8582 386.11624 1932.8843 391.65125 1927.3492 C 397.18625 1921.8142 406.16025 1921.8142 411.69525 1927.3492" fill="black"/><path d="M 411.69525 1927.3492 C 417.23026 1932.8843 417.23026 1941.8582 411.69525 1947.3932 C 406.16025 1952.9282 397.18625 1952.9282 391.65125 1947.3932 C 386.11624 1941.8582 386.11624 1932.8843 391.65125 1927.3492 C 397.18625 1921.8142 406.16025 1921.8142 411.69525 1927.3492" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id510_Graphic"><path d="M 411.69525 1972.8492 C 417.23026 1978.3843 417.23026 1987.3582 411.69525 1992.8932 C 406.16025 1998.4282 397.18625 1998.4282 391.65125 1992.8932 C 386.11624 1987.3582 386.11624 1978.3843 391.65125 1972.8492 C 397.18625 1967.3142 406.16025 1967.3142 411.69525 1972.8492" fill="black"/><path d="M 411.69525 1972.8492 C 417.23026 1978.3843 417.23026 1987.3582 411.69525 1992.8932 C 406.16025 1998.4282 397.18625 1998.4282 391.65125 1992.8932 C 386.11624 1987.3582 386.11624 1978.3843 391.65125 1972.8492 C 397.18625 1967.3142 406.16025 1967.3142 411.69525 1972.8492" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="401.67789" y1="1952.0444" x2="401.68301" y2="1968.198" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id516_Graphic"><circle cx="347.84644" cy="1862.5444" r="28.346533" fill="red" fill-opacity=".5"/><path d="M 367.89038 1842.5005 C 378.96042 1853.5704 378.96042 1871.5184 367.89038 1882.5884 C 356.8204 1893.6584 338.87247 1893.6584 327.8025 1882.5884 C 316.73245 1871.5184 316.73245 1853.5704 327.8025 1842.5005 C 338.87247 1831.4304 356.8204 1831.4304 367.89038 1842.5005" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 1847.0444)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="427.0911" y1="1818.7612" x2="385.31204" y2="1841.8445" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="118.50028" y1="1824.1741" x2="118.50015" y2="1800.5271" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id284_Graphic"><circle cx="118.5" cy="1771.6807" r="28.346527" fill="yellow"/><circle cx="118.5" cy="1771.6807" r="28.346527" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82284 1756.1807)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><g id="id520_Graphic"><circle cx="347.84644" cy="1754.9026" r="28.346533" fill="yellow" fill-opacity=".5"/><path d="M 367.89038 1734.8586 C 378.96042 1745.9286 378.96042 1763.8766 367.89038 1774.9465 C 356.8204 1786.0166 338.87247 1786.0166 327.8025 1774.9465 C 316.73245 1763.8766 316.73245 1745.9286 327.8025 1734.8586 C 338.87247 1723.7886 356.8204 1723.7886 367.89038 1734.8586" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 1739.4026)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="347.84897" y1="1833.698" x2="347.85342" y2="1783.749" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="406.91367" y1="1923.662" x2="442.04407" y2="1831.7589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id523_Graphic"><circle cx="452.34644" cy="1804.8074" r="28.346533" fill="#ff8000"/><circle cx="452.34644" cy="1804.8074" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(434.66928 1789.3074)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="8.2889767" y="25" textLength="18.776367">C</tspan></text></g><line x1="426.309" y1="1792.373" x2="386.4721" y2="1773.3486" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/simple-4-reorder.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="27 2166 497 345" width="497pt" height="345pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id532_Graphic" filter="url(#Shadow)"/><use xl:href="#id525_Graphic" filter="url(#Shadow)"/><use xl:href="#id526_Graphic" filter="url(#Shadow)"/><use xl:href="#id528_Graphic" filter="url(#Shadow)"/><use xl:href="#id529_Graphic" filter="url(#Shadow)"/><use xl:href="#id534_Graphic" filter="url(#Shadow)"/><use xl:href="#id535_Graphic" filter="url(#Shadow)"/><use xl:href="#id537_Graphic" filter="url(#Shadow)"/><use xl:href="#id540_Graphic" filter="url(#Shadow)"/><use xl:href="#id541_Graphic" filter="url(#Shadow)"/><use xl:href="#id546_Graphic" filter="url(#Shadow)"/><use xl:href="#id549_Graphic" filter="url(#Shadow)"/></g><g id="id532_Graphic"><rect x="285.5" y="2182.9602" width="218" height="303.08691" fill="white" fill-opacity=".5"/><rect x="285.5" y="2182.9602" width="218" height="303.08691" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="427.7653" y1="2330.3635" x2="376.8968" y2="2275.3335" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><g id="id525_Graphic"><rect x="47" y="2215.56" width="143" height="260.96387" fill="white" fill-opacity=".5"/><rect x="47" y="2215.56" width="143" height="260.96387" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id526_Graphic"><path d="M 138.5444 2321.9729 C 149.61443 2333.043 149.61443 2350.9907 138.5444 2362.0608 C 127.47443 2373.1309 109.526474 2373.1309 98.456505 2362.0608 C 87.386475 2350.9907 87.386475 2333.043 98.456505 2321.9729 C 109.526474 2310.9028 127.47443 2310.9028 138.5444 2321.9729" fill="red"/><path d="M 138.5444 2321.9729 C 149.61443 2333.043 149.61443 2350.9907 138.5444 2362.0608 C 127.47443 2373.1309 109.526474 2373.1309 98.456505 2362.0608 C 87.386475 2350.9907 87.386475 2333.043 98.456505 2321.9729 C 109.526474 2310.9028 127.47443 2310.9028 138.5444 2321.9729" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82329 2326.5168)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.50029" y1="2402.1704" x2="118.500374" y2="2370.8633" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id528_Graphic"><path d="M 128.52225 2406.8218 C 134.05727 2412.3567 134.05727 2421.3308 128.52225 2426.8657 C 122.98724 2432.4009 114.01326 2432.4009 108.478264 2426.8657 C 102.94324 2421.3308 102.94324 2412.3567 108.478264 2406.8218 C 114.01326 2401.2866 122.98724 2401.2866 128.52225 2406.8218" fill="black"/><path d="M 128.52225 2406.8218 C 134.05727 2412.3567 134.05727 2421.3308 128.52225 2426.8657 C 122.98724 2432.4009 114.01326 2432.4009 108.478264 2426.8657 C 102.94324 2421.3308 102.94324 2412.3567 108.478264 2406.8218 C 114.01326 2401.2866 122.98724 2401.2866 128.52225 2406.8218" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id529_Graphic"><path d="M 128.52225 2452.3218 C 134.05727 2457.8567 134.05727 2466.8308 128.52225 2472.3657 C 122.98724 2477.9009 114.01326 2477.9009 108.478264 2472.3657 C 102.94324 2466.8308 102.94324 2457.8567 108.478264 2452.3218 C 114.01326 2446.7866 122.98724 2446.7866 128.52225 2452.3218" fill="black"/><path d="M 128.52225 2452.3218 C 134.05727 2457.8567 134.05727 2466.8308 128.52225 2472.3657 C 122.98724 2477.9009 114.01326 2477.9009 108.478264 2472.3657 C 102.94324 2466.8308 102.94324 2457.8567 108.478264 2452.3218 C 114.01326 2446.7866 122.98724 2446.7866 128.52225 2452.3218" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="118.50025" y1="2431.5171" x2="118.50025" y2="2447.6704" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="393.10349" y1="2414.4607" x2="364.69394" y2="2374.9673" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id534_Graphic"><path d="M 411.69525 2416.352 C 417.23026 2421.887 417.23026 2430.8611 411.69525 2436.396 C 406.16025 2441.9312 397.18625 2441.9312 391.65125 2436.396 C 386.11624 2430.8611 386.11624 2421.887 391.65125 2416.352 C 397.18625 2410.8169 406.16025 2410.8169 411.69525 2416.352" fill="black"/><path d="M 411.69525 2416.352 C 417.23026 2421.887 417.23026 2430.8611 411.69525 2436.396 C 406.16025 2441.9312 397.18625 2441.9312 391.65125 2436.396 C 386.11624 2430.8611 386.11624 2421.887 391.65125 2416.352 C 397.18625 2410.8169 406.16025 2410.8169 411.69525 2416.352" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id535_Graphic"><path d="M 411.69525 2461.852 C 417.23026 2467.387 417.23026 2476.3611 411.69525 2481.896 C 406.16025 2487.4312 397.18625 2487.4312 391.65125 2481.896 C 386.11624 2476.3611 386.11624 2467.387 391.65125 2461.852 C 397.18625 2456.3169 406.16025 2456.3169 411.69525 2461.852" fill="black"/><path d="M 411.69525 2461.852 C 417.23026 2467.387 417.23026 2476.3611 411.69525 2481.896 C 406.16025 2487.4312 397.18625 2487.4312 391.65125 2481.896 C 386.11624 2476.3611 386.11624 2467.387 391.65125 2461.852 C 397.18625 2456.3169 406.16025 2456.3169 411.69525 2461.852" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="401.67325" y1="2441.0474" x2="401.67325" y2="2457.2007" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id537_Graphic"><path d="M 367.89038 2331.5027 C 378.96042 2342.5728 378.96042 2360.5205 367.89038 2371.5906 C 356.8204 2382.6606 338.87247 2382.6606 327.8025 2371.5906 C 316.73245 2360.5205 316.73245 2342.5728 327.8025 2331.5027 C 338.87247 2320.4326 356.8204 2320.4326 367.89038 2331.5027" fill="red" fill-opacity=".5"/><path d="M 367.89038 2331.5027 C 378.96042 2342.5728 378.96042 2360.5205 367.89038 2371.5906 C 356.8204 2382.6606 338.87247 2382.6606 327.8025 2371.5906 C 316.73245 2360.5205 316.73245 2342.5728 327.8025 2331.5027 C 338.87247 2320.4326 356.8204 2320.4326 367.89038 2331.5027" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 2336.0466)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.500275" y1="2313.1704" x2="118.50013" y2="2289.523" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id540_Graphic"><path d="M 138.5439 2240.6326 C 149.61392 2251.7026 149.61392 2269.6504 138.5439 2280.7205 C 127.47393 2291.7905 109.52598 2291.7905 98.45601 2280.7205 C 87.38598 2269.6504 87.38598 2251.7026 98.45601 2240.6326 C 109.52598 2229.5625 127.47393 2229.5625 138.5439 2240.6326" fill="yellow"/><path d="M 138.5439 2240.6326 C 149.61392 2251.7026 149.61392 2269.6504 138.5439 2280.7205 C 127.47393 2291.7905 109.52598 2291.7905 98.45601 2280.7205 C 87.38598 2269.6504 87.38598 2251.7026 98.45601 2240.6326 C 109.52598 2229.5625 127.47393 2229.5625 138.5439 2240.6326" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82279 2245.1765)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><g id="id541_Graphic"><path d="M 367.89038 2223.8625 C 378.96042 2234.9326 378.96042 2252.8804 367.89038 2263.9504 C 356.8204 2275.0205 338.87247 2275.0205 327.8025 2263.9504 C 316.73245 2252.8804 316.73245 2234.9326 327.8025 2223.8625 C 338.87247 2212.7925 356.8204 2212.7925 367.89038 2223.8625" fill="yellow" fill-opacity=".5"/><path d="M 367.89038 2223.8625 C 378.96042 2234.9326 378.96042 2252.8804 367.89038 2263.9504 C 356.8204 2275.0205 338.87247 2275.0205 327.8025 2263.9504 C 316.73245 2252.8804 316.73245 2234.9326 327.8025 2223.8625 C 338.87247 2212.7925 356.8204 2212.7925 367.89038 2223.8625" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 2228.4065)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="347.84644" y1="2322.7002" x2="347.84644" y2="2272.7529" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id546_Graphic"><path d="M 467.39038 2218.6619 C 478.46042 2229.732 478.46042 2247.6797 467.39038 2258.7498 C 456.3204 2269.8198 438.37247 2269.8198 427.3025 2258.7498 C 416.23245 2247.6797 416.23245 2229.732 427.3025 2218.6619 C 438.37247 2207.5918 456.3204 2207.5918 467.39038 2218.6619" fill="red"/><path d="M 467.39038 2218.6619 C 478.46042 2229.732 478.46042 2247.6797 467.39038 2258.7498 C 456.3204 2269.8198 438.37247 2269.8198 427.3025 2258.7498 C 416.23245 2247.6797 416.23245 2229.732 427.3025 2218.6619 C 438.37247 2207.5918 456.3204 2207.5918 467.39038 2218.6619" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(429.66928 2223.2058)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">A'</tspan></text></g><line x1="409.35617" y1="2413.8691" x2="432.46094" y2="2376.2634" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="447.3466" y1="2267.5522" x2="447.34692" y2="2322.7002" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id549_Graphic"><path d="M 467.39038 2331.5027 C 478.46042 2342.5728 478.46042 2360.5205 467.39038 2371.5906 C 456.3204 2382.6606 438.37247 2382.6606 427.3025 2371.5906 C 416.23245 2360.5205 416.23245 2342.5728 427.3025 2331.5027 C 438.37247 2320.4326 456.3204 2320.4326 467.39038 2331.5027" fill="yellow"/><path d="M 467.39038 2331.5027 C 478.46042 2342.5728 478.46042 2360.5205 467.39038 2371.5906 C 456.3204 2382.6606 438.37247 2382.6606 427.3025 2371.5906 C 416.23245 2360.5205 416.23245 2342.5728 427.3025 2331.5027 C 438.37247 2320.4326 456.3204 2320.4326 467.39038 2331.5027" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(429.66928 2336.0466)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">B'</tspan></text></g><line x1="428.2673" y1="2260.343" x2="376.15155" y2="2319.4465" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/figures/simple-5-delete.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="66 2640 420 262" width="35pc" height="262pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Ball_Marker" viewBox="-4 -3 5 6" markerWidth="5" markerHeight="6" color="red"><g><circle cx="-1.3999994" cy="0" r="1.3999988" fill="none" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id575_Graphic" filter="url(#Shadow)"/><use xl:href="#id554_Graphic" filter="url(#Shadow)"/><use xl:href="#id555_Graphic" filter="url(#Shadow)"/><use xl:href="#id557_Graphic" filter="url(#Shadow)"/><use xl:href="#id558_Graphic" filter="url(#Shadow)"/><use xl:href="#id562_Graphic" filter="url(#Shadow)"/><use xl:href="#id563_Graphic" filter="url(#Shadow)"/><use xl:href="#id565_Graphic" filter="url(#Shadow)"/></g><g id="id575_Graphic"><rect x="322.92328" y="2656" width="143" height="221.08398" fill="white" fill-opacity=".5"/><rect x="322.92328" y="2656" width="143" height="221.08398" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id554_Graphic"><rect x="86" y="2670.28" width="143" height="192.52393" fill="white" fill-opacity=".5"/><rect x="86" y="2670.28" width="143" height="192.52393" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id555_Graphic"><path d="M 177.54439 2708.2524 C 188.61441 2719.3225 188.61441 2737.2703 177.54439 2748.3403 C 166.47443 2759.4104 148.52646 2759.4104 137.4565 2748.3403 C 126.38647 2737.2703 126.38647 2719.3225 137.4565 2708.2524 C 148.52646 2697.1824 166.47443 2697.1824 177.54439 2708.2524" fill="red"/><path d="M 177.54439 2708.2524 C 188.61441 2719.3225 188.61441 2737.2703 177.54439 2748.3403 C 166.47443 2759.4104 148.52646 2759.4104 137.4565 2748.3403 C 126.38647 2737.2703 126.38647 2719.3225 137.4565 2708.2524 C 148.52646 2697.1824 166.47443 2697.1824 177.54439 2708.2524" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(139.82329 2712.7964)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="157.50027" y1="2788.45" x2="157.50037" y2="2757.1428" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id557_Graphic"><path d="M 167.52223 2793.1013 C 173.05725 2798.6362 173.05725 2807.6104 167.52223 2813.1453 C 161.98724 2818.6804 153.013245 2818.6804 147.47826 2813.1453 C 141.94324 2807.6104 141.94324 2798.6362 147.47826 2793.1013 C 153.013245 2787.5662 161.98724 2787.5662 167.52223 2793.1013" fill="black"/><path d="M 167.52223 2793.1013 C 173.05725 2798.6362 173.05725 2807.6104 167.52223 2813.1453 C 161.98724 2818.6804 153.013245 2818.6804 147.47826 2813.1453 C 141.94324 2807.6104 141.94324 2798.6362 147.47826 2793.1013 C 153.013245 2787.5662 161.98724 2787.5662 167.52223 2793.1013" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id558_Graphic"><path d="M 167.52223 2838.6013 C 173.05725 2844.1362 173.05725 2853.1104 167.52223 2858.6453 C 161.98724 2864.1804 153.013245 2864.1804 147.47826 2858.6453 C 141.94324 2853.1104 141.94324 2844.1362 147.47826 2838.6013 C 153.013245 2833.0662 161.98724 2833.0662 167.52223 2838.6013" fill="black"/><path d="M 167.52223 2838.6013 C 173.05725 2844.1362 173.05725 2853.1104 167.52223 2858.6453 C 161.98724 2864.1804 153.013245 2864.1804 147.47826 2858.6453 C 141.94324 2853.1104 141.94324 2844.1362 147.47826 2838.6013 C 153.013245 2833.0662 161.98724 2833.0662 167.52223 2838.6013" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="157.50024" y1="2817.7966" x2="157.50024" y2="2833.95" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="394.42325" y1="2798.7" x2="394.42328" y2="2764.2998" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id562_Graphic"><path d="M 404.44525 2803.3513 C 409.98026 2808.8862 409.98026 2817.8604 404.44525 2823.3953 C 398.91025 2828.9304 389.93625 2828.9304 384.40125 2823.3953 C 378.86624 2817.8604 378.86624 2808.8862 384.40125 2803.3513 C 389.93625 2797.8162 398.91025 2797.8162 404.44525 2803.3513" fill="black"/><path d="M 404.44525 2803.3513 C 409.98026 2808.8862 409.98026 2817.8604 404.44525 2823.3953 C 398.91025 2828.9304 389.93625 2828.9304 384.40125 2823.3953 C 378.86624 2817.8604 378.86624 2808.8862 384.40125 2803.3513 C 389.93625 2797.8162 398.91025 2797.8162 404.44525 2803.3513" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id563_Graphic"><path d="M 404.44525 2848.8513 C 409.98026 2854.3862 409.98026 2863.3604 404.44525 2868.8953 C 398.91025 2874.4304 389.93625 2874.4304 384.40125 2868.8953 C 378.86624 2863.3604 378.86624 2854.3862 384.40125 2848.8513 C 389.93625 2843.3162 398.91025 2843.3162 404.44525 2848.8513" fill="black"/><path d="M 404.44525 2848.8513 C 409.98026 2854.3862 409.98026 2863.3604 404.44525 2868.8953 C 398.91025 2874.4304 389.93625 2874.4304 384.40125 2868.8953 C 378.86624 2863.3604 378.86624 2854.3862 384.40125 2848.8513 C 389.93625 2843.3162 398.91025 2843.3162 404.44525 2848.8513" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="394.42325" y1="2828.0466" x2="394.42325" y2="2844.2" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id565_Graphic"><path d="M 414.46722 2715.4094 C 425.53726 2726.4795 425.53726 2744.4272 414.46722 2755.4973 C 403.39725 2766.5674 385.4493 2766.5674 374.37933 2755.4973 C 363.3093 2744.4272 363.3093 2726.4795 374.37933 2715.4094 C 385.4493 2704.3394 403.39725 2704.3394 414.46722 2715.4094" fill="red" fill-opacity=".5"/><path d="M 414.46722 2715.4094 C 425.53726 2726.4795 425.53726 2744.4272 414.46722 2755.4973 C 403.39725 2766.5674 385.4493 2766.5674 374.37933 2755.4973 C 363.3093 2744.4272 363.3093 2726.4795 374.37933 2715.4094 C 385.4493 2704.3394 403.39725 2704.3394 414.46722 2715.4094" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(376.7461 2719.9534)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="442.8926" y1="2681.3723" x2="422.98685" y2="2703.5828" marker-end="url(#FilledDiamond_Marker)" marker-start="url(#Ball_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/from-mq.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,172 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+-------------------------------------------
+From MQ To Evolve, The Refugee Book
+-------------------------------------------
+
+Cheat sheet
+-------------
+
+==============================  ============================================
+mq command                       new equivalent
+==============================  ============================================
+qseries                         ``log``
+qnew                            ``commit``
+qrefresh                        ``amend``
+qrefresh --exclude              ``uncommit``
+qpop                            ``update`` or ``gdown``
+qpush                           ``update`` or ``gup`` sometimes ``evolve``
+qrm                             ``prune``
+qfold                           ``fold``
+qdiff                           ``odiff``
+qrecord                         ``record``
+
+qfinish                         --
+qimport                         --
+==============================  ============================================
+
+
+Replacement details
+---------------------
+
+hg qseries
+```````````
+
+All your work in progress is now in real changesets all the time.
+
+You can use the standard log command to display them. You can use the
+phase revset to display unfinished work only, and use templates to have
+the same kind of compact that the output of qseries has.
+
+This will result in something like::
+
+  [alias]
+  wip = log -r 'not public()' --template='{rev}:{node|short} {desc|firstline}\n'
+
+hg qnew
+````````
+
+With evolve you handle standard changesets without an additional overlay.
+
+Standard changeset are created using hg commit as usual::
+
+  $ hg commit
+
+If you want to keep the "WIP is not pushed" behavior, you want to
+set your changeset in the secret phase using the phase command.
+
+Note that you only need it for the first commit you want to be secret. Later
+commits will inherit their parent's phase.
+
+If you always want your new commit to be in the secret phase, your should
+consider updating your configuration:
+
+  [phases]
+  new-commit=secret
+
+hg qref
+````````
+
+A new command from evolution will allow you to rewrite the changeset you are
+currently on. Just call:
+
+  $ hg amend
+
+This command takes the same options as commit, plus the switch '-e' (--edit)
+to edit the commit message in an editor.
+
+
+.. -c is very confusig
+..
+.. The amend command also has a -c switch which allows you to make an
+.. explicit amending commit before rewriting a changeset.::
+..
+..   $ hg record -m 'feature A'
+..   # oups, I forgot some stuff
+..   $ hg record babar.py
+..   $ hg amend -c .^ # .^ refer to "working directoy parent, here 'feature A'
+
+.. note: refresh is an alias for amend
+
+hg qref --exclude
+`````````````````````
+
+To remove changes from your current commit use::
+
+  $ hg uncommit not-ready.txt
+
+
+hg qpop
+`````````
+
+The following command emulates the behavior of hg qpop:
+
+  $ hg gdown
+
+If you need to go back to an arbitrary commit you can use:
+
+  $ hg update
+
+.. note:: gdown and update allow movement with working directory
+          changes applied, and gracefully merge them.
+
+hg qpush
+````````
+
+When you rewrite changesets, descendants of rewritten changesets are marked as
+"unstable". You need to rewrite them on top of the new version of their
+ancestor.
+
+The evolution extension adds a command to rewrite "unstable"
+changesets:::
+
+  $ hg evolve
+
+You can also decide to do it manually using::
+
+  $ hg graft -O <old-version>
+
+or::
+
+  $ hg rebase -r <revset for old version> -d .
+
+note: using graft allows you to pick the changeset you want next as the --move
+option of qpush do.
+
+
+hg qrm
+```````
+
+evolution introduce a new command to mark a changeset as "not wanted anymore".::
+
+  $ hg prune <revset>
+
+hg qfold
+`````````
+
+
+::
+
+  $ hg fold first::last
+
+hg qdiff
+`````````
+
+``pdiff`` is an alias for `hg diff -r .^` It works like qdiff, but outside MQ.
+
+
+
+hg qfinish and hg qimport
+````````````````````````````
+
+These are not necessary anymore. If you want to control the
+mutability of changesets, see the phase feature.
+
+
+
+hg qcommit
+```````````````
+
+If you really need to send patches through versioned mq patches, you should
+look at the qsync extension.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/index.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,166 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+========================================
+Changeset Evolution Experimentation
+========================================
+
+
+This is the online documentation of the `evolve extension`_. An experimental
+extension that drive the implementation of the `changeset evolution concept`_ for
+Mercurial.
+
+.. _`evolve extension`: http://mercurial.selenic.com/wiki/EvolveExtension
+.. _`changeset evolution concept`: http://mercurial.selenic.com/wiki/ChangesetEvolution
+
+Here are various materials on planned improvement to Mercurial regarding
+rewriting history.
+
+First, read about what challenges arise while rewriting history and how we plan to
+solve them once and for all.
+
+.. toctree::
+   :maxdepth: 2
+
+   instability
+
+The effort is split in two parts:
+
+ * The **obsolescence marker** concept aims to provide an alternative to ``strip``
+   to get rid of changesets. This concept has been partially implemented since
+   Mercurial 2.3.
+
+ * The **evolve** Mercurial extension rewrites history using obsolete
+   *marker* under the hood.
+
+The first and most important step is by far the **obsolescence marker**. However
+most users will never be directly exposed to the concept. For this reason
+this manual starts with changeset evolution.
+
+Evolve: A robust alternative to MQ
+====================================
+
+Evolve is an experimental history rewriting extension that uses obsolete
+markers. It is inspired by MQ and pbranch but has multiple advantages over
+them:
+
+* Focus on your current work.
+
+    You can focus your work on a single changeset and take care of adapting
+    descendent changesets later.
+
+* Handle **non-linear history with branches and merges**
+
+* Rely internally on Mercurial's **robust merge** mechanism.
+
+  Simple conflicts are handled by real merge tools using the appropriate ancestor.
+  Conflicts are much rarer and much more user friendly.
+
+*  Mutable history **fully available all the time**.
+
+  Always use 'hg update' and forget about (un)applying patches to access the
+  mutable part of your history.
+
+
+* Use only **plain changesets** and forget about patches. Evolve will create and
+  exchange real changesets. Mutable history can be used in all usual operations:
+  pull, push, log, diff, etc.
+
+* Allow **sharing and collaboration** mutable history without fear of duplicates
+  (thanks to obsolete marker).
+
+* Cover all MQ usage but guard.
+
+.. warning:: The evolve extension and obsolete markers are at an experimental
+             stage. While using obsolete you willl likely be exposed to complex
+             implications of the **obsolete marker** concept. I do not recommend
+             non-power users to test this at this stage.
+
+             While numbered 1.0.0, the command line API of this version should
+             **not** be regarded as *stable*: command behavior, name and
+             options may change in future releases or once integrated into
+             Mercurial. It is still an immature extension; a lot of
+             features are still missing but there is low risk of
+             repository corruption.
+
+             Production-ready version should hide such details from normal users.
+
+The evolve extension requires Mercurial 2.5 (older versions supports down to 2.2)
+
+To enable the evolve extension use::
+
+    $ hg clone https://bitbucket.org/marmoute/mutable-history -u stable
+    $ echo '[extensions]\nevolve=$PWD/mutable-history/hgext/evolve.py' >> ~/.hgrc
+
+You will probably want to use hgview_ to visualize obsolescence. Version 1.7.1
+or later is required.
+
+.. _hgview: http://www.logilab.org/project/hgview/
+
+
+ ---
+
+For more information see the documents below:
+
+.. toctree::
+   :maxdepth: 1
+
+   tutorials/tutorial
+   evolve-good-practice
+   evolve-faq
+   from-mq
+   evolve-collaboration
+   qsync
+
+Smart changeset deletion: Obsolete Marker
+==========================================
+
+The obsolete marker is a powerful concept that allows Mercurial to safely handle
+history rewriting operations. It is a new type of relation between Mercurial
+changesets that tracks the result of history rewriting operations.
+
+This concept is simple to define and provides a very solid base for:
+
+- very fast history rewriting operations
+
+- auditable and reversible history rewriting process
+
+- clean final history
+
+- share and collaborate on mutable parts of the history
+
+- gracefully handle history rewriting conflicts
+
+- allow various history rewriting UI to collaborate with a underlying common API
+
+ ---
+
+For more information, see the documents below
+
+.. toctree::
+   :maxdepth: 1
+
+   obs-concept
+   obs-terms
+   obs-implementation
+
+
+Known limitations and bugs
+=================================
+
+Here is a list of known issues that will be fixed later:
+
+
+* You need to provide to `graft --continue -O` if you started you
+  graft using `-O`.
+
+  you to manually specify target all the time.
+
+* Trying to exchange obsolete marker with a static http repo will crash.
+
+* Extinct changesets are hidden using the *hidden* feature of mercurial only
+  supported by a few commands.
+
+  Only ``hg log``, ``hgview`` and `hg glog` support it. Neither ``hg heads`` nor other visual viewers do.
+
+* hg heads shows extinct changesets.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/instability.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,222 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+-----------------------------------
+The instability Principle
+-----------------------------------
+
+
+
+An intrinsic contradiction
+-----------------------------------
+
+XXX starts by talking about getting ride of changeset.
+
+DVCSes bring two new major concepts to the version control scene:
+
+    * History is organized as a robust DAG,
+    * History can be rewritten.
+
+However, the two concepts are in contradiction:
+
+To achieve a robust history, three key elements are gathered in *changesets*:
+
+    * Full snapshot of the versioned content,
+    * Reference to the previous full snapshot used to build the new one,
+    * A description of the change which leads from the old content to the new content.
+
+All three elements are used to compute a *unique* hash that identifies the changeset
+(with various other metadata). This identification is a key part of DVCS design.
+
+This is a very useful property because changing B's parent means
+changing B's content too. This requires the creation of **another**
+changeset, which is semantically good.
+
+.. figure:: ./figures/edit-is-rewrite-step2.svg
+
+
+To avoid duplication, the older changeset is usually discarded from accessible
+history. I'm calling them *obsolete* changesets.
+
+
+But rewriting a changeset with children does not change the
+children's parents! And because children of the rewritten changeset
+still **depend** on the older "dead" version of the changeset, we
+cannot get rid of this dead version.
+
+::
+
+  Schema base,  A and A' and B.
+
+I'm calling these children **unstable** because they are based on a
+dead changeset and prevent people from getting rid of it.
+
+This instability is an **unavoidable consequence** of the strict dependency of
+changesets.  Rewriting history always needs to take it into account and
+provide a way to rewrite the descendants of the new changeset to avoid
+coexistence of the old and new versions of a rewritten changeset.
+
+
+Everybody is working around the issue
+------------------------------------------------
+
+I'm not claiming that rewriting history is impossible. People have been successfully
+doing it for years. However they all need to work around *instability*. Several
+workaround strategies exist.
+
+
+Rewriting all at once
+``````````````````````````
+
+The simplest way to avoid instability is to ensure rewriting
+operations always end in a stable situation. This is achieved by
+rewriting all affected changesets at the same time.
+
+Rewriting all descendants at the same time when rewriting a changeset.
+
+::
+
+  Schema!
+
+Several Mercurial commands apply it: rebase, collapse, histedit.
+Mercurial also refuses to amend changesets with descendants. The git
+branch design enforces this approach in git too.
+
+
+However, DVCS are **distributed**. This means that you do not control what
+happens outside your repository. Once a changeset has been exchanged *outside*,
+there is no way to be sure it does not have descendants somewhere else.
+Therefore **if you rewrite changeset that exists elsewhere, you can't eradicate
+the risk of instability.**
+
+Do not rewrite exchanged changesets
+```````````````````````````````````
+
+To work around the issue above, Mercurial introduced phases, which
+prevent you from rewriting shared changesets and ensure others can't
+pull certain changesets from you. But this is a very frustrating
+limitation that prevents you to efficiently sharing, reviewing and
+collaborating on mutable changesets.
+
+In the Git world, they use another approach to prevent instability. By
+convention only a single developer works on a changeset contained in
+a named branch. But once again this is a huge blocker for
+collaborating. Moreover clueless people **will** mess up social
+convention soon or later.
+
+
+Lose the DAG robustness
+````````````````````````````
+
+The other approach in Mercurial is to keep the mutable part of the
+history outside the DVCS constraint. This is the MQ approach of
+sticking a quilt queue over Mercurial.
+
+This allow much more flexible workflow but two major feature are lost in the
+process:
+
+:graceful merge: MQ uses plain patch to store changeset contents, which has
+                 problems in changing context. Applying your queue
+                 becomes very painful when context changes.
+
+:easy branching: A quilt queue is by definition a linear queue, increasing risk
+                 of conflict.
+
+It is possible to collaborate over versioned MQ! But you are going to
+have a lot of trouble.
+
+Ignore conflicts
+```````````````````````````````````
+ 
+Another ignored issue is a conflicting rewrite of the same changeset.
+If a changeset is rewritten two times we have two newer versions,
+and duplicated history is complicated to merge.
+
+Mercurial work around by
+
+The "One set of mutable changset == One developer" mantra is also a way to work
+around conflicting rewriting of changeset. If two different people are able to
+
+The git branch model allows overwriting changeset version by another
+one, but it does not care about divergent version. It is the equivalent
+of "common ftp" source management for changesets.
+
+Facing The Danger Once And For All
+------------------------------------------------
+
+Above we saw that the more effort you put to avoid instability, the more options
+you deny. And even the most restrictive workflow can't guarantee that instability
+will never show up!
+
+Obsolete marker can handle the job
+```````````````````````````````````
+
+It is time to provide a full-featured solution to deal with
+instability and to stop working around the issue! This is why I
+am developing a new feature for Mercurial called "Obsolete markers".
+Obsolete markers have two key properties:
+
+
+* Any "old" changeset we want to get rid of is **explicitly** marked
+  as "obsolete" by history rewriting operations.
+
+  By explicitly marking the obsolete part of the history, we will be able to
+  easily detect instability situation.
+
+* Relations between old and new version of changesets are tracked by obsolete
+  markers.
+
+  By storing a meta-history of changeset evolution we are able to easily resolve
+  instability and edit conflicts [#]_ .
+
+.. [#] Edit conflicts is another major obstable to collaboration. See the
+       section dedicated to obsolete marker for details.
+
+Improved robustness == improved simplicity
+````````````````````````````````````````````````
+
+This proposal should **first** be seen as a safety measure.
+
+It allows detecting instability as soon as possible.
+
+::
+
+    $ hg pull
+    added 3 changeset
+    +2 unstable changeset
+    (do you want "hg evolve" ?)
+    working directory parent is obsolete!
+    $ hg push
+    outgoing unstable changesets
+    (use "hg evolve" or force the push)
+
+And it should not not encourage people to create instability.
+
+::
+
+    $ hg up 42
+    $ hg commit --amend
+    changeset have descendant.
+    $ hg commit --amend -f
+    +5 unstable changeset
+
+    $ hg rebase -D --rev 40::44
+    rebasing already obsolete changeset 42:AAA will conflict with newer version 48:BBB
+
+While allowing powerful feature
+````````````````````````````````````````````````
+
+
+* Help to automatically solve instability.
+
+* "prune" changeset remotely.
+
+* track resulting changeset when submitting patch//pull request.
+
+* Focus on what you do:
+
+  I do not like the "all at once" model of history rewriting. I'm comfortable
+  with instability and obsolete marker offer all the tool to safely create and
+  handle instability locally.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/makefile	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,11 @@
+
+all: tutorials/tutorial.rst static/logo-evolve.ico
+	sphinx-build . ../html/
+
+tutorials/tutorial.rst: tutorials/tutorial.t
+	python test2rst.py tutorials/
+
+static/logo-evolve.ico: static/logo-evolve.svg
+	convert -resize 36x36 static/logo-evolve.svg static/logo-evolve.ico
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/obs-concept.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,390 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+-----------------------------------------------------------
+Why Do We Need a New Concept
+-----------------------------------------------------------
+
+Current DVCSes are great tools for forging a series of flawless
+changesets on your own. But they perform poorly when it comes to
+**sharing** some work in progress and **collaborating** on such work
+in progress.
+
+When people forge a new version of a changeset they actually create a
+new changeset and get rid of the original changeset. Difficulties to
+collaborate mostly came from the way old content is *removed* from
+a repository.
+
+Mercurial Approach: Strip
+-----------------------------------------------------
+
+With the current version of mercurial, every changeset that exists in
+your repository is *visible* and *meaningful*. To delete old
+(rewritten) changesets, mercurial removes them from the repository
+storage with an operation called *strip*. After the *stripping*, the
+repository looks as if the changeset never existed.
+
+This approach is simple and effective except for one big
+drawback: you can remove changesets from **your repository only**. If
+a stripped changeset exists in another repository it touches, it will
+show up again. This is because a shared changeset becomes
+part of a shared global history. Stripping a changeset from all
+repositories is at best impractical and in most case impossible.
+
+As consequence, **you can not rewrite something once you exchange it with
+others**. The old version will still exist along side the new one [#]_.
+
+Moreover stripping changesets creates backup bundles. This allows
+restoration of the deleted changesets, but the process is painful.
+
+Finally, as the repository format is not optimized for deletion. stripping a
+changeset may be slow in some situations.
+
+To sum up, the strip approach is very simple but does not handle
+interaction with the outer world, which is very unfortunate for a
+*Distributed* VCS.
+
+.. [#] various work around exists but they require their own workflows
+   which are distinct from the very elegant basic workflow of
+   Mercurial.
+
+Git Approach: Overwrite Reference
+-----------------------------------------------------
+
+The Git approach to repository structure is a bit more complex: there
+can be any amount of unrelated changesets in a repository, and **only
+changesets referenced by a git branch** are *visible* and
+*meaningful*.
+
+
+.. figure:: ./figures/git.*
+
+
+This simplifies the process of getting rid of old changesets. You can
+just leave them in place and move the reference on the new one. You
+can then propagate this change by moving the git-branch on remote host
+with the newer version of the marker overwriting the older one.
+
+This approach goes a bit further but still has a major drawback:
+
+Because you **overwrite** the git-branch, you have no conflict
+resolution. The last to act wins. This makes collaboration on multiple
+changesets difficult because you can't merge concurrent updates on a
+changeset.
+
+Every overwrite is a forced operation where the operator says, "yes I
+want this to replace that". In highly distributed environments, a user
+may end up with conflicting references and no proper way to choose.
+
+Because of this way to visualize a repository, git-branches are a core
+part of git, which makes the user interface more complicated and
+constrains moving through history.
+
+Finally, even if all older changesets still exist in the repository,
+accesing them is still painful.
+
+
+-----------------------------------------------------
+The Obsolete Marker Concept
+-----------------------------------------------------
+
+
+As none of the concepts was powerful enough to fulfill the need of
+safely rewriting history, including easy sharing and collaboration on
+mutable history, we needed another one.
+
+Basic concept
+-----------------------------------------------------
+
+
+Every history rewriting operation stores the information that old rewritten
+changeset is replaced by newer version in a given set of changesets.
+
+All basic history rewriting operation can create an appropriate obsolete marker.
+
+
+.. figure:: ./figures/example-1-update.*
+
+    *Updating* a changeset
+
+    Create one obsolete marker: ``([A'] obsolete A)``
+
+
+
+.. figure:: ./figures/example-2-split.*
+
+    *Splitting* a changeset in multiple one
+
+    Create one obsolete marker ``([B1, B2] obsolete B)]``
+
+
+.. figure:: ./figures/simple-3-merge.*
+
+    *Merging* multiple changeset in a single one
+
+    Create two obsolete markers ``([C] obsolete A), ([C] obsolete B)``
+
+.. figure:: ./figures/simple-4-reorder.*
+
+    *Moving* changeset around
+
+    Reordering those two changesets need two obsolete markers:
+    ``([A'] obsolete A), ([B'] obsolete B)``
+
+
+
+.. figure:: ./figures/simple-5-delete.*
+
+    *Removing* a changeset:
+
+    One obselete marker ``([] obsolete B)``
+
+
+To conclude, a single obsolete marker express a relation from **0..n** new
+changesets to **1** old changeset.
+
+Basic Usage
+-----------------------------------------------------
+
+Obsolete markers create a perpendicular history: **a versioned
+changeset graph**. This means that offers the same features we have
+for versioned files but applied to changeset:
+
+First: we can display a **coherent view** of the history graph in which only a
+single version of your changesets is displayed by the UI.
+
+Second, because obsolete changeset content is still **available**. You can 
+you can
+
+    * **browse** the content of your obsolete commits,
+
+    * **compare** newer and older versions of a changeset,
+
+    * **restore** content of previously obsolete changesets.
+
+Finally, the obsolete marker can be **exchanged between
+repositories**. You are able to share the result on your history
+rewriting operations with other prople and **collaborate on the
+mutable part of the history**.
+
+Conflicting history rewriting operation can be detected and
+**resolved** as easily as conflicting changes on a file.
+
+
+Detecting and solving tricky situations
+-----------------------------------------------------
+
+History rewriting can lead to complex situations. The obsolete marker
+introduces a simple representation for this complex reality. But
+people using complex workflows will one day or another have to face
+the intrinsic complexity of some real-world situation.
+
+This section describes possible situations, defines precise sets of
+changesets involved in such situations and explains how the error
+cases can be resolved automatically using the available information.
+
+
+Obsolete changesets
+````````````````````
+
+Old changesets left behind by obsolete operation are called **obsolete**.
+
+With the current version of mercurial, this *obsolete* part is stripped from the
+repository before the end of every rewriting operation.
+
+.. figure:: ./figures/error-obsolete.*
+
+    Rebasing `B` and `C` on `A` (as `B'`, `C'`)
+
+    This rebase operation added two obsolete markers from new
+    changesets to old changesets. These two old changesets are now
+    part of the *obsolete* part of the history.
+
+In most cases, the obsolete set will be fully hidden to both the UI and
+discovery, hence users do not have to care about them unless they want to
+audit history rewriting operations.
+
+Unstable changesets
+```````````````````
+
+While exploring the possibilities of the obsolete marker a bit
+further, you may end up with *obsolete* changesets which have
+*non-obsolete* children. There is two common ways to achieve this:
+
+* Pull a changeset based of an old version of a changeset [#]_.
+
+* Use a partial rewriting operation. For example amend on a changeset with
+  children.
+
+*Non-obsolete* changeset based on *obsolete* one are called **unstable**
+
+.. figure:: ./figures/error-unstable.*
+
+    Amend `A` into `A'` leaving `B` behind.
+
+    In this situation we cannot consider `B` as *obsolete*. But we
+    have all the necessary data to detect `B` as an *unstable* branch
+    of the history because its parent `A` is *obsolete*. In addition,
+    we have enough data to automatically resolve this instability: we
+    know that the new version of `B` parent (`A`) is `A'`. We can
+    deduce that we should rebase `B` on `A'` to get a stable history
+    again.
+
+Proper warnings should be issued when part of the history becomes
+unstable. The UI will be able to use the obsolete marker to
+automatically suggest a resolution to the user of even carry them out
+for them.
+
+
+XXX details on automatic resolution for
+
+* movement
+
+* handling deletion
+
+* handling split on multiple head
+
+
+.. [#] For this to happen one needs to explicitly enable exchange of draft
+       changesets. See phase help for details.
+
+The two parts of the obsolete set
+``````````````````````````````````````
+
+The previous section shows that there could be two kinds of *obsolete*
+changesets:
+
+* an *obsolete* changeset with no or *obsolete* only descendants is called **extinct**.
+
+* an *obsolete* changeset with *unstable* descendants is called **suspended**.
+
+
+.. figure:: ./figures/error-extinct.*
+
+    Amend `A` and `C` leaving `B` behind.
+
+    In this example we have two *obsolete* changesets: `C` with no *unstable*
+    children is *extinct*. `A` with *unstable* descendant (`B`) is *suspended*.
+    `B` is *unstable* as before.
+
+
+Because nothing outside the obsolete set default on *extinct*
+changesets, they can be safely hidden in the UI and even garbage
+collected. *Suspended* changesets have to stay visible and available
+until their unstable descendant are rewritten into stable version.
+
+
+Conflicting rewrites
+````````````````````
+
+If people start to concurrently edit the same part of the history they will
+likely meet conflicting situations when a changeset has been rewritten in two
+different ways.
+
+
+.. figure:: ./figures/error-conflicting.*
+
+    Conflicting rewrite of `A` into `A'` and `A''`
+
+This kind of conflict is easy to detect with an obsolete marker
+because an obsolete changeset can have more than one new version. It
+may be seen as the multiple heads case. Mercurial warns you about this
+on pull. It is resolved the same way by a merge of A' and A'' that
+will keep the same parent than `A'` and `A''` with two obsolete
+markers pointing to both `A` and `A'`
+
+.. figure:: ./figures/explain-troubles-concurrent-10-solution.*
+
+Allowing multiple new changesets to obsolete a single one allows to
+distinguish a split changeset from a history rewriting conflict.
+
+Reliable history
+``````````````````````
+
+Obsolete markers help to smooth rewriting operation process. However
+they do not change the fact that **you should only rewrite the mutable
+part of the history**. The phase concept enforces this rule by
+explicitly defining a public immutable set of changesets. Rewriting
+operations refuse to work on public changesets, but there are still
+some corner cases where previously rewritten changesets are made
+public.
+
+Special rules apply for obsolete markers pointing to public changesets:
+
+* Public changesets are excluded from the obsolete set (public
+  changesets are never hidden or candidate to garbage collection)
+
+* *newer* version of a public changeset are called **bumped** and
+  highlighted as an error case.
+
+.. figure:: ./figures/explain-troubles-concurrent-10-sumup.*
+
+Solving such an error is easy. Because we know what changeset a
+*bumped* tries to rewrite, we can easily compute a smaller
+changeset containing only the change from the old *public* to the new
+*bumped*.
+
+.. figure:: ./figures/explain-troubles-concurrent-15-solution.*
+
+
+Conclusion
+----------------
+
+The obsolete marker is a powerful concept that allows mercurial to safely handle
+history rewriting operations. It is a new type of relation between Mercurial
+changesets which tracks the result of history rewriting operations.
+
+This concept is simple to define and provides a very solid base for:
+
+
+- Very fast history rewriting operations,
+
+- auditable and reversible history rewriting process,
+
+- clean final history,
+
+- sharing and collaborating on the mutable part of the history,
+
+- gracefully handling history rewriting conflicts,
+
+- various history rewriting UI's collaborating with an underlying common API.
+
+.. list-table:: Comparison on solution [#]_
+   :header-rows: 1
+
+   * - Solution
+     - Remove changeset locally
+     - Works on any point of your history
+     - Propagation
+     - Collaboration
+     - Speed
+     - Access to older version
+
+   * - Strip
+     - `+`
+     - `+`
+     - \
+     - \ 
+     - \ 
+     - `- -`
+
+   * - Reference
+     - `+`
+     - \ 
+     - `+`
+     - \ 
+     - `+`
+     - `-`
+
+   * - Obsolete
+     - `+`
+     - `+`
+     - `++`
+     - `++`
+     - `+`
+     - `+`
+
+
+
+.. [#] To preserve good tradition in comparison table, an overwhelming advantage
+       goes to the defended solution.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/obs-implementation.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,106 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+-----------------------------------------------------
+Implementation of Obsolete Marker
+-----------------------------------------------------
+.. warning:: This document is still in heavy work in progress
+
+Main questions about Obsolete Marker Implementation
+-----------------------------------------------------
+
+
+
+
+How shall we exchange Marker over the Wire ?
+`````````````````````````````````````````````````````````
+
+We can have a lot of markers. We do not want to exchange data for the one we
+already know. Listkey() is not very appropriate there as you get everything.
+
+Moreover, we might want to only hear about Marker that impact changeset we are
+pulling.
+
+pushkey is not batchable yet (could be fixed)
+
+A dedicated discovery and exchange protocol seems mandatory here.
+
+
+Various technical details
+-----------------------------------------------------
+
+Some stuff that worse to note. some may deserve their own section later.
+
+storing old changeset
+``````````````````````
+
+The new general delta format allows a very efficient storage of two very similar
+changesets. Storing obsolete children using general delta takes no more place
+than storing the obsolete diff. Reverted file will even we reused. The whole
+operation will take much less space the strip backup.
+
+
+Abstraction from history rewriting UI
+```````````````````````````````````````````
+
+How Mercurial handles obsolete marker is independent from what decides
+to create them and what actual operation solves the error case. Any of
+the existing history rewriting UI (rebase, mq, histedit) can lay
+obsolete markers and resolve situation created by others. To go
+further, a hook system of obsolete marker creation would allow each
+mechanism to collaborate with other though a standard and central
+mechanism.
+
+
+Obsolete marker storage
+```````````````````````````
+
+The Obsolete marker will most likely be stored outside standard
+history. They are multiple reasons for this:
+
+First, obsolete markers are really perpendicular to standard history
+there is no strong reason to include it here other than convenience.
+
+Second, storing obsolete marker inside standard history means:
+
+* A changeset must be created every time an obsolete relation is added. Very
+  inconvenient for delete operation.
+
+* Obsolete marker must be forged at the creation of the new changeset. This
+  is very inconvenient for split operation. And in general it becomes
+  complicated to fix history afterward in particular when working with older
+  clients.
+
+Storing obsolete marker outside history have several pros:
+
+* It eases Exchange of obsolete markers without unnecessary obsolete
+  changeset contents.
+
+* It allows tuning the actual storage and protocol exchange while maintaining
+  compatibility with older clients through the wire (as we do the repository
+  format).
+
+* It eases the exchange of obsolete related information during
+  discovery to exchange obsolete changeset relevant to conflict
+  resolution. Exchanging such information deserves a dedicated
+  protocol.
+
+Persistent
+```````````````````````
+
+*Extinct* changeset and obsolete marker will most likely be garbage collected as
+some point. However, archive server may decide to keep them forever in order to
+keep a fully auditable history in its finest conception.
+
+
+Current status
+-----------------------------------------------------
+
+Obsolete marker are partialy in core.
+
+2.3:
+
+- storage over obsolete marker
+- exchange suing pushkey
+- extinct changeset are properly hidden
+- extinct changeset are excluded from exchange
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/obs-terms.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,237 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+-----------------------------------------------------------
+Terminology of the obsolete concept
+-----------------------------------------------------------
+
+Obsolete markers
+---------------------------------
+
+The mutable concept is based on **obsolete markers**. Creating an obsolete
+marker registers a relation between an old obsoleted changeset and its newer
+version.
+
+Old changesets are called **precursors** while their new versions are called
+**successors**. A marker always registers a single *precursor* and:
+
+- no *successor*: the *precursor* is just discarded.
+- one *successor*: the *precursor* has been rewritten
+- multiple *successors*: the *precursor* were splits in multiple
+  changesets.
+
+.. The *precursors* and *successors* terms can be used on changeset directy:
+
+.. :precursors: of a changeset `A` are changesets used as *precursors* by
+..              obsolete marker using changeset `A` as *successors*
+
+.. :successors: of a changeset `B` are changesets used as *successors* by
+..              obsolete marker using changeset `B` as *precursors*
+
+Chaining obsolete markers is allowed to rewrite a changeset that is already a
+*successor*. This is a kind of *second order version control*.
+To clarify ambiguous situations one can use **direct precursors** or
+**direct successors** to name changesets that are directly related.
+
+The set of all *obsolete markers* forms a direct acyclic graph the same way
+standard *parents*/*children* relation does. In this graph we have:
+
+:any precursors: are transitive precursors of a changeset: *direct precursors*
+                 and *precursors* of *precursors*.
+
+:any successors: are transitive successors of a changeset: *direct successors*
+                 and *successors*  of *successors*)
+
+Obsolete markers may refer changesets that are not known locally.
+So, *direct precursors* of a changeset may be unknown locally.
+This is why we usually focus on the **first known precursors**  of the rewritten
+changeset. The same apply for *successors*.
+
+Changeset in *any successors* which are not **obsolete** are called
+**newest successors**..
+
+.. note:: I'm not very happy with this naming scheme and I'm looking for a
+          better distinction between *direct successors* and **any successors**.
+
+Possible changesets "type"
+---------------------------------
+
+The following table describes names and behaviors of changesets affected by
+obsolete markers. The left column describes generic categories and the right
+columns are about sub-categories.
+
+
++---------------------+--------------------------+-----------------------------+
+| **mutable**         | **obsolete**             | **extinct**                 |
+|                     |                          |                             |
+| Changeset in either | Obsolete changeset is    | *extinct* changeset is      |
+| *draft* or *secret* | *mutable* used as a      | *obsolete* which has only   |
+| phase.              | *precursor*.             | *obsolete* descendants.     |
+|                     |                          |                             |
+|                     | A changeset is used as   | They can safely be:         |
+|                     | a *precursor* when at    |                             |
+|                     | least one obsolete       | - hidden in the UI,         |
+|                     | marker refers to it      | - silently excluded from    |
+|                     | as precursors.           |   pull and push operations  |
+|                     |                          | - mostly ignored            |
+|                     |                          | - garbage collected         |
+|                     |                          |                             |
+|                     |                          +-----------------------------+
+|                     |                          |                             |
+|                     |                          | **suspended**               |
+|                     |                          |                             |
+|                     |                          | *suspended* changeset is    |
+|                     |                          | *obsolete* with at least    |
+|                     |                          | one non-obsolete descendant |
+|                     |                          |                             |
+|                     |                          | Thoses descendants prevent  |
+|                     |                          | properties of extincts      |
+|                     |                          | changesets to apply. But    |
+|                     |                          | they will refuse to be      |
+|                     |                          | pushed without --force.     |
+|                     |                          |                             |
+|                     +--------------------------+-----------------------------+
+|                     |                          |                             |
+|                     | **troubled**             | **unstable**                |
+|                     |                          |                             |
+|                     | *troubled*    has        | *unstable* is a changeset   |
+|                     | unresolved issue caused  | with obsolete ancestors.    |
+|                     | by *obsolete* relations. |                             |
+|                     |                          |                             |
+|                     | Possible issues are      | It must be rebased on a     |
+|                     | listed in the next       | non *troubled*    base to   |
+|                     | column. It is possible   | solve the problem.          |
+|                     | for *troubled*           |                             |
+|                     | changeset to combine     | (possible alternative name: |
+|                     | multiple issue at once.  | precarious)                 |
+|                     | (a.k.a. divergent   and  |                             |
+|                     | unstable)                +-----------------------------+
+|                     |                          |                             |
+|                     | (possible alternative    | **bumped**                  |
+|                     | names: unsettled,        |                             |
+|                     | troublesome              | *bumped* is a changeset     |
+|                     |                          | that tries to be successor  |
+|                     |                          | of  public changesets.      |
+|                     |                          |                             |
+|                     |                          | Public changeset can't      |
+|                     |                          | be deleted and replace      |
+|                     |                          | *bumped*                    |
+|                     |                          | need to be converted into   |
+|                     |                          | an overlay to this public   |
+|                     |                          | changeset.                  |
+|                     |                          |                             |
+|                     |                          | (possible alternative names:|
+|                     |                          | mislead, naive, unaware,    |
+|                     |                          | mindless, disenchanting)    |
+|                     |                          |                             |
+|                     |                          +-----------------------------+
+|                     |                          | **divergent**               |
+|                     |                          |                             |
+|                     |                          | *divergent*   is changeset  |
+|                     |                          | that appears when multiple  |
+|                     |                          | changesets are successors   |
+|                     |                          | of the same precursor.      |
+|                     |                          |                             |
+|                     |                          | *divergent*   are solved    |
+|                     |                          | through a three ways merge  |
+|                     |                          | between the two             |
+|                     |                          | *divergent*   ,             |
+|                     |                          | using the last "obsolete-   |
+|                     |                          | -common-ancestor" as the    |
+|                     |                          | base.                       |
+|                     |                          |                             |
+|                     |                          | (*splitting* is             |
+|                     |                          | properly not detected as a  |
+|                     |                          | conflict)                   |
+|                     |                          |                             |
+|                     |                          | (possible alternative names:|
+|                     |                          | clashing, rival, concurent, |
+|                     |                          | conflicting)                |
+|                     |                          |                             |
+|                     +--------------------------+-----------------------------+
+|                     |                                                        |
+|                     | Mutable changesets which are neither *obsolete* or     |
+|                     | *troubled*    are *"ok"*.                              |
+|                     |                                                        |
+|                     | Do we really need a name for it ? *"ok"* is a pretty   |
+|                     | crappy name :-/ other possibilities are:               |
+|                     |                                                        |
+|                     | - stable (confusing with stable branch)                |
+|                     | - sane                                                 |
+|                     | - healthy                                              |
+|                     |                                                        |
++---------------------+--------------------------------------------------------+
+|                                                                              |
+|     **immutable**                                                            |
+|                                                                              |
+| Changesets in the *public* phases.                                           |
+|                                                                              |
+| Rewriting operation refuse to work on immutable changeset.                   |
+|                                                                              |
+| Obsolete markers that refer an immutable changeset as precursors have        |
+| no effect on the precussors but may have effect on the successors.           |
+|                                                                              |
+| When a *mutable* changeset becomes *immutable* (changing its phase from draft|
+| to public) it is just *immutable* and loose any property of it's former      |
+| state.                                                                       |
+|                                                                              |
+| The phase properties says that public changesets stay as *immutable* forever.|
+|                                                                              |
++------------------------------------------------------------------------------+
+
+
+
+Command and operation name
+---------------------------------
+
+
+Existing terms
+``````````````
+
+Mercurial core already uses the following terms:
+
+:amend: to rewrite a changeset
+:graft: to copy a changeset
+:rebase: to move a changeset
+
+
+Uncommit
+`````````````
+
+Remove files from a commit (and leave them as dirty in the working directory)
+
+The *evolve* extension have an `uncommit` command that aims to replace most
+`rollback` usage.
+
+Fold
+``````````
+
+Collapse multiple changesets into a unique one.
+
+The *evolve* extension will have a `fold` command.
+
+Prune
+``````````
+
+Make a changeset obsolete without successors.
+
+This an important operation as it should mostly replace *strip*.
+
+Alternative names:
+
+- kill: shall has funny effects when you forget "hg" in front of ``hg kill``.
+- obsolete: too vague, too long and too generic.
+
+evolve
+```````````````
+
+Automatically resolve *troublesome* changesets
+(*unstable*, *bumped* and *divergent*)
+
+This is an important name as hg pull/push will suggest it the same way it
+suggest merging when you add heads.
+
+alternative names:
+
+- solve (too generic ?)
+- stabilize
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/qsync.rst	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,19 @@
+.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+..                Logilab SA        <contact@logilab.fr>
+
+---------------------------------------------------------------------
+Qsync: Mercurial to MQ exporter
+---------------------------------------------------------------------
+
+
+People may have tools or co-workers that expect to receive mutable history using
+a versioned MQ repository.
+
+For this purpose you can use the ``qsync`` extension.
+
+
+To enable the evolve extension use::
+
+    $ hg clone http://hg-dev.octopoid.net/hgwebdir.cgi/mutable-history/
+    $ mutable-history/iqsync-enable.sh >> ~/.hgrc
+    $ hg help qsync
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/static/logo-evolve.svg	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,622 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.0"
+   width="100"
+   height="100"
+   viewBox="0 0 124.766 126.74917"
+   id="Layer_1"
+   xml:space="preserve"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="logo-evolve.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   style="display:inline"><metadata
+   id="metadata6845"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title><dc:creator><cc:Agent><dc:title>Cali Mastny and Matt Mackall</dc:title></cc:Agent></dc:creator><cc:license
+         rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" /><dc:date>Feb 12 2008</dc:date></cc:Work><cc:License
+       rdf:about="http://creativecommons.org/licenses/GPL/2.0/"><cc:permits
+         rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits
+         rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/Notice" /><cc:permits
+         rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/ShareAlike" /><cc:requires
+         rdf:resource="http://web.resource.org/cc/SourceCode" /></cc:License></rdf:RDF></metadata><sodipodi:namedview
+   inkscape:window-height="1165"
+   inkscape:window-width="1918"
+   inkscape:pageshadow="2"
+   inkscape:pageopacity="0.0"
+   guidetolerance="10.0"
+   gridtolerance="10.0"
+   objecttolerance="10.0"
+   borderopacity="1.0"
+   bordercolor="#666666"
+   pagecolor="#ffffff"
+   id="base"
+   inkscape:zoom="5.4093668"
+   inkscape:cx="86.89449"
+   inkscape:cy="46.517129"
+   inkscape:window-x="0"
+   inkscape:window-y="0"
+   inkscape:current-layer="Layer_1"
+   width="100px"
+   height="120px"
+   units="px"
+   showgrid="false"
+   inkscape:window-maximized="0"><sodipodi:guide
+     position="0,0"
+     orientation="0,100"
+     id="guide3006" /><sodipodi:guide
+     position="100,0"
+     orientation="-120,0"
+     id="guide3008" /><sodipodi:guide
+     position="-14.419433,100.19657"
+     orientation="0,-100"
+     id="guide3010" /><sodipodi:guide
+     position="0,142.90028"
+     orientation="120,0"
+     id="guide3012" /></sodipodi:namedview><defs
+   id="defs261"><inkscape:perspective
+     sodipodi:type="inkscape:persp3d"
+     inkscape:vp_x="0 : 60 : 1"
+     inkscape:vp_y="0 : 1000 : 0"
+     inkscape:vp_z="100 : 60 : 1"
+     inkscape:persp3d-origin="50 : 40 : 1"
+     id="perspective146" /></defs>
+<pattern
+   overflow="visible"
+   viewBox="2.125 -70.896 69 69"
+   id="Polka_Dot_Pattern"
+   patternUnits="userSpaceOnUse"
+   height="69"
+   width="69"
+   y="736.415"
+   x="-316">
+	<g
+   id="g4">
+		<polygon
+   id="polygon6"
+   points="71.125,-1.896 2.125,-1.896 2.125,-70.896 71.125,-70.896   "
+   fill="none" />
+		<polygon
+   id="polygon8"
+   points="71.125,-1.896 2.125,-1.896 2.125,-70.896 71.125,-70.896   "
+   fill="#F7BC60" />
+		<g
+   id="g10">
+			<path
+   id="path12"
+   d="M61.772-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path14"
+   d="M54.105-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path16"
+   d="M46.439-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path18"
+   d="M38.772-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path20"
+   d="M31.105-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path22"
+   d="M23.439-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path24"
+   d="M15.772-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path26"
+   d="M8.105-71.653c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path28"
+   d="M0.439-71.653c0.018,0.072,0.008,0.127-0.026,0.19C0.361-71.362,0.3-71.4,0.248-71.335     c-0.051,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224c0.002,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+		</g>
+		<g
+   id="g30">
+			<path
+   id="path32"
+   d="M69.439-71.653c0.018,0.072,0.008,0.127-0.026,0.19c-0.052,0.101-0.113,0.062-0.165,0.128     c-0.051,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224c0.002,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+		</g>
+		<path
+   id="path34"
+   d="M0.495-71.653c0.018,0.072,0.008,0.127-0.026,0.19c-0.052,0.101-0.113,0.062-0.165,0.128    c-0.051,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161    c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631    c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45    c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221    c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337    c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207    c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224C0.5-71.68,0.503-71.744,0.51-71.626    c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+		<g
+   id="g36">
+			<g
+   id="g38">
+				<path
+   id="path40"
+   d="M69.439-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path42"
+   d="M61.778-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path44"
+   d="M54.118-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path46"
+   d="M46.458-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path48"
+   d="M38.797-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path50"
+   d="M31.137-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path52"
+   d="M23.477-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path54"
+   d="M15.816-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path56"
+   d="M8.156-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path58"
+   d="M0.495-64.001c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143C2-61.45,2.217-61.397,2.391-61.46c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g60">
+				<path
+   id="path62"
+   d="M69.439-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path64"
+   d="M61.778-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path66"
+   d="M54.118-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path68"
+   d="M46.458-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path70"
+   d="M38.797-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path72"
+   d="M31.137-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path74"
+   d="M23.477-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path76"
+   d="M15.816-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path78"
+   d="M8.156-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path80"
+   d="M0.495-56.348c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224C0.5-56.374,0.503-56.438,0.51-56.32      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g82">
+				<path
+   id="path84"
+   d="M69.439-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path86"
+   d="M61.778-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path88"
+   d="M54.118-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path90"
+   d="M46.458-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path92"
+   d="M38.797-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path94"
+   d="M31.137-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path96"
+   d="M23.477-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path98"
+   d="M15.816-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path100"
+   d="M8.156-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path102"
+   d="M0.495-48.695c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g104">
+				<path
+   id="path106"
+   d="M69.439-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path108"
+   d="M61.778-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path110"
+   d="M54.118-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path112"
+   d="M46.458-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path114"
+   d="M38.797-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path116"
+   d="M31.137-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path118"
+   d="M23.477-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path120"
+   d="M15.816-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path122"
+   d="M8.156-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      C8.15-41.004,8.149-41.02,8.14-41.04"
+   fill="#FFFFFF" />
+				<path
+   id="path124"
+   d="M0.495-41.042c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g126">
+				<path
+   id="path128"
+   d="M69.439-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path130"
+   d="M61.778-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path132"
+   d="M54.118-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path134"
+   d="M46.458-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path136"
+   d="M38.797-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path138"
+   d="M31.137-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path140"
+   d="M23.477-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path142"
+   d="M15.816-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path144"
+   d="M8.156-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path146"
+   d="M0.495-33.39c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224C0.5-33.416,0.503-33.48,0.51-33.362      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g148">
+				<path
+   id="path150"
+   d="M69.439-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path152"
+   d="M61.778-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path154"
+   d="M54.118-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path156"
+   d="M46.458-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path158"
+   d="M38.797-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path160"
+   d="M31.137-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path162"
+   d="M23.477-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path164"
+   d="M15.816-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path166"
+   d="M8.156-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path168"
+   d="M0.495-25.736c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g170">
+				<path
+   id="path172"
+   d="M69.439-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path174"
+   d="M61.778-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path176"
+   d="M54.118-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path178"
+   d="M46.458-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path180"
+   d="M38.797-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path182"
+   d="M31.137-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path184"
+   d="M23.477-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path186"
+   d="M15.816-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path188"
+   d="M8.156-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path190"
+   d="M0.495-18.084c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224C0.5-18.11,0.503-18.175,0.51-18.057      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+			<g
+   id="g192">
+				<path
+   id="path194"
+   d="M69.439-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362C69-9.692,69.159-9.523,69.154-9.4c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path196"
+   d="M61.778-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path198"
+   d="M54.118-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path200"
+   d="M46.458-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path202"
+   d="M38.797-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path204"
+   d="M31.137-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path206"
+   d="M23.477-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path208"
+   d="M15.816-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.009,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      c0.177,0.042,0.384-0.104,0.543-0.143c0.18-0.043,0.397,0.01,0.571-0.053C17.933-7.969,17.839-8.227,18-8.34      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path210"
+   d="M8.156-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      C7.915-10.05,7.866-9.836,7.886-9.75C7.717-9.692,7.876-9.523,7.871-9.4C7.868-9.351,7.83-9.295,7.826-9.239      c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631      C9.114-7.652,9.321-7.799,9.48-7.837c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+				<path
+   id="path212"
+   d="M0.495-10.431c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128      C0.254-10.05,0.205-9.836,0.225-9.75C0.056-9.692,0.215-9.523,0.21-9.4c-0.002,0.05-0.041,0.105-0.045,0.161      c-0.01,0.119,0.017,0.266,0.068,0.37C0.33-8.671,0.501-8.456,0.668-8.325c0.19,0.148,0.365,0.572,0.608,0.631      C1.454-7.652,1.66-7.799,1.819-7.837C2-7.88,2.217-7.827,2.391-7.89c0.222-0.079,0.127-0.337,0.288-0.45      c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46C3.477-8.933,3.471-8.995,3.5-9.071      c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337      c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207      c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169      c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			</g>
+		</g>
+		<g
+   id="g214">
+			<path
+   id="path216"
+   d="M69.439-2.778c0.018,0.072,0.008,0.127-0.026,0.19C69.361-2.487,69.3-2.525,69.248-2.46     c-0.051,0.062-0.099,0.276-0.079,0.362C69-2.04,69.159-1.871,69.154-1.748c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C70.397,0,70.604-0.146,70.763-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.215,0.124-0.215,0.224c0.002,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path218"
+   d="M61.778-2.778c0.018,0.072,0.007,0.127-0.026,0.19C61.7-2.487,61.64-2.525,61.587-2.46     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C62.737,0,62.943-0.146,63.103-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224C61.915-3.117,61.78-3.02,61.781-2.92c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path220"
+   d="M54.118-2.778c0.018,0.072,0.007,0.127-0.026,0.19C54.04-2.487,53.98-2.525,53.927-2.46     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C55.077,0,55.283-0.146,55.442-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224C54.255-3.117,54.12-3.02,54.121-2.92c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path222"
+   d="M46.458-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C47.416,0,47.623-0.146,47.782-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224C46.594-3.117,46.459-3.02,46.46-2.92c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path224"
+   d="M38.797-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C39.756,0,39.962-0.146,40.122-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224C38.934-3.117,38.799-3.02,38.8-2.92c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path226"
+   d="M31.137-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C32.095,0,32.302-0.146,32.461-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224C31.273-3.117,31.139-3.02,31.14-2.92c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path228"
+   d="M23.477-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C24.435,0,24.642-0.146,24.801-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     c-0.021,0.011-0.021-0.005-0.03-0.025"
+   fill="#FFFFFF" />
+			<path
+   id="path230"
+   d="M15.816-2.778c0.018,0.072,0.007,0.127-0.026,0.19c-0.053,0.101-0.112,0.062-0.165,0.128     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C16.774,0,16.981-0.146,17.14-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789c-0.18,0.034-0.287,0.126-0.442,0.207     c-0.17,0.088-0.139,0.166-0.318,0.224c-0.081,0.026-0.216,0.124-0.215,0.224c0.001,0.115,0.005,0.051,0.012,0.169     C15.81-2.74,15.809-2.756,15.8-2.776"
+   fill="#FFFFFF" />
+			<path
+   id="path232"
+   d="M8.156-2.778c0.018,0.072,0.007,0.127-0.026,0.19C8.077-2.487,8.018-2.525,7.965-2.46     c-0.05,0.062-0.099,0.276-0.079,0.362c-0.169,0.058-0.01,0.227-0.015,0.35C7.868-1.698,7.83-1.643,7.826-1.587     c-0.01,0.119,0.017,0.266,0.068,0.37c0.097,0.198,0.268,0.413,0.435,0.544c0.19,0.148,0.365,0.572,0.608,0.631     C9.114,0,9.321-0.146,9.48-0.185c0.18-0.043,0.397,0.01,0.571-0.053c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.069,0.339-0.263,0.376-0.46c0.016-0.082,0.01-0.145,0.039-0.221     c0.039-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.052-0.12-0.064-0.187c-0.022-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789C8.954-3.54,8.847-3.448,8.692-3.367     c-0.17,0.088-0.139,0.166-0.318,0.224C8.292-3.117,8.158-3.02,8.159-2.92C8.16-2.805,8.164-2.869,8.17-2.751     C8.15-2.74,8.149-2.756,8.14-2.776"
+   fill="#FFFFFF" />
+			<path
+   id="path234"
+   d="M0.495-2.778c0.018,0.072,0.008,0.127-0.026,0.19C0.417-2.487,0.356-2.525,0.304-2.46     C0.253-2.397,0.205-2.184,0.225-2.098C0.056-2.04,0.215-1.871,0.21-1.748c-0.002,0.05-0.041,0.105-0.045,0.161     c-0.01,0.119,0.017,0.266,0.068,0.37C0.33-1.019,0.501-0.804,0.668-0.673c0.19,0.148,0.365,0.572,0.608,0.631     C1.454,0,1.66-0.146,1.819-0.185C2-0.228,2.217-0.175,2.391-0.237c0.222-0.079,0.127-0.337,0.288-0.45     c0.104-0.074,0.287-0.01,0.406-0.051c0.2-0.07,0.339-0.263,0.376-0.46C3.477-1.28,3.471-1.343,3.5-1.419     c0.038-0.103,0.111-0.16,0.09-0.293c-0.01-0.062-0.051-0.12-0.064-0.187c-0.021-0.114,0.002-0.224,0-0.337     c-0.003-0.2,0.017-0.379-0.078-0.55c-0.38-0.688-1.236-0.929-1.975-0.789C1.293-3.54,1.187-3.448,1.031-3.367     c-0.17,0.088-0.139,0.166-0.318,0.224C0.632-3.117,0.498-3.02,0.498-2.92C0.5-2.805,0.503-2.869,0.51-2.751     C0.489-2.74,0.488-2.756,0.479-2.776"
+   fill="#FFFFFF" />
+		</g>
+	</g>
+</pattern>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<rect
+   style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.83134139;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+   id="rect6847"
+   width="126.74917"
+   height="126.99831"
+   x="-0.99158502"
+   y="-0.24915084" /><g
+   id="g2996"
+   transform="matrix(0.46679402,-0.88436607,0.88436607,0.46679402,-20.509268,97.149298)"><path
+     d="M 107.61309,85.427163 C 126.35316,54.267748 103.65523,3.7316784 62.152514,8.8657974 24.653999,13.501508 24.049791,52.97069 57.097677,62.347028 c 28.598853,8.121324 5.908299,26.261404 6.571301,38.341302 0.665797,12.07808 24.862369,16.46007 43.944112,-15.261167 z"
+     style="fill:#1b1a1b"
+     id="path2339" /><path
+     d="M 108.32072,84.162974 C 127.06181,53.003291 104.36388,2.4672218 62.861165,7.6013402 25.362652,12.23705 24.757687,51.707522 57.805574,61.083859 c 28.598853,8.121324 5.908299,26.261404 6.571569,38.342322 0.666551,12.076789 24.861834,16.458029 43.943577,-15.263207 z"
+     style="fill:#bfbfbf"
+     id="path2561" /><path
+     d="m 69.186033,104.19365 c -1.135692,-1.84204 0.601038,-3.88837 2.386188,-3.73277 2.841598,0.24886 9.028642,-0.0333 13.910588,-2.800482 C 97.6794,90.746293 116.44888,57.478025 107.00882,36.495137 102.78257,27.102283 100.72467,24.412915 96.372318,19.81831 c -0.887874,-0.937057 -0.378162,-0.886124 0.223066,-0.568957 2.353599,1.235189 6.489446,6.019569 10.731716,13.806724 7.16765,13.156791 6.79595,28.797842 4.13015,38.609442 -1.85691,6.825577 -8.25281,22.266533 -17.619587,28.942751 -9.387853,6.69156 -20.372606,10.52943 -24.65163,3.58538 z"
+     style="fill:#000000"
+     id="path2563" /><path
+     d="M 60.687485,61.019981 C 54.297665,59.123186 46.06011,56.4817 41.295423,50.249529 c -3.51248,-4.595193 -5.295582,-9.610385 -5.750944,-12.454176 -0.162003,-1.014713 -0.299617,-1.861261 -0.0075,-2.094878 0.135238,-0.108497 2.622869,5.514283 6.341685,10.226737 3.718069,4.713742 8.914807,7.470526 13.24405,8.472162 3.850608,0.890203 11.826899,2.846243 14.525556,5.145317 2.77437,2.363257 3.005946,7.469336 2.072352,8.045384 C 70.779125,68.169283 68.87,63.447817 60.687289,61.019981 z"
+     style="fill:#000000"
+     id="path2565" /><path
+     d="m 73.863069,105.09442 c -0.123332,1.46251 1.556525,1.74932 3.817708,1.41046 2.898288,-0.43471 5.349293,-0.76107 8.685191,-2.43293 4.521182,-2.2658 9.09685,-5.506989 12.447924,-9.879632 9.998228,-13.044622 13.538728,-28.478823 12.993498,-30.69907 -0.1822,1.833569 -2.59588,11.458073 -8.11589,20.134991 -7.089521,11.145311 -12.230531,17.081841 -24.087282,19.959951 -3.299704,0.80164 -5.579675,-0.41901 -5.741149,1.50623 z"
+     style="fill:#ffffff"
+     id="path2567" /><path
+     d="m 47.56572,54.369317 c 1.350435,1.145429 4.117343,2.671707 9.561614,4.457113 6.575462,2.155844 9.776981,4.025449 11.117744,4.921402 1.420732,0.951385 2.321212,3.074269 2.41017,1.188742 0.09277,-1.887616 -1.070702,-3.510729 -3.66667,-4.37155 -1.756347,-0.583153 -4.7109,-1.97194 -7.543128,-2.530905 -1.819913,-0.359233 -4.780811,-1.072155 -7.320051,-1.849642 -1.391646,-0.427711 -2.809634,-1.1769 -4.559679,-1.81516 z"
+     style="fill:#ffffff"
+     id="path2569" /><path
+     d="M 105.72614,63.921199 C 113.7054,40.922252 97.007933,6.1896881 63.228641,10.367773 32.706856,14.141463 32.214677,46.266552 59.113519,53.899069 89.582156,58.51118 71.235202,81.495802 68.632602,93.086552 66.299323,103.47658 93.255777,105.18656 105.72614,63.921199 z"
+     style="fill:#999999"
+     id="path2561_1_" /><path
+     d="m 84.848561,81.885586 c -8.254188,-1.021445 -20.13245,17.614405 -8.932534,15.431899 11.198141,-2.180945 -11.199916,2.182506 0,0 5.383182,-0.798314 9.842872,-2.698914 13.835192,-7.255788 5.205477,-5.940314 12.981581,-18.771954 15.230561,-27.062759 1.89451,-6.990334 0.94225,-17.820653 -1.01071,-7.64474 -2.00298,10.4432 -10.868321,27.552835 -19.122509,26.531388 z"
+     style="fill:#f3f3f3"
+     id="path2571" /></g>
+<text
+   xml:space="preserve"
+   style="font-size:35.48976898px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Balker;-inkscape-font-specification:Balker"
+   x="16.816299"
+   y="109.87854"
+   id="text3014"
+   sodipodi:linespacing="125%"><tspan
+     sodipodi:role="line"
+     id="tspan3018"
+     x="16.816299"
+     y="109.87854">evolve</tspan></text>
+<g
+   id="g2988"
+   transform="matrix(0.74328759,-0.66897202,0.66897202,0.74328759,8.9028358,75.473986)"><path
+     d="M 19.418398,44.509742 C 13.566506,45.076202 9.2828039,50.274467 9.8492604,56.126357 10.416792,61.982332 15.614839,66.269362 21.46775,65.702634 27.31879,65.12876 31.606084,59.931735 31.037317,54.079359 30.468598,48.231333 25.271308,43.943014 19.418398,44.509742 z"
+     style="fill:#1b1a1b"
+     id="path2343" /><path
+     d="M 20.127041,43.245285 C 14.275159,43.811746 9.9914567,49.01001 10.557913,54.8619 c 0.567261,5.854953 5.765579,10.143005 11.61747,9.576545 5.85206,-0.574142 10.139092,-5.772187 9.569297,-11.624297 -0.567701,-5.848293 -5.764728,-10.13559 -11.617639,-9.568863 z"
+     style="fill:#bfbfbf"
+     id="path2589" /><path
+     d="m 15.297614,61.936273 c 0.0649,0.752128 1.095012,1.718382 2.713381,2.162016 1.390355,0.381136 4.974531,1.355379 9.578993,-1.550784 4.604462,-2.906163 5.135393,-10.679565 3.042277,-12.965884 -0.647907,-1.158064 -1.490462,-2.001165 -0.820074,-0.152965 1.692982,4.666774 -1.596739,9.032083 -4.434212,11.053479 -2.836454,2.021128 -6.433853,1.064641 -7.902778,0.616794 -1.468915,-0.447847 -2.243523,0.0604 -2.177587,0.837344 z"
+     style="fill:#000000"
+     id="path2591" /><path
+     d="m 21.239503,62.980483 c 0.422006,-0.379939 2.558364,-0.22464 4.487234,-1.261971 1.92785,-1.037065 4.219346,-3.310451 4.628251,-6.540865 0.240881,-1.896934 0.313223,-1.420583 0.409121,-0.387475 -0.299215,5.370492 -5.238089,8.336927 -8.06262,8.72834 -0.76217,0.105705 -2.103468,0.04118 -1.461986,-0.538029 z"
+     style="fill:#ffffff"
+     id="path2597" /><path
+     d="m 12.336171,56.430605 c 0.380898,1.199486 1.354175,2.949646 3.409446,3.241412 2.744512,0.389611 3.30561,1.629622 6.546396,0.986326 3.240786,-0.643297 5.697258,-3.299154 6.680242,-6.23693 1.125385,-4.064906 -0.559668,-6.163496 -3.095682,-8.037135 -2.536005,-1.873639 -8.114707,-1.672161 -11.443975,1.362735 -2.366007,2.155435 -3.02378,5.763265 -2.096427,8.683592 z"
+     style="fill:#999999"
+     id="path2593_2_" /><path
+     d="m 23.114098,59.11873 c 2.490146,-0.651887 5.783458,-4.045016 4.14851,-6.635646 -2.017128,-3.192057 -7.636948,-0.459737 -7.826995,3.094121 -0.190795,3.555146 1.039269,4.232436 3.678485,3.541525 z"
+     style="fill:#f3f3f3"
+     id="path256" /></g></svg>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/test2rst.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+import os, os.path as op, re, sys
+
+# line starts with two chars one of which is not a space (and both are not
+# newlines obviously) and ends with one or more newlines followed by two spaces
+# on a next line (indented text)
+CODEBLOCK = re.compile(r'()\n(([^ \n][^\n]|[^\n][^ \n])[^\n]*)\n+  ')
+
+INDEX = '''
+Mercurial tests
+===============
+
+.. toctree::
+   :maxdepth: 1
+'''
+
+
+def rstify(orig, name):
+    header = '%s\n%s\n\n' % (name, '=' * len(name))
+    content = header + orig
+    content = CODEBLOCK.sub(r'\n\1\n\n::\n\n  ', content)
+    return content
+
+
+def main(base):
+    if os.path.isdir(base):
+        one_dir(base)
+    else:
+        one_file(base)
+
+
+def one_dir(base):
+    index = INDEX
+    #doc = lambda x: op.join(op.dirname(__file__), 'docs', x)
+
+    for fn in sorted(os.listdir(base)):
+        if not fn.endswith('.t'):
+            continue
+        name = os.path.splitext(fn)[0]
+        content = one_file(op.join(base, fn))
+        target = op.join(base, name + '.rst')
+        #with file(doc(name + '.rst'), 'w') as f:
+        with file(target, 'w') as f:
+            f.write(content)
+
+        index += '\n   ' + name
+
+    #with file(doc('index.rst'), 'w') as f:
+    #    f.write(index)
+
+
+def one_file(path):
+    name = os.path.basename(path)[:-2]
+    return rstify(file(path).read(), name)
+
+
+if __name__ == '__main__':
+    if len(sys.argv) != 2:
+        print 'Please supply a path to tests dir as parameter'
+        sys.exit()
+    main(sys.argv[1])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/docs/tutorials/tutorial.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1 @@
+../../tests/test-tutorial.t
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/__init__.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1 @@
+# Copyright 2011 Logilab SA <contact@logilab.fr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/drophack.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,163 @@
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+'''This extension add a hacky command to drop changeset during review
+
+This extension is intended as a temporary hack to allow Matt Mackall to use
+evolve in the Mercurial review it self. You should probably not use it if your
+name is not Matt Mackall.
+'''
+
+import os
+import time
+import contextlib
+
+from mercurial.i18n import _
+from mercurial import cmdutil
+from mercurial import repair
+from mercurial import scmutil
+from mercurial import lock as lockmod
+from mercurial import util
+from mercurial import commands
+
+cmdtable = {}
+command = cmdutil.command(cmdtable)
+
+
+@contextlib.contextmanager
+def timed(ui, caption):
+    ostart = os.times()
+    cstart = time.time()
+    yield
+    cstop = time.time()
+    ostop = os.times()
+    wall = cstop - cstart
+    user = ostop[0] - ostart[0]
+    sys  = ostop[1] - ostart[1]
+    comb = user + sys
+    ui.write("%s: wall %f comb %f user %f sys %f\n"
+             % (caption, wall, comb, user, sys))
+
+def obsmarkerchainfrom(obsstore, nodes):
+    """return all marker chain starting from node
+
+    Starting from mean "use as successors"."""
+    # XXX need something smarter for descendant of bumped changeset
+    seennodes = set(nodes)
+    seenmarkers = set()
+    pendingnodes = set(nodes)
+    precursorsmarkers = obsstore.precursors
+    while pendingnodes:
+        current = pendingnodes.pop()
+        new = set()
+        for precmark in precursorsmarkers.get(current, ()):
+            if precmark in seenmarkers:
+                continue
+            seenmarkers.add(precmark)
+            new.add(precmark[0])
+            yield precmark
+        new -= seennodes
+        pendingnodes |= new
+
+def stripmarker(ui, repo, markers):
+    """remove <markers> from the repo obsstore
+
+    The old obsstore content is saved in a `obsstore.prestrip` file
+    """
+    repo = repo.unfiltered()
+    repo.destroying()
+    oldmarkers = list(repo.obsstore._all)
+    util.rename(repo.sjoin('obsstore'),
+                repo.join('obsstore.prestrip'))
+    del repo.obsstore # drop the cache
+    newstore = repo.obsstore
+    assert not newstore # should be empty after rename
+    tr = repo.transaction('drophack')
+    try:
+        for m in oldmarkers:
+            if m not in markers:
+                newstore.add(tr, [m])
+        tr.close()
+    finally:
+        tr.release()
+    repo.destroyed()
+
+
+@command('drop', [('r', 'rev', [], 'revision to update')], _('[-r] revs'))
+def cmddrop(ui, repo, *revs, **opts):
+    """I'm hacky do not use me!
+
+    This command strip a changeset, its precursors and all obsolescence marker
+    associated to its chain.
+
+    There is no way to limit the extend of the purge yet. You may have to
+    repull from other source to get some changeset and obsolescence marker
+    back.
+
+    This intended for Matt Mackall usage only. do not use me.
+    """
+    revs = list(revs)
+    revs.extend(opts['rev'])
+    if not revs:
+        revs = ['.']
+    # get the changeset
+    revs = scmutil.revrange(repo, revs)
+    if not revs:
+        ui.write_err('no revision to drop\n')
+        return 1
+    # lock from the beginning to prevent race
+    wlock = lock = None
+    try:
+        lock = repo.wlock()
+        lock = repo.lock()
+        # check they have no children
+        if repo.revs('%ld and public()', revs):
+            ui.write_err('cannot drop public revision')
+            return 1
+        if repo.revs('children(%ld) - %ld', revs, revs):
+            ui.write_err('cannot drop revision with children')
+            return 1
+        if repo.revs('. and %ld', revs):
+            newrevs = repo.revs('max(::. - %ld)', revs)
+            if newrevs:
+                assert len(newrevs) == 1
+                newrev = newrevs[0]
+            else:
+                newrev = -1
+            commands.update(ui, repo, newrev)
+            ui.status(_('working directory now at %s\n') % repo[newrev])
+        # get all markers and successors up to root
+        nodes = [repo[r].node() for r in revs]
+        with timed(ui, 'search obsmarker'):
+            markers = set(obsmarkerchainfrom(repo.obsstore, nodes))
+        ui.write('%i obsmarkers found\n' % len(markers))
+        cl = repo.unfiltered().changelog
+        with timed(ui, 'search nodes'):
+            allnodes = set(nodes)
+            allnodes.update(m[0] for m in markers if cl.hasnode(m[0]))
+        ui.write('%i nodes found\n' % len(allnodes))
+        cl = repo.changelog
+        visiblenodes = set(n for n in allnodes if cl.hasnode(n))
+        # check constraint again
+        if repo.revs('%ln and public()', visiblenodes):
+            ui.write_err('cannot drop public revision')
+            return 1
+        if repo.revs('children(%ln) - %ln', visiblenodes, visiblenodes):
+            ui.write_err('cannot drop revision with children')
+            return 1
+
+        if markers:
+            # strip them
+            with timed(ui, 'strip obsmarker'):
+                stripmarker(ui, repo, markers)
+        # strip the changeset
+        with timed(ui, 'strip nodes'):
+            repair.strip(ui, repo, allnodes, backup="all", topic='drophack')
+
+    finally:
+        lockmod.release(lock, wlock)
+
+    # rewrite the whole file.
+    # print data.
+    # - time to compute the chain
+    # - time to strip the changeset
+    # - time to strip the obs marker.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/evolve.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1852 @@
+# Copyright 2011 Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
+#                Logilab SA        <contact@logilab.fr>
+#                Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+#                Patrick Mezard <patrick@mezard.eu>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+'''Extends Mercurial feature related to Changeset Evolution
+
+This extension provides several commands to mutate history and deal with
+issues it may raise.
+
+It also:
+
+    - enables the "Changeset Obsolescence" feature of mercurial,
+    - alters core commands and extensions that rewrite history to use
+      this feature,
+    - improves some aspect of the early implementation in 2.3
+'''
+
+testedwith = '2.7 2.7.1 2.7.2 2.8 2.8.1'
+buglink = 'https://bitbucket.org/marmoute/mutable-history/issues'
+
+import sys
+import random
+
+import mercurial
+from mercurial import util
+
+try:
+    from mercurial import obsolete
+    if not obsolete._enabled:
+        obsolete._enabled = True
+    from mercurial import bookmarks
+    bookmarks.bmstore
+except (ImportError, AttributeError):
+    raise util.Abort('Your Mercurial is too old for this version of Evolve',
+                     hint='requires version >> 2.4.x')
+
+
+
+from mercurial import bookmarks
+from mercurial import cmdutil
+from mercurial import commands
+from mercurial import context
+from mercurial import copies
+from mercurial import error
+from mercurial import extensions
+from mercurial import hg
+from mercurial import lock as lockmod
+from mercurial import merge
+from mercurial import node
+from mercurial import phases
+from mercurial import revset
+from mercurial import scmutil
+from mercurial import templatekw
+from mercurial.i18n import _
+from mercurial.commands import walkopts, commitopts, commitopts2
+from mercurial.node import nullid
+
+
+
+# This extension contains the following code
+#
+# - Extension Helper code
+# - Obsolescence cache
+# - ...
+# - Older format compat
+
+
+
+#####################################################################
+### Extension helper                                              ###
+#####################################################################
+
+class exthelper(object):
+    """Helper for modular extension setup
+
+    A single helper should be instanciated for each extension. Helper
+    methods are then used as decorator for various purpose.
+
+    All decorators return the original function and may be chained.
+    """
+
+    def __init__(self):
+        self._uicallables = []
+        self._extcallables = []
+        self._repocallables = []
+        self._revsetsymbols = []
+        self._templatekws = []
+        self._commandwrappers = []
+        self._extcommandwrappers = []
+        self._functionwrappers = []
+        self._duckpunchers = []
+
+    def final_uisetup(self, ui):
+        """Method to be used as the extension uisetup
+
+        The following operations belong here:
+
+        - Changes to ui.__class__ . The ui object that will be used to run the
+          command has not yet been created. Changes made here will affect ui
+          objects created after this, and in particular the ui that will be
+          passed to runcommand
+        - Command wraps (extensions.wrapcommand)
+        - Changes that need to be visible to other extensions: because
+          initialization occurs in phases (all extensions run uisetup, then all
+          run extsetup), a change made here will be visible to other extensions
+          during extsetup
+        - Monkeypatch or wrap function (extensions.wrapfunction) of dispatch
+          module members
+        - Setup of pre-* and post-* hooks
+        - pushkey setup
+        """
+        for cont, funcname, func in self._duckpunchers:
+            setattr(cont, funcname, func)
+        for command, wrapper in self._commandwrappers:
+            extensions.wrapcommand(commands.table, command, wrapper)
+        for cont, funcname, wrapper in self._functionwrappers:
+            extensions.wrapfunction(cont, funcname, wrapper)
+        for c in self._uicallables:
+            c(ui)
+
+    def final_extsetup(self, ui):
+        """Method to be used as a the extension extsetup
+
+        The following operations belong here:
+
+        - Changes depending on the status of other extensions. (if
+          extensions.find('mq'))
+        - Add a global option to all commands
+        - Register revset functions
+        """
+        knownexts = {}
+        for name, symbol in self._revsetsymbols:
+            revset.symbols[name] = symbol
+        for name, kw in self._templatekws:
+            templatekw.keywords[name] = kw
+        for ext, command, wrapper in self._extcommandwrappers:
+            if ext not in knownexts:
+                e = extensions.find(ext)
+                if e is None:
+                    raise util.Abort('extension %s not found' % ext)
+                knownexts[ext] = e.cmdtable
+            extensions.wrapcommand(knownexts[ext], commands, wrapper)
+        for c in self._extcallables:
+            c(ui)
+
+    def final_reposetup(self, ui, repo):
+        """Method to be used as a the extension reposetup
+
+        The following operations belong here:
+
+        - All hooks but pre-* and post-*
+        - Modify configuration variables
+        - Changes to repo.__class__, repo.dirstate.__class__
+        """
+        for c in self._repocallables:
+            c(ui, repo)
+
+    def uisetup(self, call):
+        """Decorated function will be executed during uisetup
+
+        example::
+
+            @eh.uisetup
+            def setupbabar(ui):
+                print 'this is uisetup!'
+        """
+        self._uicallables.append(call)
+        return call
+
+    def extsetup(self, call):
+        """Decorated function will be executed during extsetup
+
+        example::
+
+            @eh.extsetup
+            def setupcelestine(ui):
+                print 'this is extsetup!'
+        """
+        self._extcallables.append(call)
+        return call
+
+    def reposetup(self, call):
+        """Decorated function will be executed during reposetup
+
+        example::
+
+            @eh.reposetup
+            def setupzephir(ui, repo):
+                print 'this is reposetup!'
+        """
+        self._repocallables.append(call)
+        return call
+
+    def revset(self, symbolname):
+        """Decorated function is a revset symbol
+
+        The name of the symbol must be given as the decorator argument.
+        The symbol is added during `extsetup`.
+
+        example::
+
+            @eh.revset('hidden')
+            def revsetbabar(repo, subset, x):
+                args = revset.getargs(x, 0, 0, 'babar accept no argument')
+                return [r for r in subset if 'babar' in repo[r].description()]
+        """
+        def dec(symbol):
+            self._revsetsymbols.append((symbolname, symbol))
+            return symbol
+        return dec
+
+
+    def templatekw(self, keywordname):
+        """Decorated function is a revset keyword
+
+        The name of the keyword must be given as the decorator argument.
+        The symbol is added during `extsetup`.
+
+        example::
+
+            @eh.templatekw('babar')
+            def kwbabar(ctx):
+                return 'babar'
+        """
+        def dec(keyword):
+            self._templatekws.append((keywordname, keyword))
+            return keyword
+        return dec
+
+    def wrapcommand(self, command, extension=None):
+        """Decorated function is a command wrapper
+
+        The name of the command must be given as the decorator argument.
+        The wrapping is installed during `uisetup`.
+
+        If the second option `extension` argument is provided, the wrapping
+        will be applied in the extension commandtable. This argument must be a
+        string that will be searched using `extension.find` if not found and
+        Abort error is raised. If the wrapping applies to an extension, it is
+        installed during `extsetup`
+
+        example::
+
+            @eh.wrapcommand('summary')
+            def wrapsummary(orig, ui, repo, *args, **kwargs):
+                ui.note('Barry!')
+                return orig(ui, repo, *args, **kwargs)
+
+        """
+        def dec(wrapper):
+            if extension is None:
+                self._commandwrappers.append((command, wrapper))
+            else:
+                self._extcommandwrappers.append((extension, command, wrapper))
+            return wrapper
+        return dec
+
+    def wrapfunction(self, container, funcname):
+        """Decorated function is a function wrapper
+
+        This function takes two arguments, the container and the name of the
+        function to wrap. The wrapping is performed during `uisetup`.
+        (there is no extension support)
+
+        example::
+
+            @eh.function(discovery, 'checkheads')
+            def wrapfunction(orig, *args, **kwargs):
+                ui.note('His head smashed in and his heart cut out')
+                return orig(*args, **kwargs)
+        """
+        def dec(wrapper):
+            self._functionwrappers.append((container, funcname, wrapper))
+            return wrapper
+        return dec
+
+    def addattr(self, container, funcname):
+        """Decorated function is to be added to the container
+
+        This function takes two arguments, the container and the name of the
+        function to wrap. The wrapping is performed during `uisetup`.
+
+        example::
+
+            @eh.function(context.changectx, 'babar')
+            def babar(ctx):
+                return 'babar' in ctx.description
+        """
+        def dec(func):
+            self._duckpunchers.append((container, funcname, func))
+            return func
+        return dec
+
+eh = exthelper()
+uisetup = eh.final_uisetup
+extsetup = eh.final_extsetup
+reposetup = eh.final_reposetup
+
+#####################################################################
+### Critical fix                                                  ###
+#####################################################################
+
+@eh.wrapfunction(mercurial.obsolete, '_readmarkers')
+def safereadmarkers(orig, data):
+    """safe maker wrapper to remove nullid succesors
+
+    Nullid successors was created by older version of evolve.
+    """
+    nb = 0
+    for marker in orig(data):
+        if nullid in marker[1]:
+            marker = (marker[0],
+                      tuple(s for s in marker[1] if s != nullid),
+                      marker[2],
+                      marker[3])
+            nb += 1
+        yield marker
+    if nb:
+        e = sys.stderr
+        print >> e, 'repo contains %i invalid obsolescence markers' % nb
+
+getrevs = obsolete.getrevs
+
+#####################################################################
+### Complete troubles computation logic                           ###
+#####################################################################
+
+
+### Cache computation
+latediff = 1  # flag to prevent taking late comer fix into account
+
+### changectx method
+
+@eh.addattr(context.changectx, 'latecomer')
+def latecomer(ctx):
+    """is the changeset bumped (Try to succeed to public change)"""
+    return ctx.bumped()
+
+@eh.addattr(context.changectx, 'conflicting')
+def conflicting(ctx):
+    """is the changeset divergent (Try to succeed to public change)"""
+    return ctx.divergent()
+
+### revset symbol
+
+eh.revset('latecomer')(revset.symbols['bumped'])
+eh.revset('conflicting')(revset.symbols['divergent'])
+
+
+
+
+#####################################################################
+### Additional Utilities                                          ###
+#####################################################################
+
+# This section contains a lot of small utility function and method
+
+# - Function to create markers
+# - useful alias pstatus and pdiff (should probably go in evolve)
+# - "troubles" method on changectx
+# - function to travel throught the obsolescence graph
+# - function to find useful changeset to stabilize
+
+createmarkers = obsolete.createmarkers
+
+
+### Useful alias
+
+@eh.uisetup
+def _installalias(ui):
+    if ui.config('alias', 'pstatus', None) is None:
+        ui.setconfig('alias', 'pstatus', 'status --rev .^')
+    if ui.config('alias', 'pdiff', None) is None:
+        ui.setconfig('alias', 'pdiff', 'diff --rev .^')
+    if ui.config('alias', 'olog', None) is None:
+        ui.setconfig('alias', 'olog', "log -r 'precursors(.)' --hidden")
+    if ui.config('alias', 'odiff', None) is None:
+        ui.setconfig('alias', 'odiff', "diff --hidden --rev 'limit(precursors(.),1)' --rev .")
+    if ui.config('alias', 'grab', None) is None:
+        ui.setconfig('alias', 'grab', "! $HG rebase --dest . --rev $@ && $HG up tip")
+
+
+### Troubled revset symbol
+
+@eh.revset('troubled')
+def revsettroubled(repo, subset, x):
+    """``troubled()``
+    Changesets with troubles.
+    """
+    _ = revset.getargs(x, 0, 0, 'troubled takes no arguments')
+    return repo.revs('%ld and (unstable() + bumped() + divergent())',
+                     subset)
+
+
+### Obsolescence graph
+
+# XXX SOME MAJOR CLEAN UP TO DO HERE XXX
+
+def _precursors(repo, s):
+    """Precursor of a changeset"""
+    cs = set()
+    nm = repo.changelog.nodemap
+    markerbysubj = repo.obsstore.precursors
+    for r in s:
+        for p in markerbysubj.get(repo[r].node(), ()):
+            pr = nm.get(p[0])
+            if pr is not None:
+                cs.add(pr)
+    return cs
+
+def _allprecursors(repo, s):  # XXX we need a better naming
+    """transitive precursors of a subset"""
+    toproceed = [repo[r].node() for r in s]
+    seen = set()
+    allsubjects = repo.obsstore.precursors
+    while toproceed:
+        nc = toproceed.pop()
+        for mark in allsubjects.get(nc, ()):
+            np = mark[0]
+            if np not in seen:
+                seen.add(np)
+                toproceed.append(np)
+    nm = repo.changelog.nodemap
+    cs = set()
+    for p in seen:
+        pr = nm.get(p)
+        if pr is not None:
+            cs.add(pr)
+    return cs
+
+def _successors(repo, s):
+    """Successors of a changeset"""
+    cs = set()
+    nm = repo.changelog.nodemap
+    markerbyobj = repo.obsstore.successors
+    for r in s:
+        for p in markerbyobj.get(repo[r].node(), ()):
+            for sub in p[1]:
+                sr = nm.get(sub)
+                if sr is not None:
+                    cs.add(sr)
+    return cs
+
+def _allsuccessors(repo, s, haltonflags=0):  # XXX we need a better naming
+    """transitive successors of a subset
+
+    haltonflags allows to provide flags which prevent the evaluation of a
+    marker.  """
+    toproceed = [repo[r].node() for r in s]
+    seen = set()
+    allobjects = repo.obsstore.successors
+    while toproceed:
+        nc = toproceed.pop()
+        for mark in allobjects.get(nc, ()):
+            if mark[2] & haltonflags:
+                continue
+            for sub in mark[1]:
+                if sub == nullid:
+                    continue # should not be here!
+                if sub not in seen:
+                    seen.add(sub)
+                    toproceed.append(sub)
+    nm = repo.changelog.nodemap
+    cs = set()
+    for s in seen:
+        sr = nm.get(s)
+        if sr is not None:
+            cs.add(sr)
+    return cs
+
+
+
+
+#####################################################################
+### Extending revset and template                                 ###
+#####################################################################
+
+# this section add several useful revset symbol not yet in core.
+# they are subject to changes
+
+
+### XXX I'm not sure this revset is useful
+@eh.revset('suspended')
+def revsetsuspended(repo, subset, x):
+    """``suspended()``
+    Obsolete changesets with non-obsolete descendants.
+    """
+    args = revset.getargs(x, 0, 0, 'suspended takes no arguments')
+    suspended = getrevs(repo, 'suspended')
+    return [r for r in subset if r in suspended]
+
+
+@eh.revset('precursors')
+def revsetprecursors(repo, subset, x):
+    """``precursors(set)``
+    Immediate precursors of changesets in set.
+    """
+    s = revset.getset(repo, range(len(repo)), x)
+    cs = _precursors(repo, s)
+    return [r for r in subset if r in cs]
+
+
+@eh.revset('allprecursors')
+def revsetallprecursors(repo, subset, x):
+    """``allprecursors(set)``
+    Transitive precursors of changesets in set.
+    """
+    s = revset.getset(repo, range(len(repo)), x)
+    cs = _allprecursors(repo, s)
+    return [r for r in subset if r in cs]
+
+
+@eh.revset('successors')
+def revsetsuccessors(repo, subset, x):
+    """``successors(set)``
+    Immediate successors of changesets in set.
+    """
+    s = revset.getset(repo, range(len(repo)), x)
+    cs = _successors(repo, s)
+    return [r for r in subset if r in cs]
+
+@eh.revset('allsuccessors')
+def revsetallsuccessors(repo, subset, x):
+    """``allsuccessors(set)``
+    Transitive successors of changesets in set.
+    """
+    s = revset.getset(repo, range(len(repo)), x)
+    cs = _allsuccessors(repo, s)
+    return [r for r in subset if r in cs]
+
+### template keywords
+# XXX it does not handle troubles well :-/
+
+@eh.templatekw('obsolete')
+def obsoletekw(repo, ctx, templ, **args):
+    """:obsolete: String. The obsolescence level of the node, could be
+    ``stable``, ``unstable``, ``suspended`` or ``extinct``.
+    """
+    rev = ctx.rev()
+    if ctx.obsolete():
+        if ctx.extinct():
+            return 'extinct'
+        else:
+            return 'suspended'
+    elif ctx.unstable():
+        return 'unstable'
+    return 'stable'
+
+#####################################################################
+### Various trouble warning                                       ###
+#####################################################################
+
+# This section take care of issue warning to the user when troubles appear
+
+@eh.wrapcommand("update")
+@eh.wrapcommand("parents")
+@eh.wrapcommand("pull")
+def wrapmayobsoletewc(origfn, ui, repo, *args, **opts):
+    """Warn that the working directory parent is an obsolete changeset"""
+    res = origfn(ui, repo, *args, **opts)
+    if repo['.'].obsolete():
+        ui.warn(_('working directory parent is obsolete!\n'))
+    return res
+
+# XXX this could wrap transaction code
+# XXX (but this is a bit a layer violation)
+@eh.wrapcommand("commit")
+@eh.wrapcommand("import")
+@eh.wrapcommand("push")
+@eh.wrapcommand("pull")
+@eh.wrapcommand("graft")
+@eh.wrapcommand("phase")
+@eh.wrapcommand("unbundle")
+def warnobserrors(orig, ui, repo, *args, **kwargs):
+    """display warning is the command resulted in more instable changeset"""
+    # part of the troubled stuff may be filtered (stash ?)
+    # This needs a better implementation but will probably wait for core.
+    filtered = repo.changelog.filteredrevs
+    priorunstables = len(set(getrevs(repo, 'unstable')) - filtered)
+    priorbumpeds = len(set(getrevs(repo, 'bumped')) - filtered)
+    priordivergents = len(set(getrevs(repo, 'divergent')) - filtered)
+    ret = orig(ui, repo, *args, **kwargs)
+    # workaround phase stupidity
+    #phases._filterunknown(ui, repo.changelog, repo._phasecache.phaseroots)
+    filtered = repo.changelog.filteredrevs
+    newunstables = len(set(getrevs(repo, 'unstable')) - filtered) - priorunstables
+    newbumpeds = len(set(getrevs(repo, 'bumped')) - filtered) - priorbumpeds
+    newdivergents = len(set(getrevs(repo, 'divergent')) - filtered) - priordivergents
+    if newunstables > 0:
+        ui.warn(_('%i new unstable changesets\n') % newunstables)
+    if newbumpeds > 0:
+        ui.warn(_('%i new bumped changesets\n') % newbumpeds)
+    if newdivergents > 0:
+        ui.warn(_('%i new divergent changesets\n') % newdivergents)
+    return ret
+
+@eh.reposetup
+def _repostabilizesetup(ui, repo):
+    """Add a hint for "hg evolve" when troubles make push fails
+    """
+    if not repo.local():
+        return
+
+    class evolvingrepo(repo.__class__):
+        def push(self, remote, *args, **opts):
+            """wrapper around pull that pull obsolete relation"""
+            try:
+                result = super(evolvingrepo, self).push(remote, *args, **opts)
+            except util.Abort, ex:
+                hint = _("use 'hg evolve' to get a stable history "
+                         "or --force to ignore warnings")
+                if (len(ex.args) >= 1
+                    and ex.args[0].startswith('push includes ')
+                    and ex.hint is None):
+                    ex.hint = hint
+                raise
+            return result
+    repo.__class__ = evolvingrepo
+
+def summaryhook(ui, repo):
+    def write(fmt, count):
+        s = fmt % count
+        if count:
+            ui.write(s)
+        else:
+            ui.note(s)
+
+    nbunstable = len(getrevs(repo, 'unstable'))
+    nbbumped = len(getrevs(repo, 'bumped'))
+    nbdivergent = len(getrevs(repo, 'divergent'))
+    write('unstable: %i changesets\n', nbunstable)
+    write('bumped: %i changesets\n', nbbumped)
+    write('divergent: %i changesets\n', nbdivergent)
+
+@eh.extsetup
+def obssummarysetup(ui):
+    cmdutil.summaryhooks.add('evolve', summaryhook)
+
+
+#####################################################################
+### Core Other extension compat                                   ###
+#####################################################################
+
+
+@eh.extsetup
+def _rebasewrapping(ui):
+    # warning about more obsolete
+    try:
+        rebase = extensions.find('rebase')
+        if rebase:
+            extensions.wrapcommand(rebase.cmdtable, 'rebase', warnobserrors)
+    except KeyError:
+        pass  # rebase not found
+    try:
+        histedit = extensions.find('histedit')
+        if histedit:
+            extensions.wrapcommand(histedit.cmdtable, 'histedit', warnobserrors)
+    except KeyError:
+        pass  # rebase not found
+
+
+#####################################################################
+### Old Evolve extension content                                  ###
+#####################################################################
+
+# XXX need clean up and proper sorting in other section
+
+### util function
+#############################
+
+### changeset rewriting logic
+#############################
+
+def rewrite(repo, old, updates, head, newbases, commitopts):
+    """Return (nodeid, created) where nodeid is the identifier of the
+    changeset generated by the rewrite process, and created is True if
+    nodeid was actually created. If created is False, nodeid
+    references a changeset existing before the rewrite call.
+    """
+    if len(old.parents()) > 1: #XXX remove this unecessary limitation.
+        raise error.Abort(_('cannot amend merge changesets'))
+    base = old.p1()
+    updatebookmarks = _bookmarksupdater(repo, old.node())
+
+    wlock = repo.wlock()
+    try:
+
+        # commit a new version of the old changeset, including the update
+        # collect all files which might be affected
+        files = set(old.files())
+        for u in updates:
+            files.update(u.files())
+
+        # Recompute copies (avoid recording a -> b -> a)
+        copied = copies.pathcopies(base, head)
+
+
+        # prune files which were reverted by the updates
+        def samefile(f):
+            if f in head.manifest():
+                a = head.filectx(f)
+                if f in base.manifest():
+                    b = base.filectx(f)
+                    return (a.data() == b.data()
+                            and a.flags() == b.flags())
+                else:
+                    return False
+            else:
+                return f not in base.manifest()
+        files = [f for f in files if not samefile(f)]
+        # commit version of these files as defined by head
+        headmf = head.manifest()
+        def filectxfn(repo, ctx, path):
+            if path in headmf:
+                fctx = head[path]
+                flags = fctx.flags()
+                mctx = context.memfilectx(fctx.path(), fctx.data(),
+                                          islink='l' in flags,
+                                          isexec='x' in flags,
+                                          copied=copied.get(path))
+                return mctx
+            raise IOError()
+        if commitopts.get('message') and commitopts.get('logfile'):
+            raise util.Abort(_('options --message and --logfile are mutually'
+                               ' exclusive'))
+        if commitopts.get('logfile'):
+            message= open(commitopts['logfile']).read()
+        elif commitopts.get('message'):
+            message = commitopts['message']
+        else:
+            message = old.description()
+
+        user = commitopts.get('user') or old.user()
+        date = commitopts.get('date') or None # old.date()
+        extra = dict(commitopts.get('extra', {}))
+        extra['branch'] = head.branch()
+
+        new = context.memctx(repo,
+                             parents=newbases,
+                             text=message,
+                             files=files,
+                             filectxfn=filectxfn,
+                             user=user,
+                             date=date,
+                             extra=extra)
+
+        if commitopts.get('edit'):
+            new._text = cmdutil.commitforceeditor(repo, new, [])
+        revcount = len(repo)
+        newid = repo.commitctx(new)
+        new = repo[newid]
+        created = len(repo) != revcount
+        updatebookmarks(newid)
+    finally:
+        wlock.release()
+
+    return newid, created
+
+class MergeFailure(util.Abort):
+    pass
+
+def relocate(repo, orig, dest):
+    """rewrite <rev> on dest"""
+    try:
+        rebase = extensions.find('rebase')
+        # dummy state to trick rebase node
+        if not orig.p2().rev() == node.nullrev:
+            raise util.Abort(
+                'no support for evolution merge changesets yet',
+                hint="Redo the merge a use `hg prune` to obsolete the old one")
+        destbookmarks = repo.nodebookmarks(dest.node())
+        cmdutil.duplicatecopies(repo, orig.node(), dest.node())
+        nodesrc = orig.node()
+        destphase = repo[nodesrc].phase()
+        try:
+            r = rebase.rebasenode(repo, orig.node(), dest.node(),
+                                  {node.nullrev: node.nullrev}, False)
+            if r[-1]: #some conflict
+                raise util.Abort(
+                        'unresolved merge conflicts (see hg help resolve)')
+            nodenew = rebase.concludenode(repo, orig.node(), dest.node(),
+                                          node.nullid)
+        except util.Abort, exc:
+            class LocalMergeFailure(MergeFailure, exc.__class__):
+                pass
+            exc.__class__ = LocalMergeFailure
+            raise
+        oldbookmarks = repo.nodebookmarks(nodesrc)
+        if nodenew is not None:
+            phases.retractboundary(repo, destphase, [nodenew])
+            createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))])
+            for book in oldbookmarks:
+                repo._bookmarks[book] = nodenew
+        else:
+            createmarkers(repo, [(repo[nodesrc], ())])
+            # Behave like rebase, move bookmarks to dest
+            for book in oldbookmarks:
+                repo._bookmarks[book] = dest.node()
+        for book in destbookmarks: # restore bookmark that rebase move
+            repo._bookmarks[book] = dest.node()
+        if oldbookmarks or destbookmarks:
+            repo._bookmarks.write()
+        return nodenew
+    except util.Abort:
+        # Invalidate the previous setparents
+        repo.dirstate.invalidate()
+        raise
+
+def _bookmarksupdater(repo, oldid):
+    """Return a callable update(newid) updating the current bookmark
+    and bookmarks bound to oldid to newid.
+    """
+    bm = bookmarks.readcurrent(repo)
+    def updatebookmarks(newid):
+        dirty = False
+        if bm:
+            repo._bookmarks[bm] = newid
+            dirty = True
+        oldbookmarks = repo.nodebookmarks(oldid)
+        if oldbookmarks:
+            for b in oldbookmarks:
+                repo._bookmarks[b] = newid
+            dirty = True
+        if dirty:
+            repo._bookmarks.write()
+    return updatebookmarks
+
+### new command
+#############################
+cmdtable = {}
+command = cmdutil.command(cmdtable)
+metadataopts = [
+    ('d', 'date', '',
+     _('record the specified date in metadata'), _('DATE')),
+    ('u', 'user', '',
+     _('record the specified user in metadata'), _('USER')),
+]
+
+
+@command('^evolve|stabilize|solve',
+    [('n', 'dry-run', False, 'do not perform actions, print what to be done'),
+    ('A', 'any', False, 'evolve any troubled changeset'),
+    ('a', 'all', False, 'evolve all troubled changesets'),
+    ('c', 'continue', False, 'continue an interrupted evolution'), ],
+    _('[OPTIONS]...'))
+def evolve(ui, repo, **opts):
+    """Solve trouble in your repository
+
+    - rebase unstable changeset to make it stable again,
+    - create proper diff from bumped changeset,
+    - merge divergent changesets.
+    - update to a successor if the working directory parent is
+      obsolete
+
+    By default, take the first trouble changeset that looks relevant.
+
+    (The logic is still a bit fuzzy)
+
+    - For unstable, this means taking the first which could be rebased as a
+      child of the working directory parent revision or one of its descendants
+      and rebasing it.
+
+    - For divergent, this means taking "." if applicable.
+
+    With --any, evolve picks any troubled changeset to solve.
+
+    The working directory is updated to the newly created revision.
+    """
+
+    contopt = opts['continue']
+    anyopt = opts['any']
+    allopt = opts['all']
+    dryrunopt = opts['dry_run']
+
+    if contopt:
+        if anyopt:
+            raise util.Abort('can not specify both "--any" and "--continue"')
+        if allopt:
+            raise util.Abort('can not specify both "--all" and "--continue"')
+        graftcmd = commands.table['graft'][0]
+        return graftcmd(ui, repo, old_obsolete=True, **{'continue': True})
+
+    tr = _picknexttroubled(ui, repo, anyopt or allopt)
+    if tr is None:
+        if repo['.'].obsolete():
+            displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+            successors = set()
+
+            for successorsset in obsolete.successorssets(repo, repo['.'].node()):
+                for nodeid in successorsset:
+                    successors.add(repo[nodeid])
+
+            if not successors:
+                ui.warn(_('parent is obsolete without successors; ' +
+                          'likely killed\n'))
+                return 2
+
+            elif len(successors) > 1:
+                ui.warn(_('parent is obsolete with multiple successors:\n'))
+
+                for ctx in sorted(successors, key=lambda ctx: ctx.rev()):
+                    displayer.show(ctx)
+
+                return 2
+
+            else:
+                ctx = successors.pop()
+
+                ui.status(_('update:'))
+                if not ui.quiet:
+                    displayer.show(ctx)
+
+                if dryrunopt:
+                    print 'hg update %s' % ctx.rev()
+                    return 0
+                else:
+                    return hg.update(repo, ctx.rev())
+
+        troubled = repo.revs('troubled()')
+        if troubled:
+            ui.write_err(_('nothing to evolve here\n'))
+            ui.status(_('(%i troubled changesets, do you want --any ?)\n')
+                      % len(troubled))
+            return 2
+        else:
+            ui.write_err(_('no troubled changesets\n'))
+            return 1
+
+    def progresscb():
+        if allopt:
+            ui.progress('evolve', seen, unit='changesets', total=count)
+    seen = 1
+    count = allopt and _counttroubled(ui, repo) or 1
+
+    while tr is not None:
+        progresscb()
+        result = _evolveany(ui, repo, tr, dryrunopt, progresscb=progresscb)
+        progresscb()
+        seen += 1
+        if not allopt:
+            return result
+        progresscb()
+        tr = _picknexttroubled(ui, repo, anyopt or allopt)
+
+    if allopt:
+        ui.progress('evolve', None)
+
+
+def _evolveany(ui, repo, tr, dryrunopt, progresscb):
+    repo = repo.unfiltered()
+    tr = repo[tr.rev()]
+    cmdutil.bailifchanged(repo)
+    troubles = tr.troubles()
+    if 'unstable' in troubles:
+        return _solveunstable(ui, repo, tr, dryrunopt, progresscb)
+    elif 'bumped' in troubles:
+        return _solvebumped(ui, repo, tr, dryrunopt, progresscb)
+    elif 'divergent' in troubles:
+        repo = repo.unfiltered()
+        tr = repo[tr.rev()]
+        return _solvedivergent(ui, repo, tr, dryrunopt, progresscb)
+    else:
+        assert False  # WHAT? unknown troubles
+
+def _counttroubled(ui, repo):
+    """Count the amount of troubled changesets"""
+    troubled = set()
+    troubled.update(getrevs(repo, 'unstable'))
+    troubled.update(getrevs(repo, 'bumped'))
+    troubled.update(getrevs(repo, 'divergent'))
+    return len(troubled)
+
+def _picknexttroubled(ui, repo, pickany=False, progresscb=None):
+    """Pick a the next trouble changeset to solve"""
+    if progresscb: progresscb()
+    tr = _stabilizableunstable(repo, repo['.'])
+    if tr is None:
+        wdp = repo['.']
+        if 'divergent' in wdp.troubles():
+            tr = wdp
+    if tr is None and pickany:
+        troubled = list(repo.set('unstable()'))
+        if not troubled:
+            troubled = list(repo.set('bumped()'))
+        if not troubled:
+            troubled = list(repo.set('divergent()'))
+        if troubled:
+            tr = troubled[0]
+
+    return tr
+
+def _stabilizableunstable(repo, pctx):
+    """Return a changectx for an unstable changeset which can be
+    stabilized on top of pctx or one of its descendants. None if none
+    can be found.
+    """
+    def selfanddescendants(repo, pctx):
+        yield pctx
+        for prec in repo.set('allprecursors(%d)', pctx):
+            yield prec
+        for ctx in pctx.descendants():
+            yield ctx
+            for prec in repo.set('allprecursors(%d)', ctx):
+                yield prec
+
+    # Look for an unstable which can be stabilized as a child of
+    # node. The unstable must be a child of one of node predecessors.
+    for ctx in selfanddescendants(repo, pctx):
+        for child in ctx.children():
+            if child.unstable():
+                return child
+    return None
+
+def _solveunstable(ui, repo, orig, dryrun=False, progresscb=None):
+    """Stabilize a unstable changeset"""
+    obs = orig.parents()[0]
+    if not obs.obsolete():
+        print obs.rev(), orig.parents()
+        print orig.rev()
+        obs = orig.parents()[1]
+    assert obs.obsolete()
+    newer = obsolete.successorssets(repo, obs.node())
+    # search of a parent which is not killed
+    while not newer or newer == [()]:
+        ui.debug("stabilize target %s is plain dead,"
+                 " trying to stabilize on its parent")
+        obs = obs.parents()[0]
+        newer = obsolete.successorssets(repo, obs.node())
+    if len(newer) > 1:
+        raise util.Abort(_("conflict rewriting. can't choose destination\n"))
+    targets = newer[0]
+    assert targets
+    if len(targets) > 1:
+        raise util.Abort(_("does not handle split parents yet\n"))
+        return 2
+    target = targets[0]
+    displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+    target = repo[target]
+    repo.ui.status(_('move:'))
+    if not ui.quiet:
+        displayer.show(orig)
+    repo.ui.status(_('atop:'))
+    if not ui.quiet:
+        displayer.show(target)
+    if progresscb: progresscb()
+    todo = 'hg rebase -r %s -d %s\n' % (orig, target)
+    if dryrun:
+        repo.ui.write(todo)
+    else:
+        repo.ui.note(todo)
+        if progresscb: progresscb()
+        lock = repo.lock()
+        try:
+            relocate(repo, orig, target)
+        except MergeFailure:
+            repo.opener.write('graftstate', orig.hex() + '\n')
+            repo.ui.write_err(_('evolve failed!\n'))
+            repo.ui.write_err(_('fix conflict and run "hg evolve --continue"\n'))
+            raise
+        finally:
+            lock.release()
+
+def _solvebumped(ui, repo, bumped, dryrun=False, progresscb=None):
+    """Stabilize a bumped changeset"""
+    # For now we deny bumped merge
+    if len(bumped.parents()) > 1:
+        raise util.Abort('late comer stabilization is confused by bumped'
+                         ' %s being a merge' % bumped)
+    prec = repo.set('last(allprecursors(%d) and public())', bumped).next()
+    # For now we deny target merge
+    if len(prec.parents()) > 1:
+        raise util.Abort('late comer evolution is confused by precursors'
+                         ' %s being a merge' % prec)
+
+    displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+    repo.ui.status(_('recreate:'))
+    if not ui.quiet:
+        displayer.show(bumped)
+    repo.ui.status(_('atop:'))
+    if not ui.quiet:
+        displayer.show(prec)
+    if dryrun:
+        todo = 'hg rebase --rev %s --dest %s;\n' % (bumped, prec.p1())
+        repo.ui.write(todo)
+        repo.ui.write('hg update %s;\n' % prec)
+        repo.ui.write('hg revert --all --rev %s;\n' % bumped)
+        repo.ui.write('hg commit --msg "bumped update to %s"')
+        return 0
+    if progresscb: progresscb()
+    wlock = repo.wlock()
+    try:
+        newid = tmpctx = None
+        tmpctx = bumped
+        lock = repo.lock()
+        try:
+            bmupdate = _bookmarksupdater(repo, bumped.node())
+            # Basic check for common parent. Far too complicated and fragile
+            tr = repo.transaction('bumped-stabilize')
+            try:
+                if not list(repo.set('parents(%d) and parents(%d)', bumped, prec)):
+                    # Need to rebase the changeset at the right place
+                    repo.ui.status(_('rebasing to destination parent: %s\n') % prec.p1())
+                    try:
+                        tmpid = relocate(repo, bumped, prec.p1())
+                        if tmpid is not None:
+                            tmpctx = repo[tmpid]
+                            createmarkers(repo, [(bumped, (tmpctx,))])
+                    except MergeFailure:
+                        repo.opener.write('graftstate', bumped.hex() + '\n')
+                        repo.ui.write_err(_('evolution failed!\n'))
+                        repo.ui.write_err(_('fix conflict and run "hg evolve --continue"\n'))
+                        raise
+                # Create the new commit context
+                repo.ui.status(_('computing new diff\n'))
+                files = set()
+                copied = copies.pathcopies(prec, bumped)
+                precmanifest = prec.manifest()
+                for key, val in bumped.manifest().iteritems():
+                    if precmanifest.pop(key, None) != val:
+                        files.add(key)
+                files.update(precmanifest)  # add missing files
+                # commit it
+                if files: # something to commit!
+                    def filectxfn(repo, ctx, path):
+                        if path in bumped:
+                            fctx = bumped[path]
+                            flags = fctx.flags()
+                            mctx = context.memfilectx(fctx.path(), fctx.data(),
+                                                      islink='l' in flags,
+                                                      isexec='x' in flags,
+                                                      copied=copied.get(path))
+                            return mctx
+                        raise IOError()
+                    text = 'bumped update to %s:\n\n' % prec
+                    text += bumped.description()
+
+                    new = context.memctx(repo,
+                                         parents=[prec.node(), node.nullid],
+                                         text=text,
+                                         files=files,
+                                         filectxfn=filectxfn,
+                                         user=bumped.user(),
+                                         date=bumped.date(),
+                                         extra=bumped.extra())
+
+                    newid = repo.commitctx(new)
+                if newid is None:
+                    createmarkers(repo, [(tmpctx, ())])
+                    newid = prec.node()
+                else:
+                    phases.retractboundary(repo, bumped.phase(), [newid])
+                    createmarkers(repo, [(tmpctx, (repo[newid],))],
+                                           flag=latediff)
+                bmupdate(newid)
+                tr.close()
+                repo.ui.status(_('commited as %s\n') % node.short(newid))
+            finally:
+                tr.release()
+        finally:
+            lock.release()
+        # reroute the working copy parent to the new changeset
+        repo.dirstate.setparents(newid, node.nullid)
+    finally:
+        wlock.release()
+
+def _solvedivergent(ui, repo, divergent, dryrun=False, progresscb=None):
+    base, others = divergentdata(divergent)
+    if len(others) > 1:
+        othersstr = "[%s]" % (','.join([str(i) for i in others]))
+        hint = ("changeset %d is divergent with a changeset that got splitted "
+                "| into multiple ones:\n[%s]\n"
+                "| This is not handled by automatic evolution yet\n"
+                "| You have to fallback to manual handling with commands as:\n"
+                "| - hg touch -D\n"
+                "| - hg prune\n"
+                "| \n"
+                "| You should contact your local evolution Guru for help.\n"
+                % (divergent, othersstr))
+        raise util.Abort("We do not handle divergence with split yet",
+                         hint='')
+    other = others[0]
+    if divergent.phase() <= phases.public:
+        raise util.Abort("We can't resolve this conflict from the public side",
+                         hint="%s is public, try from %s" % (divergent, other))
+    if len(other.parents()) > 1:
+        raise util.Abort("divergent changeset can't be a merge (yet)",
+                          hint="You have to fallback to solving this by hand...\n"
+                               "| This probably mean to redo the merge and use "
+                               "| `hg prune` to kill older version.")
+    if other.p1() not in divergent.parents():
+        raise util.Abort("parents are not common (not handled yet)",
+                         hint="| %(d)s, %(o)s are not based on the same changeset."
+                              "| With the current state of its implementation, "
+                              "| evolve does not work in that case.\n"
+                              "| rebase one of them next to the other and run "
+                              "| this command again.\n"
+                              "| - either: hg rebase -dest 'p1(%(d)s)' -r %(o)s"
+                              "| - or:     hg rebase -dest 'p1(%(d)s)' -r %(o)s"
+                              % {'d': divergent, 'o': other})
+
+    displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+    ui.status(_('merge:'))
+    if not ui.quiet:
+        displayer.show(divergent)
+    ui.status(_('with: '))
+    if not ui.quiet:
+        displayer.show(other)
+    ui.status(_('base: '))
+    if not ui.quiet:
+        displayer.show(base)
+    if dryrun:
+        ui.write('hg update -c %s &&\n' % divergent)
+        ui.write('hg merge %s &&\n' % other)
+        ui.write('hg commit -m "auto merge resolving conflict between '
+                 '%s and %s"&&\n' % (divergent, other))
+        ui.write('hg up -C %s &&\n' % base)
+        ui.write('hg revert --all --rev tip &&\n')
+        ui.write('hg commit -m "`hg log -r %s --template={desc}`";\n'
+                 % divergent)
+        return
+    wlock = lock = None
+    try:
+        wlock = repo.wlock()
+        lock = repo.lock()
+        if divergent not in repo[None].parents():
+            repo.ui.status(_('updating to "local" conflict\n'))
+            hg.update(repo, divergent.rev())
+        repo.ui.note(_('merging divergent changeset\n'))
+        if progresscb: progresscb()
+        stats = merge.update(repo,
+                             other.node(),
+                             branchmerge=True,
+                             force=False,
+                             partial=None,
+                             ancestor=base.node(),
+                             mergeancestor=True)
+        hg._showstats(repo, stats)
+        if stats[3]:
+            repo.ui.status(_("use 'hg resolve' to retry unresolved file merges "
+                             "or 'hg update -C .' to abandon\n"))
+        if stats[3] > 0:
+            raise util.Abort('Merge conflict between several amendments, and this is not yet automated',
+                hint="""/!\ You can try:
+/!\ * manual merge + resolve => new cset X
+/!\ * hg up to the parent of the amended changeset (which are named W and Z)
+/!\ * hg revert --all -r X
+/!\ * hg ci -m "same message as the amended changeset" => new cset Y
+/!\ * hg kill -n Y W Z
+""")
+        if progresscb: progresscb()
+        tr = repo.transaction('stabilize-divergent')
+        try:
+            repo.dirstate.setparents(divergent.node(), node.nullid)
+            oldlen = len(repo)
+            amend(ui, repo, message='', logfile='')
+            if oldlen == len(repo):
+                new = divergent
+                # no changes
+            else:
+                new = repo['.']
+            createmarkers(repo, [(other, (new,))])
+            phases.retractboundary(repo, other.phase(), [new.node()])
+            tr.close()
+        finally:
+            tr.release()
+    finally:
+        lockmod.release(lock, wlock)
+
+
+def divergentdata(ctx):
+    """return base, other part of a conflict
+
+    This only return the first one.
+
+    XXX this woobly function won't survive XXX
+    """
+    for base in ctx._repo.set('reverse(precursors(%d))', ctx):
+        newer = obsolete.successorssets(ctx._repo, base.node())
+        # drop filter and solution including the original ctx
+        newer = [n for n in newer if n and ctx.node() not in n]
+        if newer:
+            return base, tuple(ctx._repo[o] for o in newer[0])
+    raise util.Abort('base of divergent changeset not found',
+                     hint='this case is not yet handled')
+
+
+
+shorttemplate = '[{rev}] {desc|firstline}\n'
+
+@command('^gdown|previous',
+         [],
+         '')
+def cmdprevious(ui, repo):
+    """update to parent and display summary lines"""
+    wkctx = repo[None]
+    wparents = wkctx.parents()
+    if len(wparents) != 1:
+        raise util.Abort('merge in progress')
+
+    parents = wparents[0].parents()
+    displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+    if len(parents) == 1:
+        p = parents[0]
+        hg.update(repo, p.rev())
+        displayer.show(p)
+        return 0
+    else:
+        for p in parents:
+            displayer.show(p)
+        ui.warn(_('multiple parents, explicitly update to one\n'))
+        return 1
+
+@command('^gup|next',
+         [],
+         '')
+def cmdnext(ui, repo):
+    """update to child and display summary lines"""
+    wkctx = repo[None]
+    wparents = wkctx.parents()
+    if len(wparents) != 1:
+        raise util.Abort('merge in progress')
+
+    children = [ctx for ctx in wparents[0].children() if not ctx.obsolete()]
+    displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
+    if not children:
+        ui.warn(_('no non-obsolete children\n'))
+        return 1
+    if len(children) == 1:
+        c = children[0]
+        hg.update(repo, c.rev())
+        displayer.show(c)
+        return 0
+    else:
+        for c in children:
+            displayer.show(c)
+        ui.warn(_('multiple non-obsolete children, explicitly update to one\n'))
+        return 1
+
+def _reachablefrombookmark(repo, revs, mark):
+    """filter revisions and bookmarks reachable from the given bookmark
+    yoinked from mq.py
+    """
+    marks = repo._bookmarks
+    if mark not in marks:
+        raise util.Abort(_("bookmark '%s' not found") % mark)
+
+    # If the requested bookmark is not the only one pointing to a
+    # a revision we have to only delete the bookmark and not strip
+    # anything. revsets cannot detect that case.
+    uniquebm = True
+    for m, n in marks.iteritems():
+        if m != mark and n == repo[mark].node():
+            uniquebm = False
+            break
+    if uniquebm:
+        rsrevs = repo.revs("ancestors(bookmark(%s)) - "
+                           "ancestors(head() and not bookmark(%s)) - "
+                           "ancestors(bookmark() and not bookmark(%s)) - "
+                           "obsolete()",
+                           mark, mark, mark)
+        revs.update(set(rsrevs))
+    return marks,revs
+
+def _deletebookmark(ui, marks, mark):
+    del marks[mark]
+    marks.write()
+    ui.write(_("bookmark '%s' deleted\n") % mark)
+
+
+
+def _getmetadata(**opts):
+    metadata = {}
+    date = opts.get('date')
+    user = opts.get('user')
+    if date and '0 0' != date:
+        metadata['date'] = '%i %i' % util.parsedate(date)
+    if user:
+        metadata['user'] = user
+    return metadata
+
+
+@command('^prune|obsolete|kill',
+    [('n', 'new', [], _("successor changeset (DEPRECATED)")),
+     ('s', 'succ', [], _("successor changeset")),
+     ('r', 'rev', [], _("revisions to prune")),
+     ('', 'biject', False, _("do a 1-1 map between rev and successor ranges")),
+     ('B', 'bookmark', '', _("remove revs only reachable from given"
+                             " bookmark"))] + metadataopts,
+    _('[OPTION] [-r] REV...'))
+    # -U  --noupdate option to prevent wc update and or bookmarks update ?
+def cmdprune(ui, repo, *revs, **opts):
+    """get rid of changesets by marking them obsolete
+
+    Obsolete changesets becomes invisible to all commands.
+
+    Non-pruned descendant of pruned changesets becomes "unstable". Use the
+    :hg:`evolve` to handle such situation.
+
+    When the working directory parent is pruned the repository is updated to a
+    non obsolete parents.
+
+    You can use the ``--succ`` option to informs mercurial that a newer version
+    of the pruned changeset exists.
+
+    You can use the ``--biject`` option to specify a 1-1 (bijection) between
+    revisions to prune and successor changesets. This option may be removed in
+    a future release (with the functionality absored automatically).
+
+    """
+    revs = set(scmutil.revrange(repo, list(revs) + opts.get('rev')))
+    succs = opts['new'] + opts['succ']
+    bookmark = opts.get('bookmark')
+    metadata = _getmetadata(**opts)
+    biject = opts.get('biject')
+
+    if bookmark:
+        marks,revs = _reachablefrombookmark(repo, revs, bookmark)
+        if not revs:
+            # no revisions to prune - delete bookmark immediately
+            _deletebookmark(ui, marks, bookmark)
+
+    if not revs:
+        raise util.Abort(_('nothing to prune'))
+
+    wlock = lock = None
+    wlock = repo.wlock()
+    sortedrevs = lambda specs: sorted(set(scmutil.revrange(repo, specs)))
+    try:
+        lock = repo.lock()
+        # defines pruned changesets
+        precs = []
+        for p in sortedrevs(revs):
+            cp = repo[p]
+            if not cp.mutable():
+                # note: create marker would had raise something anyway
+                raise util.Abort('cannot prune immutable changeset: %s' % cp,
+                                 hint='see "hg help phases" for details')
+            precs.append(cp)
+        if not precs:
+            raise util.Abort('nothing to prune')
+
+        # defines successors changesets
+        sucs = tuple(repo[n] for n in sortedrevs(succs))
+        if not biject and len(sucs) > 1 and len(precs) > 1:
+            msg = "Can't use multiple successors for multiple precursors"
+            raise util.Abort(msg)
+
+        if biject and len(sucs) != len(precs):
+            msg = "Can't use %d successors for %d precursors" % (len(sucs), len(precs))
+            raise util.Abort(msg)
+
+        relations = [(p, sucs) for p in precs]
+        if biject:
+            relations = [(p, (s,)) for p, s in zip(precs, sucs)]
+
+        # create markers
+        createmarkers(repo, relations, metadata=metadata)
+
+        # informs that changeset have been pruned
+        ui.status(_('%i changesets pruned\n') % len(precs))
+        # update to an unkilled parent
+        wdp = repo['.']
+        newnode = wdp
+        while newnode.obsolete():
+            newnode = newnode.parents()[0]
+        if newnode.node() != wdp.node():
+            commands.update(ui, repo, newnode.rev())
+            ui.status(_('working directory now at %s\n') % newnode)
+        # update bookmarks
+        if bookmark:
+            _deletebookmark(ui, marks, bookmark)
+        for ctx in repo.unfiltered().set('bookmark() and %ld', precs):
+            ldest = list(repo.set('max((::%d) - obsolete())', ctx))
+            if ldest:
+                dest = ldest[0]
+                updatebookmarks = _bookmarksupdater(repo, ctx.node())
+                updatebookmarks(dest.node())
+    finally:
+        lockmod.release(lock, wlock)
+
+@command('amend|refresh',
+    [('A', 'addremove', None,
+     _('mark new/missing files as added/removed before committing')),
+    ('e', 'edit', False, _('invoke editor on commit messages')),
+    ('', 'close-branch', None,
+     _('mark a branch as closed, hiding it from the branch list')),
+    ('s', 'secret', None, _('use the secret phase for committing')),
+    ] + walkopts + commitopts + commitopts2,
+    _('[OPTION]... [FILE]...'))
+def amend(ui, repo, *pats, **opts):
+    """combine a changeset with updates and replace it with a new one
+
+    Commits a new changeset incorporating both the changes to the given files
+    and all the changes from the current parent changeset into the repository.
+
+    See :hg:`commit` for details about committing changes.
+
+    If you don't specify -m, the parent's message will be reused.
+
+    Behind the scenes, Mercurial first commits the update as a regular child
+    of the current parent. Then it creates a new commit on the parent's parents
+    with the updated contents. Then it changes the working copy parent to this
+    new combined changeset. Finally, the old changeset and its update are hidden
+    from :hg:`log` (unless you use --hidden with log).
+
+    Returns 0 on success, 1 if nothing changed.
+    """
+    opts = opts.copy()
+    edit = opts.pop('edit', False)
+    opts['amend'] = True
+    if not (edit or opts['message']):
+        opts['message'] = repo['.'].description()
+    _alias, commitcmd = cmdutil.findcmd('commit', commands.table)
+    return commitcmd[0](ui, repo, *pats, **opts)
+
+def _commitfiltered(repo, ctx, match):
+    """Recommit ctx with changed files not in match. Return the new
+    node identifier, or None if nothing changed.
+    """
+    base = ctx.p1()
+    m, a, r = repo.status(base, ctx)[:3]
+    allfiles = set(m + a + r)
+    files = set(f for f in allfiles if not match(f))
+    if files == allfiles:
+        return None
+
+    # Filter copies
+    copied = copies.pathcopies(base, ctx)
+    copied = dict((src, dst) for src, dst in copied.iteritems()
+                  if dst in files)
+    def filectxfn(repo, memctx, path):
+        if path not in ctx:
+            raise IOError()
+        fctx = ctx[path]
+        flags = fctx.flags()
+        mctx = context.memfilectx(fctx.path(), fctx.data(),
+                                  islink='l' in flags,
+                                  isexec='x' in flags,
+                                  copied=copied.get(path))
+        return mctx
+
+    new = context.memctx(repo,
+                         parents=[base.node(), node.nullid],
+                         text=ctx.description(),
+                         files=files,
+                         filectxfn=filectxfn,
+                         user=ctx.user(),
+                         date=ctx.date(),
+                         extra=ctx.extra())
+    # commitctx always create a new revision, no need to check
+    newid = repo.commitctx(new)
+    return newid
+
+def _uncommitdirstate(repo, oldctx, match):
+    """Fix the dirstate after switching the working directory from
+    oldctx to a copy of oldctx not containing changed files matched by
+    match.
+    """
+    ctx = repo['.']
+    ds = repo.dirstate
+    copies = dict(ds.copies())
+    m, a, r = repo.status(oldctx.p1(), oldctx, match=match)[:3]
+    for f in m:
+        if ds[f] == 'r':
+            # modified + removed -> removed
+            continue
+        ds.normallookup(f)
+
+    for f in a:
+        if ds[f] == 'r':
+            # added + removed -> unknown
+            ds.drop(f)
+        elif ds[f] != 'a':
+            ds.add(f)
+
+    for f in r:
+        if ds[f] == 'a':
+            # removed + added -> normal
+            ds.normallookup(f)
+        elif ds[f] != 'r':
+            ds.remove(f)
+
+    # Merge old parent and old working dir copies
+    oldcopies = {}
+    for f in (m + a):
+        src = oldctx[f].renamed()
+        if src:
+            oldcopies[f] = src[0]
+    oldcopies.update(copies)
+    copies = dict((dst, oldcopies.get(src, src))
+                  for dst, src in oldcopies.iteritems())
+    # Adjust the dirstate copies
+    for dst, src in copies.iteritems():
+        if (src not in ctx or dst in ctx or ds[dst] != 'a'):
+            src = None
+        ds.copy(src, dst)
+
+@command('^uncommit',
+    [('a', 'all', None, _('uncommit all changes when no arguments given')),
+     ] + commands.walkopts,
+    _('[OPTION]... [NAME]'))
+def uncommit(ui, repo, *pats, **opts):
+    """move changes from parent revision to working directory
+
+    Changes to selected files in parent revision appear again as
+    uncommitted changed in the working directory. A new revision
+    without selected changes is created, becomes the new parent and
+    obsoletes the previous one.
+
+    The --include option specify pattern to uncommit
+    The --exclude option specify pattern to keep in the commit
+
+    Return 0 if changed files are uncommitted.
+    """
+    lock = repo.lock()
+    try:
+        wlock = repo.wlock()
+        try:
+            wctx = repo[None]
+            if len(wctx.parents()) <= 0:
+                raise util.Abort(_("cannot uncommit null changeset"))
+            if len(wctx.parents()) > 1:
+                raise util.Abort(_("cannot uncommit while merging"))
+            old = repo['.']
+            if old.phase() == phases.public:
+                raise util.Abort(_("cannot rewrite immutable changeset"))
+            if len(old.parents()) > 1:
+                raise util.Abort(_("cannot uncommit merge changeset"))
+            oldphase = old.phase()
+            updatebookmarks = _bookmarksupdater(repo, old.node())
+            # Recommit the filtered changeset
+            newid = None
+            if (pats or opts.get('include') or opts.get('exclude')
+                or opts.get('all')):
+                match = scmutil.match(old, pats, opts)
+                newid = _commitfiltered(repo, old, match)
+            if newid is None:
+                raise util.Abort(_('nothing to uncommit'))
+            # Move local changes on filtered changeset
+            createmarkers(repo, [(old, (repo[newid],))])
+            phases.retractboundary(repo, oldphase, [newid])
+            repo.dirstate.setparents(newid, node.nullid)
+            _uncommitdirstate(repo, old, match)
+            updatebookmarks(newid)
+            if not repo[newid].files():
+                ui.warn(_("new changeset is empty\n"))
+                ui.status(_('(use "hg kill ." to remove it)\n'))
+        finally:
+            wlock.release()
+    finally:
+        lock.release()
+
+@eh.wrapcommand('commit')
+def commitwrapper(orig, ui, repo, *arg, **kwargs):
+    if kwargs.get('amend', False):
+        lock = None
+    else:
+        lock = repo.lock()
+    try:
+        obsoleted = kwargs.get('obsolete', [])
+        if obsoleted:
+            obsoleted = repo.set('%lr', obsoleted)
+        result = orig(ui, repo, *arg, **kwargs)
+        if not result: # commit successed
+            new = repo['-1']
+            oldbookmarks = []
+            markers = []
+            for old in obsoleted:
+                oldbookmarks.extend(repo.nodebookmarks(old.node()))
+                markers.append((old, (new,)))
+            if markers:
+                createmarkers(repo, markers)
+            for book in oldbookmarks:
+                repo._bookmarks[book] = new.node()
+            if oldbookmarks:
+                repo._bookmarks.write()
+        return result
+    finally:
+        if lock is not None:
+            lock.release()
+
+@command('^touch',
+    [('r', 'rev', [], 'revision to update'),
+     ('D', 'duplicate', False,
+      'do not mark the new revision as successor of the old one')],
+    # allow to choose the seed ?
+    _('[-r] revs'))
+def touch(ui, repo, *revs, **opts):
+    """Create successors with exact same property but hash
+
+    This is used to "resurrect" changesets
+    """
+    duplicate = opts['duplicate']
+    revs = list(revs)
+    revs.extend(opts['rev'])
+    if not revs:
+        revs = ['.']
+    revs = scmutil.revrange(repo, revs)
+    if not revs:
+        ui.write_err('no revision to touch\n')
+        return 1
+    if not duplicate and repo.revs('public() and %ld', revs):
+        raise util.Abort("can't touch public revision")
+    wlock = lock = None
+    try:
+        wlock = repo.wlock()
+        lock = repo.lock()
+        tr = repo.transaction('touch')
+        revs.sort() # ensure parent are run first
+        newmapping = {}
+        try:
+            for r in revs:
+                ctx = repo[r]
+                extra = ctx.extra().copy()
+                extra['__touch-noise__'] = random.randint(0, 0xffffffff)
+                # search for touched parent
+                p1 = ctx.p1().node()
+                p2 = ctx.p2().node()
+                p1 = newmapping.get(p1, p1)
+                p2 = newmapping.get(p2, p2)
+                new, _ = rewrite(repo, ctx, [], ctx,
+                                 [p1, p2],
+                                 commitopts={'extra': extra})
+                # store touched version to help potential children
+                newmapping[ctx.node()] = new
+                if not duplicate:
+                    createmarkers(repo, [(ctx, (repo[new],))])
+                phases.retractboundary(repo, ctx.phase(), [new])
+                if ctx in repo[None].parents():
+                    repo.dirstate.setparents(new, node.nullid)
+            tr.close()
+        finally:
+            tr.release()
+    finally:
+        lockmod.release(lock, wlock)
+
+@command('^fold',
+    [('r', 'rev', [], _("explicitly specify the full set of revision to fold")),
+    ],
+    # allow to choose the seed ?
+    _('rev'))
+def fold(ui, repo, *revs, **opts):
+    """Fold multiple revisions into a single one
+
+    Revision from your current working directory to the specified one are fold
+    as a new one replacing the other
+
+    you can alternatively use --rev to explicitly specify revision to be fold
+    ignoring the current working directory parent.
+    """
+    revs = list(revs)
+    if revs:
+        if opts.get('rev', ()):
+            raise util.Abort("cannot specify both --rev and a target revision")
+        targets = scmutil.revrange(repo, revs)
+        revs = repo.revs('(%ld::.) or (.::%ld)', targets, targets)
+    elif 'rev' in opts:
+        revs = scmutil.revrange(repo, opts['rev'])
+    else:
+        revs = ()
+    if not revs:
+        ui.write_err('no revision to fold\n')
+        return 1
+    roots = repo.revs('roots(%ld)', revs)
+    if len(roots) > 1:
+        raise util.Abort("set has multiple roots")
+    root = repo[roots[0]]
+    if root.phase() <= phases.public:
+        raise util.Abort("can't fold public revisions")
+    heads = repo.revs('heads(%ld)', revs)
+    if len(heads) > 1:
+        raise util.Abort("set has multiple heads")
+    head = repo[heads[0]]
+    wlock = lock = None
+    try:
+        wlock = repo.wlock()
+        lock = repo.lock()
+        tr = repo.transaction('touch')
+        try:
+            allctx = [repo[r] for r in revs]
+            targetphase = max(c.phase() for c in allctx)
+            msgs = ["HG: This is a fold of %d changesets." % len(allctx)]
+            msgs += ["HG: Commit message of changeset %s.\n\n%s\n" %
+                     (c.rev(), c.description()) for c in allctx]
+            commitopts = {'message': "\n".join(msgs)}
+            commitopts['edit'] = True
+            newid, _ = rewrite(repo, root, allctx, head,
+                             [root.p1().node(), root.p2().node()],
+                             commitopts=commitopts)
+            phases.retractboundary(repo, targetphase, [newid])
+            createmarkers(repo, [(ctx, (repo[newid],))
+                                 for ctx in allctx])
+            tr.close()
+        finally:
+            tr.release()
+        ui.status('%i changesets folded\n' % len(revs))
+        if repo['.'].rev() in revs:
+            hg.update(repo, newid)
+    finally:
+        lockmod.release(lock, wlock)
+
+
+
+@eh.wrapcommand('graft')
+def graftwrapper(orig, ui, repo, *revs, **kwargs):
+    kwargs = dict(kwargs)
+    revs = list(revs) + kwargs.get('rev', [])
+    kwargs['rev'] = []
+    obsoleted = kwargs.setdefault('obsolete', [])
+
+    lock = repo.lock()
+    try:
+        if kwargs.get('old_obsolete'):
+            if kwargs.get('continue'):
+                obsoleted.extend(repo.opener.read('graftstate').splitlines())
+            else:
+                obsoleted.extend(revs)
+        # convert obsolete target into revs to avoid alias joke
+        obsoleted[:] = [str(i) for i in repo.revs('%lr', obsoleted)]
+        if obsoleted and len(revs) > 1:
+
+            raise error.Abort(_('cannot graft multiple revisions while '
+                                'obsoleting (for now).'))
+
+        return commitwrapper(orig, ui, repo,*revs, **kwargs)
+    finally:
+        lock.release()
+
+@eh.extsetup
+def oldevolveextsetup(ui):
+    try:
+        rebase = extensions.find('rebase')
+    except KeyError:
+        raise error.Abort(_('evolution extension requires rebase extension.'))
+
+    for cmd in ['kill', 'uncommit', 'touch', 'fold']:
+        entry = extensions.wrapcommand(cmdtable, cmd,
+                                       warnobserrors)
+
+    entry = cmdutil.findcmd('commit', commands.table)[1]
+    entry[1].append(('o', 'obsolete', [],
+                     _("make commit obsolete this revision")))
+    entry = cmdutil.findcmd('graft', commands.table)[1]
+    entry[1].append(('o', 'obsolete', [],
+                     _("make graft obsoletes this revision")))
+    entry[1].append(('O', 'old-obsolete', False,
+                     _("make graft obsoletes its source")))
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/obsolete.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,157 @@
+# Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
+#                Logilab SA        <contact@logilab.fr>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+"""Deprecated extension that formely introduces "Changeset Obsolescence".
+
+This concept is now partially in Mercurial core (starting with mercurial 2.3). The remaining logic have been grouped with the evolve extension.
+
+Some code cemains in this extensions to detect and convert prehistoric format of obsolete marker than early user may have create. Keep it enabled if you were such user.
+"""
+
+from mercurial import util
+
+try:
+    from mercurial import obsolete
+    if not obsolete._enabled:
+        obsolete._enabled = True
+except ImportError:
+    raise util.Abort('Obsolete extension requires Mercurial 2.3 (or later)')
+
+import sys
+import json
+
+from mercurial import cmdutil
+from mercurial import error
+from mercurial.node import bin, nullid
+
+
+#####################################################################
+### Older format management                                       ###
+#####################################################################
+
+# Code related to detection and management of older legacy format never
+# handled by core
+
+
+def reposetup(ui, repo):
+    """Detect that a repo still contains some old obsolete format
+    """
+    if not repo.local():
+        return
+    for arg in sys.argv:
+        if 'debugc' in arg:
+            break
+    else:
+        data = repo.opener.tryread('obsolete-relations')
+        if not data:
+            data = repo.sopener.tryread('obsoletemarkers')
+        if data:
+            raise util.Abort('old format of obsolete marker detected!\n'
+                             'run `hg debugconvertobsolete` once.')
+
+def _obsdeserialise(flike):
+    """read a file like object serialised with _obsserialise
+
+    this desierialize into a {subject -> objects} mapping
+
+    this was the very first format ever."""
+    rels = {}
+    for line in flike:
+        subhex, objhex = line.split()
+        subnode = bin(subhex)
+        if subnode == nullid:
+            subnode = None
+        rels.setdefault( subnode, set()).add(bin(objhex))
+    return rels
+
+cmdtable = {}
+command = cmdutil.command(cmdtable)
+@command('debugconvertobsolete', [], '')
+def cmddebugconvertobsolete(ui, repo):
+    """import markers from an .hg/obsolete-relations file"""
+    cnt = 0
+    err = 0
+    l = repo.lock()
+    some = False
+    try:
+        unlink = []
+        tr = repo.transaction('convert-obsolete')
+        try:
+            repo._importoldobsolete = True
+            store = repo.obsstore
+            ### very first format
+            try:
+                f = repo.opener('obsolete-relations')
+                try:
+                    some = True
+                    for line in f:
+                        subhex, objhex = line.split()
+                        suc = bin(subhex)
+                        prec = bin(objhex)
+                        sucs = (suc==nullid) and [] or [suc]
+                        meta = {
+                            'date':  '%i %i' % util.makedate(),
+                            'user': ui.username(),
+                            }
+                        try:
+                            store.create(tr, prec, sucs, 0, meta)
+                            cnt += 1
+                        except ValueError:
+                            repo.ui.write_err("invalid old marker line: %s"
+                                              % (line))
+                            err += 1
+                finally:
+                    f.close()
+                unlink.append(repo.join('obsolete-relations'))
+            except IOError:
+                pass
+            ### second (json) format
+            data = repo.sopener.tryread('obsoletemarkers')
+            if data:
+                some = True
+                for oldmark in json.loads(data):
+                    del oldmark['id']  # dropped for now
+                    del oldmark['reason']  # unused until then
+                    oldobject = str(oldmark.pop('object'))
+                    oldsubjects = [str(s) for s in oldmark.pop('subjects', [])]
+                    LOOKUP_ERRORS = (error.RepoLookupError, error.LookupError)
+                    if len(oldobject) != 40:
+                        try:
+                            oldobject = repo[oldobject].node()
+                        except LOOKUP_ERRORS:
+                            pass
+                    if any(len(s) != 40 for s in oldsubjects):
+                        try:
+                            oldsubjects = [repo[s].node() for s in oldsubjects]
+                        except LOOKUP_ERRORS:
+                            pass
+
+                    oldmark['date'] = '%i %i' % tuple(oldmark['date'])
+                    meta = dict((k.encode('utf-8'), v.encode('utf-8'))
+                                 for k, v in oldmark.iteritems())
+                    try:
+                        succs = [bin(n) for n in oldsubjects]
+                        succs = [n for n in succs if n != nullid]
+                        store.create(tr, bin(oldobject), succs,
+                                     0, meta)
+                        cnt += 1
+                    except ValueError:
+                        repo.ui.write_err("invalid marker %s -> %s\n"
+                                     % (oldobject, oldsubjects))
+                        err += 1
+                unlink.append(repo.sjoin('obsoletemarkers'))
+            tr.close()
+            for path in unlink:
+                util.unlink(path)
+        finally:
+            tr.release()
+    finally:
+        del repo._importoldobsolete
+        l.release()
+    if not some:
+            ui.warn('nothing to do\n')
+    ui.status('%i obsolete marker converted\n' % cnt)
+    if err:
+        ui.write_err('%i conversion failed. check you graph!\n' % err)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/pushexperiment.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,112 @@
+"""Small extension altering some push behavior
+
+- Add a new wire protocol command to exchange obsolescence markers. Sending the
+  raw file as a binary instead of using pushkey hack.
+- Add a "push done" notification
+- Push obsolescence marker before anything else (This works around the lack of global transaction)
+
+"""
+
+import errno
+from StringIO import StringIO
+
+from mercurial.i18n import _
+from mercurial import extensions
+from mercurial import wireproto
+from mercurial import obsolete
+from mercurial import localrepo
+
+
+def client_pushobsmarkers(self, obsfile):
+    """wireprotocol peer method"""
+    self.requirecap('_push_experiment_pushobsmarkers_0',
+                    _('push obsolete markers faster'))
+    ret, output = self._callpush('push_experiment_pushobsmarkers_0', obsfile)
+    for l in output.splitlines(True):
+        self.ui.status(_('remote: '), l)
+    return ret
+
+
+def srv_pushobsmarkers(repo, proto):
+    """wireprotocol command"""
+    fp = StringIO()
+    proto.redirect()
+    proto.getfile(fp)
+    data = fp.getvalue()
+    fp.close()
+    lock = repo.lock()
+    try:
+        tr = repo.transaction('pushkey: obsolete markers')
+        try:
+            repo.obsstore.mergemarkers(tr, data)
+            tr.close()
+        finally:
+            tr.release()
+    finally:
+        lock.release()
+    return wireproto.pushres(0)
+
+
+def syncpush(orig, repo, remote):
+    """wraper for obsolete.syncpush to use the fast way if possible"""
+    if not (obsolete._enabled and repo.obsstore):
+        return
+    if remote.capable('_push_experiment_pushobsmarkers_0'):
+        return # already pushed before changeset
+        remote.push_experiment_pushobsmarkers_0(obsfp)
+        return
+    return orig(repo, remote)
+
+
+def client_notifypushend(self):
+    """wire peer  command to notify a push is done"""
+    self.requirecap('_push_experiment_notifypushend_0', _('hook once push is all done'))
+    return self._call('push_experiment_notifypushend_0')
+
+
+def srv_notifypushend(repo, proto):
+    """wire protocol command to notify a push is done"""
+    proto.redirect()
+    repo.hook('notifypushend')
+    return wireproto.pushres(0)
+
+
+def augmented_push(orig, repo, remote, *args, **kwargs):
+    """push wrapped that call the wire protocol command"""
+    if not remote.canpush():
+        raise util.Abort(_("destination does not support push"))
+    if (obsolete._enabled and repo.obsstore
+        and remote.capable('_push_experiment_pushobsmarkers_0')):
+        # push marker early to limit damage of pushing too early.
+        try:
+            obsfp = repo.sopener('obsstore')
+        except IOError as e:
+            if e.errno != errno.ENOENT:
+                raise
+        else:
+            remote.push_experiment_pushobsmarkers_0(obsfp)
+    ret = orig(repo, remote, *args, **kwargs)
+    if remote.capable('_push_experiment_notifypushend_0'):
+        remote.push_experiment_notifypushend_0()
+    return ret
+
+
+def capabilities(orig, repo, proto):
+    """wrapper to advertise new capability"""
+    caps = orig(repo, proto)
+    if obsolete._enabled:
+        caps += ' _push_experiment_pushobsmarkers_0'
+    caps += ' _push_experiment_notifypushend_0'
+    return caps
+
+
+def extsetup(ui):
+    wireproto.wirepeer.push_experiment_pushobsmarkers_0 = client_pushobsmarkers
+    wireproto.wirepeer.push_experiment_notifypushend_0 = client_notifypushend
+    wireproto.commands['push_experiment_pushobsmarkers_0'] = (srv_pushobsmarkers, '')
+    wireproto.commands['push_experiment_notifypushend_0'] = (srv_notifypushend, '')
+    extensions.wrapfunction(wireproto, 'capabilities', capabilities)
+    extensions.wrapfunction(obsolete, 'syncpush', syncpush)
+    extensions.wrapfunction(localrepo.localrepository, 'push', augmented_push)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/simple4server.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,12 @@
+'''enable experimental obsolescence feature of Mercurial
+
+OBSOLESCENCE IS AN EXPERIMENTAL FEATURE MAKE SURE YOU UNDERSTOOD THE INVOLVED
+CONCEPT BEFORE USING IT.
+
+/!\ THIS EXTENSION IS INTENDED FOR SERVER SIDE ONLY USAGE /!\
+
+For client side usages it is recommended to use the evolve extension for
+improved user interface.'''
+
+import mercurial.obsolete
+mercurial.obsolete._enabled = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/setup.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,18 @@
+# Copied from histedit setup.py
+# Credit to Augie Fackler <durin42@gmail.com>
+
+from distutils.core import setup
+
+setup(
+    name='hg-evolve',
+    version='3.2.0',
+    author='Pierre-Yves David',
+    maintainer='Pierre-Yves David',
+    maintainer_email='pierre-yves.david@logilab.fr',
+    url='https://bitbucket.org/marmoute/mutable-history',
+    description='Flexible evolution of Mercurial history.',
+    long_description=open('README').read(),
+    keywords='hg mercurial',
+    license='GPLv2+',
+    py_modules=['hgext.evolve', 'hgext.pushexperiment'],
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/killdaemons.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+
+import os, time, errno, signal
+
+# Kill off any leftover daemon processes
+try:
+    fp = open(os.environ['DAEMON_PIDS'])
+    for line in fp:
+        try:
+            pid = int(line)
+        except ValueError:
+            continue
+        try:
+            os.kill(pid, 0)
+            os.kill(pid, signal.SIGTERM)
+            for i in range(10):
+                time.sleep(0.05)
+                os.kill(pid, 0)
+            os.kill(pid, signal.SIGKILL)
+        except OSError, err:
+            if err.errno != errno.ESRCH:
+                raise
+    fp.close()
+except IOError:
+    pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/run-tests.py	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,1128 @@
+#!/usr/bin/env python
+#
+# run-tests.py - Run a set of tests on Mercurial
+#
+# Copyright 2006 Matt Mackall <mpm@selenic.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+# Modifying this script is tricky because it has many modes:
+#   - serial (default) vs parallel (-jN, N > 1)
+#   - no coverage (default) vs coverage (-c, -C, -s)
+#   - temp install (default) vs specific hg script (--with-hg, --local)
+#   - tests are a mix of shell scripts and Python scripts
+#
+# If you change this script, it is recommended that you ensure you
+# haven't broken it by running it in various modes with a representative
+# sample of test scripts.  For example:
+#
+#  1) serial, no coverage, temp install:
+#      ./run-tests.py test-s*
+#  2) serial, no coverage, local hg:
+#      ./run-tests.py --local test-s*
+#  3) serial, coverage, temp install:
+#      ./run-tests.py -c test-s*
+#  4) serial, coverage, local hg:
+#      ./run-tests.py -c --local test-s*      # unsupported
+#  5) parallel, no coverage, temp install:
+#      ./run-tests.py -j2 test-s*
+#  6) parallel, no coverage, local hg:
+#      ./run-tests.py -j2 --local test-s*
+#  7) parallel, coverage, temp install:
+#      ./run-tests.py -j2 -c test-s*          # currently broken
+#  8) parallel, coverage, local install:
+#      ./run-tests.py -j2 -c --local test-s*  # unsupported (and broken)
+#  9) parallel, custom tmp dir:
+#      ./run-tests.py -j2 --tmpdir /tmp/myhgtests
+#
+# (You could use any subset of the tests: test-s* happens to match
+# enough that it's worth doing parallel runs, few enough that it
+# completes fairly quickly, includes both shell and Python scripts, and
+# includes some scripts that run daemon processes.)
+
+from distutils import version
+import difflib
+import errno
+import optparse
+import os
+import shutil
+import subprocess
+import signal
+import sys
+import tempfile
+import time
+import re
+
+closefds = os.name == 'posix'
+def Popen4(cmd, bufsize=-1):
+    p = subprocess.Popen(cmd, shell=True, bufsize=bufsize,
+                         close_fds=closefds,
+                         stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+                         stderr=subprocess.STDOUT)
+    p.fromchild = p.stdout
+    p.tochild = p.stdin
+    p.childerr = p.stderr
+    return p
+
+# reserved exit code to skip test (used by hghave)
+SKIPPED_STATUS = 80
+SKIPPED_PREFIX = 'skipped: '
+FAILED_PREFIX  = 'hghave check failed: '
+PYTHON = sys.executable
+IMPL_PATH = 'PYTHONPATH'
+if 'java' in sys.platform:
+    IMPL_PATH = 'JYTHONPATH'
+
+requiredtools = ["python", "diff", "grep", "sed"]
+
+defaults = {
+    'jobs': ('HGTEST_JOBS', 1),
+    'timeout': ('HGTEST_TIMEOUT', 180),
+    'port': ('HGTEST_PORT', 20059),
+}
+
+def parseargs():
+    parser = optparse.OptionParser("%prog [options] [tests]")
+
+    # keep these sorted
+    parser.add_option("--blacklist", action="append",
+        help="skip tests listed in the specified blacklist file")
+    parser.add_option("-C", "--annotate", action="store_true",
+        help="output files annotated with coverage")
+    parser.add_option("--child", type="int",
+        help="run as child process, summary to given fd")
+    parser.add_option("-c", "--cover", action="store_true",
+        help="print a test coverage report")
+    parser.add_option("-d", "--debug", action="store_true",
+        help="debug mode: write output of test scripts to console"
+             " rather than capturing and diff'ing it (disables timeout)")
+    parser.add_option("-f", "--first", action="store_true",
+        help="exit on the first test failure")
+    parser.add_option("--inotify", action="store_true",
+        help="enable inotify extension when running tests")
+    parser.add_option("-i", "--interactive", action="store_true",
+        help="prompt to accept changed output")
+    parser.add_option("-j", "--jobs", type="int",
+        help="number of jobs to run in parallel"
+             " (default: $%s or %d)" % defaults['jobs'])
+    parser.add_option("--keep-tmpdir", action="store_true",
+        help="keep temporary directory after running tests")
+    parser.add_option("-k", "--keywords",
+        help="run tests matching keywords")
+    parser.add_option("-l", "--local", action="store_true",
+        help="shortcut for --with-hg=<testdir>/../hg")
+    parser.add_option("-n", "--nodiff", action="store_true",
+        help="skip showing test changes")
+    parser.add_option("-p", "--port", type="int",
+        help="port on which servers should listen"
+             " (default: $%s or %d)" % defaults['port'])
+    parser.add_option("--pure", action="store_true",
+        help="use pure Python code instead of C extensions")
+    parser.add_option("-R", "--restart", action="store_true",
+        help="restart at last error")
+    parser.add_option("-r", "--retest", action="store_true",
+        help="retest failed tests")
+    parser.add_option("-S", "--noskips", action="store_true",
+        help="don't report skip tests verbosely")
+    parser.add_option("-t", "--timeout", type="int",
+        help="kill errant tests after TIMEOUT seconds"
+             " (default: $%s or %d)" % defaults['timeout'])
+    parser.add_option("--tmpdir", type="string",
+        help="run tests in the given temporary directory"
+             " (implies --keep-tmpdir)")
+    parser.add_option("-v", "--verbose", action="store_true",
+        help="output verbose messages")
+    parser.add_option("--view", type="string",
+        help="external diff viewer")
+    parser.add_option("--with-hg", type="string",
+        metavar="HG",
+        help="test using specified hg script rather than a "
+             "temporary installation")
+    parser.add_option("-3", "--py3k-warnings", action="store_true",
+        help="enable Py3k warnings on Python 2.6+")
+
+    for option, default in defaults.items():
+        defaults[option] = int(os.environ.get(*default))
+    parser.set_defaults(**defaults)
+    (options, args) = parser.parse_args()
+
+    # jython is always pure
+    if 'java' in sys.platform or '__pypy__' in sys.modules:
+        options.pure = True
+
+    if options.with_hg:
+        if not (os.path.isfile(options.with_hg) and
+                os.access(options.with_hg, os.X_OK)):
+            parser.error('--with-hg must specify an executable hg script')
+        if not os.path.basename(options.with_hg) == 'hg':
+            sys.stderr.write('warning: --with-hg should specify an hg script')
+    if options.local:
+        testdir = os.path.dirname(os.path.realpath(sys.argv[0]))
+        hgbin = os.path.join(os.path.dirname(testdir), 'hg')
+        if not os.access(hgbin, os.X_OK):
+            parser.error('--local specified, but %r not found or not executable'
+                         % hgbin)
+        options.with_hg = hgbin
+
+    options.anycoverage = options.cover or options.annotate
+    if options.anycoverage:
+        try:
+            import coverage
+            covver = version.StrictVersion(coverage.__version__).version
+            if covver < (3, 3):
+                parser.error('coverage options require coverage 3.3 or later')
+        except ImportError:
+            parser.error('coverage options now require the coverage package')
+
+    if options.anycoverage and options.local:
+        # this needs some path mangling somewhere, I guess
+        parser.error("sorry, coverage options do not work when --local "
+                     "is specified")
+
+    global vlog
+    if options.verbose:
+        if options.jobs > 1 or options.child is not None:
+            pid = "[%d]" % os.getpid()
+        else:
+            pid = None
+        def vlog(*msg):
+            if pid:
+                print pid,
+            for m in msg:
+                print m,
+            print
+            sys.stdout.flush()
+    else:
+        vlog = lambda *msg: None
+
+    if options.tmpdir:
+        options.tmpdir = os.path.expanduser(options.tmpdir)
+
+    if options.jobs < 1:
+        parser.error('--jobs must be positive')
+    if options.interactive and options.jobs > 1:
+        print '(--interactive overrides --jobs)'
+        options.jobs = 1
+    if options.interactive and options.debug:
+        parser.error("-i/--interactive and -d/--debug are incompatible")
+    if options.debug:
+        if options.timeout != defaults['timeout']:
+            sys.stderr.write(
+                'warning: --timeout option ignored with --debug\n')
+        options.timeout = 0
+    if options.py3k_warnings:
+        if sys.version_info[:2] < (2, 6) or sys.version_info[:2] >= (3, 0):
+            parser.error('--py3k-warnings can only be used on Python 2.6+')
+    if options.blacklist:
+        blacklist = dict()
+        for filename in options.blacklist:
+            try:
+                path = os.path.expanduser(os.path.expandvars(filename))
+                f = open(path, "r")
+            except IOError, err:
+                if err.errno != errno.ENOENT:
+                    raise
+                print "warning: no such blacklist file: %s" % filename
+                continue
+
+            for line in f.readlines():
+                line = line.strip()
+                if line and not line.startswith('#'):
+                    blacklist[line] = filename
+
+            f.close()
+
+        options.blacklist = blacklist
+
+    return (options, args)
+
+def rename(src, dst):
+    """Like os.rename(), trade atomicity and opened files friendliness
+    for existing destination support.
+    """
+    shutil.copy(src, dst)
+    os.remove(src)
+
+def splitnewlines(text):
+    '''like str.splitlines, but only split on newlines.
+    keep line endings.'''
+    i = 0
+    lines = []
+    while True:
+        n = text.find('\n', i)
+        if n == -1:
+            last = text[i:]
+            if last:
+                lines.append(last)
+            return lines
+        lines.append(text[i:n + 1])
+        i = n + 1
+
+def parsehghaveoutput(lines):
+    '''Parse hghave log lines.
+    Return tuple of lists (missing, failed):
+      * the missing/unknown features
+      * the features for which existence check failed'''
+    missing = []
+    failed = []
+    for line in lines:
+        if line.startswith(SKIPPED_PREFIX):
+            line = line.splitlines()[0]
+            missing.append(line[len(SKIPPED_PREFIX):])
+        elif line.startswith(FAILED_PREFIX):
+            line = line.splitlines()[0]
+            failed.append(line[len(FAILED_PREFIX):])
+
+    return missing, failed
+
+def showdiff(expected, output, ref, err):
+    try:
+        for line in difflib.unified_diff(expected, output, ref, err):
+            sys.stdout.write(line)
+    except IOError, ex:
+        print >>sys.stderr, 'BORKEN PIPE', ex.errno
+        pass
+
+def findprogram(program):
+    """Search PATH for a executable program"""
+    for p in os.environ.get('PATH', os.defpath).split(os.pathsep):
+        name = os.path.join(p, program)
+        if os.access(name, os.X_OK):
+            return name
+    return None
+
+def checktools():
+    # Before we go any further, check for pre-requisite tools
+    # stuff from coreutils (cat, rm, etc) are not tested
+    for p in requiredtools:
+        if os.name == 'nt':
+            p += '.exe'
+        found = findprogram(p)
+        if found:
+            vlog("# Found prerequisite", p, "at", found)
+        else:
+            print "WARNING: Did not find prerequisite tool: "+p
+
+def killdaemons():
+    # Kill off any leftover daemon processes
+    try:
+        fp = open(DAEMON_PIDS)
+        for line in fp:
+            try:
+                pid = int(line)
+            except ValueError:
+                continue
+            try:
+                os.kill(pid, 0)
+                vlog('# Killing daemon process %d' % pid)
+                os.kill(pid, signal.SIGTERM)
+                time.sleep(0.25)
+                os.kill(pid, 0)
+                vlog('# Daemon process %d is stuck - really killing it' % pid)
+                os.kill(pid, signal.SIGKILL)
+            except OSError, err:
+                if err.errno != errno.ESRCH:
+                    raise
+        fp.close()
+        os.unlink(DAEMON_PIDS)
+    except IOError:
+        pass
+
+def cleanup(options):
+    if not options.keep_tmpdir:
+        vlog("# Cleaning up HGTMP", HGTMP)
+        shutil.rmtree(HGTMP, True)
+
+def usecorrectpython():
+    # some tests run python interpreter. they must use same
+    # interpreter we use or bad things will happen.
+    exedir, exename = os.path.split(sys.executable)
+    if exename == 'python':
+        path = findprogram('python')
+        if os.path.dirname(path) == exedir:
+            return
+    vlog('# Making python executable in test path use correct Python')
+    mypython = os.path.join(BINDIR, 'python')
+    try:
+        os.symlink(sys.executable, mypython)
+    except AttributeError:
+        # windows fallback
+        shutil.copyfile(sys.executable, mypython)
+        shutil.copymode(sys.executable, mypython)
+
+def installhg(options):
+    vlog("# Performing temporary installation of HG")
+    installerrs = os.path.join("tests", "install.err")
+    pure = options.pure and "--pure" or ""
+
+    # Run installer in hg root
+    script = os.path.realpath(sys.argv[0])
+    hgroot = os.path.dirname(os.path.dirname(script))
+    os.chdir(hgroot)
+    nohome = '--home=""'
+    if os.name == 'nt':
+        # The --home="" trick works only on OS where os.sep == '/'
+        # because of a distutils convert_path() fast-path. Avoid it at
+        # least on Windows for now, deal with .pydistutils.cfg bugs
+        # when they happen.
+        nohome = ''
+    cmd = ('%s setup.py %s clean --all'
+           ' build --build-base="%s"'
+           ' install --force --prefix="%s" --install-lib="%s"'
+           ' --install-scripts="%s" %s >%s 2>&1'
+           % (sys.executable, pure, os.path.join(HGTMP, "build"),
+              INST, PYTHONDIR, BINDIR, nohome, installerrs))
+    vlog("# Running", cmd)
+    if os.system(cmd) == 0:
+        if not options.verbose:
+            os.remove(installerrs)
+    else:
+        f = open(installerrs)
+        for line in f:
+            print line,
+        f.close()
+        sys.exit(1)
+    os.chdir(TESTDIR)
+
+    usecorrectpython()
+
+    vlog("# Installing dummy diffstat")
+    f = open(os.path.join(BINDIR, 'diffstat'), 'w')
+    f.write('#!' + sys.executable + '\n'
+            'import sys\n'
+            'files = 0\n'
+            'for line in sys.stdin:\n'
+            '    if line.startswith("diff "):\n'
+            '        files += 1\n'
+            'sys.stdout.write("files patched: %d\\n" % files)\n')
+    f.close()
+    os.chmod(os.path.join(BINDIR, 'diffstat'), 0700)
+
+    if options.py3k_warnings and not options.anycoverage:
+        vlog("# Updating hg command to enable Py3k Warnings switch")
+        f = open(os.path.join(BINDIR, 'hg'), 'r')
+        lines = [line.rstrip() for line in f]
+        lines[0] += ' -3'
+        f.close()
+        f = open(os.path.join(BINDIR, 'hg'), 'w')
+        for line in lines:
+            f.write(line + '\n')
+        f.close()
+
+    if options.anycoverage:
+        custom = os.path.join(TESTDIR, 'sitecustomize.py')
+        target = os.path.join(PYTHONDIR, 'sitecustomize.py')
+        vlog('# Installing coverage trigger to %s' % target)
+        shutil.copyfile(custom, target)
+        rc = os.path.join(TESTDIR, '.coveragerc')
+        vlog('# Installing coverage rc to %s' % rc)
+        os.environ['COVERAGE_PROCESS_START'] = rc
+        fn = os.path.join(INST, '..', '.coverage')
+        os.environ['COVERAGE_FILE'] = fn
+
+def outputcoverage(options):
+
+    vlog('# Producing coverage report')
+    os.chdir(PYTHONDIR)
+
+    def covrun(*args):
+        cmd = 'coverage %s' % ' '.join(args)
+        vlog('# Running: %s' % cmd)
+        os.system(cmd)
+
+    if options.child:
+        return
+
+    covrun('-c')
+    omit = ','.join([BINDIR, TESTDIR])
+    covrun('-i', '-r', '"--omit=%s"' % omit) # report
+    if options.annotate:
+        adir = os.path.join(TESTDIR, 'annotated')
+        if not os.path.isdir(adir):
+            os.mkdir(adir)
+        covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit)
+
+class Timeout(Exception):
+    pass
+
+def alarmed(signum, frame):
+    raise Timeout
+
+def pytest(test, options, replacements):
+    py3kswitch = options.py3k_warnings and ' -3' or ''
+    cmd = '%s%s "%s"' % (PYTHON, py3kswitch, test)
+    vlog("# Running", cmd)
+    return run(cmd, options, replacements)
+
+def shtest(test, options, replacements):
+    cmd = '"%s"' % test
+    vlog("# Running", cmd)
+    return run(cmd, options, replacements)
+
+needescape = re.compile(r'[\x00-\x08\x0b-\x1f\x7f-\xff]').search
+escapesub = re.compile(r'[\x00-\x08\x0b-\x1f\\\x7f-\xff]').sub
+escapemap = dict((chr(i), r'\x%02x' % i) for i in range(256))
+escapemap.update({'\\': '\\\\', '\r': r'\r'})
+def escapef(m):
+    return escapemap[m.group(0)]
+def stringescape(s):
+    return escapesub(escapef, s)
+
+def tsttest(test, options, replacements):
+    t = open(test)
+    out = []
+    script = []
+    salt = "SALT" + str(time.time())
+
+    pos = prepos = -1
+    after = {}
+    expected = {}
+    for n, l in enumerate(t):
+        if not l.endswith('\n'):
+            l += '\n'
+        if l.startswith('  $ '): # commands
+            after.setdefault(pos, []).append(l)
+            prepos = pos
+            pos = n
+            script.append('echo %s %s $?\n' % (salt, n))
+            script.append(l[4:])
+        elif l.startswith('  > '): # continuations
+            after.setdefault(prepos, []).append(l)
+            script.append(l[4:])
+        elif l.startswith('  '): # results
+            # queue up a list of expected results
+            expected.setdefault(pos, []).append(l[2:])
+        else:
+            # non-command/result - queue up for merged output
+            after.setdefault(pos, []).append(l)
+
+    t.close()
+
+    script.append('echo %s %s $?\n' % (salt, n + 1))
+
+    fd, name = tempfile.mkstemp(suffix='hg-tst')
+
+    try:
+        for l in script:
+            os.write(fd, l)
+        os.close(fd)
+
+        cmd = '/bin/sh "%s"' % name
+        vlog("# Running", cmd)
+        exitcode, output = run(cmd, options, replacements)
+        # do not merge output if skipped, return hghave message instead
+        # similarly, with --debug, output is None
+        if exitcode == SKIPPED_STATUS or output is None:
+            return exitcode, output
+    finally:
+        os.remove(name)
+
+    def rematch(el, l):
+        try:
+            # ensure that the regex matches to the end of the string
+            return re.match(el + r'\Z', l)
+        except re.error:
+            # el is an invalid regex
+            return False
+
+    def globmatch(el, l):
+        # The only supported special characters are * and ?. Escaping is
+        # supported.
+        i, n = 0, len(el)
+        res = ''
+        while i < n:
+            c = el[i]
+            i += 1
+            if c == '\\' and el[i] in '*?\\':
+                res += el[i - 1:i + 1]
+                i += 1
+            elif c == '*':
+                res += '.*'
+            elif c == '?':
+                res += '.'
+            else:
+                res += re.escape(c)
+        return rematch(res, l)
+
+    pos = -1
+    postout = []
+    ret = 0
+    for n, l in enumerate(output):
+        lout, lcmd = l, None
+        if salt in l:
+            lout, lcmd = l.split(salt, 1)
+
+        if lout:
+            if lcmd:
+                lout += ' (no-eol)\n'
+
+            el = None
+            if pos in expected and expected[pos]:
+                el = expected[pos].pop(0)
+
+            if el == lout: # perfect match (fast)
+                postout.append("  " + lout)
+            elif (el and
+                  (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', lout) or
+                   el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', lout)
+                   or el.endswith(" (esc)\n") and
+                      el.decode('string-escape') == l)):
+                postout.append("  " + el) # fallback regex/glob/esc match
+            else:
+                if needescape(lout):
+                    lout = stringescape(lout.rstrip('\n')) + " (esc)\n"
+                postout.append("  " + lout) # let diff deal with it
+
+        if lcmd:
+            # add on last return code
+            ret = int(lcmd.split()[1])
+            if ret != 0:
+                postout.append("  [%s]\n" % ret)
+            if pos in after:
+                postout += after.pop(pos)
+            pos = int(lcmd.split()[0])
+
+    if pos in after:
+        postout += after.pop(pos)
+
+    return exitcode, postout
+
+wifexited = getattr(os, "WIFEXITED", lambda x: False)
+def run(cmd, options, replacements):
+    """Run command in a sub-process, capturing the output (stdout and stderr).
+    Return a tuple (exitcode, output).  output is None in debug mode."""
+    # TODO: Use subprocess.Popen if we're running on Python 2.4
+    if options.debug:
+        proc = subprocess.Popen(cmd, shell=True)
+        ret = proc.wait()
+        return (ret, None)
+
+    if os.name == 'nt' or sys.platform.startswith('java'):
+        tochild, fromchild = os.popen4(cmd)
+        tochild.close()
+        output = fromchild.read()
+        ret = fromchild.close()
+        if ret is None:
+            ret = 0
+    else:
+        proc = Popen4(cmd)
+        def cleanup():
+            os.kill(proc.pid, signal.SIGTERM)
+            ret = proc.wait()
+            if ret == 0:
+                ret = signal.SIGTERM << 8
+            killdaemons()
+            return ret
+
+        try:
+            output = ''
+            proc.tochild.close()
+            output = proc.fromchild.read()
+            ret = proc.wait()
+            if wifexited(ret):
+                ret = os.WEXITSTATUS(ret)
+        except Timeout:
+            vlog('# Process %d timed out - killing it' % proc.pid)
+            ret = cleanup()
+            output += ("\n### Abort: timeout after %d seconds.\n"
+                       % options.timeout)
+        except KeyboardInterrupt:
+            vlog('# Handling keyboard interrupt')
+            cleanup()
+            raise
+
+    for s, r in replacements:
+        output = re.sub(s, r, output)
+    return ret, splitnewlines(output)
+
+def runone(options, test, skips, fails):
+    '''tristate output:
+    None -> skipped
+    True -> passed
+    False -> failed'''
+
+    def skip(msg):
+        if not options.verbose:
+            skips.append((test, msg))
+        else:
+            print "\nSkipping %s: %s" % (testpath, msg)
+        return None
+
+    def fail(msg):
+        fails.append((test, msg))
+        if not options.nodiff:
+            print "\nERROR: %s %s" % (testpath, msg)
+        return None
+
+    vlog("# Test", test)
+
+    # create a fresh hgrc
+    hgrc = open(HGRCPATH, 'w+')
+    hgrc.write('[ui]\n')
+    hgrc.write('slash = True\n')
+    hgrc.write('[defaults]\n')
+    hgrc.write('backout = -d "0 0"\n')
+    hgrc.write('commit = -d "0 0"\n')
+    hgrc.write('tag = -d "0 0"\n')
+    if options.inotify:
+        hgrc.write('[extensions]\n')
+        hgrc.write('inotify=\n')
+        hgrc.write('[inotify]\n')
+        hgrc.write('pidfile=%s\n' % DAEMON_PIDS)
+        hgrc.write('appendpid=True\n')
+    hgrc.close()
+
+    testpath = os.path.join(TESTDIR, test)
+    ref = os.path.join(TESTDIR, test+".out")
+    err = os.path.join(TESTDIR, test+".err")
+    if os.path.exists(err):
+        os.remove(err)       # Remove any previous output files
+    try:
+        tf = open(testpath)
+        firstline = tf.readline().rstrip()
+        tf.close()
+    except:
+        firstline = ''
+    lctest = test.lower()
+
+    if lctest.endswith('.py') or firstline == '#!/usr/bin/env python':
+        runner = pytest
+    elif lctest.endswith('.t'):
+        runner = tsttest
+        ref = testpath
+    else:
+        # do not try to run non-executable programs
+        if not os.access(testpath, os.X_OK):
+            return skip("not executable")
+        runner = shtest
+
+    # Make a tmp subdirectory to work in
+    testtmp = os.environ["TESTTMP"] = os.path.join(HGTMP, test)
+    os.mkdir(testtmp)
+    os.chdir(testtmp)
+
+    if options.timeout > 0:
+        signal.alarm(options.timeout)
+
+    ret, out = runner(testpath, options, [
+        (re.escape(testtmp), '$TESTTMP'),
+        (r':%s\b' % options.port, ':$HGPORT'),
+        (r':%s\b' % (options.port + 1), ':$HGPORT1'),
+        (r':%s\b' % (options.port + 2), ':$HGPORT2'),
+        ])
+    vlog("# Ret was:", ret)
+
+    if options.timeout > 0:
+        signal.alarm(0)
+
+    mark = '.'
+
+    skipped = (ret == SKIPPED_STATUS)
+
+    # If we're not in --debug mode and reference output file exists,
+    # check test output against it.
+    if options.debug:
+        refout = None                   # to match "out is None"
+    elif os.path.exists(ref):
+        f = open(ref, "r")
+        refout = splitnewlines(f.read())
+        f.close()
+    else:
+        refout = []
+
+    if (ret != 0 or out != refout) and not skipped and not options.debug:
+        # Save errors to a file for diagnosis
+        f = open(err, "wb")
+        for line in out:
+            f.write(line)
+        f.close()
+
+    if skipped:
+        mark = 's'
+        if out is None:                 # debug mode: nothing to parse
+            missing = ['unknown']
+            failed = None
+        else:
+            missing, failed = parsehghaveoutput(out)
+        if not missing:
+            missing = ['irrelevant']
+        if failed:
+            fail("hghave failed checking for %s" % failed[-1])
+            skipped = False
+        else:
+            skip(missing[-1])
+    elif out != refout:
+        mark = '!'
+        if ret:
+            fail("output changed and returned error code %d" % ret)
+        else:
+            fail("output changed")
+        if not options.nodiff:
+            if options.view:
+                os.system("%s %s %s" % (options.view, ref, err))
+            else:
+                showdiff(refout, out, ref, err)
+        ret = 1
+    elif ret:
+        mark = '!'
+        fail("returned error code %d" % ret)
+
+    if not options.verbose:
+        try:
+            sys.stdout.write(mark)
+            sys.stdout.flush()
+        except IOError, ex:
+            print >>sys.stderr, 'BORKEN PIPE', ex.errno
+            pass
+
+    killdaemons()
+
+    os.chdir(TESTDIR)
+    if not options.keep_tmpdir:
+        shutil.rmtree(testtmp, True)
+    if skipped:
+        return None
+    return ret == 0
+
+_hgpath = None
+
+def _gethgpath():
+    """Return the path to the mercurial package that is actually found by
+    the current Python interpreter."""
+    global _hgpath
+    if _hgpath is not None:
+        return _hgpath
+
+    cmd = '%s -c "import mercurial; print mercurial.__path__[0]"'
+    pipe = os.popen(cmd % PYTHON)
+    try:
+        _hgpath = pipe.read().strip()
+    finally:
+        pipe.close()
+    return _hgpath
+
+def _checkhglib(verb):
+    """Ensure that the 'mercurial' package imported by python is
+    the one we expect it to be.  If not, print a warning to stderr."""
+    expecthg = os.path.join(PYTHONDIR, 'mercurial')
+    actualhg = _gethgpath()
+    if actualhg != expecthg:
+        sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n'
+                         '         (expected %s)\n'
+                         % (verb, actualhg, expecthg))
+
+def runchildren(options, tests):
+    if INST:
+        installhg(options)
+        _checkhglib("Testing")
+
+    optcopy = dict(options.__dict__)
+    optcopy['jobs'] = 1
+    del optcopy['blacklist']
+    if optcopy['with_hg'] is None:
+        optcopy['with_hg'] = os.path.join(BINDIR, "hg")
+    optcopy.pop('anycoverage', None)
+
+    opts = []
+    for opt, value in optcopy.iteritems():
+        name = '--' + opt.replace('_', '-')
+        if value is True:
+            opts.append(name)
+        elif value is not None:
+            opts.append(name + '=' + str(value))
+
+    tests.reverse()
+    jobs = [[] for j in xrange(options.jobs)]
+    while tests:
+        for job in jobs:
+            if not tests:
+                break
+            job.append(tests.pop())
+    fps = {}
+
+    for j, job in enumerate(jobs):
+        if not job:
+            continue
+        rfd, wfd = os.pipe()
+        childopts = ['--child=%d' % wfd, '--port=%d' % (options.port + j * 3)]
+        childtmp = os.path.join(HGTMP, 'child%d' % j)
+        childopts += ['--tmpdir', childtmp]
+        cmdline = [PYTHON, sys.argv[0]] + opts + childopts + job
+        vlog(' '.join(cmdline))
+        fps[os.spawnvp(os.P_NOWAIT, cmdline[0], cmdline)] = os.fdopen(rfd, 'r')
+        os.close(wfd)
+    signal.signal(signal.SIGINT, signal.SIG_IGN)
+    failures = 0
+    tested, skipped, failed = 0, 0, 0
+    skips = []
+    fails = []
+    while fps:
+        pid, status = os.wait()
+        fp = fps.pop(pid)
+        l = fp.read().splitlines()
+        try:
+            test, skip, fail = map(int, l[:3])
+        except ValueError:
+            test, skip, fail = 0, 0, 0
+        split = -fail or len(l)
+        for s in l[3:split]:
+            skips.append(s.split(" ", 1))
+        for s in l[split:]:
+            fails.append(s.split(" ", 1))
+        tested += test
+        skipped += skip
+        failed += fail
+        vlog('pid %d exited, status %d' % (pid, status))
+        failures |= status
+    print
+    if not options.noskips:
+        for s in skips:
+            print "Skipped %s: %s" % (s[0], s[1])
+    for s in fails:
+        print "Failed %s: %s" % (s[0], s[1])
+
+    _checkhglib("Tested")
+    print "# Ran %d tests, %d skipped, %d failed." % (
+        tested, skipped, failed)
+
+    if options.anycoverage:
+        outputcoverage(options)
+    sys.exit(failures != 0)
+
+def runtests(options, tests):
+    global DAEMON_PIDS, HGRCPATH
+    DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids')
+    HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc')
+
+    try:
+        if INST:
+            installhg(options)
+            _checkhglib("Testing")
+
+        if options.timeout > 0:
+            try:
+                signal.signal(signal.SIGALRM, alarmed)
+                vlog('# Running each test with %d second timeout' %
+                     options.timeout)
+            except AttributeError:
+                print 'WARNING: cannot run tests with timeouts'
+                options.timeout = 0
+
+        tested = 0
+        failed = 0
+        skipped = 0
+
+        if options.restart:
+            orig = list(tests)
+            while tests:
+                if os.path.exists(tests[0] + ".err"):
+                    break
+                tests.pop(0)
+            if not tests:
+                print "running all tests"
+                tests = orig
+
+        skips = []
+        fails = []
+
+        for test in tests:
+            if options.blacklist:
+                filename = options.blacklist.get(test)
+                if filename is not None:
+                    skips.append((test, "blacklisted (%s)" % filename))
+                    skipped += 1
+                    continue
+
+            if options.retest and not os.path.exists(test + ".err"):
+                skipped += 1
+                continue
+
+            if options.keywords:
+                fp = open(test)
+                t = fp.read().lower() + test.lower()
+                fp.close()
+                for k in options.keywords.lower().split():
+                    if k in t:
+                        break
+                else:
+                    skipped += 1
+                    continue
+
+            ret = runone(options, test, skips, fails)
+            if ret is None:
+                skipped += 1
+            elif not ret:
+                if options.interactive:
+                    print "Accept this change? [n] ",
+                    answer = sys.stdin.readline().strip()
+                    if answer.lower() in "y yes".split():
+                        if test.endswith(".t"):
+                            rename(test + ".err", test)
+                        else:
+                            rename(test + ".err", test + ".out")
+                        tested += 1
+                        fails.pop()
+                        continue
+                failed += 1
+                if options.first:
+                    break
+            tested += 1
+
+        if options.child:
+            fp = os.fdopen(options.child, 'w')
+            fp.write('%d\n%d\n%d\n' % (tested, skipped, failed))
+            for s in skips:
+                fp.write("%s %s\n" % s)
+            for s in fails:
+                fp.write("%s %s\n" % s)
+            fp.close()
+        else:
+            print
+            for s in skips:
+                print "Skipped %s: %s" % s
+            for s in fails:
+                print "Failed %s: %s" % s
+            _checkhglib("Tested")
+            print "# Ran %d tests, %d skipped, %d failed." % (
+                tested, skipped, failed)
+
+        if options.anycoverage:
+            outputcoverage(options)
+    except KeyboardInterrupt:
+        failed = True
+        print "\ninterrupted!"
+
+    if failed:
+        sys.exit(1)
+
+def main():
+    (options, args) = parseargs()
+    if not options.child:
+        os.umask(022)
+
+        checktools()
+
+    if len(args) == 0:
+        args = os.listdir(".")
+    args.sort()
+
+    tests = []
+    skipped = []
+    for test in args:
+        if (test.startswith("test-") and '~' not in test and
+            ('.' not in test or test.endswith('.py') or
+             test.endswith('.bat') or test.endswith('.t'))):
+            if not os.path.exists(test):
+                skipped.append(test)
+            else:
+                tests.append(test)
+    if not tests:
+        for test in skipped:
+            print 'Skipped %s: does not exist' % test
+        print "# Ran 0 tests, %d skipped, 0 failed." % len(skipped)
+        return
+    tests = tests + skipped
+
+    # Reset some environment variables to well-known values so that
+    # the tests produce repeatable output.
+    os.environ['LANG'] = os.environ['LC_ALL'] = os.environ['LANGUAGE'] = 'C'
+    os.environ['TZ'] = 'GMT'
+    os.environ["EMAIL"] = "Foo Bar <foo.bar@example.com>"
+    os.environ['CDPATH'] = ''
+    os.environ['COLUMNS'] = '80'
+    os.environ['GREP_OPTIONS'] = ''
+    os.environ['http_proxy'] = ''
+
+    # unset env related to hooks
+    for k in os.environ.keys():
+        if k.startswith('HG_'):
+            # can't remove on solaris
+            os.environ[k] = ''
+            del os.environ[k]
+
+    global TESTDIR, HGTMP, INST, BINDIR, PYTHONDIR, COVERAGE_FILE
+    TESTDIR = os.environ["TESTDIR"] = os.getcwd()
+    if options.tmpdir:
+        options.keep_tmpdir = True
+        tmpdir = options.tmpdir
+        if os.path.exists(tmpdir):
+            # Meaning of tmpdir has changed since 1.3: we used to create
+            # HGTMP inside tmpdir; now HGTMP is tmpdir.  So fail if
+            # tmpdir already exists.
+            sys.exit("error: temp dir %r already exists" % tmpdir)
+
+            # Automatically removing tmpdir sounds convenient, but could
+            # really annoy anyone in the habit of using "--tmpdir=/tmp"
+            # or "--tmpdir=$HOME".
+            #vlog("# Removing temp dir", tmpdir)
+            #shutil.rmtree(tmpdir)
+        os.makedirs(tmpdir)
+    else:
+        tmpdir = tempfile.mkdtemp('', 'hgtests.')
+    HGTMP = os.environ['HGTMP'] = os.path.realpath(tmpdir)
+    DAEMON_PIDS = None
+    HGRCPATH = None
+
+    os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
+    os.environ["HGMERGE"] = "internal:merge"
+    os.environ["HGUSER"]   = "test"
+    os.environ["HGENCODING"] = "ascii"
+    os.environ["HGENCODINGMODE"] = "strict"
+    os.environ["HGPORT"] = str(options.port)
+    os.environ["HGPORT1"] = str(options.port + 1)
+    os.environ["HGPORT2"] = str(options.port + 2)
+
+    if options.with_hg:
+        INST = None
+        BINDIR = os.path.dirname(os.path.realpath(options.with_hg))
+
+        # This looks redundant with how Python initializes sys.path from
+        # the location of the script being executed.  Needed because the
+        # "hg" specified by --with-hg is not the only Python script
+        # executed in the test suite that needs to import 'mercurial'
+        # ... which means it's not really redundant at all.
+        PYTHONDIR = BINDIR
+    else:
+        INST = os.path.join(HGTMP, "install")
+        BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
+        PYTHONDIR = os.path.join(INST, "lib", "python")
+
+    os.environ["BINDIR"] = BINDIR
+    os.environ["PYTHON"] = PYTHON
+
+    if not options.child:
+        path = [BINDIR] + os.environ["PATH"].split(os.pathsep)
+        os.environ["PATH"] = os.pathsep.join(path)
+
+        # Include TESTDIR in PYTHONPATH so that out-of-tree extensions
+        # can run .../tests/run-tests.py test-foo where test-foo
+        # adds an extension to HGRC
+        pypath = [PYTHONDIR, TESTDIR]
+        # We have to augment PYTHONPATH, rather than simply replacing
+        # it, in case external libraries are only available via current
+        # PYTHONPATH.  (In particular, the Subversion bindings on OS X
+        # are in /opt/subversion.)
+        oldpypath = os.environ.get(IMPL_PATH)
+        if oldpypath:
+            pypath.append(oldpypath)
+        os.environ[IMPL_PATH] = os.pathsep.join(pypath)
+
+    COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
+
+    vlog("# Using TESTDIR", TESTDIR)
+    vlog("# Using HGTMP", HGTMP)
+    vlog("# Using PATH", os.environ["PATH"])
+    vlog("# Using", IMPL_PATH, os.environ[IMPL_PATH])
+
+    try:
+        if len(tests) > 1 and options.jobs > 1:
+            runchildren(options, tests)
+        else:
+            runtests(options, tests)
+    finally:
+        time.sleep(1)
+        cleanup(options)
+
+if __name__ == '__main__':
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-amend.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,83 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ glog() {
+  >   hg glog --template '{rev}@{branch}({phase}) {desc|firstline}\n' "$@"
+  > }
+
+  $ hg init repo --traceback
+  $ cd repo
+  $ echo a > a
+  $ hg ci -Am adda
+  adding a
+
+Test amend captures branches
+
+  $ hg branch foo
+  marked working directory as branch foo
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg amend
+  $ hg debugobsolete
+  07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 {'date': '* *', 'user': 'test'} (glob)
+  b2e32ffb533cbe1d5759638c0cd4e8abc43b2738 0 {'date': '* *', 'user': 'test'} (glob)
+  $ hg branch
+  foo
+  $ hg branches
+  foo                            2:6a022cbb61d5
+  $ glog
+  @  2@foo(draft) adda
+  
+Test no-op
+
+  $ hg amend
+  nothing changed
+  [1]
+  $ glog
+  @  2@foo(draft) adda
+  
+
+Test forcing the message to the same value, no intermediate revision.
+
+  $ hg amend -m 'adda'
+  nothing changed
+  [1]
+  $ glog
+  @  2@foo(draft) adda
+  
+
+Test collapsing into an existing revision, no intermediate revision.
+
+  $ echo a >> a
+  $ hg ci -m changea
+  $ echo a > a
+  $ hg status
+  M a
+  $ hg pstatus
+  $ hg diff
+  diff -r f7a50201fe3a a
+  --- a/a	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/a	* +0000 (glob)
+  @@ -1,2 +1,1 @@
+   a
+  -a
+  $ hg pdiff
+  $ hg ci -m reseta
+  $ hg debugobsolete
+  07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 {'date': '* *', 'user': 'test'} (glob)
+  b2e32ffb533cbe1d5759638c0cd4e8abc43b2738 0 {'date': '* *', 'user': 'test'} (glob)
+  $ hg phase 2
+  2: draft
+  $ glog
+  @  4@foo(draft) reseta
+  |
+  o  3@foo(draft) changea
+  |
+  o  2@foo(draft) adda
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-corrupt.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,122 @@
+
+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [web]
+  > push_ssl = false
+  > allow_push = *
+  > [phases]
+  > publish = False
+  > [alias]
+  > qlog = log --template='{rev} - {node|short} {desc} ({phase})\n'
+  > [diff]
+  > git = 1
+  > unified = 0
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+  $ mkcommit() {
+  >    echo "$1" >> "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+
+  $ hg init local
+  $ hg init other
+  $ cd local
+  $ touch 1 2 3 4 5 6 7 8 9 0
+  $ hg add 1 2 3 4 5 6 7 8 9 0
+  $ mkcommit A
+  $ mkcommit B
+  $ mkcommit C
+  $ hg glog
+  @  changeset:   2:829b19580856
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add C
+  |
+  o  changeset:   1:97b8f02ab29e
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add B
+  |
+  o  changeset:   0:5d8dabd3961b
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add A
+  
+  $ hg push ../other
+  pushing to ../other
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 13 changes to 13 files
+
+
+  $ hg -R ../other verify
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  13 files, 3 changesets, 13 total revisions
+  $ mkcommit D
+  $ mkcommit E
+  $ hg up -q .^^
+  $ hg revert -r tip -a -q
+  $ hg ci -m 'coin' -q
+  $ hg glog
+  @  changeset:   5:8313a6afebbb
+  |  tag:         tip
+  |  parent:      2:829b19580856
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     coin
+  |
+  | o  changeset:   4:076ec8ade1ac
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     add E
+  | |
+  | o  changeset:   3:824d9bb109f6
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     add D
+  |
+  o  changeset:   2:829b19580856
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add C
+  |
+  o  changeset:   1:97b8f02ab29e
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add B
+  |
+  o  changeset:   0:5d8dabd3961b
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add A
+  
+
+  $ hg kill -n -1 -- -2 -3
+  2 changesets pruned
+  $ hg push ../other
+  pushing to ../other
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 2 changes to 2 files
+  $ hg -R ../other verify
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  15 files, 4 changesets, 15 total revisions
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-drop.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,267 @@
+
+  $ cat >> $HGRCPATH <<EOF
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "drophack=$(echo $(dirname $TESTDIR))/hgext/drophack.py" >> $HGRCPATH
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+  $ mkcommit() {
+  >    echo "$1" > "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+  $ summary() {
+  > echo ============ graph ==============
+  > hg log -G
+  > echo ============ hidden =============
+  > hg log --hidden -G
+  > echo ============ obsmark ============
+  > hg debugobsolete
+  > }
+
+
+  $ hg init repo
+  $ cd repo
+  $ mkcommit base
+
+drop a single changeset without any rewrite
+================================================
+
+
+  $ mkcommit simple-single
+  $ summary
+  ============ graph ==============
+  @  changeset:   1:d4e7845543ff
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add simple-single
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ hidden =============
+  @  changeset:   1:d4e7845543ff
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add simple-single
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ obsmark ============
+  $ hg drop .
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory now at b4952fcf48cf
+  search obsmarker: wall * comb * user * sys * (glob)
+  0 obsmarkers found
+  search nodes: wall * comb * user * sys * (glob)
+  1 nodes found
+  saved backup bundle to $TESTTMP/repo/.hg/strip-backup/d4e7845543ff-drophack.hg
+  strip nodes: wall * comb * user * sys * (glob)
+  $ summary
+  ============ graph ==============
+  @  changeset:   0:b4952fcf48cf
+     tag:         tip
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ hidden =============
+  @  changeset:   0:b4952fcf48cf
+     tag:         tip
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ obsmark ============
+
+Try to drop a changeset with children
+================================================
+
+  $ mkcommit parent
+  $ mkcommit child
+  $ summary
+  ============ graph ==============
+  @  changeset:   2:34b6c051bf1f
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add child
+  |
+  o  changeset:   1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ hidden =============
+  @  changeset:   2:34b6c051bf1f
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add child
+  |
+  o  changeset:   1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ obsmark ============
+  $ hg drop 1
+  cannot drop revision with children (no-eol)
+  [1]
+  $ summary
+  ============ graph ==============
+  @  changeset:   2:34b6c051bf1f
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add child
+  |
+  o  changeset:   1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ hidden =============
+  @  changeset:   2:34b6c051bf1f
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add child
+  |
+  o  changeset:   1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ obsmark ============
+
+Try to drop a public changeset
+================================================
+
+  $ hg phase --public 2
+  $ hg drop 2
+  cannot drop public revision (no-eol)
+  [1]
+
+
+Try to drop a changeset with rewrite
+================================================
+
+  $ hg phase --force --draft 2
+  $ echo babar >> child
+  $ hg commit --amend
+  $ summary
+  ============ graph ==============
+  @  changeset:   4:a2c06c884bfe
+  |  tag:         tip
+  |  parent:      1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add child
+  |
+  o  changeset:   1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ hidden =============
+  @  changeset:   4:a2c06c884bfe
+  |  tag:         tip
+  |  parent:      1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add child
+  |
+  | x  changeset:   3:87ea30a976fd
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     temporary amend commit for 34b6c051bf1f
+  | |
+  | x  changeset:   2:34b6c051bf1f
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     add child
+  |
+  o  changeset:   1:19509a42b0d0
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ obsmark ============
+  34b6c051bf1f78db6aef400776de5cb964470207 a2c06c884bfe53d3840026248bd8a7eafa152df8 0 {'date': '* *', 'user': 'test'} (glob)
+  87ea30a976fdf235bf096f04899cb02a903873e2 0 {'date': '* *', 'user': 'test'} (glob)
+  $ hg drop .
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory now at 19509a42b0d0
+  search obsmarker: wall * comb * user * sys * (glob)
+  1 obsmarkers found
+  search nodes: wall * comb * user * sys * (glob)
+  2 nodes found
+  strip obsmarker: wall * comb * user * sys * (glob)
+  saved backup bundle to $TESTTMP/repo/.hg/strip-backup/a2c06c884bfe-drophack.hg (glob)
+  strip nodes: wall * comb * user * sys * (glob)
+  $ summary
+  ============ graph ==============
+  @  changeset:   1:19509a42b0d0
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ hidden =============
+  @  changeset:   1:19509a42b0d0
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add parent
+  |
+  o  changeset:   0:b4952fcf48cf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add base
+  
+  ============ obsmark ============
+  87ea30a976fdf235bf096f04899cb02a903873e2 0 {'date': '* *', 'user': 'test'} (glob)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,647 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [web]
+  > push_ssl = false
+  > allow_push = *
+  > [phases]
+  > publish = False
+  > [alias]
+  > qlog = log --template='{rev} - {node|short} {desc} ({phase})\n'
+  > [diff]
+  > git = 1
+  > unified = 0
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+  $ mkcommit() {
+  >    echo "$1" > "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+
+  $ glog() {
+  >   hg glog --template '{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n' "$@"
+  > }
+
+various init
+
+  $ hg init local
+  $ cd local
+  $ mkcommit a
+  $ mkcommit b
+  $ cat >> .hg/hgrc << EOF
+  > [phases]
+  > publish = True
+  > EOF
+  $ hg pull -q . # make 1 public
+  $ rm .hg/hgrc
+  $ mkcommit c
+  $ mkcommit d
+  $ hg up 1
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ mkcommit e -q
+  created new head
+  $ mkcommit f
+  $ hg qlog
+  5 - e44648563c73 add f (draft)
+  4 - fbb94e3a0ecf add e (draft)
+  3 - 47d2a3944de8 add d (draft)
+  2 - 4538525df7e2 add c (draft)
+  1 - 7c3bad9141dc add b (public)
+  0 - 1f0dee641bb7 add a (public)
+
+test kill and immutable changeset
+
+  $ hg log -r 1 --template '{rev} {phase} {obsolete}\n'
+  1 public stable
+  $ hg kill 1
+  abort: cannot prune immutable changeset: 7c3bad9141dc
+  (see "hg help phases" for details)
+  [255]
+  $ hg log -r 1 --template '{rev} {phase} {obsolete}\n'
+  1 public stable
+
+test simple kill
+
+  $ hg id -n
+  5
+  $ hg kill .
+  1 changesets pruned
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory now at fbb94e3a0ecf
+  $ hg qlog
+  4 - fbb94e3a0ecf add e (draft)
+  3 - 47d2a3944de8 add d (draft)
+  2 - 4538525df7e2 add c (draft)
+  1 - 7c3bad9141dc add b (public)
+  0 - 1f0dee641bb7 add a (public)
+
+test multiple kill
+
+  $ hg kill 4 -r 3
+  2 changesets pruned
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory now at 7c3bad9141dc
+  $ hg qlog
+  2 - 4538525df7e2 add c (draft)
+  1 - 7c3bad9141dc add b (public)
+  0 - 1f0dee641bb7 add a (public)
+
+test kill with dirty changes
+
+  $ hg up 2
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo 4 > g
+  $ hg add g
+  $ hg kill .
+  1 changesets pruned
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory now at 7c3bad9141dc
+  $ hg st
+  A g
+  $ cd ..
+
+##########################
+importing Parren test
+##########################
+
+  $ cat << EOF >> $HGRCPATH
+  > [ui]
+  > logtemplate = "{rev}\t{bookmarks}: {desc|firstline} - {author|user}\n"
+  > EOF
+
+Creating And Updating Changeset
+===============================
+
+Setup the Base Repo
+-------------------
+
+We start with a plain base repo::
+
+  $ hg init main; cd main
+  $ cat >main-file-1 <<-EOF
+  > One
+  > 
+  > Two
+  > 
+  > Three
+  > EOF
+  $ echo Two >main-file-2
+  $ hg add
+  adding main-file-1
+  adding main-file-2
+  $ hg commit --message base
+  $ cd ..
+
+and clone this into a new repo where we do our work::
+
+  $ hg clone main work
+  updating to branch default
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cd work
+
+
+Create First Patch
+------------------
+
+To begin with, we just do the changes that will be the initial version of the changeset::
+
+  $ echo One >file-from-A
+  $ sed -i'' -e s/One/Eins/ main-file-1
+  $ hg add file-from-A
+
+So this is what we would like our changeset to be::
+
+  $ hg diff
+  diff --git a/file-from-A b/file-from-A
+  new file mode 100644
+  --- /dev/null
+  +++ b/file-from-A
+  @@ -0,0 +1,1 @@
+  +One
+  diff --git a/main-file-1 b/main-file-1
+  --- a/main-file-1
+  +++ b/main-file-1
+  @@ -1,1 +1,1 @@
+  -One
+  +Eins
+
+To commit it we just - commit it::
+
+  $ hg commit --message "a nifty feature"
+
+and place a bookmark so we can easily refer to it again (which we could have done before the commit)::
+
+  $ hg book feature-A
+
+
+Create Second Patch
+-------------------
+
+Let's do this again for the second changeset::
+
+  $ echo Two >file-from-B
+  $ sed -i'' -e s/Two/Zwie/ main-file-1
+  $ hg add file-from-B
+
+Before committing, however, we need to switch to a new bookmark for the second
+changeset. Otherwise we would inadvertently move the bookmark for our first changeset.
+It is therefore advisable to always set the bookmark before committing::
+
+  $ hg book feature-B
+  $ hg commit --message "another feature"
+
+So here we are::
+
+  $ hg book
+     feature-A                 1:568a468b60fc
+   * feature-B                 2:7b36850622b2
+
+
+Fix The Second Patch
+--------------------
+
+There's a typo in feature-B. We spelled *Zwie* instead of *Zwei*::
+
+  $ hg diff --change tip | grep -F Zwie
+  +Zwie
+
+Fixing this is very easy. Just change::
+
+  $ sed -i'' -e s/Zwie/Zwei/ main-file-1
+
+and **amend**::
+
+  $ hg amend
+
+This results in a new single changeset for our amended changeset, and the old
+changeset plus the updating changeset are hidden from view by default::
+
+  $ hg log
+  4	feature-B: another feature - test
+  1	feature-A: a nifty feature - test
+  0	: base - test
+
+  $ hg up feature-A -q
+  $ hg bookmark -i feature-A
+  $ sed -i'' -e s/Eins/Un/ main-file-1
+
+(amend of public changeset denied)
+
+  $ hg phase --public 0 -v
+  phase changed for 1 changesets
+
+
+(amend of on ancestors)
+
+  $ hg amend
+  1 new unstable changesets
+  $ hg log
+  6	feature-A: a nifty feature - test
+  4	feature-B: another feature - test
+  1	: a nifty feature - test
+  0	: base - test
+  $ hg up -q 0
+  $ glog --hidden
+  o  6:ba0ec09b1bab@default(draft) a nifty feature
+  |
+  | x  5:c296b79833d1@default(draft) temporary amend commit for 568a468b60fc
+  | |
+  | | o  4:207cbc4ea7fe@default(draft) another feature
+  | |/
+  | | x  3:5bb880fc0f12@default(draft) temporary amend commit for 7b36850622b2
+  | | |
+  | | x  2:7b36850622b2@default(draft) another feature
+  | |/
+  | x  1:568a468b60fc@default(draft) a nifty feature
+  |/
+  @  0:e55e0562ee93@default(public) base
+  
+  $ hg debugobsolete
+  7b36850622b2fd159fa30a4fb2a1edd2043b4a14 207cbc4ea7fee30d18b3a25f534fe5db22c6071b 0 {'date': '* *', 'user': 'test'} (glob)
+  5bb880fc0f12dd61eee6de36f62b93fdbc3684b0 0 {'date': '* *', 'user': 'test'} (glob)
+  568a468b60fc99a42d5d4ddbe181caff1eef308d ba0ec09b1babf3489b567853807f452edd46704f 0 {'date': '* *', 'user': 'test'} (glob)
+  c296b79833d1d497f33144786174bf35e04e44a3 0 {'date': '* *', 'user': 'test'} (glob)
+  $ hg evolve
+  move:[4] another feature
+  atop:[6] a nifty feature
+  merging main-file-1
+  $ hg log
+  7	feature-B: another feature - test
+  6	feature-A: a nifty feature - test
+  0	: base - test
+
+Test commit -o options
+
+  $ hg up 6
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg revert -r 7 --all
+  adding file-from-B
+  reverting main-file-1
+  $ sed -i'' -e s/Zwei/deux/ main-file-1
+  $ hg commit -m 'another feature that rox' -o 7
+  created new head
+  $ hg log
+  8	feature-B: another feature that rox - test
+  6	feature-A: a nifty feature - test
+  0	: base - test
+
+phase change turning obsolete changeset public issue a bumped warning
+
+  $ hg phase --hidden --public 7
+  1 new bumped changesets
+
+all solving bumped troubled
+
+  $ hg glog
+  @  8	feature-B: another feature that rox - test
+  |
+  | o  7	: another feature - test
+  |/
+  o  6	feature-A: a nifty feature - test
+  |
+  o  0	: base - test
+  
+  $ hg evolve --any --traceback
+  recreate:[8] another feature that rox
+  atop:[7] another feature
+  computing new diff
+  commited as ca3b75e3e59b
+  $ hg glog
+  @  9	feature-B: bumped update to abe98aeaaa35: - test
+  |
+  o  7	: another feature - test
+  |
+  o  6	feature-A: a nifty feature - test
+  |
+  o  0	: base - test
+  
+  $ hg diff --hidden -r 9 -r 8
+  $ hg diff -r 9^ -r 9
+  diff --git a/main-file-1 b/main-file-1
+  --- a/main-file-1
+  +++ b/main-file-1
+  @@ -3,1 +3,1 @@
+  -Zwei
+  +deux
+  $ hg log -r 'bumped()' # no more bumped
+
+test evolve --all
+  $ sed -i'' -e s/deux/to/ main-file-1
+  $ hg commit -m 'dansk 2!'
+  $ sed -i'' -e s/Three/tre/ main-file-1
+  $ hg commit -m 'dansk 3!'
+  $ hg update 9
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ sed -i'' -e s/Un/Én/ main-file-1
+  $ hg commit --amend -m 'dansk!'
+  2 new unstable changesets
+
+  $ hg evolve --all --traceback
+  move:[10] dansk 2!
+  atop:[13] dansk!
+  merging main-file-1
+  move:[11] dansk 3!
+  atop:[14] dansk 2!
+  merging main-file-1
+  $ hg glog
+  @  15	: dansk 3! - test
+  |
+  o  14	: dansk 2! - test
+  |
+  o  13	feature-B: dansk! - test
+  |
+  o  7	: another feature - test
+  |
+  o  6	feature-A: a nifty feature - test
+  |
+  o  0	: base - test
+  
+
+  $ cd ..
+
+enable general delta
+
+  $ cat << EOF >> $HGRCPATH
+  > [format]
+  > generaldelta=1
+  > EOF
+
+
+
+  $ hg init alpha
+  $ cd alpha
+  $ echo 'base' > firstfile
+  $ hg add firstfile
+  $ hg ci -m 'base'
+
+  $ cd ..
+  $ hg clone -Ur 0 alpha beta
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  $ cd alpha
+
+  $ cat << EOF > A
+  > We
+  > need
+  > some
+  > kind
+  > of 
+  > file
+  > big
+  > enough
+  > to
+  > prevent
+  > snapshot
+  > .
+  > yes
+  > new
+  > lines
+  > are
+  > useless
+  > .
+  > EOF
+  $ hg add A
+  $ hg commit -m 'adding A'
+  $ hg mv A B
+  $ echo '.' >> B
+  $ hg amend -m 'add B'
+  $ hg verify
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  3 files, 4 changesets, 4 total revisions
+  $ hg --config extensions.hgext.mq= strip 'extinct()'
+  abort: empty revision set
+  [255]
+  $ hg --config extensions.hgext.mq= strip --hidden 'extinct()'
+  saved backup bundle to $TESTTMP/alpha/.hg/strip-backup/e87767087a57-backup.hg
+  $ hg verify
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  2 files, 2 changesets, 2 total revisions
+  $ cd ..
+
+Clone just this branch
+
+  $ cd beta
+  $ hg pull -r tip ../alpha
+  pulling from ../alpha
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+  $ hg up
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ cd ..
+
+Test graft --obsolete/--old-obsolete
+
+  $ hg init test-graft
+  $ cd test-graft
+  $ mkcommit 0
+  $ mkcommit 1
+  $ mkcommit 2
+  $ mkcommit 3
+  $ hg up -qC 0
+  $ mkcommit 4
+  created new head
+  $ glog --hidden
+  @  4:ce341209337f@default(draft) add 4
+  |
+  | o  3:0e84df4912da@default(draft) add 3
+  | |
+  | o  2:db038628b9e5@default(draft) add 2
+  | |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg graft -r3 -O
+  grafting revision 3
+  $ hg graft -r1 -o 2
+  grafting revision 1
+  $ glog --hidden
+  @  6:acb28cd497b7@default(draft) add 1
+  |
+  o  5:0b9e50c35132@default(draft) add 3
+  |
+  o  4:ce341209337f@default(draft) add 4
+  |
+  | x  3:0e84df4912da@default(draft) add 3
+  | |
+  | x  2:db038628b9e5@default(draft) add 2
+  | |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg debugobsolete
+  0e84df4912da4c7cad22a3b4fcfd58ddfb7c8ae9 0b9e50c35132ff548ec0065caea6a87e1ebcef32 0 {'date': '* *', 'user': 'test'} (glob)
+  db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 {'date': '* *', 'user': 'test'} (glob)
+
+Test graft --continue
+
+  $ hg up -qC 0
+  $ echo 2 > 1
+  $ hg ci -Am conflict 1
+  created new head
+  $ hg up -qC 6
+  $ hg graft -O 7
+  grafting revision 7
+  merging 1
+  warning: conflicts during merge.
+  merging 1 incomplete! (edit conflicts, then use 'hg resolve --mark')
+  abort: unresolved conflicts, can't continue
+  (use hg resolve and hg graft --continue)
+  [255]
+  $ hg log -r7 --template '{rev}:{node|short} {obsolete}\n'
+  7:a5bfd90a2f29 stable
+  $ echo 3 > 1
+  $ hg resolve -m 1
+  $ hg graft --continue -O
+  grafting revision 7
+  $ glog --hidden
+  @  8:920e58bb443b@default(draft) conflict
+  |
+  | x  7:a5bfd90a2f29@default(draft) conflict
+  | |
+  o |  6:acb28cd497b7@default(draft) add 1
+  | |
+  o |  5:0b9e50c35132@default(draft) add 3
+  | |
+  o |  4:ce341209337f@default(draft) add 4
+  |/
+  | x  3:0e84df4912da@default(draft) add 3
+  | |
+  | x  2:db038628b9e5@default(draft) add 2
+  | |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg debugobsolete
+  0e84df4912da4c7cad22a3b4fcfd58ddfb7c8ae9 0b9e50c35132ff548ec0065caea6a87e1ebcef32 0 {'date': '* *', 'user': 'test'} (glob)
+  db038628b9e56f51a454c0da0c508df247b41748 acb28cd497b7f8767e01ef70f68697a959573c2d 0 {'date': '* *', 'user': 'test'} (glob)
+  a5bfd90a2f29c7ccb8f917ff4e5013a9053d0a04 920e58bb443b73eea9d6d65570b4241051ea3229 0 {'date': '* *', 'user': 'test'} (glob)
+
+Test touch
+
+  $ glog
+  @  8:920e58bb443b@default(draft) conflict
+  |
+  o  6:acb28cd497b7@default(draft) add 1
+  |
+  o  5:0b9e50c35132@default(draft) add 3
+  |
+  o  4:ce341209337f@default(draft) add 4
+  |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg touch
+  $ glog
+  @  9:*@default(draft) conflict (glob)
+  |
+  o  6:acb28cd497b7@default(draft) add 1
+  |
+  o  5:0b9e50c35132@default(draft) add 3
+  |
+  o  4:ce341209337f@default(draft) add 4
+  |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg touch .
+  $ glog
+  @  10:*@default(draft) conflict (glob)
+  |
+  o  6:acb28cd497b7@default(draft) add 1
+  |
+  o  5:0b9e50c35132@default(draft) add 3
+  |
+  o  4:ce341209337f@default(draft) add 4
+  |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+
+Test fold
+
+  $ rm *.orig
+  $ hg fold
+  no revision to fold
+  [1]
+  $ hg fold 6 --rev 10
+  abort: cannot specify both --rev and a target revision
+  [255]
+  $ hg fold 6 # want to run hg fold 6
+  2 changesets folded
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ glog
+  @  11:*@default(draft) add 1 (glob)
+  |
+  o  5:0b9e50c35132@default(draft) add 3
+  |
+  o  4:ce341209337f@default(draft) add 4
+  |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg log -r 11 --template '{desc}\n'
+  add 1
+  
+  
+  conflict
+  $ hg debugrebuildstate
+  $ hg st
+
+Test fold with wc parent is not the head of the folded revision
+
+  $ hg up 4
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ hg fold --rev 4::11
+  3 changesets folded
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ glog
+  @  12:*@default(draft) add 4 (glob)
+  |
+  | o  1:73d38bb17fd7@default(draft) add 1
+  |/
+  o  0:8685c6d34325@default(draft) add 0
+  
+  $ hg log -r 12 --template '{desc}\n'
+  add 4
+  
+  
+  add 3
+  
+  
+  add 1
+  
+  
+  conflict
+  $ hg debugrebuildstate
+  $ hg st
+
+Test olog
+
+  $ hg olog
+  4	: add 4 - test
+  5	: add 3 - test
+  11	: add 1 - test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-obsolete-push.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,47 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ template='{rev}:{node|short}@{branch}({obsolete}/{phase}) {desc|firstline}\n'
+  $ glog() {
+  >   hg glog --template "$template" "$@"
+  > }
+
+Test outgoing, common A is suspended, B unstable and C secret, remote
+has A and B, neither A or C should be in outgoing.
+
+  $ hg init source
+  $ cd source
+  $ echo a > a
+  $ hg ci -qAm A a
+  $ echo b > b
+  $ hg ci -qAm B b
+  $ hg up 0
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo c > c
+  $ hg ci -qAm C c
+  $ hg phase --secret --force .
+  $ hg kill 0 1
+  2 changesets pruned
+  1 new unstable changesets
+  $ glog --hidden
+  @  2:244232c2222a@default(unstable/secret) C
+  |
+  | x  1:6c81ed0049f8@default(extinct/draft) B
+  |/
+  x  0:1994f17a630e@default(suspended/draft) A
+  
+  $ hg init ../clone
+  $ cat >  ../clone/.hg/hgrc <<EOF
+  > [phases]
+  > publish = false
+  > EOF
+  $ hg outgoing ../clone --template "$template"
+  comparing with ../clone
+  searching for changes
+  0:1994f17a630e@default(suspended/draft) A
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-obsolete.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,689 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [web]
+  > push_ssl = false
+  > allow_push = *
+  > [phases]
+  > publish=False
+  > [extensions]
+  > hgext.rebase=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+  $ mkcommit() {
+  >    echo "$1" > "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+  $ getid() {
+  >    hg id --hidden --debug -ir "$1"
+  > }
+
+  $ alias qlog="hg log --template='{rev}\n- {node|short}\n'"
+  $ hg init local
+  $ cd local
+  $ mkcommit a # 0
+  $ hg phase -p .
+  $ mkcommit b # 1
+  $ mkcommit c # 2
+  $ hg up 1
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkcommit obsol_c # 3
+  created new head
+  $ getid 2
+  4538525df7e2b9f09423636c61ef63a4cb872a2d
+  $ getid 3
+  0d3f46688ccc6e756c7e96cf64c391c411309597
+  $ hg debugobsolete 4538525df7e2b9f09423636c61ef63a4cb872a2d 0d3f46688ccc6e756c7e96cf64c391c411309597
+  $ hg debugobsolete
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0d3f46688ccc6e756c7e96cf64c391c411309597 0 {'date': '', 'user': 'test'} (glob)
+
+
+Test hidden() revset
+
+  $ qlog -r 'hidden()' --hidden
+  2
+  - 4538525df7e2
+
+Test that obsolete changeset are hidden
+
+  $ qlog
+  3
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ qlog --hidden
+  3
+  - 0d3f46688ccc
+  2
+  - 4538525df7e2
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ qlog -r 'obsolete()' --hidden
+  2
+  - 4538525df7e2
+
+Test that obsolete parent a properly computed
+
+  $ qlog -r 'precursors(.)' --hidden
+  2
+  - 4538525df7e2
+  $ qlog -r .
+  3
+  - 0d3f46688ccc
+  $ hg odiff
+  diff -r 4538525df7e2 -r 0d3f46688ccc c
+  --- a/c	Thu Jan 01 00:00:00 1970 +0000
+  +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,1 +0,0 @@
+  -c
+  diff -r 4538525df7e2 -r 0d3f46688ccc obsol_c
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/obsol_c	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,1 @@
+  +obsol_c
+
+Test that obsolete successors a properly computed
+
+  $ qlog -r 'successors(2)' --hidden
+  3
+  - 0d3f46688ccc
+
+test obsolete changeset with no-obsolete descendant
+  $ hg up 1 -q
+  $ mkcommit "obsol_c'" # 4 (on 1)
+  created new head
+  $ hg debugobsolete `getid 3` `getid 4`
+  $ qlog
+  4
+  - 725c380fe99b
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ qlog -r 'obsolete()' --hidden
+  2
+  - 4538525df7e2
+  3
+  - 0d3f46688ccc
+  $ qlog -r 'allprecursors(4)' --hidden
+  2
+  - 4538525df7e2
+  3
+  - 0d3f46688ccc
+  $ qlog -r 'allsuccessors(2)' --hidden
+  3
+  - 0d3f46688ccc
+  4
+  - 725c380fe99b
+  $ hg up --hidden 3 -q
+  working directory parent is obsolete!
+(reported by parents too)
+  $ hg parents
+  changeset:   3:0d3f46688ccc
+  parent:      1:7c3bad9141dc
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     add obsol_c
+  
+  working directory parent is obsolete!
+  $ mkcommit d # 5 (on 3)
+  1 new unstable changesets
+  $ qlog -r 'obsolete()'
+  3
+  - 0d3f46688ccc
+
+  $ qlog -r 'extinct()' --hidden
+  2
+  - 4538525df7e2
+  $ qlog -r 'suspended()'
+  3
+  - 0d3f46688ccc
+  $ qlog -r 'unstable()'
+  5
+  - a7a6f2b5d8a5
+
+Test obsolete keyword
+
+  $ hg log -G --template '{rev}:{node|short}@{branch}({obsolete}/{phase}) {desc|firstline}\n' \
+  >   --hidden
+  @  5:a7a6f2b5d8a5@default(unstable/draft) add d
+  |
+  | o  4:725c380fe99b@default(stable/draft) add obsol_c'
+  | |
+  x |  3:0d3f46688ccc@default(suspended/draft) add obsol_c
+  |/
+  | x  2:4538525df7e2@default(extinct/draft) add c
+  |/
+  o  1:7c3bad9141dc@default(stable/draft) add b
+  |
+  o  0:1f0dee641bb7@default(stable/public) add a
+  
+
+Test communication of obsolete relation with a compatible client
+
+  $ hg init ../other-new
+  $ hg phase --draft 'secret() - extinct()' # until we fix exclusion
+  abort: empty revision set
+  [255]
+  $ hg push ../other-new
+  pushing to ../other-new
+  searching for changes
+  abort: push includes unstable changeset: a7a6f2b5d8a5!
+  (use 'hg evolve' to get a stable history or --force to ignore warnings)
+  [255]
+  $ hg push -f ../other-new
+  pushing to ../other-new
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 5 changesets with 5 changes to 5 files (+1 heads)
+  $ hg -R ../other-new verify
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  5 files, 5 changesets, 5 total revisions
+  $ qlog -R ../other-new -r 'obsolete()'
+  2
+  - 0d3f46688ccc
+  $ qlog -R ../other-new
+  4
+  - a7a6f2b5d8a5
+  3
+  - 725c380fe99b
+  2
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ hg up --hidden 3 -q
+  working directory parent is obsolete!
+  $ mkcommit obsol_d # 6
+  created new head
+  1 new unstable changesets
+  $ hg debugobsolete `getid 5` `getid 6`
+  $ qlog
+  6
+  - 95de7fc6918d
+  4
+  - 725c380fe99b
+  3
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ qlog -r 'obsolete()'
+  3
+  - 0d3f46688ccc
+  $ hg push ../other-new
+  pushing to ../other-new
+  searching for changes
+  abort: push includes unstable changeset: 95de7fc6918d!
+  (use 'hg evolve' to get a stable history or --force to ignore warnings)
+  [255]
+  $ hg push ../other-new -f # use f because there is unstability
+  pushing to ../other-new
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  $ qlog -R ../other-new
+  5
+  - 95de7fc6918d
+  3
+  - 725c380fe99b
+  2
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ qlog -R ../other-new -r 'obsolete()'
+  2
+  - 0d3f46688ccc
+
+Pushing again does not advertise extinct changeset
+
+  $ hg push ../other-new
+  pushing to ../other-new
+  searching for changes
+  no changes found
+  [1]
+
+  $ hg up --hidden -q .^ # 3
+  working directory parent is obsolete!
+  $ mkcommit "obsol_d'" # 7
+  created new head
+  1 new unstable changesets
+  $ hg debugobsolete `getid 6` `getid 7`
+  $ hg pull -R ../other-new .
+  pulling from .
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
+  \(run 'hg heads( \.)?' to see heads, 'hg merge' to merge\) (re)
+  $ qlog -R ../other-new
+  6
+  - 909a0fb57e5d
+  3
+  - 725c380fe99b
+  2
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+
+pushing to stuff that doesn't support obsolete
+
+DISABLED. the _enable switch it global :-/
+
+..  $ hg init ../other-old
+..  > # XXX I don't like this but changeset get published otherwise
+..  > # remove it when we will get a --keep-state flag for push
+..  $ echo '[extensions]'  > ../other-old/.hg/hgrc
+..  $ echo "obsolete=!$(echo $(dirname $TESTDIR))/obsolete.py" >> ../other-old/.hg/hgrc
+..  $ hg push ../other-old
+..  pushing to ../other-old
+..  searching for changes
+..  abort: push includes an unstable changeset: 909a0fb57e5d!
+..  (use 'hg evolve' to get a stable history or --force to ignore warnings)
+..  [255]
+..  $ hg push -f ../other-old
+..  pushing to ../other-old
+..  searching for changes
+..  adding changesets
+..  adding manifests
+..  adding file changes
+..  added 5 changesets with 5 changes to 5 files (+1 heads)
+..  $ qlog -R ../other-ol
+..  4
+..  - 909a0fb57e5d
+..  3
+..  - 725c380fe99b
+..  2
+..  - 0d3f46688ccc
+..  1
+..  - 7c3bad9141dc
+..  0
+..  - 1f0dee641bb7
+
+clone support
+
+  $ hg clone . ../cloned
+  > # The warning should go away once we have default value to set ready before we pull
+  updating to branch default
+  4 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ qlog -R ../cloned --hidden
+  7
+  - 909a0fb57e5d
+  6
+  - 95de7fc6918d
+  5
+  - a7a6f2b5d8a5
+  4
+  - 725c380fe99b
+  3
+  - 0d3f46688ccc
+  2
+  - 4538525df7e2
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+
+Test rollback support
+
+  $ hg up --hidden .^ -q # 3
+  working directory parent is obsolete!
+  $ mkcommit "obsol_d''"
+  created new head
+  1 new unstable changesets
+  $ hg debugobsolete `getid 7` `getid 8`
+  $ cd ../other-new
+  $ hg up -q 3
+  $ hg pull ../local/
+  pulling from ../local/
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
+  \(run 'hg heads( \.)?' to see heads, 'hg merge' to merge\) (re)
+
+  $ hg up -q 7 # to check rollback update behavior
+  $ qlog
+  7
+  - 159dfc9fa5d3
+  3
+  - 725c380fe99b
+  2
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ hg rollback
+  repository tip rolled back to revision 6 (undo pull)
+  working directory now based on revision 3
+  $ hg summary
+  parent: 3:725c380fe99b 
+   add obsol_c'
+  branch: default
+  commit: 1 deleted, 2 unknown (clean)
+  update: 2 new changesets, 2 branch heads (merge)
+  unstable: 1 changesets
+  $ qlog
+  6
+  - 909a0fb57e5d
+  3
+  - 725c380fe99b
+  2
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+  $ cd ../local
+
+obsolete public changeset
+
+# move draft boundary from 0 to 1
+  $ sed -e 's/1f0dee641bb7258c56bd60e93edfa2405381c41e/7c3bad9141dcb46ff89abf5f61856facd56e476c/' -i'.back' .hg/store/phaseroots
+
+  $ hg up null
+  0 files updated, 0 files merged, 4 files removed, 0 files unresolved
+  $ mkcommit toto # 9
+  created new head
+  $ hg id -n
+  9
+  $ hg debugobsolete `getid 0` `getid 9`
+83b5778897ad try to obsolete immutable changeset 1f0dee641bb7
+# at core level the warning is not issued
+# this is now a big issue now that we have bumped warning
+  $ qlog -r 'obsolete()'
+  3
+  - 0d3f46688ccc
+allow to just kill changeset
+
+  $ qlog
+  9
+  - 83b5778897ad
+  8
+  - 159dfc9fa5d3
+  4
+  - 725c380fe99b
+  3
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+
+  $ hg debugobsolete `getid 9` #kill
+  $ hg up null -q # to be not based on 9 anymore
+  $ qlog
+  8
+  - 159dfc9fa5d3
+  4
+  - 725c380fe99b
+  3
+  - 0d3f46688ccc
+  1
+  - 7c3bad9141dc
+  0
+  - 1f0dee641bb7
+
+Check that auto update ignore hidden changeset
+  $ hg up 0
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg up 
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg id -n
+  8
+
+Check that named update do too
+
+  $ hg update default
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg id -n
+  8
+
+  $ hg up null -q # to be not based on 9 anymore
+
+check rebase compat
+
+  $ hg log -G  --template='{rev} - {node|short} {desc}\n'
+  o  8 - 159dfc9fa5d3 add obsol_d''
+  |
+  | o  4 - 725c380fe99b add obsol_c'
+  | |
+  x |  3 - 0d3f46688ccc add obsol_c
+  |/
+  o  1 - 7c3bad9141dc add b
+  |
+  o  0 - 1f0dee641bb7 add a
+  
+
+  $ hg log -G  --template='{rev} - {node|short}\n' --hidden
+  x  9 - 83b5778897ad
+  
+  o  8 - 159dfc9fa5d3
+  |
+  | x  7 - 909a0fb57e5d
+  |/
+  | x  6 - 95de7fc6918d
+  |/
+  | x  5 - a7a6f2b5d8a5
+  |/
+  | o  4 - 725c380fe99b
+  | |
+  x |  3 - 0d3f46688ccc
+  |/
+  | x  2 - 4538525df7e2
+  |/
+  o  1 - 7c3bad9141dc
+  |
+  o  0 - 1f0dee641bb7
+  
+
+should not rebase extinct changeset
+
+#excluded 'whole rebase set is extinct and ignored.' message not in core
+  $ hg rebase -b '3' -d 4 --traceback
+  2 new divergent changesets
+  $ hg up tip
+  ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
+  $ hg log -G --template='{rev} - {node|short} {desc}\n'
+  @  11 - 9468a5f5d8b2 add obsol_d''
+  |
+  o  10 - 2033b4e49474 add obsol_c
+  |
+  o  4 - 725c380fe99b add obsol_c'
+  |
+  o  1 - 7c3bad9141dc add b
+  |
+  o  0 - 1f0dee641bb7 add a
+  
+
+Does not complain about new head if you obsolete the old one
+(re necesarry when we start runnind discovery on unfiltered repo in core)
+
+  $ hg push ../other-new --traceback
+  pushing to ../other-new
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 1 changes to [12] files (re)
+  $ hg up -q 10
+  $ mkcommit "obsol_d'''"
+  created new head
+  $ hg debugobsolete `getid 11` `getid 12`
+  $ hg push ../other-new --traceback
+  pushing to ../other-new
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  $ cd ..
+
+check bumped detection
+(make an obsolete changeset public)
+
+  $ cd local
+  $ hg phase --hidden --public 11
+  1 new bumped changesets
+  $ hg log -G --template='{rev} - ({phase}) {node|short} {desc}\n'
+  @  12 - (draft) 6db5e282cb91 add obsol_d'''
+  |
+  | o  11 - (public) 9468a5f5d8b2 add obsol_d''
+  |/
+  o  10 - (public) 2033b4e49474 add obsol_c
+  |
+  o  4 - (public) 725c380fe99b add obsol_c'
+  |
+  o  1 - (public) 7c3bad9141dc add b
+  |
+  o  0 - (public) 1f0dee641bb7 add a
+  
+  $ hg log -r 'bumped()'
+  changeset:   12:6db5e282cb91
+  tag:         tip
+  parent:      10:2033b4e49474
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     add obsol_d'''
+  
+  $ hg push ../other-new/
+  pushing to ../other-new/
+  searching for changes
+  abort: push includes bumped changeset: 6db5e282cb91!
+  (use 'hg evolve' to get a stable history or --force to ignore warnings)
+  [255]
+
+Check hg commit --amend compat
+
+  $ hg up 'desc(obsol_c)'
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkcommit f
+  created new head
+  $ echo 42 >> f
+  $ hg commit --amend --traceback --quiet
+  $ hg log -G
+  @  changeset:   15:705ab2a6b72e
+  |  tag:         tip
+  |  parent:      10:2033b4e49474
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add f
+  |
+  | o  changeset:   12:6db5e282cb91
+  |/   parent:      10:2033b4e49474
+  |    user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     add obsol_d'''
+  |
+  | o  changeset:   11:9468a5f5d8b2
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     add obsol_d''
+  |
+  o  changeset:   10:2033b4e49474
+  |  parent:      4:725c380fe99b
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add obsol_c
+  |
+  o  changeset:   4:725c380fe99b
+  |  parent:      1:7c3bad9141dc
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add obsol_c'
+  |
+  o  changeset:   1:7c3bad9141dc
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add b
+  |
+  o  changeset:   0:1f0dee641bb7
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add a
+  
+  $ hg debugobsolete | grep -v 33d458d86621f3186c40bfccd77652f4a122743e
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0d3f46688ccc6e756c7e96cf64c391c411309597 0 {'date': '', 'user': 'test'} (glob)
+  0d3f46688ccc6e756c7e96cf64c391c411309597 725c380fe99b5e76613493f0903e8d11ddc70d54 0 {'date': '', 'user': 'test'} (glob)
+  a7a6f2b5d8a54b81bc7aa2fba2934ad6d700a79e 95de7fc6918dea4c9c8d5382f50649794b474c4a 0 {'date': '', 'user': 'test'} (glob)
+  95de7fc6918dea4c9c8d5382f50649794b474c4a 909a0fb57e5d909f353d89e394ffd7e0890fec88 0 {'date': '', 'user': 'test'} (glob)
+  909a0fb57e5d909f353d89e394ffd7e0890fec88 159dfc9fa5d334d7e03a0aecfc7f7ab4c3431fea 0 {'date': '', 'user': 'test'} (glob)
+  1f0dee641bb7258c56bd60e93edfa2405381c41e 83b5778897adafb967ef2f75be3aaa4fce49a4cc 0 {'date': '', 'user': 'test'} (glob)
+  83b5778897adafb967ef2f75be3aaa4fce49a4cc 0 {'date': '', 'user': 'test'} (glob)
+  0d3f46688ccc6e756c7e96cf64c391c411309597 2033b4e494742365851fac84d276640cbf52833e 0 {'date': '* *', 'user': 'test'} (glob)
+  159dfc9fa5d334d7e03a0aecfc7f7ab4c3431fea 9468a5f5d8b2c5d91e17474e95ae4791e9718fdf 0 {'date': '* *', 'user': 'test'} (glob)
+  9468a5f5d8b2c5d91e17474e95ae4791e9718fdf 6db5e282cb91df5c43ff1f1287c119ff83230d42 0 {'date': '', 'user': 'test'} (glob)
+  0b1b6dd009c037985363e2290a0b579819f659db 705ab2a6b72e2cd86edb799ebe15f2695f86143e 0 {'date': '* *', 'user': 'test'} (glob)
+#no produced by 2.3
+33d458d86621f3186c40bfccd77652f4a122743e 3734a65252e69ddcced85901647a4f335d40de1e 0 {'date': '* *', 'user': 'test'} (glob)
+
+Check conflict detection
+
+  $ hg up 9468a5f5d8b2 #  add obsol_d''
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ mkcommit "obsolet_conflicting_d"
+  $ hg summary
+  parent: 1[46]:50f11e5e3a63 tip (re)
+   add obsolet_conflicting_d
+  branch: default
+  commit: (clean)
+  update: (2|9|11) new changesets, (3|9|10) branch heads \(merge\) (re)
+  bumped: 1 changesets
+  $ hg debugobsolete `getid a7a6f2b5d8a5` `getid 50f11e5e3a63`
+  $ hg log -r 'conflicting()'
+  changeset:   12:6db5e282cb91
+  parent:      10:2033b4e49474
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     add obsol_d'''
+  
+  changeset:   16:50f11e5e3a63
+  tag:         tip
+  parent:      11:9468a5f5d8b2
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     add obsolet_conflicting_d
+  
+
+  $ hg up --hidden 3 -q
+  working directory parent is obsolete!
+  $ hg evolve
+  parent is obsolete with multiple successors:
+  [4] add obsol_c'
+  [10] add obsol_c
+  [2]
+  $ hg olog
+  changeset:   2:4538525df7e2
+  user:        test
+  date:        Thu Jan 01 00:00:00 1970 +0000
+  summary:     add c
+  
+
+Check import reports new unstable changeset:
+
+  $ hg up --hidden 2
+  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory parent is obsolete!
+  $ hg export 9468a5f5d8b2 | hg import -
+  applying patch from stdin
+  1 new unstable changesets
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-oldconvert.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,114 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [web]
+  > push_ssl = false
+  > allow_push = *
+  > [phases]
+  > publish=False
+  > [alias]
+  > odiff=diff --rev 'limit(obsparents(.),1)' --rev .
+  > [extensions]
+  > hgext.graphlog=
+  > EOF
+  $ mkcommit() {
+  >    echo "$1" > "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+
+create commit
+
+  $ hg init repo
+  $ cd repo
+  $ mkcommit a
+  $ mkcommit b
+  $ hg up -q 0
+  $ mkcommit c
+  created new head
+
+forge old style relation files
+
+  $ hg log -r 2 --template='{node} ' > .hg/obsolete-relations
+  $ hg log -r 1 --template='{node}' >> .hg/obsolete-relations
+
+enable the extensions
+
+  $ echo "obsolete=$(echo $(dirname $TESTDIR))/hgext/obsolete.py" >> $HGRCPATH
+
+  $ hg glog
+  abort: old format of obsolete marker detected!
+  run `hg debugconvertobsolete` once.
+  [255]
+  $ hg debugconvertobsolete --traceback
+  1 obsolete marker converted
+  $ hg glog
+  @  changeset:   2:d67cd0334eee
+  |  tag:         tip
+  |  parent:      0:1f0dee641bb7
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add c
+  |
+  o  changeset:   0:1f0dee641bb7
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add a
+  
+  $ hg debugobsolete
+  7c3bad9141dcb46ff89abf5f61856facd56e476c d67cd0334eeecfded222fed9009f0db4beb57585 0 {'date': '* *', 'user': 'test'} (glob)
+  $ hg debugconvertobsolete
+  nothing to do
+  0 obsolete marker converted
+
+Convert json
+
+  $ cat > .hg/store/obsoletemarkers << EOF
+  > [
+  >     {
+  >         "reason": "import from older format.", 
+  >         "subjects": [
+  >             "3218406b50ed13480765e7c260669620f37fba6e"
+  >         ], 
+  >         "user": "Pierre-Yves David <pierre-yves.david@ens-lyon.org>", 
+  >         "date": [
+  >             1336503323.9768269, 
+  >             -7200
+  >         ], 
+  >         "object": "3e03d82708d4da97a92158558dd13386d8f09ad5", 
+  >         "id": "4743f676eaf3923cb98c921ee06b2e91052c365b"
+  >     }, 
+  >     {
+  >         "reason": "import from older format.", 
+  >         "user": "Pierre-Yves David <pierre-yves.david@logilab.fr>", 
+  >         "date": [
+  >             1336557472.7875929, 
+  >             -7200
+  >         ], 
+  >         "object": "5c722672795c3a2cb94d0cc9a821c394c1475f87", 
+  >         "id": "1fd90a84b7225d2e3062b7e1b3100aa2e060fc72"
+  >     }, 
+  >     {
+  >         "reason": "import from older format.", 
+  >         "subjects": [
+  >             "0000000000000000000000000000000000000000"
+  >         ], 
+  >         "user": "Pierre-Yves David <pierre-yves.david@logilab.fr>", 
+  >         "date": [
+  >             1336557472.784307, 
+  >             -7200
+  >         ], 
+  >         "object": "2c3784e102bb34ccc93862af5bd6d609ee30c577", 
+  >         "id": "7d940c5ee1f886c8a6c0d805b43e522cb3ef7a15"
+  >     }
+  > ]
+  > EOF
+  $ hg glog
+  abort: old format of obsolete marker detected!
+  run `hg debugconvertobsolete` once.
+  [255]
+  $ hg debugconvertobsolete --traceback
+  3 obsolete marker converted
+  $ hg debugobsolete
+  7c3bad9141dcb46ff89abf5f61856facd56e476c d67cd0334eeecfded222fed9009f0db4beb57585 0 {'date': '* *', 'user': 'test'} (glob)
+  3e03d82708d4da97a92158558dd13386d8f09ad5 3218406b50ed13480765e7c260669620f37fba6e 0 {'date': '* *', 'user': 'Pierre-Yves David <pierre-yves.david@ens-lyon.org>'} (glob)
+  5c722672795c3a2cb94d0cc9a821c394c1475f87 0 {'date': '* *', 'user': 'Pierre-Yves David <pierre-yves.david@logilab.fr>'} (glob)
+  2c3784e102bb34ccc93862af5bd6d609ee30c577 0 {'date': '* *', 'user': 'Pierre-Yves David <pierre-yves.david@logilab.fr>'} (glob)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-prune.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,258 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [ui]
+  > logtemplate={rev}:{node|short}[{bookmarks}] ({obsolete}/{phase}) {desc|firstline}\n
+  > [extensions]
+  > hgext.rebase=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ mkcommit() {
+  >    echo "$1" > "$1"
+  >    hg add "$1"
+  >    hg ci -m "add $1"
+  > }
+
+  $ hg init repo
+  $ cd repo
+  $ mkcommit a
+  $ hg phase --public .
+  $ mkcommit b
+  $ mkcommit c
+  $ mkcommit d
+  $ mkcommit e
+  $ hg bookmarks BABAR
+  $ hg log -G
+  @  4:9d206ffc875e[BABAR] (stable/draft) add e
+  |
+  o  3:47d2a3944de8[] (stable/draft) add d
+  |
+  o  2:4538525df7e2[] (stable/draft) add c
+  |
+  o  1:7c3bad9141dc[] (stable/draft) add b
+  |
+  o  0:1f0dee641bb7[] (stable/public) add a
+  
+
+Check simple case
+----------------------------
+
+prune current and tip changeset
+
+  $ hg prune --user blah --date '1979-12-15' .
+  1 changesets pruned
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory now at 47d2a3944de8
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+
+prune leaving unstability behind
+
+  $ hg prune 1
+  1 changesets pruned
+  2 new unstable changesets
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+
+pruning multiple changeset at once
+
+  $ hg prune 2:
+  2 changesets pruned
+  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  working directory now at 1f0dee641bb7
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+
+cannot prune public changesets
+
+  $ hg prune 0
+  abort: cannot prune immutable changeset: 1f0dee641bb7
+  (see "hg help phases" for details)
+  [255]
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+
+Check successors addition
+----------------------------
+
+  $ mkcommit bb
+  $ mkcommit cc
+  $ mkcommit dd
+  $ mkcommit ee
+  $ hg up 0
+  0 files updated, 0 files merged, 4 files removed, 0 files unresolved
+  $ mkcommit nB
+  created new head
+  $ mkcommit nC
+  $ mkcommit nD
+  $ mkcommit nE
+
+  $ hg log -G
+  @  12:6e8148413dd5[] (stable/draft) add nE
+  |
+  o  11:8ee176ff1d4b[] (stable/draft) add nD
+  |
+  o  10:aa96dc3f04c2[] (stable/draft) add nC
+  |
+  o  9:6f6f25e4f748[] (stable/draft) add nB
+  |
+  | o  8:bb5e90a7ea1f[] (stable/draft) add ee
+  | |
+  | o  7:00ded550b1e2[] (stable/draft) add dd
+  | |
+  | o  6:354011cd103f[] (stable/draft) add cc
+  | |
+  | o  5:814c38b95e72[] (stable/draft) add bb
+  |/
+  o  0:1f0dee641bb7[BABAR] (stable/public) add a
+  
+
+one old, one new
+
+  $ hg prune 'desc("add ee")' -s 'desc("add nE")'
+  1 changesets pruned
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+  bb5e90a7ea1f3b4b38b23150a4a597b6146d70ef 6e8148413dd541855b72a920a90c06fca127c7e7 0 {'date': '*', 'user': 'test'} (glob)
+  $ hg log -G
+  @  12:6e8148413dd5[] (stable/draft) add nE
+  |
+  o  11:8ee176ff1d4b[] (stable/draft) add nD
+  |
+  o  10:aa96dc3f04c2[] (stable/draft) add nC
+  |
+  o  9:6f6f25e4f748[] (stable/draft) add nB
+  |
+  | o  7:00ded550b1e2[] (stable/draft) add dd
+  | |
+  | o  6:354011cd103f[] (stable/draft) add cc
+  | |
+  | o  5:814c38b95e72[] (stable/draft) add bb
+  |/
+  o  0:1f0dee641bb7[BABAR] (stable/public) add a
+  
+
+one old, two new
+
+  $ hg prune 'desc("add dd")' -s 'desc("add nD")' -s 'desc("add nC")'
+  1 changesets pruned
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+  bb5e90a7ea1f3b4b38b23150a4a597b6146d70ef 6e8148413dd541855b72a920a90c06fca127c7e7 0 {'date': '*', 'user': 'test'} (glob)
+  00ded550b1e28bba454bd34cec1269d22cf3ef25 aa96dc3f04c2c2341fe6880aeb6dc9fbffff9ef9 8ee176ff1d4b2034ce51e3efc579c2de346b631d 0 {'date': '**', 'user': 'test'} (glob)
+  $ hg log -G
+  @  12:6e8148413dd5[] (stable/draft) add nE
+  |
+  o  11:8ee176ff1d4b[] (stable/draft) add nD
+  |
+  o  10:aa96dc3f04c2[] (stable/draft) add nC
+  |
+  o  9:6f6f25e4f748[] (stable/draft) add nB
+  |
+  | o  6:354011cd103f[] (stable/draft) add cc
+  | |
+  | o  5:814c38b95e72[] (stable/draft) add bb
+  |/
+  o  0:1f0dee641bb7[BABAR] (stable/public) add a
+  
+
+two old, two new (should be denied)
+
+  $ hg prune 'desc("add cc")' 'desc("add bb")' -s 'desc("add nD")' -s 'desc("add nC")'
+  abort: Can't use multiple successors for multiple precursors
+  [255]
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+  bb5e90a7ea1f3b4b38b23150a4a597b6146d70ef 6e8148413dd541855b72a920a90c06fca127c7e7 0 {'date': '*', 'user': 'test'} (glob)
+  00ded550b1e28bba454bd34cec1269d22cf3ef25 aa96dc3f04c2c2341fe6880aeb6dc9fbffff9ef9 8ee176ff1d4b2034ce51e3efc579c2de346b631d 0 {'date': '**', 'user': 'test'} (glob)
+
+two old, one new:
+
+  $ hg prune 'desc("add cc")' 'desc("add bb")' -s 'desc("add nB")'
+  2 changesets pruned
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+  bb5e90a7ea1f3b4b38b23150a4a597b6146d70ef 6e8148413dd541855b72a920a90c06fca127c7e7 0 {'date': '*', 'user': 'test'} (glob)
+  00ded550b1e28bba454bd34cec1269d22cf3ef25 aa96dc3f04c2c2341fe6880aeb6dc9fbffff9ef9 8ee176ff1d4b2034ce51e3efc579c2de346b631d 0 {'date': '**', 'user': 'test'} (glob)
+  814c38b95e72dfe2cbf675b1649ea9d780c89a80 6f6f25e4f748d8f7571777e6e168aedf50350ce8 0 {'date': '*', 'user': 'test'} (glob)
+  354011cd103f58bbbd9091a3cee6d6a6bd0dddf7 6f6f25e4f748d8f7571777e6e168aedf50350ce8 0 {'date': '*', 'user': 'test'} (glob)
+
+two old, two new with --biject
+
+  $ hg up 0
+  0 files updated, 0 files merged, 4 files removed, 0 files unresolved
+  $ mkcommit n1
+  created new head
+  $ mkcommit n2
+
+  $ hg prune 'desc("add n1")::desc("add n2")' -s 'desc("add nD")::desc("add nE")' --biject
+  2 changesets pruned
+  0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  working directory now at 1f0dee641bb7
+  $ hg debugobsolete
+  9d206ffc875e1bc304590549be293be36821e66c 0 {'date': '314064000 0', 'user': 'blah'} (glob)
+  7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {'date': '*', 'user': 'test'} (glob)
+  4538525df7e2b9f09423636c61ef63a4cb872a2d 0 {'date': '*', 'user': 'test'} (glob)
+  47d2a3944de8b013de3be9578e8e344ea2e6c097 0 {'date': '*', 'user': 'test'} (glob)
+  bb5e90a7ea1f3b4b38b23150a4a597b6146d70ef 6e8148413dd541855b72a920a90c06fca127c7e7 0 {'date': '*', 'user': 'test'} (glob)
+  00ded550b1e28bba454bd34cec1269d22cf3ef25 aa96dc3f04c2c2341fe6880aeb6dc9fbffff9ef9 8ee176ff1d4b2034ce51e3efc579c2de346b631d 0 {'date': '**', 'user': 'test'} (glob)
+  814c38b95e72dfe2cbf675b1649ea9d780c89a80 6f6f25e4f748d8f7571777e6e168aedf50350ce8 0 {'date': '* *', 'user': 'test'} (glob)
+  354011cd103f58bbbd9091a3cee6d6a6bd0dddf7 6f6f25e4f748d8f7571777e6e168aedf50350ce8 0 {'date': '* *', 'user': 'test'} (glob)
+  cb7f8f706a6532967b98cf8583a81baab79a0fa7 8ee176ff1d4b2034ce51e3efc579c2de346b631d 0 {'date': '* *', 'user': 'test'} (glob)
+  21b6f2f1cece8c10326e575dd38239189d467190 6e8148413dd541855b72a920a90c06fca127c7e7 0 {'date': '* *', 'user': 'test'} (glob)
+
+test hg prune -B bookmark
+yoinked from test-mq-strip.t
+
+  $ cd ..
+  $ hg init bookmarks
+  $ cd bookmarks
+  $ hg debugbuilddag '..<2.*1/2:m<2+3:c<m+3:a<2.:b'
+  $ hg bookmark -r 'a' 'todelete'
+  $ hg bookmark -r 'b' 'B'
+  $ hg bookmark -r 'b' 'nostrip'
+  $ hg bookmark -r 'c' 'delete'
+  $ hg up -C todelete
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg prune -B nostrip
+  bookmark 'nostrip' deleted
+  abort: nothing to prune
+  [255]
+  $ hg prune -B todelete
+  1 changesets pruned
+  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory now at d62d843c9a01
+  bookmark 'todelete' deleted
+  $ hg id -ir dcbb326fdec2
+  abort: unknown revision 'dcbb326fdec2'!
+  [255]
+  $ hg id -ir d62d843c9a01
+  d62d843c9a01
+  $ hg bookmarks
+     B                         10:ff43616e5d0f
+     delete                    6:2702dd0c91e7
+  $ hg prune -B delete
+  3 changesets pruned
+  bookmark 'delete' deleted
+  $ hg id -ir 6:2702dd0c91e7
+  abort: unknown revision '2702dd0c91e7'!
+  [255]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-stabilize-conflict.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,256 @@
+=================================================================
+This files test the proper behavior of evo during merge conflict.
+=================================================================
+
+Initial setup
+
+  $ cat >> $HGRCPATH <<EOF
+  > [ui]
+  > interactive=false
+  > merge=internal:merge
+  > [defaults]
+  > amend=-d "0 0"
+  > [merge-tools]
+  > touch.checkchanged=true
+  > touch.gui=true
+  > touch.args=babar
+  > [extensions]
+  > hgext.rebase=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ safesed() {
+  >   sed "$1" "$2" > `pwd`/sed.temp
+  >   mv `pwd`/sed.temp "$2"
+  > }
+
+create a simple repo
+
+  $ hg init repo
+  $ cd repo
+  $ cat << EOF > babar
+  > un
+  > deux
+  > trois
+  > quatre
+  > cinq
+  > EOF
+  $ hg add babar
+  $ hg commit -m "babar count up to five"
+  $ cat << EOF >> babar
+  > six
+  > sept
+  > huit
+  > neuf
+  > dix
+  > EOF
+  $ hg commit -m "babar count up to ten"
+  $ cat << EOF >> babar
+  > onze
+  > douze
+  > treize
+  > quatorze
+  > quinze
+  > EOF
+  $ hg commit -m "babar count up to fifteen"
+
+
+proper behavior without conflict
+----------------------------------
+
+  $ hg gdown
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [1] babar count up to ten
+  $ safesed 's/huit/eight/' babar
+  $ hg diff
+  diff -r 9d5daf8bd956 babar
+  --- a/babar	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/babar	* (glob)
+  @@ -5,6 +5,6 @@
+   cinq
+   six
+   sept
+  -huit
+  +eight
+   neuf
+   dix
+  $ hg amend
+  1 new unstable changesets
+  $ hg evolve
+  move:[2] babar count up to fifteen
+  atop:[4] babar count up to ten
+  merging babar
+  $ hg resolve -l
+  $ hg log -G
+  @  changeset:   5:71c18f70c34f
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     babar count up to fifteen
+  |
+  o  changeset:   4:5977072d13c5
+  |  parent:      0:29ec1554cfaf
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     babar count up to ten
+  |
+  o  changeset:   0:29ec1554cfaf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     babar count up to five
+  
+
+
+proper behavior with conflict using internal:merge
+--------------------------------------------------
+
+  $ hg gdown
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [4] babar count up to ten
+  $ safesed 's/dix/ten/' babar
+  $ hg diff
+  diff -r 5977072d13c5 babar
+  --- a/babar	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/babar	* (glob)
+  @@ -7,4 +7,4 @@
+   sept
+   eight
+   neuf
+  -dix
+  +ten
+  $ hg amend
+  1 new unstable changesets
+  $ hg evolve
+  move:[5] babar count up to fifteen
+  atop:[7] babar count up to ten
+  merging babar
+  warning: conflicts during merge.
+  merging babar incomplete! (edit conflicts, then use 'hg resolve --mark')
+  evolve failed!
+  fix conflict and run "hg evolve --continue"
+  abort: unresolved merge conflicts (see hg help resolve)
+  [255]
+  $ hg resolve -l
+  U babar
+  $ hg log -G
+  @  changeset:   7:e04690b09bc6
+  |  tag:         tip
+  |  parent:      0:29ec1554cfaf
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     babar count up to ten
+  |
+  | @  changeset:   5:71c18f70c34f
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     babar count up to fifteen
+  | |
+  | x  changeset:   4:5977072d13c5
+  |/   parent:      0:29ec1554cfaf
+  |    user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     babar count up to ten
+  |
+  o  changeset:   0:29ec1554cfaf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     babar count up to five
+  
+(fix the conflict and continue)
+
+  $ hg revert -r 5 --all
+  reverting babar
+  $ safesed 's/dix/ten/' babar
+  $ hg resolve --all -m
+  $ hg evolve --continue
+  grafting revision 5
+  $ hg resolve -l
+  $ hg log -G
+  @  changeset:   8:1836b91c6c1d
+  |  tag:         tip
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     babar count up to fifteen
+  |
+  o  changeset:   7:e04690b09bc6
+  |  parent:      0:29ec1554cfaf
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     babar count up to ten
+  |
+  o  changeset:   0:29ec1554cfaf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     babar count up to five
+  
+proper behavior with conflict using an external merge tools
+-----------------------------------------------------------
+
+  $ safesed 's/merge=.*/merge=touch/' $HGRCPATH
+  $ safesed 's/touch.gui=.*/touch.gui=false/' $HGRCPATH
+  $ hg gdown
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [7] babar count up to ten
+  $ safesed 's/ten/zehn/' babar
+  $ hg diff
+  diff -r e04690b09bc6 babar
+  --- a/babar	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/babar	* (glob)
+  @@ -7,4 +7,4 @@
+   sept
+   eight
+   neuf
+  -ten
+  +zehn
+  $ hg amend
+  1 new unstable changesets
+  $ safesed 's/interactive=.*/interactive=true/' $HGRCPATH
+  $ HGMERGE=touch hg evolve <<EOF
+  > n
+  > EOF
+  move:[8] babar count up to fifteen
+  atop:[10] babar count up to ten
+  merging babar
+   output file babar appears unchanged
+  was merge successful (yn)? merging babar failed!
+  evolve failed!
+  fix conflict and run "hg evolve --continue"
+  abort: unresolved merge conflicts (see hg help resolve)
+  [255]
+  $ hg resolve -l
+  U babar
+  $ hg log -G
+  @  changeset:   10:b20d08eea373
+  |  tag:         tip
+  |  parent:      0:29ec1554cfaf
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     babar count up to ten
+  |
+  | @  changeset:   8:1836b91c6c1d
+  | |  user:        test
+  | |  date:        Thu Jan 01 00:00:00 1970 +0000
+  | |  summary:     babar count up to fifteen
+  | |
+  | x  changeset:   7:e04690b09bc6
+  |/   parent:      0:29ec1554cfaf
+  |    user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     babar count up to ten
+  |
+  o  changeset:   0:29ec1554cfaf
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     babar count up to five
+  
+  $ cat babar
+  un
+  deux
+  trois
+  quatre
+  cinq
+  six
+  sept
+  eight
+  neuf
+  zehn
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-stabilize-order.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,171 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ glog() {
+  >   hg glog --template '{rev}:{node|short}@{branch}({phase}) {desc|firstline}\n' "$@"
+  > }
+
+  $ hg init repo
+  $ cd repo
+  $ echo root > root
+  $ hg ci -Am addroot
+  adding root
+  $ echo a > a
+  $ hg ci -Am adda
+  adding a
+  $ echo b > b
+  $ hg ci -Am addb
+  adding b
+  $ echo c > c
+  $ hg ci -Am addc
+  adding c
+  $ glog
+  @  3:7a7552255fb5@default(draft) addc
+  |
+  o  2:ef23d6ef94d6@default(draft) addb
+  |
+  o  1:93418d2c0979@default(draft) adda
+  |
+  o  0:c471ef929e6a@default(draft) addroot
+  
+  $ hg gdown
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [2] addb
+  $ echo b >> b
+  $ hg amend
+  1 new unstable changesets
+  $ hg gdown
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [1] adda
+  $ echo a >> a
+  $ hg amend
+  1 new unstable changesets
+  $ glog
+  @  7:005fe5914f78@default(draft) adda
+  |
+  | o  5:22619daeed78@default(draft) addb
+  | |
+  | | o  3:7a7552255fb5@default(draft) addc
+  | | |
+  | | x  2:ef23d6ef94d6@default(draft) addb
+  | |/
+  | x  1:93418d2c0979@default(draft) adda
+  |/
+  o  0:c471ef929e6a@default(draft) addroot
+  
+
+Test stabilizing a predecessor child
+
+  $ hg evolve -v
+  move:[5] addb
+  atop:[7] adda
+  hg rebase -r 22619daeed78 -d 005fe5914f78
+  resolving manifests
+  getting b
+  b
+  $ glog
+  @  8:bede829dd2d3@default(draft) addb
+  |
+  o  7:005fe5914f78@default(draft) adda
+  |
+  | o  3:7a7552255fb5@default(draft) addc
+  | |
+  | x  2:ef23d6ef94d6@default(draft) addb
+  | |
+  | x  1:93418d2c0979@default(draft) adda
+  |/
+  o  0:c471ef929e6a@default(draft) addroot
+  
+
+Test stabilizing a descendant predecessors child
+
+  $ hg up 7
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ hg debugobsolete > successors.old
+  $ hg evolve -v
+  move:[3] addc
+  atop:[8] addb
+  hg rebase -r 7a7552255fb5 -d bede829dd2d3
+  resolving manifests
+  getting b
+  resolving manifests
+  getting c
+  c
+  $ hg debugobsolete > successors.new
+  $ diff -u successors.old successors.new
+  --- successors.old* (glob)
+  +++ successors.new* (glob)
+  @@ -3,3 +3,4 @@
+   93418d2c0979643ad446f621195e78720edb05b4 005fe5914f78e8bc64c7eba28117b0b1fa210d0d 0 {'date': '* *', 'user': 'test'} (glob)
+   7a7d76dc97c57751de9e80f61ed2a639bd03cd24 0 {'date': '* *', 'user': 'test'} (glob)
+   22619daeed78036f80fbd326b6852519c4f0c25e bede829dd2d3b2ae9bf198c23432b250dc964458 0 {'date': '* *', 'user': 'test'} (glob)
+  +7a7552255fb5f8bd745e46fba6f0ca633a4dd716 65095d7d0dd5e4f15503bb7b1f433a5fe9bac052 0 {'date': '* *', 'user': 'test'} (glob)
+  [1]
+
+
+
+  $ glog
+  @  9:65095d7d0dd5@default(draft) addc
+  |
+  o  8:bede829dd2d3@default(draft) addb
+  |
+  o  7:005fe5914f78@default(draft) adda
+  |
+  o  0:c471ef929e6a@default(draft) addroot
+  
+  $ hg evolve -v
+  no troubled changesets
+  [1]
+
+Test behaviour with --any
+
+  $ hg up 8
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo b >> b
+  $ hg amend
+  1 new unstable changesets
+  $ glog
+  @  11:036cf654e942@default(draft) addb
+  |
+  | o  9:65095d7d0dd5@default(draft) addc
+  | |
+  | x  8:bede829dd2d3@default(draft) addb
+  |/
+  o  7:005fe5914f78@default(draft) adda
+  |
+  o  0:c471ef929e6a@default(draft) addroot
+  
+  $ hg up 9
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg evolve -v
+  nothing to evolve here
+  (1 troubled changesets, do you want --any ?)
+  [2]
+  $ hg evolve --any -v
+  move:[9] addc
+  atop:[11] addb
+  hg rebase -r 65095d7d0dd5 -d 036cf654e942
+  resolving manifests
+  removing c
+  getting b
+  resolving manifests
+  getting c
+  c
+  $ glog
+  @  12:e99ecf51c867@default(draft) addc
+  |
+  o  11:036cf654e942@default(draft) addb
+  |
+  o  7:005fe5914f78@default(draft) adda
+  |
+  o  0:c471ef929e6a@default(draft) addroot
+  
+  $ hg evolve --any -v
+  no troubled changesets
+  [1]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-stabilize-result.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,330 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [defaults]
+  > amend=-d "0 0"
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ glog() {
+  >   hg glog --template \
+  >     '{rev}:{node|short}@{branch}({phase}) bk:[{bookmarks}] {desc|firstline}\n' "$@"
+  > }
+
+Test evolve removing the changeset being evolved
+
+  $ hg init empty
+  $ cd empty
+  $ echo a > a
+  $ hg ci -Am adda a
+  $ echo b > b
+  $ hg ci -Am addb b
+  $ echo a >> a
+  $ hg ci -m changea
+  $ hg bookmark changea
+  $ hg up 1
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo a >> a
+  $ hg amend -m changea
+  1 new unstable changesets
+  $ hg evolve -v
+  move:[2] changea
+  atop:[4] changea
+  hg rebase -r cce2c55b8965 -d fb9d051ec0a4
+  resolving manifests
+  $ glog --hidden
+  @  4:fb9d051ec0a4@default(draft) bk:[changea] changea
+  |
+  | x  3:c5727dbded3c@default(draft) bk:[] temporary amend commit for 102a90ea7b4a
+  | |
+  | | x  2:cce2c55b8965@default(draft) bk:[] changea
+  | |/
+  | x  1:102a90ea7b4a@default(draft) bk:[] addb
+  |/
+  o  0:07f494440405@default(draft) bk:[] adda
+  
+  $ hg debugobsolete
+  102a90ea7b4a3361e4082ed620918c261189a36a fb9d051ec0a450a4aa2ffc8c324979832ef88065 0 {'date': '* *', 'user': 'test'} (glob)
+  c5727dbded3c3a6877cf60d6bb552a76812cb844 0 {'date': '* *', 'user': 'test'} (glob)
+  cce2c55b896511e0b6e04173c9450ba822ebc740 0 {'date': '* *', 'user': 'test'} (glob)
+
+Test evolve with conflict
+
+  $ ls
+  a
+  b
+  $ hg pdiff a
+  diff -r 07f494440405 a
+  --- a/a	* (glob)
+  +++ b/a	* (glob)
+  @@ -1,1 +1,2 @@
+   a
+  +a
+  $ echo 'newer a' >> a
+  $ hg ci -m 'newer a'
+  $ hg gdown
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [4] changea
+  $ echo 'a' > a
+  $ hg amend
+  1 new unstable changesets
+  $ hg evolve
+  move:[5] newer a
+  atop:[7] changea
+  merging a
+  warning: conflicts during merge.
+  merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
+  evolve failed!
+  fix conflict and run "hg evolve --continue"
+  abort: unresolved merge conflicts (see hg help resolve)
+  [255]
+  $ hg revert -r 'unstable()' a
+  $ hg diff
+  diff -r 66719795a494 a
+  --- a/a	* (glob)
+  +++ b/a	* (glob)
+  @@ -1,1 +1,3 @@
+   a
+  +a
+  +newer a
+  $ hg evolve --continue
+  grafting revision 5
+  abort: unresolved merge conflicts (see hg help resolve)
+  [255]
+  $ hg resolve -m a
+  $ hg evolve --continue
+  grafting revision 5
+
+Stabilize of late comer with different parent
+==================================================
+
+(the same parent case is handled in test-evolve.t)
+
+  $ glog
+  @  8:1cf0aacfd363@default(draft) bk:[] newer a
+  |
+  o  7:66719795a494@default(draft) bk:[changea] changea
+  |
+  o  0:07f494440405@default(draft) bk:[] adda
+  
+Add another commit
+
+  $ hg gdown
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [7] changea
+  $ echo 'c' > c
+  $ hg add c
+  $ hg commit -m 'add c'
+  created new head
+
+Get a successors of 8 on it
+
+  $ hg grab 8
+  ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
+
+Add real change to the successors
+
+  $ echo 'babar' >> a
+  $ hg amend
+
+Make precursors public
+
+  $ hg phase --hidden --public 8
+  1 new bumped changesets
+  $ glog
+  @  12:(73b15c7566e9|d5c7ef82d003)@default\(draft\) bk:\[\] newer a (re)
+  |
+  o  9:7bc2f5967f5e@default(draft) bk:[] add c
+  |
+  | o  8:1cf0aacfd363@default(public) bk:[] newer a
+  |/
+  o  7:66719795a494@default(public) bk:[changea] changea
+  |
+  o  0:07f494440405@default(public) bk:[] adda
+  
+
+Stabilize !
+
+  $ hg evolve --any --dry-run
+  recreate:[12] newer a
+  atop:[8] newer a
+  hg rebase --rev (73b15c7566e9|d5c7ef82d003) --dest 66719795a494; (re)
+  hg update 1cf0aacfd363;
+  hg revert --all --rev (73b15c7566e9|d5c7ef82d003); (re)
+  hg commit --msg "bumped update to %s" (no-eol)
+  $ hg evolve --any
+  recreate:[12] newer a
+  atop:[8] newer a
+  rebasing to destination parent: 66719795a494
+  computing new diff
+  commited as (a7cabd7bd9c2|671b9d7eeaec) (re)
+  $ glog
+  @  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  |
+  | o  9:7bc2f5967f5e@default(draft) bk:[] add c
+  | |
+  o |  8:1cf0aacfd363@default(public) bk:[] newer a
+  |/
+  o  7:66719795a494@default(public) bk:[changea] changea
+  |
+  o  0:07f494440405@default(public) bk:[] adda
+  
+
+Stabilize conflicting changesets with same parent
+=================================================
+
+  $ rm a.orig
+  $ hg up 9
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cat << EOF >> a
+  > flore
+  > arthur
+  > zephir
+  > some
+  > less
+  > conflict
+  > EOF
+  $ hg ci -m 'More addition'
+  $ glog
+  @  15:3932c176bbaa@default(draft) bk:[] More addition
+  |
+  | o  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  | |
+  o |  9:7bc2f5967f5e@default(draft) bk:[] add c
+  | |
+  | o  8:1cf0aacfd363@default(public) bk:[] newer a
+  |/
+  o  7:66719795a494@default(public) bk:[changea] changea
+  |
+  o  0:07f494440405@default(public) bk:[] adda
+  
+  $ echo 'babar' >> a
+  $ hg amend
+  $ hg up --hidden 15
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory parent is obsolete!
+  $ mv a a.old
+  $ echo 'jungle' > a
+  $ cat a.old >> a
+  $ rm a.old
+  $ hg amend
+  2 new divergent changesets
+  $ glog
+  @  19:eacc9c8240fe@default(draft) bk:[] More addition
+  |
+  | o  17:d2f173e25686@default(draft) bk:[] More addition
+  |/
+  | o  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  | |
+  o |  9:7bc2f5967f5e@default(draft) bk:[] add c
+  | |
+  | o  8:1cf0aacfd363@default(public) bk:[] newer a
+  |/
+  o  7:66719795a494@default(public) bk:[changea] changea
+  |
+  o  0:07f494440405@default(public) bk:[] adda
+  
+
+Stabilize It
+
+  $ hg evolve -qn --traceback
+  hg update -c eacc9c8240fe &&
+  hg merge d2f173e25686 &&
+  hg commit -m "auto merge resolving conflict between eacc9c8240fe and d2f173e25686"&&
+  hg up -C 3932c176bbaa &&
+  hg revert --all --rev tip &&
+  hg commit -m "`hg log -r eacc9c8240fe --template={desc}`";
+  $ hg evolve -v
+  merge:[19] More addition
+  with: [17] More addition
+  base: [15] More addition
+  merging divergent changeset
+  resolving manifests
+  merging a
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  amending changeset eacc9c8240fe
+  a
+  copying changeset 283ccd10e2b8 to 7bc2f5967f5e
+  a
+  committed changeset 21:f344982e63c4
+  $ hg st
+  $ glog
+  @  21:f344982e63c4@default(draft) bk:[] More addition
+  |
+  | o  14:(a7cabd7bd9c2|671b9d7eeaec)@default\(draft\) bk:\[\] bumped update to 1cf0aacfd363: (re)
+  | |
+  o |  9:7bc2f5967f5e@default(draft) bk:[] add c
+  | |
+  | o  8:1cf0aacfd363@default(public) bk:[] newer a
+  |/
+  o  7:66719795a494@default(public) bk:[changea] changea
+  |
+  o  0:07f494440405@default(public) bk:[] adda
+  
+  $ hg summary
+  parent: 21:f344982e63c4 tip
+   More addition
+  branch: default
+  commit: (clean)
+  update: 2 new changesets, 2 branch heads (merge)
+  $ hg export .
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID f344982e63c462b1e44c0371c804685389e673a9
+  # Parent  7bc2f5967f5e4ed277f60a89b7b04cc5d6407ced
+  More addition
+  
+  diff -r 7bc2f5967f5e -r f344982e63c4 a
+  --- a/a	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,1 +1,9 @@
+  +jungle
+   a
+  +flore
+  +arthur
+  +zephir
+  +some
+  +less
+  +conflict
+  +babar
+
+Check conflicting during conflicting resolution
+-------------------------------------------------
+
+  $ hg up --hidden 15
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory parent is obsolete!
+  $ echo 'gotta break' >> a
+  $ hg amend
+  2 new divergent changesets
+  $ hg phase 'divergent()'
+  21: draft
+  23: draft
+  $ hg evolve -qn
+  hg update -c 36e188246d67 &&
+  hg merge f344982e63c4 &&
+  hg commit -m "auto merge resolving conflict between 36e188246d67 and f344982e63c4"&&
+  hg up -C 3932c176bbaa &&
+  hg revert --all --rev tip &&
+  hg commit -m "`hg log -r 36e188246d67 --template={desc}`";
+  $ hg evolve
+  merge:[23] More addition
+  with: [21] More addition
+  base: [15] More addition
+  merging a
+  warning: conflicts during merge.
+  merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
+  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  abort: Merge conflict between several amendments, and this is not yet automated
+  (/!\ You can try:
+  /!\ * manual merge + resolve => new cset X
+  /!\ * hg up to the parent of the amended changeset (which are named W and Z)
+  /!\ * hg revert --all -r X
+  /!\ * hg ci -m "same message as the amended changeset" => new cset Y
+  /!\ * hg kill -n Y W Z
+  )
+  [255]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-touch.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,88 @@
+
+  $ cat >> $HGRCPATH <<EOF
+  > [ui]
+  > logtemplate={rev}:{node|short} {desc}\n
+  > [defaults]
+  > amend=-d "0 0"
+  > [extensions]
+  > hgext.rebase=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ hg init repo
+  $ cd repo
+  $ echo A > a
+  $ hg add a
+  $ hg commit -m a
+
+Basic usage
+
+  $ hg log -G
+  @  0:e93df3427f45 a
+  
+  $ hg touch .
+  $ hg log -G
+  @  1:[0-9a-f]{12} a (re)
+  
+
+
+Revive usage
+
+  $ echo A > b
+  $ hg add b
+  $ hg commit -m ab --amend
+  $ hg up --hidden 1
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory parent is obsolete!
+  $ hg log -G
+  o  3:[0-9a-f]{12} ab (re)
+  
+  @  1:[0-9a-f]{12} a (re)
+  
+  $ hg touch .
+  2 new divergent changesets
+  $ hg log -G
+  @  4:[0-9a-f]{12} a (re)
+  
+  o  3:[0-9a-f]{12} ab (re)
+  
+  $ hg prune 3
+  1 changesets pruned
+
+Duplicate
+
+  $ hg touch --duplicate .
+  $ hg log -G
+  @  5:[0-9a-f]{12} a (re)
+  
+  o  4:[0-9a-f]{12} a (re)
+  
+
+Multiple touch
+
+  $ echo C > c
+  $ hg add c
+  $ hg commit -m c
+  $ echo D > d
+  $ hg add d
+  $ hg commit -m d
+  $ hg log -G
+  @  7:[0-9a-f]{12} d (re)
+  |
+  o  6:[0-9a-f]{12} c (re)
+  |
+  o  5:[0-9a-f]{12} a (re)
+  
+  o  4:[0-9a-f]{12} a (re)
+  
+  $ hg touch 6:7
+  $ hg log -G
+  @  9:[0-9a-f]{12} d (re)
+  |
+  o  8:[0-9a-f]{12} c (re)
+  |
+  o  5:[0-9a-f]{12} a (re)
+  
+  o  4:[0-9a-f]{12} a (re)
+  
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-tutorial.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,833 @@
+
+Initial setup
+-------------
+
+This Mercurial configuration example is used for testing.
+.. Various setup
+
+  $ cat >> $HGRCPATH << EOF
+  > [ui]
+  > # This is change the default output of log for clear tutorial
+  > logtemplate ="{node|short} ({phase}): {desc}\n"
+  > [diff]
+  > # use "git" diff format, clearer and smarter format
+  > git = 1
+  > [alias]
+  > # "-d '0 0'" means that the new commit will be at January 1st 1970.
+  > # This is used for stable hash during test
+  > # (this tutorial is automatically tested.)
+  > amend = amend -d '0 0'
+  > EOF
+
+  $ hg init local
+  $ cat >> local/.hg/hgrc << EOF
+  > [paths]
+  > remote = ../remote
+  > other = ../other
+  > [ui]
+  > user = Babar the King
+  > EOF
+
+  $ hg init remote
+  $ cat >> remote/.hg/hgrc << EOF
+  > [paths]
+  > local = ../local
+  > [ui]
+  > user = Celestine the Queen
+  > EOF
+
+  $ hg init other
+  $ cat >> other/.hg/hgrc << EOF
+  > [ui]
+  > user = Princess Flore
+  > EOF
+
+
+This tutorial uses the following configuration for Mercurial:
+
+A compact log template with phase data:
+
+  $ hg showconfig ui | grep log
+  ui.logtemplate="{node|short} ({phase}): {desc}\n"
+
+Improved git format diff:
+
+  $ hg showconfig diff
+  diff.git=1
+
+And of course, we enable the experimental extensions for mutable history:
+
+  $ cat >> $HGRCPATH <<EOF
+  > [extensions]
+  > evolve = $TESTDIR/../hgext/evolve.py
+  > # enabling rebase is also needed for now
+  > rebase =
+  > EOF
+
+-----------------------
+Single Developer Usage
+-----------------------
+
+This tutorial shows how to use evolution to rewrite history locally.
+
+
+Fixing mistake with `hg amend`
+--------------------------------
+
+We are versionning a shopping list
+
+  $ cd local
+  $ cat  >> shopping << EOF
+  > Spam
+  > Whizzo butter
+  > Albatross
+  > Rat (rather a lot)
+  > Jugged fish
+  > Blancmange
+  > Salmon mousse
+  > EOF
+  $ hg commit -A -m "Monthy Python Shopping list"
+  adding shopping
+
+Its first version is shared with the outside.
+
+  $ hg push remote
+  pushing to $TESTTMP/remote
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+
+Later I add additional item to my list
+
+  $ cat >> shopping << EOF
+  > Egg
+  > Suggar
+  > Vinegar
+  > Oil
+  > EOF
+  $ hg commit -m "adding condiment"
+  $ cat >> shopping << EOF
+  > Bananos
+  > Pear
+  > Apple
+  > EOF
+  $ hg commit -m "adding fruit"
+
+This history is very linear
+
+  $ hg log -G
+  @  d85de4546133 (draft): adding fruit
+  |
+  o  4d5dc8187023 (draft): adding condiment
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+But a typo was made in Babanas!
+
+  $ hg export tip
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID d85de4546133030c82d257bbcdd9b1b416d0c31c
+  # Parent  4d5dc81870237d492284826e21840b2ca00e26d1
+  adding fruit
+  
+  diff --git a/shopping b/shopping
+  --- a/shopping
+  +++ b/shopping
+  @@ -9,3 +9,6 @@
+   Suggar
+   Vinegar
+   Oil
+  +Bananos
+  +Pear
+  +Apple
+
+The faulty changeset is in the "draft" phase because it has not been exchanged with
+the outside. The first one has been exchanged and is "public" (immutable).
+
+  $ hg log -G
+  @  d85de4546133 (draft): adding fruit
+  |
+  o  4d5dc8187023 (draft): adding condiment
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+hopefully. I can use `hg commit --amend` to rewrite my faulty changeset!
+
+  $ sed -i'' -e s/Bananos/Banana/ shopping
+  $ hg diff
+  diff --git a/shopping b/shopping
+  --- a/shopping
+  +++ b/shopping
+  @@ -9,6 +9,6 @@
+   Suggar
+   Vinegar
+   Oil
+  -Bananos
+  +Banana
+   Pear
+   Apple
+  $ hg commit --amend
+
+A new changeset with the right diff replace the wrong one.
+
+  $ hg log -G
+  @  9d0363b81950 (draft): adding fruit
+  |
+  o  4d5dc8187023 (draft): adding condiment
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+  $ hg export tip
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID 9d0363b81950646bc6ad1ec5de8b8197ea586541
+  # Parent  4d5dc81870237d492284826e21840b2ca00e26d1
+  adding fruit
+  
+  diff --git a/shopping b/shopping
+  --- a/shopping
+  +++ b/shopping
+  @@ -9,3 +9,6 @@
+   Suggar
+   Vinegar
+   Oil
+  +Banana
+  +Pear
+  +Apple
+
+Getting rid of branchy history
+----------------------------------
+
+While I was working on my list. someone made a change remotly.
+
+  $ cd ../remote
+  $ hg up -q
+  $ sed -i'' -e 's/Spam/Spam Spam Spam/' shopping
+  $ hg ci -m 'SPAM'
+  $ cd ../local
+
+I'll get this remote changeset when pulling
+
+  $ hg pull remote
+  pulling from $TESTTMP/remote
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  (run 'hg heads' to see heads, 'hg merge' to merge)
+
+I now have a new heads. Note that this remote head is immutable
+
+  $ hg log -G
+  o  9ca060c80d74 (public): SPAM
+  |
+  | @  9d0363b81950 (draft): adding fruit
+  | |
+  | o  4d5dc8187023 (draft): adding condiment
+  |/
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+instead of merging my head with the new one. I'm going to rebase my work
+
+  $ hg diff
+  $ hg rebase --dest 9ca060c80d74 --source 4d5dc8187023
+  merging shopping
+  merging shopping
+
+
+My local work is now rebased on the remote one.
+
+  $ hg log -G
+  @  41aff6a42b75 (draft): adding fruit
+  |
+  o  dfd3a2d7691e (draft): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+Removing changesets
+------------------------
+
+I add new item to my list
+
+  $ cat >> shopping << EOF
+  > car
+  > bus
+  > plane
+  > boat
+  > EOF
+  $ hg ci -m 'transport'
+  $ hg log -G
+  @  1125e39fbf21 (draft): transport
+  |
+  o  41aff6a42b75 (draft): adding fruit
+  |
+  o  dfd3a2d7691e (draft): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+I have a new commit but I realize that don't want it. (transport shop list does
+not fit well in my standard shopping list)
+
+  $ hg prune . # "." is for working directory parent
+  1 changesets pruned
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory now at 41aff6a42b75
+
+The silly changeset is gone.
+
+  $ hg log -G
+  @  41aff6a42b75 (draft): adding fruit
+  |
+  o  dfd3a2d7691e (draft): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+Reordering changesets
+------------------------
+
+
+We create two changesets.
+
+
+  $ cat >> shopping << EOF
+  > Shampoo
+  > Toothbrush
+  > ... More bathroom stuff to come
+  > Towel
+  > Soap
+  > EOF
+  $ hg ci -m 'bathroom stuff' -q # XXX remove the -q
+
+  $ sed -i'' -e 's/Spam/Spam Spam Spam/g' shopping
+  $ hg ci -m 'SPAM SPAM'
+  $ hg log -G
+  @  fac207dec9f5 (draft): SPAM SPAM
+  |
+  o  10b8aeaa8cc8 (draft): bathroom stuff
+  |
+  o  41aff6a42b75 (draft): adding fruit
+  |
+  o  dfd3a2d7691e (draft): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+.. note:: We can't amend changeset 7e82d3f3c2cb or 9ca060c80d74 as they are immutable.
+
+ I now want to push to remote all my changes except the bathroom one, which I'm
+ not totally happy with yet. To be able to push "SPAM SPAM" I need a version of
+ "SPAM SPAM" which is not a child of "bathroom stuff"
+
+You can use the 'grab' alias for that.
+
+.. note: grab is an alias for `hg rebase --dest . --rev <target>; hg up <there>`
+
+  $ hg up 'p1(10b8aeaa8cc8)' # going on "bathroom stuff" parent
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg grab fac207dec9f5 # moving "SPAM SPAM" to the working directory parent
+  merging shopping
+  ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
+  $ hg log -G
+  @  a224f2a4fb9f (draft): SPAM SPAM
+  |
+  | o  10b8aeaa8cc8 (draft): bathroom stuff
+  |/
+  o  41aff6a42b75 (draft): adding fruit
+  |
+  o  dfd3a2d7691e (draft): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+We have a new SPAM SPAM version without the bathroom stuff
+
+  $ grep Spam shopping  # enough spam
+  Spam Spam Spam Spam Spam Spam Spam Spam Spam
+  $ grep Toothbrush shopping # no Toothbrush
+  [1]
+  $ hg export .
+  # HG changeset patch
+  # User test
+  # Date 0 0
+  #      Thu Jan 01 00:00:00 1970 +0000
+  # Node ID a224f2a4fb9f9f828f608959912229d7b38b26de
+  # Parent  41aff6a42b7578ec7ec3cb2041633f1ca43cca96
+  SPAM SPAM
+  
+  diff --git a/shopping b/shopping
+  --- a/shopping
+  +++ b/shopping
+  @@ -1,4 +1,4 @@
+  -Spam Spam Spam
+  +Spam Spam Spam Spam Spam Spam Spam Spam Spam
+   Whizzo butter
+   Albatross
+   Rat (rather a lot)
+
+To make sure I do not push unready changeset by mistake I set the "bathroom
+stuff" changeset in the secret phase.
+
+  $ hg phase --force --secret 10b8aeaa8cc8
+
+we can now push our change:
+
+  $ hg push remote
+  pushing to $TESTTMP/remote
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 3 changesets with 3 changes to 1 files
+
+for simplicity sake we get the bathroom change in line again
+
+  $ hg grab 10b8aeaa8cc8
+  merging shopping
+  ? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
+  $ hg phase --draft .
+  $ hg log -G
+  @  75954b8cd933 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+
+
+Splitting change
+------------------
+
+This part is not written yet, but you can use either the `histedit` extension
+of the `uncommit` command to splitting a change.
+
+  $ hg help uncommit
+  hg uncommit [OPTION]... [NAME]
+  
+  move changes from parent revision to working directory
+  
+      Changes to selected files in parent revision appear again as uncommitted
+      changed in the working directory. A new revision without selected changes
+      is created, becomes the new parent and obsoletes the previous one.
+  
+      The --include option specify pattern to uncommit The --exclude option
+      specify pattern to keep in the commit
+  
+      Return 0 if changed files are uncommitted.
+  
+  options:
+  
+   -a --all                 uncommit all changes when no arguments given
+   -I --include PATTERN [+] include names matching the given patterns
+   -X --exclude PATTERN [+] exclude names matching the given patterns
+  
+  [+] marked option can be specified multiple times
+  
+  use "hg -v help uncommit" to show the global options
+
+
+The edit command of histedit can be used to split changeset:
+
+
+Collapsing change
+------------------
+
+The tutorial part is not written yet but can use `hg fold`:
+
+  $ hg help fold
+  hg fold rev
+  
+  Fold multiple revisions into a single one
+  
+      Revision from your current working directory to the specified one are fold
+      as a new one replacing the other
+  
+      you can alternatively use --rev to explicitly specify revision to be fold
+      ignoring the current working directory parent.
+  
+  options:
+  
+   -r --rev VALUE [+] explicitly specify the full set of revision to fold
+  
+  [+] marked option can be specified multiple times
+  
+  use "hg -v help fold" to show the global options
+
+
+-----------------------
+Collaboration
+-----------------------
+
+
+sharing mutable changesets
+----------------------------
+
+To share mutable changesets with others, just check that the repo you interact
+with is "not publishing". Otherwise you will get the previously observe
+behavior where exchanged changeset are automatically published.
+
+  $ cd ../remote
+  $ hg -R ../local/ showconfig phases
+
+the localrepo does not have any specific configuration for `phases.publish`. It
+is ``true`` by default.
+
+  $ hg pull local
+  pulling from $TESTTMP/local
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+  $ hg log -G
+  o  75954b8cd933 (public): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  @  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+
+
+We do not want to publish the "bathroom changeset". Let's rollback the last transaction.
+
+.. Warning: Rollback is actually a dangerous kind of internal command that is deprecated and should not be exposed to user. Please forget you read about it until someone fix this tutorial.
+
+  $ hg rollback
+  repository tip rolled back to revision 4 (undo pull)
+  $ hg log -G
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  @  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+Let's make the local repo "non publishing"
+
+  $ echo '[phases]' >> ../local/.hg/hgrc
+  $ echo 'publish=false' >> ../local/.hg/hgrc
+  $ echo '[phases]' >> .hg/hgrc
+  $ echo 'publish=false' >> .hg/hgrc
+  $ hg showconfig phases
+  phases.publish=false
+  $ hg -R ../local/ showconfig phases
+  phases.publish=false
+
+
+I can now exchange mutable changeset between "remote" and "local" repository.
+
+  $ hg pull local
+  pulling from $TESTTMP/local
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+  $ hg log -G
+  o  75954b8cd933 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  @  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+Rebasing unstable change after pull
+----------------------------------------------
+
+Remotely someone add a new changeset on top of the mutable "bathroom" on.
+
+  $ hg up 75954b8cd933 -q
+  $ cat >> shopping << EOF
+  > Giraffe
+  > Rhino
+  > Lion
+  > Bear
+  > EOF
+  $ hg ci -m 'animals'
+
+But at the same time, locally, this same "bathroom changeset" was updated.
+
+  $ cd ../local
+  $ hg up 75954b8cd933 -q
+  $ sed -i'' -e 's/... More bathroom stuff to come/Bath Robe/' shopping
+  $ hg commit --amend
+  $ hg log -G
+  @  a44c85f957d3 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+
+When we pull from remote again we get an unstable state!
+
+  $ hg pull remote
+  pulling from $TESTTMP/remote
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  (run 'hg heads' to see heads, 'hg merge' to merge)
+  1 new unstable changesets
+
+
+The new changeset "animal" is based on an old changeset of "bathroom". You can
+see both version showing up in the log.
+
+  $ hg log -G
+  o  bf1b0d202029 (draft): animals
+  |
+  | @  a44c85f957d3 (draft): bathroom stuff
+  | |
+  x |  75954b8cd933 (draft): bathroom stuff
+  |/
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+The older version 75954b8cd933 never ceased to exist in the local repo. It was
+just hidden and excluded from pull and push.
+
+.. note:: In hgview there is a nice dotted relation highlighting a44c85f957d3 as a new version of 75954b8cd933. this is not yet ported to ``hg log -G``.
+
+There is now an **unstable** changeset in this history. Mercurial will refuse to
+share it with the outside:
+
+  $ hg push other
+  pushing to $TESTTMP/other
+  searching for changes
+  abort: push includes unstable changeset: bf1b0d202029!
+  (use 'hg evolve' to get a stable history or --force to ignore warnings)
+  [255]
+ 
+
+
+
+To resolve this unstable state, you need to rebase bf1b0d202029 onto
+a44c85f957d3. The `hg evolve` command will do this for you.
+
+It has a --dry-run option to only suggest the next move.
+
+  $ hg evolve --dry-run
+  move:[15] animals
+  atop:[14] bathroom stuff
+  hg rebase -r bf1b0d202029 -d a44c85f957d3
+
+Let's do it
+
+  $ hg evolve
+  move:[15] animals
+  atop:[14] bathroom stuff
+  merging shopping
+
+The old version of bathroom is hidden again.
+
+  $ hg log -G
+  @  ee942144f952 (draft): animals
+  |
+  o  a44c85f957d3 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+
+We can push this evolution to remote
+
+  $ hg push remote
+  pushing to $TESTTMP/remote
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 2 changesets with 2 changes to 1 files (+1 heads)
+
+remote get a warning that current working directory is based on an obsolete changeset
+
+  $ cd ../remote
+  $ hg pull local # we up again to trigger the warning. it was displayed during the push
+  pulling from $TESTTMP/local
+  searching for changes
+  no changes found
+  working directory parent is obsolete!
+
+now let's see where we are, and update to the successor
+
+  $ hg parents
+  bf1b0d202029 (draft): animals
+  working directory parent is obsolete!
+  $ hg evolve
+  update:[8] animals
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Relocating unstable change after prune
+----------------------------------------------
+
+The remote guy keep working
+
+  $ sed -i'' -e 's/Spam/Spam Spam Spam Spam/g' shopping
+  $ hg commit -m "SPAM SPAM SPAM"
+
+I'm pulling its work locally.
+
+  $ cd ../local
+  $ hg pull remote
+  pulling from $TESTTMP/remote
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  (run 'hg update' to get a working copy)
+  $ hg log -G
+  o  99f039c5ec9e (draft): SPAM SPAM SPAM
+  |
+  @  ee942144f952 (draft): animals
+  |
+  o  a44c85f957d3 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+In the mean time I noticed you can't buy animals in a super market and I prune the animal changeset:
+
+  $ hg prune ee942144f952
+  1 changesets pruned
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory now at a44c85f957d3
+  1 new unstable changesets
+
+
+The animals changeset is still displayed because the "SPAM SPAM SPAM" changeset
+is neither dead or obsolete.  My repository is in an unstable state again.
+
+  $ hg log -G
+  o  99f039c5ec9e (draft): SPAM SPAM SPAM
+  |
+  x  ee942144f952 (draft): animals
+  |
+  @  a44c85f957d3 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+  $ hg log -r 'unstable()'
+  99f039c5ec9e (draft): SPAM SPAM SPAM
+
+  $ hg evolve
+  move:[17] SPAM SPAM SPAM
+  atop:[14] bathroom stuff
+  merging shopping
+
+  $ hg log -G
+  @  40aa40daeefb (draft): SPAM SPAM SPAM
+  |
+  o  a44c85f957d3 (draft): bathroom stuff
+  |
+  o  a224f2a4fb9f (public): SPAM SPAM
+  |
+  o  41aff6a42b75 (public): adding fruit
+  |
+  o  dfd3a2d7691e (public): adding condiment
+  |
+  o  9ca060c80d74 (public): SPAM
+  |
+  o  7e82d3f3c2cb (public): Monthy Python Shopping list
+  
+
+
+Handling Divergent amend
+----------------------------------------------
+
+We can detect that multiple diverging/conflicting amendments have been made.
+The `evolve` command can solve this situation. But all corner case are not
+handled now.
+
+This section needs to be written.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-uncommit.t	Thu Feb 20 12:56:57 2014 -0800
@@ -0,0 +1,335 @@
+  $ cat >> $HGRCPATH <<EOF
+  > [extensions]
+  > hgext.rebase=
+  > hgext.graphlog=
+  > EOF
+  $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+  $ glog() {
+  >   hg glog --template '{rev}:{node|short}@{branch}({obsolete}/{phase}) {desc|firstline}\n' "$@"
+  > }
+
+  $ hg init repo
+  $ cd repo
+
+Cannot uncommit null changeset
+
+  $ hg uncommit
+  abort: cannot rewrite immutable changeset
+  [255]
+
+Cannot uncommit public changeset
+
+  $ echo a > a
+  $ hg ci -Am adda a
+  $ hg phase --public .
+  $ hg uncommit
+  abort: cannot rewrite immutable changeset
+  [255]
+  $ hg phase --force --draft .
+
+Cannot uncommit merge
+
+  $ hg up -q null
+  $ echo b > b
+  $ echo c > c
+  $ echo d > d
+  $ echo f > f
+  $ echo g > g
+  $ echo j > j
+  $ echo m > m
+  $ echo n > n
+  $ echo o > o
+  $ hg ci -Am addmore
+  adding b
+  adding c
+  adding d
+  adding f
+  adding g
+  adding j
+  adding m
+  adding n
+  adding o
+  created new head
+  $ hg merge
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+  $ hg uncommit
+  abort: cannot uncommit while merging
+  [255]
+  $ hg ci -m merge
+  $ hg uncommit
+  abort: cannot uncommit merge changeset
+  [255]
+
+Prepare complicated changeset
+
+  $ hg branch bar
+  marked working directory as branch bar
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg cp a aa
+  $ echo b >> b
+  $ hg rm c
+  $ echo d >> d
+  $ echo e > e
+  $ hg mv f ff
+  $ hg mv g h
+  $ echo j >> j
+  $ echo k > k
+  $ echo l > l
+  $ hg rm m
+  $ hg rm n
+  $ echo o >> o
+  $ hg ci -Am touncommit
+  adding e
+  adding k
+  adding l
+  $ hg st --copies --change .
+  M b
+  M d
+  M j
+  M o
+  A aa
+    a
+  A e
+  A ff
+    f
+  A h
+    g
+  A k
+  A l
+  R c
+  R f
+  R g
+  R m
+  R n
+  $ hg man -r .
+  a
+  aa
+  b
+  d
+  e
+  ff
+  h
+  j
+  k
+  l
+  o
+
+Add a couple of bookmarks
+
+  $ glog --hidden
+  @  3:5eb72dbe0cb4@bar(stable/draft) touncommit
+  |
+  o    2:f63b90038565@default(stable/draft) merge
+  |\
+  | o  1:f15c744d48e8@default(stable/draft) addmore
+  |
+  o  0:07f494440405@default(stable/draft) adda
+  
+  $ hg bookmark -r 2 unrelated
+  $ hg bookmark touncommit-bm
+  $ hg bookmark --inactive touncommit-bm-inactive
+  $ hg bookmarks
+   * touncommit-bm             3:5eb72dbe0cb4
+     touncommit-bm-inactive    3:5eb72dbe0cb4
+     unrelated                 2:f63b90038565
+
+Prepare complicated working directory
+
+  $ hg branch foo
+  marked working directory as branch foo
+  (branches are permanent and global, did you want a bookmark?)
+  $ hg mv ff f
+  $ hg mv h i
+  $ hg rm j
+  $ hg rm k
+  $ echo l >> l
+  $ echo m > m
+  $ echo o > o
+
+Test uncommit without argument, should be a no-op
+
+  $ hg uncommit
+  abort: nothing to uncommit
+  [255]
+  $ hg bookmarks
+   * touncommit-bm             3:5eb72dbe0cb4
+     touncommit-bm-inactive    3:5eb72dbe0cb4
+     unrelated                 2:f63b90038565
+
+Test no matches
+
+  $ hg uncommit --include nothere
+  abort: nothing to uncommit
+  [255]
+
+Enjoy uncommit
+
+  $ hg uncommit aa b c f ff g h j k l m o
+  $ hg branch
+  foo
+  $ hg st --copies
+  M b
+  A aa
+    a
+  A i
+    g
+  A l
+  R c
+  R g
+  R j
+  R m
+  $ cat aa
+  a
+  $ cat b
+  b
+  b
+  $ cat l
+  l
+  l
+  $ cat m
+  m
+  $ test -f c && echo 'error: c was removed!'
+  [1]
+  $ test -f j && echo 'error: j was removed!'
+  [1]
+  $ test -f k && echo 'error: k was removed!'
+  [1]
+  $ hg st --copies --change .
+  M d
+  A e
+  R n
+  $ hg man -r .
+  a
+  b
+  c
+  d
+  e
+  f
+  g
+  j
+  m
+  o
+  $ hg cat -r . d
+  d
+  d
+  $ hg cat -r . e
+  e
+  $ glog --hidden
+  @  4:e8db4aa611f6@bar(stable/draft) touncommit
+  |
+  | x  3:5eb72dbe0cb4@bar(extinct/draft) touncommit
+  |/
+  o    2:f63b90038565@default(stable/draft) merge
+  |\
+  | o  1:f15c744d48e8@default(stable/draft) addmore
+  |
+  o  0:07f494440405@default(stable/draft) adda
+  
+  $ hg bookmarks
+   * touncommit-bm             4:e8db4aa611f6
+     touncommit-bm-inactive    4:e8db4aa611f6
+     unrelated                 2:f63b90038565
+  $ hg debugobsolete
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 {'date': '* *', 'user': 'test'} (glob)
+
+Test phase is preserved, no local changes
+
+  $ hg up -C 3 --hidden
+  8 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  working directory parent is obsolete!
+  $ hg --config extensions.purge= purge
+  $ hg uncommit -I 'set:added() and e'
+  2 new divergent changesets
+  $ hg st --copies
+  A e
+  $ hg st --copies --change .
+  M b
+  M d
+  M j
+  M o
+  A aa
+  A ff
+    f
+  A h
+    g
+  A k
+  A l
+  R c
+  R f
+  R g
+  R m
+  R n
+  $ glog --hidden
+  @  5:c706fe2c12f8@bar(stable/draft) touncommit
+  |
+  | o  4:e8db4aa611f6@bar(stable/draft) touncommit
+  |/
+  | x  3:5eb72dbe0cb4@bar(extinct/draft) touncommit
+  |/
+  o    2:f63b90038565@default(stable/draft) merge
+  |\
+  | o  1:f15c744d48e8@default(stable/draft) addmore
+  |
+  o  0:07f494440405@default(stable/draft) adda
+  
+  $ hg debugobsolete
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 {'date': '* *', 'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c706fe2c12f83ba5010cb60ea6af3bd1f0c2d6d3 0 {'date': '* *', 'user': 'test'} (glob)
+
+Test --all
+
+  $ hg up -C 3 --hidden
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  working directory parent is obsolete!
+  $ hg --config extensions.purge= purge
+  $ hg uncommit --all -X e
+  1 new divergent changesets
+  $ hg st --copies
+  M b
+  M d
+  M j
+  M o
+  A aa
+    a
+  A ff
+    f
+  A h
+    g
+  A k
+  A l
+  R c
+  R f
+  R g
+  R m
+  R n
+  $ hg st --copies --change .
+  A e
+
+  $ hg debugobsolete
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 {'date': '* *', 'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c706fe2c12f83ba5010cb60ea6af3bd1f0c2d6d3 0 {'date': '* *', 'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c4cbebac3751269bdf12d1466deabcc78521d272 0 {'date': '* *', 'user': 'test'} (glob)
+
+Display a warning if nothing left
+
+  $ hg uncommit e
+  new changeset is empty
+  (use "hg kill ." to remove it)
+  $ hg debugobsolete
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 e8db4aa611f6d5706374288e6898e498f5c44098 0 {'date': '* *', 'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c706fe2c12f83ba5010cb60ea6af3bd1f0c2d6d3 0 {'date': '* *', 'user': 'test'} (glob)
+  5eb72dbe0cb409d094e3b4ae8eaa30071c1b8730 c4cbebac3751269bdf12d1466deabcc78521d272 0 {'date': '* *', 'user': 'test'} (glob)
+  c4cbebac3751269bdf12d1466deabcc78521d272 4f1c269eab68720f54e88ce3c1dc02b2858b6b89 0 {'date': '* *', 'user': 'test'} (glob)
+
+Test instability warning
+
+  $ hg ci -m touncommit
+  $ echo unrelated > unrelated
+  $ hg ci -Am addunrelated unrelated
+  $ hg previous
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  [8] touncommit
+  $ hg uncommit aa
+  1 new unstable changesets