You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by zh...@apache.org on 2020/06/29 14:12:04 UTC

[flink] 04/05: [FLINK-18064][docs] Added unaligned checkpointing to docs.

This is an automated email from the ASF dual-hosted git repository.

zhijiang pushed a commit to branch release-1.11
in repository https://gitbox.apache.org/repos/asf/flink.git

commit 5afb3a68ccb370a9f77649f89f0fcb22dc02fc06
Author: Arvid Heise <ar...@ververica.com>
AuthorDate: Thu Jun 18 10:10:11 2020 +0200

    [FLINK-18064][docs] Added unaligned checkpointing to docs.
    
    It's split into 3 parts to simulate the description of aligned checkpointing:
    - It's added on conceptual level in stateful-stream-processing.md with new/revised pics. It's written in a way that it could survive 1.12 without change.
    - A small change to dev/stream/state/checkpointing.md to show how it is enabled programmatically in Java/Scala/Python. Might need to be extended for 1.12 when new options become available (depending whether they can be programmatically changed or not).
    - A larger discussion in ops/state/checkpoints.md which includes the current limitations and a small glimpse into the next steps (will be in much more detail in blog post). This part needs to be largely rewritten for 1.12+ to reflect the new options.
---
 .../execution_checkpointing_configuration.html     |    2 +-
 docs/concepts/stateful-stream-processing.md        |   56 +-
 docs/dev/stream/state/checkpointing.md             |   11 +
 docs/fig/stream_aligning.svg                       | 1221 ++++++--------------
 docs/fig/stream_unaligning.svg                     |  383 ++++++
 docs/ops/state/checkpoints.md                      |   47 +
 docs/ops/state/large_state_tuning.md               |    2 +
 .../environment/ExecutionCheckpointingOptions.java |    5 +-
 8 files changed, 863 insertions(+), 864 deletions(-)

diff --git a/docs/_includes/generated/execution_checkpointing_configuration.html b/docs/_includes/generated/execution_checkpointing_configuration.html
index 506fa9d..94219b1 100644
--- a/docs/_includes/generated/execution_checkpointing_configuration.html
+++ b/docs/_includes/generated/execution_checkpointing_configuration.html
@@ -60,7 +60,7 @@
             <td><h5>execution.checkpointing.unaligned</h5></td>
             <td style="word-wrap: break-word;">false</td>
             <td>Boolean</td>
-            <td>Enables unaligned checkpoints, which greatly reduce checkpointing times under backpressure.<br /><br />Unaligned checkpoints contain data stored in buffers as part of the checkpoint state, which allows checkpoint barriers to overtake these buffers. Thus, the checkpoint duration becomes independent of the current throughput as checkpoint barriers are effectively not embedded into the stream of data anymore.<br /><br />Unaligned checkpoints can only be enabled if <span mark [...]
+            <td>Enables unaligned checkpoints, which greatly reduce checkpointing times under backpressure.<br /><br />Unaligned checkpoints contain data stored in buffers as part of the checkpoint state, which allows checkpoint barriers to overtake these buffers. Thus, the checkpoint duration becomes independent of the current throughput as checkpoint barriers are effectively not embedded into the stream of data anymore.<br /><br />Unaligned checkpoints can only be enabled if <span mark [...]
         </tr>
     </tbody>
 </table>
diff --git a/docs/concepts/stateful-stream-processing.md b/docs/concepts/stateful-stream-processing.md
index 112171a..b95f483 100644
--- a/docs/concepts/stateful-stream-processing.md
+++ b/docs/concepts/stateful-stream-processing.md
@@ -140,6 +140,8 @@ Keep in mind that everything to do with checkpointing can be done
 asynchronously. The checkpoint barriers don't travel in lock step and
 operations can asynchronously snapshot their state.
 
+Since Flink 1.11, checkpoints can be taken with or without alignment. In this 
+section, we describe aligned checkpoints first.
 
 #### Barriers
 
@@ -189,14 +191,16 @@ streams on the snapshot barriers. The figure above illustrates this:
     received the barrier *n* from the other inputs as well. Otherwise, it would
     mix records that belong to snapshot *n* and with records that belong to
     snapshot *n+1*.
-  - Streams that report barrier *n* are temporarily set aside. Records that are
-    received from these streams are not processed, but put into an input
-    buffer.
   - Once the last stream has received barrier *n*, the operator emits all
     pending outgoing records, and then emits snapshot *n* barriers itself.
-  - After that, it resumes processing records from all input streams,
+  - It snapshots the state and resumes processing records from all input streams,
     processing records from the input buffers before processing the records
     from the streams.
+  - Finally, the operator writes the state asynchronously to the state backend.
+  
+Note that the alignment is needed for all operators with multiple inputs and for 
+operators after a shuffle when they consume output streams of multiple upstream 
+subtasks.
 
 #### Snapshotting Operator State
 
@@ -206,7 +210,7 @@ snapshots as well.
 Operators snapshot their state at the point in time when they have received all
 snapshot barriers from their input streams, and before emitting the barriers to
 their output streams. At that point, all updates to the state from records
-before the barriers will have been made, and no updates that depend on records
+before the barriers have been made, and no updates that depend on records
 from after the barriers have been applied. Because the state of a snapshot may
 be large, it is stored in a configurable *[state backend]({{ site.baseurl }}{%
 link ops/state/state_backends.md %})*. By default, this is the JobManager's
@@ -242,6 +246,48 @@ updates to that state.
 See [Restart Strategies]({% link dev/task_failure_recovery.md
 %}#restart-strategies) for more information.
 
+### Unaligned Checkpointing
+
+Starting with Flink 1.11, checkpointing can also be performed unaligned.
+The basic idea is that checkpoints can overtake all in-flight data as long as 
+the in-flight data becomes part of the operator state.
+
+Note that this approach is actually closer to the [Chandy-Lamport algorithm
+](http://research.microsoft.com/en-us/um/people/lamport/pubs/chandy.pdf), but
+Flink still inserts the barrier in the sources to avoid overloading the
+checkpoint coordinator.
+
+<div style="text-align: center">
+  <img src="{% link fig/stream_unaligning.svg %}" alt="Unaligned checkpointing" style="width:100%; padding-top:10px; padding-bottom:10px;" />
+</div>
+
+The figure depicts how an operator handles unaligned checkpoint barriers:
+
+- The operator reacts on the first barrier that is stored in its input buffers.
+- It immediately forwards the barrier to the downstream operator by adding it 
+  to the end of the output buffers.
+- The operator marks all overtaken records to be stored asynchronously and 
+  creates a snapshot of its own state.
+ 
+Consequently, the operator only briefly stops the processing of input to mark
+the buffers, forwards the barrier, and creates the snapshot of the other state.
+  
+Unaligned checkpointing ensures that barriers are arriving at the sink as fast 
+as possible. It's especially suited for applications with at least one slow 
+moving data path, where alignment times can reach hours. However, since it's
+adding additional I/O pressure, it doesn't help when the I/O to the state 
+backends is the bottleneck. See the more in-depth discussion in 
+[ops]({% link ops/state/checkpoints.md %}#unaligned-checkpoints)
+for other limitations.
+
+Note that savepoints will always be aligned.
+
+#### Unaligned Recovery
+
+Operators first recover the in-flight data before starting processing any data
+from upstream operators in unaligned checkpointing. Aside from that, it 
+performs the same steps as during [recovery of aligned checkpoints](#recovery).
+
 ### State Backends
 
 The exact data structures in which the key/values indexes are stored depends on
diff --git a/docs/dev/stream/state/checkpointing.md b/docs/dev/stream/state/checkpointing.md
index 496b540..147f4a1 100644
--- a/docs/dev/stream/state/checkpointing.md
+++ b/docs/dev/stream/state/checkpointing.md
@@ -78,6 +78,8 @@ Other parameters for checkpointing include:
 
   - *prefer checkpoint for recovery*: This determines if a job will fallback to latest checkpoint even when there are more recent savepoints available to potentially reduce recovery time.
 
+  - *unaligned checkpoints*: You can enable [unaligned checkpoints]({% link ops/state/checkpoints.md %}#unaligned-checkpoints) to greatly reduce checkpointing times under backpressure. Only works for exactly-once checkpoints and with number of concurrent checkpoints of 1.
+
 <div class="codetabs" markdown="1">
 <div data-lang="java" markdown="1">
 {% highlight java %}
@@ -105,6 +107,9 @@ env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCl
 
 // allow job recovery fallback to checkpoint when there is a more recent savepoint
 env.getCheckpointConfig().setPreferCheckpointForRecovery(true);
+
+// enables the experimental unaligned checkpoints
+env.getCheckpointConfig.enableUnalignedCheckpoints();
 {% endhighlight %}
 </div>
 <div data-lang="scala" markdown="1">
@@ -130,6 +135,9 @@ env.getCheckpointConfig.setFailTasksOnCheckpointingErrors(false)
 
 // allow only one checkpoint to be in progress at the same time
 env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)
+
+// enables the experimental unaligned checkpoints
+env.getCheckpointConfig.enableUnalignedCheckpoints()
 {% endhighlight %}
 </div>
 <div data-lang="python" markdown="1">
@@ -158,6 +166,9 @@ env.get_checkpoint_config().enable_externalized_checkpoints(ExternalizedCheckpoi
 
 # allow job recovery fallback to checkpoint when there is a more recent savepoint
 env.get_checkpoint_config().set_prefer_checkpoint_for_recovery(True)
+
+// enables the experimental unaligned checkpoints
+env.get_checkpoint_config().enable_unaligned_checkpoints()
 {% endhighlight %}
 </div>
 </div>
diff --git a/docs/fig/stream_aligning.svg b/docs/fig/stream_aligning.svg
index de25435..2192117 100644
--- a/docs/fig/stream_aligning.svg
+++ b/docs/fig/stream_aligning.svg
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
@@ -18,860 +18,369 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<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"
-   version="1.1"
-   width="1238.8232"
-   height="221.09566"
-   id="svg2">
-  <defs
-     id="defs4" />
-  <metadata
-     id="metadata7">
-    <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
-     transform="translate(307.98305,-396.10006)"
-     id="layer1">
-    <g
-       transform="translate(-313.94491,396.17508)"
-       id="g2989">
-      <path
-         d="m 150.43123,97.139825 c 0,-28.47897 23.13388,-51.575349 51.65974,-51.575349 28.52586,0 51.65037,23.096379 51.65037,51.575349 0,28.488345 -23.12451,51.575345 -51.65037,51.575345 -28.52586,0 -51.65974,-23.087 -51.65974,-51.575345"
-         id="path2991"
-         style="fill:#8a3142;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="M 23.368322,-0.07501869 162.13414,64.047206 151.37834,87.312377 12.612517,23.190152 z"
-         id="path2993"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 156.39521,63.156359 2.52251,1.16279 -9.41485,20.376951 -2.53188,-1.172167 z"
-         id="path2995"
-         style="fill:#6e7277;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 143.23881,63.944055 7.9426,3.666538 -4.18229,9.058507 -7.9426,-3.666538 z"
-         id="path2997"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 145.30182,74.193483 -3.11327,-1.434732 0.27194,-0.590772 1.2003,0.553263 1.77232,-3.844708 -1.19093,-0.553263 0.24382,-0.525131 c 0.15941,0.07502 0.33758,0.14066 0.5345,0.196924 0.19693,0.05626 0.35634,0.0844 0.47825,0.07502 0.15003,-0.0094 0.28132,-0.04689 0.39385,-0.112528 0.11252,-0.06564 0.21567,-0.187547 0.30007,-0.346962 l 0.60015,0.281321 -2.39122,5.176289 1.17217,0.534508 z"
-         id="path2999"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 127.49426,56.667242 7.95198,3.666539 -4.19167,9.067884 -7.9426,-3.675916 z"
-         id="path3001"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 129.88548,67.066708 -3.89159,-1.791071 0.37509,-0.806451 c 0.3751,-0.112528 0.75019,-0.215679 1.13466,-0.31883 0.37509,-0.112528 0.73143,-0.225056 1.07839,-0.346961 0.71268,-0.243811 1.22843,-0.468867 1.53789,-0.665791 0.30945,-0.196924 0.54388,-0.459489 0.69392,-0.787696 0.14066,-0.300075 0.15004,-0.581395 0.0281,-0.834583 -0.1219,-0.262565 -0.35634,-0.468867 -0.7033,-0.637659 -0.23443,-0.103151 -0.50638,-0.178169 -0.81583,-0.225056 -0.30945,-0.04689 -0.63766,-0.03751 -0.9 [...]
-         id="path3003"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 109.69608,48.443318 7.9426,3.666539 -4.18229,9.058507 -7.95198,-3.666539 z"
-         id="path3005"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 112.85624,55.842037 c 0.075,0.168792 0.11253,0.356338 0.11253,0.56264 0,0.196924 -0.0563,0.431357 -0.17817,0.7033 -0.12191,0.253188 -0.28132,0.478244 -0.47825,0.647036 -0.19692,0.17817 -0.42198,0.309452 -0.66579,0.393848 -0.28132,0.0844 -0.56264,0.112528 -0.86271,0.0844 -0.30008,-0.03751 -0.60953,-0.131282 -0.91898,-0.271942 -0.31883,-0.150038 -0.6189,-0.328207 -0.89085,-0.543886 -0.27194,-0.225056 -0.48762,-0.42198 -0.64703,-0.600149 l 0.37509,-0.806451 0.0563,0.01875 c 0. [...]
-         id="path3007"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 79.969923,34.705521 7.951981,3.675916 -4.19167,9.058506 -7.942603,-3.675915 z"
-         id="path3009"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 83.242613,43.548349 -0.853338,-0.393848 -0.750187,1.622279 -0.740809,-0.346961 0.750187,-1.612902 -2.756937,-1.275318 0.412603,-0.88147 4.276065,-1.959863 0.712677,0.328207 -1.622279,3.516501 0.853338,0.393848 -0.28132,0.609527 z m -1.312827,-1.350336 1.200299,-2.588145 -3.422728,1.556638 2.222429,1.031507 z"
-         id="path3011"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 48.696507,20.255046 7.942603,3.666538 -4.182292,9.058507 -7.951981,-3.666538 z"
-         id="path3013"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 51.875423,28.807177 c -0.121905,0.271942 -0.290697,0.496998 -0.496998,0.7033 -0.215679,0.196924 -0.440735,0.337584 -0.684546,0.431357 -0.271943,0.09377 -0.553263,0.131283 -0.853337,0.103151 -0.300075,-0.01875 -0.618905,-0.103151 -0.956489,-0.262565 -0.318829,-0.14066 -0.600149,-0.31883 -0.862715,-0.515754 -0.262565,-0.196924 -0.468866,-0.393848 -0.628281,-0.581395 l 0.375093,-0.815828 0.05626,0.02813 c 0.150038,0.234433 0.346962,0.459489 0.581395,0.684546 0.243811,0.225056  [...]
-         id="path3015"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 35.821424,14.300438 7.942604,3.675915 -4.182292,9.058507 -7.942604,-3.675916 z"
-         id="path3017"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 39.150378,22.8807 c -0.262565,0.581395 -0.675168,0.975243 -1.237808,1.16279 -0.553263,0.187547 -1.106526,0.159415 -1.669166,-0.103151 -0.28132,-0.131283 -0.515753,-0.290697 -0.7033,-0.487621 -0.196924,-0.187547 -0.337584,-0.412603 -0.440735,-0.665791 -0.121905,-0.31883 -0.159415,-0.684546 -0.112528,-1.087771 0.03751,-0.412603 0.178169,-0.862715 0.403226,-1.359714 0.234433,-0.506376 0.506376,-0.928356 0.797073,-1.275318 0.290698,-0.337584 0.618904,-0.609526 1.003375,-0.80645 [...]
-         id="path3019"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="M 7.5487556,164.28155 148.8277,104.0603 158.91772,127.74745 17.638769,187.9687 z"
-         id="path3021"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 93.116948,129.59479 2.578767,-1.10653 8.842825,20.75204 -2.57876,1.09715 z"
-         id="path3023"
-         style="fill:#6e7277;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 136.01826,118.07004 8.08326,-3.45086 3.93849,9.2273 -8.09265,3.44148 z"
-         id="path3025"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 145.04864,123.41512 -0.73144,0.30945 -0.19692,-0.45949 c -0.0469,0.0656 -0.10315,0.1688 -0.18755,0.2907 -0.075,0.13128 -0.15004,0.24381 -0.23443,0.32821 -0.10315,0.11253 -0.21568,0.22505 -0.35634,0.33758 -0.15004,0.10315 -0.32821,0.2063 -0.53451,0.2907 -0.39385,0.16879 -0.78769,0.18755 -1.17217,0.0375 -0.38447,-0.14066 -0.65641,-0.4126 -0.83458,-0.81583 -0.14066,-0.33758 -0.17817,-0.62828 -0.13128,-0.90022 0.0563,-0.26257 0.18755,-0.50638 0.40322,-0.74081 0.21568,-0.22506 0 [...]
-         id="path3027"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 119.98302,124.89674 8.09264,-3.45086 3.9291,9.2273 -8.08326,3.45086 z"
-         id="path3029"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 128.45075,127.86936 c 0.15942,0.36571 0.25319,0.71267 0.27194,1.05026 0.0188,0.33758 -0.0188,0.63766 -0.10315,0.9096 -0.10315,0.2907 -0.23443,0.53451 -0.4126,0.73143 -0.17817,0.19692 -0.40323,0.34696 -0.66579,0.45949 -0.25319,0.11253 -0.47825,0.16879 -0.68455,0.18755 -0.21568,0.0281 -0.43135,0.0187 -0.64703,0 l 0.0375,0.22505 -0.69393,0.2907 -2.58814,-6.07651 0.73143,-0.31883 0.92836,2.17554 c 0.13128,-0.26257 0.29069,-0.48762 0.47824,-0.69392 0.18755,-0.2063 0.42198,-0.375 [...]
-         id="path3031"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 101.866,132.62366 8.08327,-3.45085 3.93848,9.22729 -8.09264,3.45086 z"
-         id="path3033"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 110.98077,137.61241 c -0.19692,0.22505 -0.39385,0.4126 -0.58139,0.57202 -0.19693,0.15941 -0.4126,0.29069 -0.66579,0.40322 -0.30945,0.13128 -0.61891,0.2063 -0.92836,0.22506 -0.30007,0.0187 -0.58139,-0.0188 -0.85334,-0.13129 -0.27194,-0.10315 -0.51575,-0.28132 -0.74081,-0.52513 -0.22505,-0.23443 -0.42198,-0.55326 -0.59077,-0.93773 -0.30007,-0.71268 -0.34696,-1.35034 -0.1219,-1.93173 0.21568,-0.57202 0.64703,-0.994 1.29407,-1.26594 0.24381,-0.11253 0.50637,-0.17817 0.77832,-0. [...]
-         id="path3035"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 71.605339,145.5175 8.083263,-3.44148 3.938482,9.21792 -8.092641,3.45086 z"
-         id="path3037"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 80.710732,150.83445 -0.731432,0.31883 -0.196924,-0.45949 c -0.131283,0.27194 -0.290698,0.50638 -0.478244,0.71268 -0.187547,0.19692 -0.412603,0.34696 -0.684546,0.46887 -0.515753,0.21567 -1.012752,0.19692 -1.490996,-0.075 -0.478244,-0.27195 -0.872093,-0.75957 -1.172167,-1.47224 -0.159415,-0.3751 -0.243811,-0.72206 -0.262566,-1.05964 -0.01875,-0.33759 0.01875,-0.63766 0.112528,-0.91898 0.09377,-0.27195 0.234434,-0.51576 0.42198,-0.72206 0.196924,-0.19692 0.412603,-0.35634 0.66 [...]
-         id="path3039"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 39.759905,159.09588 8.083264,-3.45085 3.938481,9.22729 -8.092641,3.45086 z"
-         id="path3041"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 48.22764,162.19978 -3.216427,1.36909 c 0.112528,0.26257 0.253188,0.48763 0.421981,0.64704 0.159414,0.16879 0.346961,0.28132 0.534508,0.34696 0.196924,0.0656 0.393848,0.0938 0.609527,0.075 0.206301,-0.009 0.431357,-0.0656 0.656413,-0.16879 0.290698,-0.12191 0.572018,-0.30945 0.815828,-0.55326 0.253188,-0.25319 0.412603,-0.45949 0.496999,-0.62829 l 0.03751,-0.0188 0.337585,0.80645 c -0.196924,0.2063 -0.412603,0.40323 -0.637659,0.5814 -0.234434,0.17816 -0.487622,0.3282 -0.7689 [...]
-         id="path3043"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 26.650389,164.68478 8.092641,-3.45086 3.929104,9.2273 -8.092641,3.44148 z"
-         id="path3045"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 33.355185,164.6754 -0.03751,0.0188 c -0.09377,0.009 -0.206301,0.0281 -0.346961,0.0657 -0.14066,0.0281 -0.262566,0.0656 -0.356339,0.10315 -0.318829,0.14066 -0.515753,0.30007 -0.600149,0.50637 -0.0844,0.19693 -0.04689,0.47825 0.112528,0.84396 l 0.05626,0.15004 1.331581,-0.56264 0.262566,0.6189 -1.30345,0.55327 1.594147,3.74155 -0.731432,0.31883 -1.594147,-3.75093 -0.496999,0.21568 -0.262565,-0.61891 0.496998,-0.21567 -0.06564,-0.14067 c -0.225056,-0.51575 -0.262565,-0.97524 - [...]
-         id="path3047"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <text
-         x="126.48644"
-         y="217.39491"
-         id="text3049"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">begin aligning</text>
-      <path
-         d="M 46.633493,3.0288796 147.84308,50.51571 146.65216,53.066345 45.433194,5.579515 46.633493,3.0288796 z m 101.134567,44.3454224 5.84208,7.408096 -9.4336,0.234433 3.59152,-7.642529 z"
-         id="path3051"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.00937734px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 38.306418,188.70013 105.110562,-44.84242 -1.09715,-2.58814 -105.119938,44.84242 1.106526,2.58814 z m 104.923012,-41.70101 6.10465,-7.19242 -9.41485,-0.57201 3.3102,7.76443 z"
-         id="path3053"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.00937734px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         x="5.2541633"
-         y="98.157814"
-         id="text3055"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">c</text>
-      <text
-         x="12.455957"
-         y="98.157814"
-         id="text3057"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">heckpoint</text>
-      <text
-         x="12.30592"
-         y="114.66193"
-         id="text3059"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">barrier </text>
-      <text
-         x="63.768742"
-         y="114.66193"
-         id="text3061"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">n</text>
-      <path
-         d="M 85.68072,95.930149 148.36821,84.780496 148.15253,83.552065 85.465041,94.69234 z m 63.0157,-9.302318 c 1.35971,-0.234433 2.26931,-1.537883 2.0255,-2.897597 -0.24381,-1.359713 -1.53788,-2.269315 -2.89759,-2.025504 -1.35972,0.24381 -2.26932,1.537883 -2.02551,2.897597 0.24381,1.359713 1.53789,2.269315 2.8976,2.025504 z"
-         id="path3063"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.00937734px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 80.129337,109.72421 14.769305,18.93284 -0.984621,0.76894 -14.769304,-18.93284 z m 16.250924,17.77943 c 0.84396,1.08777 0.656413,2.66316 -0.431358,3.50712 -1.097148,0.85334 -2.663163,0.65642 -3.516501,-0.43135 -0.84396,-1.08778 -0.656413,-2.66317 0.431358,-3.50713 1.097148,-0.85334 2.663163,-0.65641 3.516501,0.43136 z"
-         id="path3065"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.00937734px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 252.64419,84.170969 0,25.628261 48.61211,0 0,-25.628261 -48.61211,0 z"
-         id="path3067"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 284.3771,91.98229 0,10.00562 8.74905,0 0,-10.00562 -8.74905,0 z"
-         id="path3069"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="286.25586"
-         y="100.50925"
-         id="text3071"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">x</text>
-      <path
-         d="m 270.15168,91.98229 0,10.00562 8.74905,0 0,-10.00562 -8.74905,0 z"
-         id="path3073"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="272.00772"
-         y="100.50934"
-         id="text3075"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">y</text>
-      <path
-         d="m 253.75072,77.288004 42.5731,0 0,2.813201 -42.5731,0 0,-2.813201 z m 41.1665,-2.8132 8.4396,4.219801 -8.4396,4.219801 0,-8.439602 z"
-         id="path3077"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         x="166.75418"
-         y="123.98857"
-         id="text3079"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">operator</text>
-      <path
-         d="m 455.04461,97.149202 c 0,-28.488347 23.087,-51.575348 51.57535,-51.575348 28.48835,0 51.57535,23.087001 51.57535,51.575348 0,28.488348 -23.087,51.575348 -51.57535,51.575348 -28.48835,0 -51.57535,-23.087 -51.57535,-51.575348"
-         id="path3081"
-         style="fill:#8a3142;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="M 327.86918,-0.07501869 466.635,64.047206 455.88857,87.321754 317.12275,23.19953 z"
-         id="path3083"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 384.47078,34.714898 7.95198,3.675916 -4.18229,9.058507 -7.95198,-3.675916 z"
-         id="path3085"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 389.14069,40.228772 -4.85746,3.69467 -0.8252,-0.393848 5.10127,-3.788443 -3.26331,-1.500374 0.30007,-0.675168 3.93848,1.819203 z"
-         id="path3087"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 353.20674,20.255046 7.93323,3.675916 -4.18229,9.058507 -7.95198,-3.675916 z"
-         id="path3089"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 356.37628,29.069742 c -0.24381,0.506376 -0.6189,0.825206 -1.16279,0.975243 -0.54388,0.150037 -1.10652,0.09377 -1.68792,-0.187547 -0.6189,-0.28132 -1.05026,-0.675168 -1.25656,-1.162789 -0.22506,-0.487622 -0.22506,-0.993998 0.0188,-1.48162 0.13129,-0.318829 0.3751,-0.56264 0.67517,-0.750186 0.30008,-0.168792 0.65642,-0.243811 1.06902,-0.243811 l 0,-0.01875 c -0.22506,-0.318829 -0.3751,-0.600149 -0.43136,-0.862715 -0.0563,-0.262565 -0.0188,-0.543885 0.11253,-0.84396 0.2063,-0. [...]
-         id="path3091"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 340.32228,14.309815 7.95198,3.675916 -4.18229,9.058506 -7.95198,-3.675915 z"
-         id="path3093"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 344.18575,21.492854 c -0.22506,0.506377 -0.48763,0.918979 -0.80646,1.275318 -0.30007,0.356339 -0.6189,0.637659 -0.99399,0.806451 -0.3751,0.187547 -0.76894,0.28132 -1.2003,0.28132 -0.41261,0 -0.86272,-0.112528 -1.35034,-0.337584 -0.13128,-0.05626 -0.24381,-0.131283 -0.35634,-0.187547 -0.11253,-0.07502 -0.2063,-0.150037 -0.28132,-0.225056 l 0.33759,-0.731432 0.0375,0.01875 c 0.0563,0.07502 0.13128,0.150037 0.26256,0.24381 0.11253,0.112528 0.26257,0.187547 0.43136,0.262566 0.5 [...]
-         id="path3095"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 312.05899,164.29093 141.27895,-60.22125 10.09001,23.68715 -141.27894,60.22125 z"
-         id="path3097"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 433.19542,113.80335 2.58814,-1.08777 8.83346,20.74267 -2.56939,1.08777 z"
-         id="path3099"
-         style="fill:#6e7277;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 440.5285,118.07942 8.08326,-3.45086 3.93848,9.20854 -8.10202,3.45086 z"
-         id="path3101"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 449.64327,123.06816 c -0.2063,0.22506 -0.39385,0.4126 -0.5814,0.56264 -0.2063,0.16879 -0.4126,0.30007 -0.67517,0.39385 -0.30007,0.15004 -0.6189,0.22505 -0.91897,0.24381 -0.30008,0.0187 -0.5814,-0.0375 -0.86272,-0.13128 -0.26256,-0.11253 -0.50638,-0.28132 -0.73143,-0.52514 -0.22506,-0.24381 -0.43136,-0.56264 -0.60015,-0.93773 -0.30008,-0.71268 -0.33759,-1.36909 -0.11253,-1.93173 0.2063,-0.58139 0.63766,-0.994 1.29407,-1.27532 0.24381,-0.11253 0.50638,-0.16879 0.76894,-0.2063 [...]
-         id="path3103"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 424.49325,124.90612 8.08327,-3.45086 3.93848,9.2273 -8.08327,3.45086 z"
-         id="path3105"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 433.60802,130.21369 -0.73143,0.31883 -0.2063,-0.45011 c -0.13128,0.26256 -0.28132,0.50637 -0.46887,0.69392 -0.18754,0.2063 -0.4126,0.35634 -0.69392,0.46887 -0.52513,0.22505 -1.01275,0.2063 -1.50037,-0.0563 -0.46887,-0.28132 -0.86272,-0.76894 -1.16279,-1.48162 -0.15004,-0.37509 -0.24381,-0.71267 -0.26257,-1.05026 -0.0188,-0.33758 0.0188,-0.65641 0.11253,-0.91898 0.0938,-0.28132 0.24381,-0.52513 0.43136,-0.73143 0.18754,-0.2063 0.4126,-0.35634 0.65641,-0.46887 0.22506,-0.0938 [...]
-         id="path3107"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 406.35748,132.63304 8.10202,-3.45086 3.91973,9.2273 -8.08326,3.45086 z"
-         id="path3109"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 414.8346,135.72756 -3.20705,1.36909 c 0.11252,0.26257 0.24381,0.48763 0.4126,0.65642 0.16879,0.16879 0.33758,0.28132 0.54389,0.33758 0.18754,0.075 0.39384,0.0938 0.60014,0.075 0.20631,0 0.43136,-0.0563 0.65642,-0.16879 0.30007,-0.11253 0.56264,-0.30008 0.8252,-0.54389 0.24381,-0.26256 0.41261,-0.46886 0.48763,-0.63766 l 0.0375,-0.0187 0.33759,0.80645 c -0.18755,0.2063 -0.4126,0.4126 -0.63766,0.5814 -0.22506,0.18754 -0.48762,0.33758 -0.76894,0.45011 -0.73143,0.31883 -1.36909 [...]
-         id="path3111"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 376.1062,145.5175 8.08326,-3.4321 3.93848,9.20854 -8.08326,3.45086 z"
-         id="path3113"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 382.82037,145.5175 -0.0375,0.0188 c -0.0938,0.0188 -0.2063,0.0375 -0.35634,0.0563 -0.13128,0.0375 -0.26256,0.075 -0.35634,0.11253 -0.31883,0.13128 -0.50637,0.30007 -0.60015,0.50637 -0.075,0.20631 -0.0375,0.48763 0.11253,0.84397 l 0.0563,0.15003 1.33158,-0.56264 0.26256,0.61891 -1.29407,0.54388 1.59415,3.75094 -0.73143,0.31883 -1.61291,-3.75094 -0.48762,0.2063 -0.26256,-0.60015 0.48762,-0.22505 -0.0563,-0.13129 c -0.22505,-0.52513 -0.26256,-0.97524 -0.11252,-1.36909 0.13128, [...]
-         id="path3115"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 344.26076,159.09588 8.08327,-3.45085 3.93848,9.22729 -8.08326,3.45086 z"
-         id="path3117"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 353.16923,163.91584 c 0.30008,0.75018 0.3751,1.35033 0.18755,1.85671 -0.18755,0.48762 -0.63766,0.88147 -1.33158,1.18154 -0.24381,0.0938 -0.46887,0.16879 -0.69392,0.22506 -0.24382,0.075 -0.48763,0.11253 -0.71268,0.15004 l -0.31883,-0.75019 0.0375,-0.0188 c 0.13128,0 0.35634,-0.0375 0.63766,-0.075 0.30007,-0.0375 0.56264,-0.11253 0.8252,-0.22506 0.24381,-0.11253 0.45011,-0.22506 0.5814,-0.35634 0.15003,-0.13128 0.22505,-0.26256 0.28132,-0.4126 0.0375,-0.15004 0.0563,-0.30008  [...]
-         id="path3119"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 331.15125,164.68478 8.08326,-3.45086 3.93848,9.2273 -8.08326,3.45086 z"
-         id="path3121"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 340.37855,169.95484 -0.73144,0.31883 -1.06901,-2.49437 c -0.075,-0.18755 -0.16879,-0.3751 -0.28132,-0.54389 -0.0938,-0.16879 -0.18755,-0.28132 -0.30008,-0.35634 -0.11252,-0.075 -0.24381,-0.13128 -0.37509,-0.13128 -0.15004,0 -0.31883,0.0375 -0.52513,0.13128 -0.18755,0.075 -0.37509,0.22506 -0.56264,0.41261 -0.16879,0.18754 -0.33759,0.4126 -0.46887,0.65641 l 1.38785,3.24456 -0.73143,0.31883 -2.58815,-6.07652 0.73143,-0.31883 0.93774,2.1943 c 0.15003,-0.28132 0.31883,-0.52513 0 [...]
-         id="path3123"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <text
-         x="458.11777"
-         y="217.39491"
-         id="text3125"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">aligning</text>
-      <path
-         d="m 351.08746,3.0382569 101.21897,47.4868301 -1.2003,2.550635 -101.21896,-47.4868297 1.20029,-2.5506354 z m 101.1252,44.3360451 5.85146,7.408096 -9.4336,0.24381 3.58214,-7.651906 z"
-         id="path3127"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 342.76039,188.70951 105.11994,-44.84242 -1.10653,-2.58814 -105.11994,44.84242 1.10653,2.58814 z m 104.93239,-41.71039 6.09527,-7.18304 -9.41485,-0.58139 3.31958,7.76443 z"
-         id="path3129"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 557.27633,84.170969 0,25.656391 67.17924,0 0,-25.656391 -67.17924,0 z"
-         id="path3131"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 588.82169,91.991667 0,9.996243 8.90847,0 0,-9.996243 -8.90847,0 z"
-         id="path3133"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="590.67731"
-         y="100.50925"
-         id="text3135"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">a</text>
-      <path
-         d="m 574.60565,91.991667 0,9.996243 8.75843,0 0,-9.996243 -8.75843,0 z"
-         id="path3137"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="576.35101"
-         y="100.50934"
-         id="text3139"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">b</text>
-      <path
-         d="m 558.21407,77.306759 42.5731,0 0,2.813201 -42.5731,0 0,-2.813201 z m 41.14775,-2.813201 8.4396,4.201047 -8.4396,4.238556 0,-8.439603 z"
-         id="path3141"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         x="471.25378"
-         y="123.98857"
-         id="text3143"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">operator</text>
-      <path
-         d="m 480.04459,70.104965 0,19.542368 57.05171,0 0,-19.542368 -57.05171,0 z"
-         id="path3145"
-         style="fill:#b8bec6;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 497.56146,74.94367 0,10.014995 8.73967,0 0,-10.014995 -8.73967,0 z"
-         id="path3147"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="499.1666"
-         y="83.519676"
-         id="text3149"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">2</text>
-      <path
-         d="m 483.32666,74.94367 0,10.014995 8.75843,0 0,-10.014995 -8.75843,0 z"
-         id="path3151"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="484.91843"
-         y="83.519775"
-         id="text3153"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">3</text>
-      <path
-         d="m 510.83976,74.793633 0,9.99624 8.75843,0 0,-9.99624 -8.75843,0 z"
-         id="path3155"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="512.43573"
-         y="83.345718"
-         id="text3157"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">1</text>
-      <path
-         d="m 446.64252,63.146981 7.93323,3.675916 -4.1823,9.058507 -7.93322,-3.657161 z"
-         id="path3159"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 449.90583,71.999187 -0.86271,-0.393848 -0.73143,1.612901 -0.75019,-0.337584 0.75019,-1.612901 -2.75694,-1.275318 0.4126,-0.88147 4.27607,-1.950486 0.71267,0.31883 -1.6129,3.507124 0.84396,0.393848 -0.28132,0.618904 z m -1.31282,-1.350337 1.20029,-2.588144 -3.4321,1.556637 2.23181,1.031507 z"
-         id="path3161"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 415.35973,48.705884 7.95198,3.675916 -4.20105,9.058506 -7.93323,-3.675915 z"
-         id="path3163"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 418.54802,57.258014 c -0.13128,0.262566 -0.30007,0.506377 -0.50638,0.693923 -0.2063,0.206302 -0.43135,0.356339 -0.69392,0.431358 -0.26256,0.09377 -0.54388,0.131282 -0.84396,0.112528 -0.30007,-0.01875 -0.6189,-0.112528 -0.95649,-0.262566 -0.31883,-0.150037 -0.60015,-0.318829 -0.86271,-0.52513 -0.26257,-0.187547 -0.46887,-0.393849 -0.61891,-0.562641 l 0.3751,-0.825205 0.0563,0.03751 c 0.13128,0.225056 0.33759,0.450112 0.5814,0.675168 0.22505,0.225056 0.48762,0.393848 0.76894, [...]
-         id="path3165"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 402.49402,42.760653 7.93323,3.657161 -4.18229,9.058507 -7.95199,-3.657162 z"
-         id="path3167"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 405.8136,51.331538 c -0.26257,0.581395 -0.67517,0.975243 -1.23781,1.16279 -0.54389,0.187546 -1.10653,0.150037 -1.66917,-0.09377 -0.28132,-0.131282 -0.50637,-0.300074 -0.71267,-0.487621 -0.18755,-0.206302 -0.33759,-0.431358 -0.43136,-0.675168 -0.11253,-0.31883 -0.15004,-0.675169 -0.11253,-1.087771 0.0375,-0.412603 0.16879,-0.862715 0.4126,-1.350337 0.22506,-0.525131 0.48763,-0.937733 0.7877,-1.294072 0.28132,-0.337584 0.6189,-0.60015 1.01275,-0.806451 0.35634,-0.168792 0.750 [...]
-         id="path3169"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <text
-         x="486.90817"
-         y="30.892836"
-         id="text3171"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">input buffer</text>
-      <path
-         d="m 525.2246,37.077987 2.86946,34.733653 -1.23781,0.09377 -2.88822,-34.714898 z m 4.74493,34.564861 c 0.11253,1.387846 -0.90023,2.588145 -2.28807,2.700673 -1.36909,0.112528 -2.58815,-0.900224 -2.70067,-2.28807 -0.11253,-1.369091 0.91897,-2.56939 2.28807,-2.681918 1.38784,-0.131283 2.58814,0.900224 2.70067,2.269315 z"
-         id="path3173"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.01875467px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 767.17862,97.149202 c 0,-28.469592 23.06825,-51.575348 51.57535,-51.575348 28.46959,0 51.57535,23.105756 51.57535,51.575348 0,28.507098 -23.10576,51.575348 -51.57535,51.575348 -28.5071,0 -51.57535,-23.06825 -51.57535,-51.575348"
-         id="path3175"
-         style="fill:#8a3142;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="M 640.05945,-0.07501869 778.80652,64.06596 768.07885,87.321754 629.29427,23.218284 z"
-         id="path3177"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 724.75555,48.274526 7.95199,3.675916 -4.20105,9.039752 -7.95198,-3.638406 z"
-         id="path3179"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 729.40671,53.7884 -4.8387,3.675916 -0.82521,-0.375094 5.10127,-3.788443 -3.26331,-1.500374 0.30008,-0.675168 3.93848,1.800448 z"
-         id="path3181"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 693.47276,33.833429 7.95198,3.675916 -4.20104,9.039752 -7.91448,-3.675916 z"
-         id="path3183"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 696.66106,42.648125 c -0.22506,0.487621 -0.63766,0.825205 -1.16279,0.975243 -0.52513,0.150037 -1.08777,0.07502 -1.68792,-0.187547 -0.63766,-0.300075 -1.05027,-0.675168 -1.27532,-1.16279 -0.22506,-0.487621 -0.22506,-1.012752 0.0375,-1.500374 0.15003,-0.337584 0.37509,-0.56264 0.67517,-0.750186 0.30007,-0.150038 0.63765,-0.262566 1.05026,-0.225056 l 0,-0.03751 c -0.22506,-0.300075 -0.3751,-0.600149 -0.41261,-0.862715 -0.075,-0.262565 -0.0375,-0.525131 0.11253,-0.825205 0.1875 [...]
-         id="path3185"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 680.60706,27.869443 7.95198,3.675916 -4.20105,9.039752 -7.95198,-3.638407 z"
-         id="path3187"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 684.47052,35.071237 c -0.22506,0.487622 -0.48762,0.900224 -0.7877,1.275318 -0.30007,0.337584 -0.63766,0.600149 -1.01275,0.787696 -0.37509,0.187547 -0.7877,0.300075 -1.2003,0.300075 -0.4126,-0.03751 -0.86271,-0.150038 -1.35034,-0.337584 -0.15003,-0.07502 -0.26256,-0.150038 -0.37509,-0.225056 -0.11253,-0.03751 -0.18755,-0.112528 -0.26256,-0.187547 l 0.33758,-0.750187 0.0375,0.03751 c 0.0375,0.03751 0.15004,0.150038 0.26256,0.225056 0.11253,0.112528 0.26257,0.187547 0.41261,0. [...]
-         id="path3189"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 624.23051,164.29093 141.2977,-60.2025 10.09002,23.6684 -141.2977,60.24 z"
-         id="path3191"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 768.82903,104.80111 2.58815,-1.08777 8.8147,20.74267 -2.55064,1.08777 z"
-         id="path3193"
-         style="fill:#6e7277;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 752.39994,118.26696 8.06451,-3.45086 3.93848,9.2273 -8.10202,3.41335 z"
-         id="path3195"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 761.4772,123.55578 -0.71267,0.33758 -0.18755,-0.48762 c -0.15004,0.30008 -0.30008,0.52513 -0.48762,0.71268 -0.18755,0.22506 -0.41261,0.37509 -0.67517,0.48762 -0.52513,0.22506 -1.01275,0.18755 -1.50037,-0.075 -0.48763,-0.26256 -0.86272,-0.75018 -1.16279,-1.46286 -0.18755,-0.37509 -0.26257,-0.75019 -0.26257,-1.08777 -0.0375,-0.30008 0,-0.63766 0.11253,-0.90023 0.075,-0.26256 0.22505,-0.52513 0.4126,-0.71267 0.18755,-0.22506 0.4126,-0.3751 0.67517,-0.48762 0.22506,-0.075 0.450 [...]
-         id="path3197"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 734.24542,125.95638 8.10202,-3.41335 3.93848,9.18979 -8.10202,3.45086 z"
-         id="path3199"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 742.72253,129.06965 -3.2258,1.38785 c 0.11253,0.26257 0.26256,0.48762 0.45011,0.63766 0.15004,0.15004 0.33758,0.30007 0.52513,0.33758 0.18755,0.075 0.37509,0.11253 0.60015,0.075 0.22506,0 0.45011,-0.075 0.67517,-0.15004 0.26256,-0.15003 0.56264,-0.30007 0.78769,-0.56264 0.26257,-0.26256 0.45012,-0.45011 0.52513,-0.63765 l 0.0375,0 0.33759,0.78769 c -0.22506,0.22506 -0.4126,0.4126 -0.63766,0.60015 -0.26257,0.18755 -0.48762,0.33759 -0.7877,0.45011 -0.71267,0.30008 -1.38784,0. [...]
-         id="path3201"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 704.01289,138.85959 8.06451,-3.45086 3.93848,9.2273 -8.10202,3.45086 z"
-         id="path3203"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 710.68955,138.85959 -0.0375,0.0375 c -0.075,0 -0.18755,0 -0.33758,0.0375 -0.15004,0.0375 -0.26257,0.075 -0.33759,0.11253 -0.33758,0.15004 -0.52513,0.30007 -0.60015,0.52513 -0.11252,0.18755 -0.075,0.45011 0.11253,0.82521 l 0.0375,0.15003 1.35034,-0.56264 0.26256,0.63766 -1.31282,0.52513 1.57539,3.75094 -0.71268,0.33758 -1.6129,-3.75093 -0.48762,0.18754 -0.26257,-0.60015 0.48762,-0.22505 -0.0375,-0.15004 c -0.22505,-0.48762 -0.26256,-0.97524 -0.15003,-1.35034 0.15003,-0.37509 [...]
-         id="path3205"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 672.16745,152.43798 8.06451,-3.45086 3.93848,9.2273 -8.10201,3.45085 z"
-         id="path3207"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 681.05717,157.27668 c 0.30007,0.71268 0.37509,1.35034 0.18755,1.83796 -0.18755,0.48762 -0.63766,0.86271 -1.35034,1.16279 -0.22506,0.11253 -0.45011,0.18755 -0.67517,0.26256 -0.22506,0.0375 -0.48762,0.11253 -0.71268,0.15004 l -0.33758,-0.75018 0.0375,-0.0375 c 0.15004,0 0.37509,-0.0375 0.67517,-0.075 0.26256,-0.0375 0.56264,-0.11253 0.8252,-0.22506 0.22506,-0.11253 0.4126,-0.22506 0.56264,-0.33758 0.15004,-0.15004 0.22506,-0.30008 0.30008,-0.41261 0.0375,-0.15003 0.0375,-0.30 [...]
-         id="path3209"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 659.03918,158.02687 8.10202,-3.45086 3.93848,9.2273 -8.10202,3.45086 z"
-         id="path3211"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 668.26648,163.31569 -0.75018,0.30007 -1.05027,-2.47562 c -0.075,-0.22505 -0.18754,-0.37509 -0.26256,-0.56264 -0.11253,-0.15003 -0.22506,-0.30007 -0.30008,-0.33758 -0.11252,-0.11253 -0.26256,-0.15004 -0.4126,-0.15004 -0.15004,0 -0.30007,0.0375 -0.48762,0.15004 -0.22506,0.075 -0.4126,0.22506 -0.56264,0.4126 -0.18755,0.18755 -0.33759,0.41261 -0.48762,0.63766 l 1.38784,3.26331 -0.71267,0.30008 -2.58815,-6.07651 0.71268,-0.30008 0.93773,2.17554 c 0.15004,-0.26256 0.33759,-0.5251 [...]
-         id="path3213"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 663.35276,3.0382569 101.23772,47.4868301 -1.2003,2.550635 -101.23772,-47.4868297 1.2003,-2.5506354 z m 101.12519,44.3360451 5.85146,7.42685 -9.41485,0.225056 3.56339,-7.651906 z"
-         id="path3215"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 654.87565,188.70951 105.10118,-44.82366 -1.08777,-2.58815 -105.10119,44.82367 1.08778,2.58814 z m 104.91363,-41.71039 6.11403,-7.16428 -9.41485,-0.60015 3.30082,7.76443 z"
-         id="path3217"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 869.39159,84.170969 0,25.656391 69.99243,0 0,-25.656391 -69.99243,0 z"
-         id="path3219"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 901.08698,92.010422 0,9.977488 8.77719,0 0,-9.977488 -8.77719,0 z"
-         id="path3221"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="902.7738"
-         y="100.50934"
-         id="text3223"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">b</text>
-      <path
-         d="m 886.87094,92.010422 0,9.977488 8.77719,0 0,-9.977488 -8.77719,0 z"
-         id="path3225"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="888.99445"
-         y="100.50944"
-         id="text3227"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">c</text>
-      <path
-         d="m 870.32932,77.306759 42.57311,0 0,2.813201 -42.57311,0 0,-2.813201 z m 41.14775,-2.813201 8.4396,4.201047 -8.4396,4.238556 0,-8.439603 z"
-         id="path3229"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         x="783.42834"
-         y="123.98867"
-         id="text3231"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">operator</text>
-      <path
-         d="m 792.30988,70.104965 0,19.542368 57.05172,0 0,-19.542368 -57.05172,0 z"
-         id="path3233"
-         style="fill:#b8bec6;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 823.25509,74.94367 0,10.014995 8.77719,0 0,-10.014995 -8.77719,0 z"
-         id="path3235"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="824.888"
-         y="83.519775"
-         id="text3237"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">2</text>
-      <path
-         d="m 809.03905,74.94367 0,10.014995 8.77719,0 0,-10.014995 -8.77719,0 z"
-         id="path3239"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="810.63989"
-         y="83.519875"
-         id="text3241"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">3</text>
-      <path
-         d="m 836.57091,74.793633 0,10.014995 8.73968,0 0,-10.014995 -8.73968,0 z"
-         id="path3243"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="838.15717"
-         y="83.34581"
-         id="text3245"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">1</text>
-      <path
-         d="m 755.62575,62.265512 7.95198,3.675916 -4.16354,9.039752 -7.95198,-3.638407 z"
-         id="path3247"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 758.81404,70.817642 c -0.11253,0.262566 -0.30008,0.487622 -0.48762,0.712678 -0.22506,0.187547 -0.45011,0.337584 -0.67517,0.412603 -0.30007,0.112528 -0.56264,0.150037 -0.86272,0.112528 -0.30007,0 -0.63765,-0.112528 -0.97524,-0.262566 -0.30007,-0.150037 -0.60015,-0.300074 -0.86271,-0.52513 -0.26257,-0.187547 -0.45012,-0.375094 -0.60015,-0.562641 l 0.37509,-0.825205 0.0375,0.03751 c 0.15004,0.225056 0.33758,0.450112 0.60015,0.675168 0.22506,0.225056 0.48762,0.412603 0.75019,0. [...]
-         id="path3249"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 742.76004,56.301526 7.95198,3.675916 -4.20105,9.077261 -7.91447,-3.675916 z"
-         id="path3251"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 746.09837,64.891166 c -0.26256,0.60015 -0.67517,0.975243 -1.23781,1.16279 -0.56264,0.187546 -1.12528,0.150037 -1.68792,-0.112528 -0.26256,-0.112528 -0.48762,-0.262566 -0.67517,-0.487622 -0.22505,-0.187547 -0.33758,-0.412603 -0.45011,-0.637659 -0.11253,-0.337584 -0.15003,-0.712677 -0.11253,-1.087771 0.0375,-0.412602 0.18755,-0.862715 0.41261,-1.387845 0.22505,-0.487622 0.48762,-0.900225 0.78769,-1.275318 0.30008,-0.337584 0.60015,-0.60015 1.01276,-0.787696 0.33758,-0.187547  [...]
-         id="path3253"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <text
-         x="794.7132"
-         y="31.091112"
-         id="text3255"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">emit barrier </text>
-      <text
-         x="881.73486"
-         y="31.091112"
-         id="text3257"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:italic;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">n</text>
-      <path
-         d="m 862.63991,84.658591 0,22.505609 2.8132,0 0,-22.505609 -2.8132,0 z"
-         id="path3259"
-         style="fill:#6e7277;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1071.0043,97.149202 c 0,-28.469592 23.0683,-51.575348 51.5754,-51.575348 28.4696,0 51.5753,23.105756 51.5753,51.575348 0,28.507098 -23.1057,51.575348 -51.5753,51.575348 -28.5071,0 -51.5754,-23.06825 -51.5754,-51.575348"
-         id="path3261"
-         style="fill:#8a3142;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="M 943.81013,-0.07501869 1082.5947,64.06596 1071.8295,87.321754 933.08245,23.218284 z"
-         id="path3263"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1034.3202,51.162746 7.952,3.675916 -4.2011,9.077261 -7.9145,-3.675916 z"
-         id="path3265"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1038.9713,56.714129 -4.8387,3.675916 -0.8252,-0.375094 5.1013,-3.788444 -3.2633,-1.537883 0.3001,-0.675168 3.9384,1.837958 z"
-         id="path3267"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 1003.0374,36.721648 7.952,3.675916 -4.2011,9.039752 -7.91446,-3.675916 z"
-         id="path3269"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1006.2257,45.536344 c -0.2251,0.487622 -0.6377,0.825206 -1.1628,0.975243 -0.5251,0.150038 -1.0878,0.07502 -1.6879,-0.187547 -0.6377,-0.300074 -1.0503,-0.675168 -1.2754,-1.162789 -0.225,-0.487622 -0.1875,-0.975243 0.038,-1.500374 0.15,-0.300075 0.3751,-0.56264 0.6751,-0.712678 0.3001,-0.187546 0.6377,-0.262565 1.0503,-0.262565 l 0.037,-0.03751 c -0.2626,-0.300075 -0.4126,-0.60015 -0.4501,-0.862715 -0.075,-0.262566 -0.038,-0.525131 0.1125,-0.825206 0.1876,-0.412603 0.5627,-0. [...]
-         id="path3271"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 990.17168,30.757663 7.95198,3.675915 -4.20105,9.077262 -7.95198,-3.675916 z"
-         id="path3273"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 994.03514,37.959457 c -0.22506,0.487621 -0.48762,0.937733 -0.7877,1.275317 -0.30007,0.375094 -0.63766,0.637659 -1.01275,0.825206 -0.37509,0.187547 -0.75019,0.262565 -1.2003,0.262565 -0.4126,0 -0.86271,-0.112528 -1.35033,-0.337584 -0.11253,-0.07502 -0.26257,-0.112528 -0.3751,-0.187546 -0.11253,-0.07502 -0.18755,-0.150038 -0.26256,-0.225057 l 0.33758,-0.750186 0.0375,0.03751 c 0.0375,0.07502 0.15004,0.150037 0.26257,0.262565 0.11252,0.07502 0.26256,0.187547 0.4126,0.262566 0. [...]
-         id="path3275"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 927.98118,164.29093 141.29772,-60.2025 10.09,23.6684 -141.26019,60.24 z"
-         id="path3277"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1057.501,117.44176 8.102,-3.45086 3.9384,9.2273 -8.102,3.45086 z"
-         id="path3279"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1066.6157,122.76808 -0.7502,0.30008 -0.1875,-0.45011 c -0.1125,0.26256 -0.3001,0.52513 -0.4501,0.71267 -0.1876,0.18755 -0.4126,0.33759 -0.7127,0.48763 -0.5251,0.18754 -1.0128,0.18754 -1.5004,-0.075 -0.4501,-0.30008 -0.8627,-0.7877 -1.1628,-1.50038 -0.15,-0.37509 -0.225,-0.71267 -0.2625,-1.05026 0,-0.33758 0.037,-0.63766 0.1125,-0.90022 0.1125,-0.30008 0.2251,-0.52513 0.4501,-0.75019 0.1876,-0.18755 0.4126,-0.33758 0.6377,-0.45011 0.225,-0.11253 0.4501,-0.15004 0.6376,-0.187 [...]
-         id="path3281"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 1039.3839,125.16868 8.1021,-3.45086 3.9009,9.2273 -8.0645,3.45086 z"
-         id="path3283"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1047.861,128.28196 -3.2258,1.35033 c 0.1126,0.30008 0.2626,0.48763 0.4126,0.67517 0.1876,0.15004 0.3376,0.26257 0.5627,0.33759 0.1875,0.075 0.3751,0.075 0.6001,0.075 0.1876,0 0.4126,-0.075 0.6377,-0.15004 0.3001,-0.15004 0.5626,-0.33759 0.8252,-0.56264 0.2626,-0.26257 0.4126,-0.48762 0.4876,-0.63766 l 0.037,0 0.3376,0.7877 c -0.1875,0.18754 -0.4126,0.4126 -0.6376,0.56264 -0.2251,0.18754 -0.4877,0.33758 -0.7502,0.48762 -0.7502,0.30007 -1.3879,0.33758 -1.9505,0.11253 -0.6002, [...]
-         id="path3285"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 1009.1139,138.0719 8.102,-3.45086 3.9385,9.2273 -8.102,3.45086 z"
-         id="path3287"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1015.8281,138.0719 -0.037,0 c -0.075,0.0375 -0.1876,0.0375 -0.3376,0.075 -0.1501,0.0375 -0.2626,0.075 -0.3751,0.11252 -0.3001,0.11253 -0.5251,0.30008 -0.6002,0.48763 -0.075,0.22505 -0.038,0.48762 0.1126,0.86271 l 0.075,0.15004 1.3128,-0.56264 0.2626,0.60015 -1.2753,0.56264 1.5753,3.75093 -0.7126,0.30008 -1.6129,-3.75094 -0.4877,0.22506 -0.2625,-0.60015 0.4876,-0.22506 -0.075,-0.15003 c -0.2251,-0.52514 -0.2626,-0.97525 -0.1125,-1.35034 0.15,-0.4126 0.4501,-0.67517 0.9377,-0 [...]
-         id="path3289"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 977.26846,151.65028 8.10202,-3.45086 3.93848,9.2273 -8.10202,3.45086 z"
-         id="path3291"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 986.15818,156.45148 c 0.33758,0.75018 0.4126,1.38784 0.22505,1.87546 -0.18754,0.48762 -0.63766,0.86272 -1.35033,1.16279 -0.22506,0.11253 -0.45012,0.18755 -0.71268,0.22506 -0.22506,0.075 -0.45011,0.11253 -0.67517,0.15004 l -0.33758,-0.75019 0.0375,0 c 0.15003,0 0.37509,-0.0375 0.63765,-0.075 0.30008,-0.0375 0.56264,-0.11253 0.82521,-0.22506 0.26257,-0.11252 0.45011,-0.22505 0.60015,-0.37509 0.15004,-0.11253 0.22506,-0.26256 0.26257,-0.4126 0.0375,-0.11253 0.075,-0.26257 0.03 [...]
-         id="path3293"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 964.1777,157.23917 8.06451,-3.45086 3.93848,9.2273 -8.06451,3.45086 z"
-         id="path3295"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 973.405,162.49048 -0.75019,0.33758 -1.05026,-2.51312 c -0.11253,-0.18755 -0.18755,-0.37509 -0.30007,-0.52513 -0.075,-0.18755 -0.18755,-0.30008 -0.30008,-0.3751 -0.11253,-0.075 -0.22505,-0.11252 -0.37509,-0.11252 -0.15004,0 -0.30008,0.0375 -0.52513,0.11252 -0.18755,0.075 -0.3751,0.22506 -0.56264,0.41261 -0.15004,0.18754 -0.33759,0.4126 -0.45012,0.67517 l 1.38785,3.2258 -0.75019,0.33758 -2.58814,-6.07651 0.75019,-0.33758 0.93773,2.21305 c 0.15004,-0.30008 0.30007,-0.52513 0.5 [...]
-         id="path3297"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 967.02841,3.0382569 101.20019,47.4868301 -1.2003,2.550635 -101.20019,-47.4868297 1.2003,-2.5506354 z m 101.12519,44.3360451 5.8515,7.42685 -9.4149,0.225056 3.5634,-7.651906 z"
-         id="path3299"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 958.70134,188.70951 105.10116,-44.82366 -1.0878,-2.58815 -105.10113,44.82367 1.08777,2.58814 z m 104.91366,-41.71039 6.114,-7.16428 -9.4148,-0.60015 3.3008,7.76443 z"
-         id="path3301"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 1173.2173,84.170969 0,25.656391 71.5678,0 0,-25.656391 -71.5678,0 z"
-         id="path3303"
-         style="fill:#e4eaf4;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1232.482,91.672838 0,10.052502 8.7022,0 0,-10.052502 -8.7022,0 z"
-         id="path3305"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="1234.6501"
-         y="100.24077"
-         id="text3307"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">c</text>
-      <path
-         d="m 1174.1925,77.344268 42.5356,0 0,2.775692 -42.5356,0 0,-2.775692 z m 41.1103,-2.85071 8.4771,4.201047 -8.4771,4.276065 0,-8.477112 z"
-         id="path3309"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.07501869px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <text
-         x="1087.1899"
-         y="123.98876"
-         id="text3311"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">operator</text>
-      <path
-         d="m 1095.9855,70.104965 0,19.542368 57.0518,0 0,-19.542368 -57.0518,0 z"
-         id="path3313"
-         style="fill:#b8bec6;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1195.7229,91.822875 0,10.014995 8.8897,0 0,-10.014995 -8.8897,0 z"
-         id="path3315"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="1197.3989"
-         y="100.41473"
-         id="text3317"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">2</text>
-      <path
-         d="m 1181.4693,91.822875 0,10.014995 8.7772,0 0,-10.014995 -8.7772,0 z"
-         id="path3319"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="1183.1508"
-         y="100.41483"
-         id="text3321"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">3</text>
-      <path
-         d="m 1209.0012,91.672838 0,10.014992 8.7397,0 0,-10.014992 -8.7397,0 z"
-         id="path3323"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="1210.668"
-         y="100.24077"
-         id="text3325"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">1</text>
-      <path
-         d="m 1065.1904,65.153731 7.9519,3.675916 -4.1635,9.077262 -7.952,-3.675916 z"
-         id="path3327"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1068.3787,73.705862 c -0.1126,0.300075 -0.2626,0.525131 -0.4877,0.712678 -0.225,0.187546 -0.4501,0.337584 -0.6751,0.450112 -0.3001,0.07502 -0.5627,0.112528 -0.8627,0.112528 -0.3001,-0.03751 -0.6377,-0.112528 -0.9753,-0.300075 -0.3001,-0.112528 -0.6001,-0.300075 -0.8627,-0.487622 -0.2626,-0.225056 -0.4501,-0.412602 -0.6002,-0.600149 l 0.3751,-0.787696 0.038,0 c 0.15,0.225056 0.3375,0.450112 0.6001,0.675168 0.2251,0.225056 0.4876,0.412603 0.7502,0.525131 0.1875,0.112528 0.375 [...]
-         id="path3329"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 1052.3247,59.227255 7.9519,3.675916 -4.201,9.039752 -7.9145,-3.675916 z"
-         id="path3331"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 1055.663,67.779386 c -0.2626,0.600149 -0.6752,0.975243 -1.2378,1.162789 -0.5627,0.225056 -1.1253,0.187547 -1.6504,-0.07502 -0.3001,-0.150038 -0.5252,-0.300075 -0.7127,-0.487622 -0.1876,-0.187547 -0.3376,-0.412603 -0.4501,-0.675168 -0.1125,-0.337584 -0.1501,-0.675168 -0.1125,-1.087771 0.038,-0.412603 0.1875,-0.862715 0.4126,-1.350337 0.225,-0.52513 0.4876,-0.937733 0.7877,-1.275317 0.3,-0.337584 0.6376,-0.637659 1.0127,-0.825206 0.3376,-0.187547 0.7502,-0.262565 1.1628,-0.26 [...]
-         id="path3333"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <text
-         x="1102.8444"
-         y="30.893032"
-         id="text3335"
-         xml:space="preserve"
-         style="font-size:13.80343914px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">input buffer</text>
-      <path
-         d="m 1141.1468,37.096742 2.8882,34.733653 -1.2378,0.07502 -2.8882,-34.696143 z m 4.7637,34.546106 c 0.1125,1.387846 -0.9002,2.588145 -2.2881,2.700673 -1.3878,0.112528 -2.5881,-0.900224 -2.7007,-2.28807 -0.1125,-1.350337 0.9003,-2.550636 2.2881,-2.663164 1.3878,-0.150037 2.5881,0.900225 2.7007,2.250561 z"
-         id="path3337"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 1226.0304,87.171717 0,22.505603 2.8507,0 0,-22.505603 -2.8507,0 z"
-         id="path3339"
-         style="fill:#6e7277;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="1078.7684"
-         y="217.39491"
-         id="text3341"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">continue</text>
-      <text
-         x="743.72571"
-         y="217.39491"
-         id="text3343"
-         xml:space="preserve"
-         style="font-size:17.55437279px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">checkpoint</text>
-      <path
-         d="m 797.1861,74.94367 0,10.014995 8.73968,0 0,-10.014995 -8.73968,0 z"
-         id="path3345"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="798.82666"
-         y="83.519875"
-         id="text3347"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">4</text>
-      <path
-         d="m 860.46436,34.733653 4.08852,54.201003 -1.23781,0.07502 -4.08852,-54.163494 z m 5.96399,54.050965 c 0.11253,1.387846 -0.93773,2.588145 -2.28807,2.700673 -1.38785,0.07502 -2.58815,-0.937733 -2.70067,-2.325579 -0.11253,-1.350336 0.93773,-2.550636 2.32558,-2.663164 1.35033,-0.112528 2.55063,0.900225 2.66316,2.28807 z"
-         id="path3349"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.03750934px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         d="m 1099.8865,74.94367 0,10.014995 8.9272,0 0,-10.014995 -8.9272,0 z"
-         id="path3351"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="1101.621"
-         y="83.519875"
-         id="text3353"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">4</text>
-      <path
-         d="m 948.46129,164.32844 8.10201,-3.45086 3.93849,9.2273 -8.10202,3.45086 z"
-         id="path3355"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <path
-         d="m 954.08769,165.11613 -0.82521,0.33759 -0.30007,-0.75019 0.8252,-0.37509 0.30008,0.78769 z m 2.13803,5.10128 -0.75019,0.30007 -1.83795,-4.35108 0.71267,-0.30008 1.87547,4.35109 z"
-         id="path3357"
-         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
-      <path
-         d="m 915.49057,92.010422 0,9.977488 8.73968,0 0,-9.977488 -8.73968,0 z"
-         id="path3359"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="917.28796"
-         y="100.50934"
-         id="text3361"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">a</text>
-      <path
-         d="m 605.40082,91.991667 0,9.996243 8.73968,0 0,-9.996243 -8.73968,0 z"
-         id="path3363"
-         style="fill:#f5a030;fill-opacity:1;fill-rule:evenodd;stroke:none" />
-      <text
-         x="607.2179"
-         y="100.50934"
-         id="text3365"
-         xml:space="preserve"
-         style="font-size:8.70216751px;font-style:normal;font-weight:normal;text-align:start;text-anchor:start;fill:#000000;font-family:Verdana">y</text>
+<!DOCTYPE svg
+        PUBLIC '-//W3C//DTD SVG 1.1//EN'
+        'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg content="&lt;mxfile modified=&quot;2020-06-19T07:12:00.833Z&quot; host=&quot;app.diagrams.net&quot; agent=&quot;5.0 (Macintosh)&quot; etag=&quot;05p1r_BUnWSHJGdrPjBS&quot; version=&quot;13.2.6&quot; type=&quot;google&quot;&gt;&lt;diagram id=&quot;n4wjEhElwpPeuiAcmKNk&quot; name=&quot;Page-1&quot;&gt;7V1Lk5s4EP41c5wpS+Jhjsk8sluVVJLKIbt7STEg2yTY8mKc2Pn1C0bygBob7MFIMjt72FhgGb5+qLvVH9yQ+/nmXeIvZx9YSOMbPAo3N+ThBmM8tqzsf/nIlo8Q4hYj0yQKizH0MvAl+k354IiPrqOQrionpozFabSsDgZssaBBWhnzk4T9qp42YX [...]
+  <defs>
+    <linearGradient id="mx-gradient-ffffff-1-ffffff00-1-e-0" x1="0%" x2="100%" y1="0%" y2="0%">
+      <stop offset="0%" style="stop-color:#FFFFFF"/>
+      <stop offset="100%" style="stop-color:#FFFFFF" stop-opacity="0"/>
+    </linearGradient>
+  </defs>
+  <g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="980" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="989.5" y="168.5">h</text>
     </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="540" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="549.5" y="168.5">h</text>
+    </g>
+    <path d="M -20 90 C -20 123.14 6.86 150 40 150 C 73.14 150 100 123.14 100 90 Z" fill="#f5a030" pointer-events="all" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,40,120)"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="60" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="69.5" y="88.5">6</text>
+    </g>
+    <ellipse cx="280" cy="120" fill="#f5a030" pointer-events="all" rx="60" ry="60" stroke="#000000"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="279.5" y="128.5">Operator</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="80" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="89.5" y="88.5">5</text>
+    </g>
+    <path d="M 120 80 L 163.63 80" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 168.88 80 L 161.88 83.5 L 163.63 80 L 161.88 76.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="100" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="109.5" y="88.5">4</text>
+    </g>
+    <rect fill="#e6e6e6" fill-opacity="0.5" height="40" pointer-events="all" stroke="#000000" width="20" x="170" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="179.5" y="88.5">3</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="190" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="199.5" y="88.5">2</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="210" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="219.5" y="88.5">1</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="60" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="69.5" y="168.5">f</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="80" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="89.5" y="168.5">e</text>
+    </g>
+    <path d="M 120 160 L 163.63 160" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 168.88 160 L 161.88 163.5 L 163.63 160 L 161.88 156.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="100" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="109.5" y="168.5">d</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="170" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="179.5" y="168.5">c</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="190" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="199.5" y="168.5">b</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="210" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="219.5" y="168.5">a</text>
+    </g>
+    <path d="M 229 110 L 229 50" fill="none" pointer-events="stroke" stroke="#8a3142" stroke-miterlimit="10" stroke-width="3"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="340" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="349.5" y="128.5">z</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="360" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="369.5" y="128.5">y</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="380" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="389.5" y="128.5">x</text>
+    </g>
+    <rect fill="none" height="40" pointer-events="all" stroke="none" width="110" x="145" y="0"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="199.5" y="17">Checkpoint</text>
+      <text x="199.5" y="35">barrier</text>
+    </g>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="190" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="209.5" y="217">Input</text>
+      <text x="209.5" y="235">buffers</text>
+    </g>
+    <path d="M 210 200 L 202.85 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 200.5 181 L 206.76 185.7 L 202.85 185.7 L 200.5 188.83 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 210 200 L 217.15 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 219.5 181 L 219.5 188.83 L 217.15 185.7 L 213.24 185.7 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 220 40 L 225.5 45.5" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 229.21 49.21 L 221.78 46.73 L 225.5 45.5 L 226.73 41.78 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 358.75 210 L 350.79 146.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 350.14 141.11 L 354.48 147.62 L 350.79 146.32 L 347.53 148.49 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 361 210 L 367.37 146.34" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 367.89 141.11 L 370.67 148.43 L 367.37 146.34 L 363.71 147.73 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="340" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="359.5" y="217">Output</text>
+      <text x="359.5" y="235">buffers</text>
+    </g>
+    <path d="M 78.06 210 L 73.44 186.25" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 72.44 181.1 L 77.21 187.3 L 73.44 186.25 L 70.34 188.64 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 81.88 210 L 86.33 186.26" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 87.29 181.1 L 89.44 188.62 L 86.33 186.26 L 82.56 187.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="60" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="79.5" y="217">Output</text>
+      <text x="79.5" y="235">buffers</text>
+    </g>
+    <path d="M 100 190 L 100 130" fill="none" pointer-events="stroke" stroke="#8a3142" stroke-miterlimit="10" stroke-width="3"/>
+    <rect fill="none" height="40" pointer-events="all" stroke="none" width="200" x="110" y="250"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="209.5" y="278.5">Begin alignment</text>
+    </g>
+    <path d="M 181.82 40 L 104.28 125.29" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 100.75 129.17 L 102.87 121.64 L 104.28 125.29 L 108.05 126.35 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 420 90 C 420 123.14 446.86 150 480 150 C 513.14 150 540 123.14 540 90 Z" fill="#f5a030" pointer-events="all" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,480,120)"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="500" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="509.5" y="88.5">6</text>
+    </g>
+    <ellipse cx="720" cy="120" fill="#f5a030" pointer-events="all" rx="60" ry="60" stroke="#000000"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="719.5" y="128.5">Operator</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="520" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="529.5" y="88.5">5</text>
+    </g>
+    <path d="M 560 80 L 603.63 80" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 608.88 80 L 601.88 83.5 L 603.63 80 L 601.88 76.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="540" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="549.5" y="88.5">4</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="610" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="619.5" y="88.5">3</text>
+    </g>
+    <path d="M 650 85 L 660.64 90.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 665.33 92.67 L 657.51 92.67 L 660.64 90.32 L 660.64 86.41 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="630" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="639.5" y="88.5">2</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="650" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="659.5" y="88.5">1</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="500" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="509.5" y="168.5">j</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="520" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="529.5" y="168.5">i</text>
+    </g>
+    <path d="M 560 160 L 603.63 160" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 608.88 160 L 601.88 163.5 L 603.63 160 L 601.88 156.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="610" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="619.5" y="168.5">g</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="630" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="639.5" y="168.5">f</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="650" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="659.5" y="168.5">e</text>
+    </g>
+    <path d="M 669 110 L 669 50" fill="none" pointer-events="stroke" stroke="#8a3142" stroke-miterlimit="10" stroke-width="3"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="780" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="789.5" y="128.5">d</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="800" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="809.5" y="128.5">c</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="820" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="829.5" y="128.5">b</text>
+    </g>
+    <rect fill="none" height="40" pointer-events="all" stroke="none" width="110" x="585" y="0"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="639.5" y="17">Checkpoint</text>
+      <text x="639.5" y="35">barrier</text>
+    </g>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="630" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="649.5" y="217">Input</text>
+      <text x="649.5" y="235">buffers</text>
+    </g>
+    <path d="M 650 200 L 642.85 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 640.5 181 L 646.76 185.7 L 642.85 185.7 L 640.5 188.83 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 650 200 L 657.15 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 659.5 181 L 659.5 188.83 L 657.15 185.7 L 653.24 185.7 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 660 40 L 665.5 45.5" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 669.21 49.21 L 661.78 46.73 L 665.5 45.5 L 666.73 41.78 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 798.75 210 L 790.79 146.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 790.14 141.11 L 794.48 147.62 L 790.79 146.32 L 787.53 148.49 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 801 210 L 807.37 146.34" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 807.89 141.11 L 810.67 148.43 L 807.37 146.34 L 803.71 147.73 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="780" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="799.5" y="217">Output</text>
+      <text x="799.5" y="235">buffers</text>
+    </g>
+    <path d="M 518.06 210 L 513.44 186.25" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 512.44 181.1 L 517.21 187.3 L 513.44 186.25 L 510.34 188.64 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 521.88 210 L 526.33 186.26" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 527.29 181.1 L 529.44 188.62 L 526.33 186.26 L 522.56 187.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="500" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="519.5" y="217">Output</text>
+      <text x="519.5" y="235">buffers</text>
+    </g>
+    <rect fill="none" height="40" pointer-events="all" stroke="none" width="200" x="550" y="250"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="649.5" y="278.5">End alignment</text>
+    </g>
+    <path d="M 645 40 L 668.46 133.82" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 669.73 138.92 L 664.64 132.97 L 668.46 133.82 L 671.43 131.28 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 670 190 L 670 130" fill="none" pointer-events="stroke" stroke="#8a3142" stroke-miterlimit="10" stroke-width="3"/>
+    <path d="M 860 90 C 860 123.14 886.86 150 920 150 C 953.14 150 980 123.14 980 90 Z" fill="#f5a030" pointer-events="all" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,920,120)"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="940" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="949.5" y="88.5">6</text>
+    </g>
+    <ellipse cx="1160" cy="120" fill="#f5a030" pointer-events="all" rx="60" ry="60" stroke="#000000"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1159.5" y="128.5">Operator</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="960" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="969.5" y="88.5">5</text>
+    </g>
+    <path d="M 1000 80 L 1043.63 80" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 1048.88 80 L 1041.88 83.5 L 1043.63 80 L 1041.88 76.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="980" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="989.5" y="88.5">4</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1050" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1059.5" y="88.5">3</text>
+    </g>
+    <path d="M 1090 85 L 1100.64 90.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 1105.33 92.67 L 1097.51 92.67 L 1100.64 90.32 L 1100.64 86.41 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1070" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1079.5" y="88.5">2</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1090" y="60"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1099.5" y="88.5">1</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="940" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="949.5" y="168.5">j</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="960" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="969.5" y="168.5">i</text>
+    </g>
+    <path d="M 1000 160 L 1043.63 160" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 1048.88 160 L 1041.88 163.5 L 1043.63 160 L 1041.88 156.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1050" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1059.5" y="168.5">g</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1070" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1079.5" y="168.5">f</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1090" y="140"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1099.5" y="168.5">e</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1220" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1229.5" y="128.5">d</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1240" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1249.5" y="128.5">c</text>
+    </g>
+    <rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="1260" y="100"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1269.5" y="128.5">b</text>
+    </g>
+    <rect fill="none" height="40" pointer-events="all" stroke="none" width="110" x="1170" y="0"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="1224.5" y="17">Checkpoint</text>
+      <text x="1224.5" y="35">barrier</text>
+    </g>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="1070" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="1089.5" y="217">Input</text>
+      <text x="1089.5" y="235">buffers</text>
+    </g>
+    <path d="M 1090 200 L 1082.85 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 1080.5 181 L 1086.76 185.7 L 1082.85 185.7 L 1080.5 188.83 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 1090 200 L 1097.15 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 1099.5 181 L 1099.5 188.83 L 1097.15 185.7 L 1093.24 185.7 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 1223.57 40 L 1220.45 83.65" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 1220.08 88.88 L 1217.09 81.65 L 1220.45 83.65 L 1224.07 82.15 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 958.06 210 L 953.44 186.25" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 952.44 181.1 L 957.21 187.3 L 953.44 186.25 L 950.34 188.64 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 961.88 210 L 966.33 186.26" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 967.29 181.1 L 969.44 188.62 L 966.33 186.26 L 962.56 187.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="940" y="210"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="959.5" y="217">Output</text>
+      <text x="959.5" y="235">buffers</text>
+    </g>
+    <rect fill="none" height="40" pointer-events="all" stroke="none" width="200" x="990" y="250"/>
+    <g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+      <text x="1089.5" y="278.5">Checkpoint</text>
+    </g>
+    <path d="M 1219 150 L 1219 90" fill="none" pointer-events="stroke" stroke="#8a3142" stroke-miterlimit="10" stroke-width="3"/>
+    <path d="M 1240 212 C 1240 196 1310 196 1310 212 L 1310 248 C 1310 264 1240 264 1240 248 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 1240 212 C 1240 224 1310 224 1310 212" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="1274.5" y="236">State</text>
+      <text x="1274.5" y="254">backend</text>
+    </g>
+    <path d="M 250 146 C 250 138 310 138 310 146 L 310 164 C 310 172 250 172 250 164 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 250 146 C 250 152 310 152 310 146" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="279.5" y="165.5">state</text>
+    </g>
+    <path d="M 690 146 C 690 138 750 138 750 146 L 750 164 C 750 172 690 172 690 164 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 690 146 C 690 152 750 152 750 146" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="719.5" y="165.5">state</text>
+    </g>
+    <path d="M 1183 170 L 1233.1 202.67" fill="none" pointer-events="stroke" stroke="#724591" stroke-dasharray="6 2" stroke-miterlimit="10" stroke-width="2"/>
+    <path d="M 1238.13 205.95 L 1229.24 204.93 L 1233.1 202.67 L 1233.61 198.23 Z" fill="#724591" pointer-events="all" stroke="#724591" stroke-miterlimit="10" stroke-width="2"/>
+    <path d="M 1130 146 C 1130 138 1190 138 1190 146 L 1190 164 C 1190 172 1130 172 1130 164 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <path d="M 1130 146 C 1130 152 1190 152 1190 146" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+    <g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+      <text x="1159.5" y="165.5">state</text>
+    </g>
+    <rect fill="url(#mx-gradient-ffffff-1-ffffff00-1-e-0)" height="190" pointer-events="all" stroke="none" width="170" x="0" y="50"/>
+    <path d="M 420 285 L 420 5" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <path d="M 860 285 L 860 5" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+    <rect fill="url(#mx-gradient-ffffff-1-ffffff00-1-e-0)" height="190" pointer-events="all" stroke="none" width="170" x="440" y="50"/>
+    <rect fill="url(#mx-gradient-ffffff-1-ffffff00-1-e-0)" height="190" pointer-events="all" stroke="none" width="170" x="880" y="50"/>
   </g>
-</svg>
+</svg>
\ No newline at end of file
diff --git a/docs/fig/stream_unaligning.svg b/docs/fig/stream_unaligning.svg
new file mode 100644
index 0000000..8a8b26f
--- /dev/null
+++ b/docs/fig/stream_unaligning.svg
@@ -0,0 +1,383 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!DOCTYPE svg
+  PUBLIC '-//W3C//DTD SVG 1.1//EN'
+  'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
+<svg content="&lt;mxfile modified=&quot;2020-06-19T07:13:49.823Z&quot; host=&quot;app.diagrams.net&quot; agent=&quot;5.0 (Macintosh)&quot; etag=&quot;L5GzBTQtblpbB8QD-aNV&quot; version=&quot;13.2.6&quot; type=&quot;google&quot;&gt;&lt;diagram id=&quot;n4wjEhElwpPeuiAcmKNk&quot; name=&quot;Page-1&quot;&gt;5V1Rc9o4EP41eUwGSTbGj03a5DqTXrm2N7325UbBBnxxEGecltyvPznIgLUCC2pbEtCHxsI29rer1e7qW+mC3Dwt7zI6n35gUZxe4F60vCBvLzDGA8/j/xUtL6KF9PCqZZIl0aoNbRo+J//ForEnWp+TKF5UTswZS/NkXm0csdksHuWVNppl7Gf1tD [...]
+	<defs>
+		<linearGradient id="mx-gradient-ffffff-1-ffffff00-1-e-0" x1="0%" x2="100%" y1="0%" y2="0%">
+			<stop offset="0%" style="stop-color:#FFFFFF"/>
+			<stop offset="100%" style="stop-color:#FFFFFF" stop-opacity="0"/>
+		</linearGradient>
+	</defs>
+	<g>
+		<path d="M 1000 162.46 L 1232 219.44" fill="none" pointer-events="stroke" stroke="#724591" stroke-dasharray="6 2" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1237.83 220.87 L 1229.11 222.85 L 1232 219.44 L 1231.01 215.08 Z" fill="#724591" pointer-events="all" stroke="#724591" stroke-miterlimit="10" stroke-width="2"/>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="980" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="989.5" y="166">d</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="540" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="549.5" y="166">d</text>
+		</g>
+		<path d="M -20 90 C -20 123.14 6.86 150 40 150 C 73.14 150 100 123.14 100 90 Z" fill="#f5a030" pointer-events="all" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,40,120)"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="60" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="69.5" y="88.5">6</text>
+		</g>
+		<ellipse cx="280" cy="120" fill="#f5a030" pointer-events="all" rx="60" ry="60" stroke="#000000"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="279.5" y="128.5">Operator</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="80" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="89.5" y="88.5">5</text>
+		</g>
+		<path d="M 120 80 L 163.63 80" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 168.88 80 L 161.88 83.5 L 163.63 80 L 161.88 76.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="100" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="109.5" y="88.5">4</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="170" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="179.5" y="88.5">3</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="190" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="199.5" y="88.5">2</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="210" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="219.5" y="88.5">1</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="60" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="69.5" y="168.5">f</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="80" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="89.5" y="168.5">e</text>
+		</g>
+		<path d="M 120 160 L 163.63 160" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 168.88 160 L 161.88 163.5 L 163.63 160 L 161.88 156.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="100" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="109.5" y="168.5">d</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="170" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="179.5" y="168.5">c</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="190" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="199.5" y="168.5">b</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="210" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="219.5" y="168.5">a</text>
+		</g>
+		<path d="M 170 110 L 170 50" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10" stroke-width="3"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="340" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="349.5" y="128.5">z</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="360" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="369.5" y="128.5">y</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="380" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="389.5" y="128.5">x</text>
+		</g>
+		<rect fill="none" height="40" pointer-events="all" stroke="none" width="110" x="80" y="0"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="134.5" y="17">Checkpoint</text>
+			<text x="134.5" y="35">barrier</text>
+		</g>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="190" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="209.5" y="217">Input</text>
+			<text x="209.5" y="235">buffers</text>
+		</g>
+		<path d="M 210 200 L 202.85 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 200.5 181 L 206.76 185.7 L 202.85 185.7 L 200.5 188.83 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 210 200 L 217.15 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 219.5 181 L 219.5 188.83 L 217.15 185.7 L 213.24 185.7 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 158.33 40 L 165.17 45.86" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 169.15 49.27 L 161.56 47.37 L 165.17 45.86 L 166.11 42.06 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 358.75 210 L 350.79 146.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 350.14 141.11 L 354.48 147.62 L 350.79 146.32 L 347.53 148.49 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 361 210 L 367.37 146.34" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 367.89 141.11 L 370.67 148.43 L 367.37 146.34 L 363.71 147.73 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="340" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="359.5" y="217">Output</text>
+			<text x="359.5" y="235">buffers</text>
+		</g>
+		<path d="M 78.06 210 L 73.44 186.25" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 72.44 181.1 L 77.21 187.3 L 73.44 186.25 L 70.34 188.64 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 81.88 210 L 86.33 186.26" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 87.29 181.1 L 89.44 188.62 L 86.33 186.26 L 82.56 187.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="60" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="79.5" y="217">Output</text>
+			<text x="79.5" y="235">buffers</text>
+		</g>
+		<path d="M 100 190 L 100 130" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10" stroke-width="3"/>
+		<rect fill="none" height="40" pointer-events="all" stroke="none" width="200" x="90" y="250"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="189.5" y="278.5">On first barrier</text>
+		</g>
+		<rect fill="url(#mx-gradient-ffffff-1-ffffff00-1-e-0)" height="190" pointer-events="all" stroke="none" width="170" x="0" y="50"/>
+		<path d="M 128.64 40 L 101.93 123.93" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 100.34 128.93 L 99.13 121.2 L 101.93 123.93 L 105.8 123.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 420 90 C 420 123.14 446.86 150 480 150 C 513.14 150 540 123.14 540 90 Z" fill="#f5a030" pointer-events="all" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,480,120)"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="500" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="509.5" y="88.5">6</text>
+		</g>
+		<ellipse cx="720" cy="120" fill="#f5a030" pointer-events="all" rx="60" ry="60" stroke="#000000"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="719.5" y="128.5">Operator</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="520" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="529.5" y="88.5">5</text>
+		</g>
+		<path d="M 560 80 L 603.63 80" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 608.88 80 L 601.88 83.5 L 603.63 80 L 601.88 76.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="540" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="549.5" y="88.5">4</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="610" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="619.5" y="86">3</text>
+		</g>
+		<path d="M 650 85 L 660.64 90.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 665.33 92.67 L 657.51 92.67 L 660.64 90.32 L 660.64 86.41 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="630" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="639.5" y="86">2</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="650" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="659.5" y="86">1</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="500" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="509.5" y="168.5">f</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="520" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="529.5" y="168.5">e</text>
+		</g>
+		<path d="M 560 160 L 603.63 160" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 608.88 160 L 601.88 163.5 L 603.63 160 L 601.88 156.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="610" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="619.5" y="166">c</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="630" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="639.5" y="166">b</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="650" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="659.5" y="166">a</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="780" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="789.5" y="126">z</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="800" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="809.5" y="126">y</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="820" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="829.5" y="126">x</text>
+		</g>
+		<rect fill="none" height="40" pointer-events="all" stroke="none" width="110" x="775" y="0"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="829.5" y="17">Checkpoint</text>
+			<text x="829.5" y="35">barrier</text>
+		</g>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="630" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="649.5" y="217">Input</text>
+			<text x="649.5" y="235">buffers</text>
+		</g>
+		<path d="M 650 200 L 642.85 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 640.5 181 L 646.76 185.7 L 642.85 185.7 L 640.5 188.83 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 650 200 L 657.15 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 659.5 181 L 659.5 188.83 L 657.15 185.7 L 653.24 185.7 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 798.75 210 L 790.79 146.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 790.14 141.11 L 794.48 147.62 L 790.79 146.32 L 787.53 148.49 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 801 210 L 807.37 146.34" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 807.89 141.11 L 810.67 148.43 L 807.37 146.34 L 803.71 147.73 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="780" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="799.5" y="217">Output</text>
+			<text x="799.5" y="235">buffers</text>
+		</g>
+		<path d="M 518.06 210 L 513.44 186.25" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 512.44 181.1 L 517.21 187.3 L 513.44 186.25 L 510.34 188.64 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 521.88 210 L 526.33 186.26" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 527.29 181.1 L 529.44 188.62 L 526.33 186.26 L 522.56 187.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="500" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="519.5" y="217">Output</text>
+			<text x="519.5" y="235">buffers</text>
+		</g>
+		<rect fill="none" height="40" pointer-events="all" stroke="none" width="290" x="495" y="250"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="639.5" y="278.5">Tag buffers and forward barrier</text>
+		</g>
+		<path d="M 832.86 40 L 839.1 83.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 839.84 88.89 L 835.39 82.46 L 839.1 83.7 L 842.32 81.47 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 860 90 C 860 123.14 886.86 150 920 150 C 953.14 150 980 123.14 980 90 Z" fill="#f5a030" pointer-events="all" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,920,120)"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="940" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="949.5" y="88.5">6</text>
+		</g>
+		<ellipse cx="1160" cy="120" fill="#f5a030" pointer-events="all" rx="60" ry="60" stroke="#000000"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="1159.5" y="128.5">Operator</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="960" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="969.5" y="88.5">5</text>
+		</g>
+		<path d="M 1000 80 L 1043.63 80" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 1048.88 80 L 1041.88 83.5 L 1043.63 80 L 1041.88 76.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="980" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="989.5" y="88.5">4</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1050" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1059.5" y="86">3</text>
+		</g>
+		<path d="M 1090 85 L 1100.64 90.32" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 1105.33 92.67 L 1097.51 92.67 L 1100.64 90.32 L 1100.64 86.41 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1070" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1079.5" y="86">2</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1090" y="60"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1099.5" y="86">1</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="940" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="949.5" y="168.5">f</text>
+		</g>
+		<rect fill="#e6e6e6" height="40" pointer-events="all" stroke="#000000" width="20" x="960" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="969.5" y="168.5">e</text>
+		</g>
+		<path d="M 1000 160 L 1043.63 160" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 1048.88 160 L 1041.88 163.5 L 1043.63 160 L 1041.88 156.5 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1050" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1059.5" y="166">c</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1070" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1079.5" y="166">b</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1090" y="140"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1099.5" y="166">a</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1220" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1229.5" y="126">z</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1240" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1249.5" y="126">y</text>
+		</g>
+		<rect fill="#70ad47" height="40" pointer-events="all" stroke="#000000" width="20" x="1260" y="100"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1269.5" y="126">x</text>
+		</g>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="1070" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1089.5" y="217">Input</text>
+			<text x="1089.5" y="235">buffers</text>
+		</g>
+		<path d="M 1090 200 L 1082.85 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 1080.5 181 L 1086.76 185.7 L 1082.85 185.7 L 1080.5 188.83 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 1090 200 L 1097.15 185.7" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 1099.5 181 L 1099.5 188.83 L 1097.15 185.7 L 1093.24 185.7 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 958.06 210 L 953.44 186.25" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 952.44 181.1 L 957.21 187.3 L 953.44 186.25 L 950.34 188.64 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 961.88 210 L 966.33 186.26" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 967.29 181.1 L 969.44 188.62 L 966.33 186.26 L 962.56 187.33 Z" fill="#000000" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<rect fill="none" height="20" pointer-events="all" stroke="none" width="40" x="940" y="210"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="959.5" y="217">Output</text>
+			<text x="959.5" y="235">buffers</text>
+		</g>
+		<rect fill="none" height="40" pointer-events="all" stroke="none" width="200" x="1000" y="250"/>
+		<g fill="#000000" font-family="Helvetica" font-size="20px" text-anchor="middle">
+			<text x="1099.5" y="278.5">Checkpoint</text>
+		</g>
+		<path d="M 1240 212 C 1240 196 1310 196 1310 212 L 1310 248 C 1310 264 1240 264 1240 248 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 1240 212 C 1240 224 1310 224 1310 212" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1274.5" y="236">State </text>
+			<text x="1274.5" y="254">backend</text>
+		</g>
+		<path d="M 250 146 C 250 138 310 138 310 146 L 310 164 C 310 172 250 172 250 164 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 250 146 C 250 152 310 152 310 146" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="279.5" y="165.5">state</text>
+		</g>
+		<path d="M 690 146 C 690 138 750 138 750 146 L 750 164 C 750 172 690 172 690 164 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 690 146 C 690 152 750 152 750 146" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="719.5" y="165.5">state</text>
+		</g>
+		<path d="M 1183 170 L 1233.1 202.67" fill="none" pointer-events="stroke" stroke="#724591" stroke-dasharray="6 2" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1238.13 205.95 L 1229.24 204.93 L 1233.1 202.67 L 1233.61 198.23 Z" fill="#724591" pointer-events="all" stroke="#724591" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 840 150 L 840 90" fill="none" pointer-events="stroke" stroke="#000000" stroke-miterlimit="10" stroke-width="3"/>
+		<path d="M 1254.55 140 L 1266.36 191.97" fill="none" pointer-events="stroke" stroke="#724591" stroke-dasharray="6 2" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1267.69 197.82 L 1262.01 190.91 L 1266.36 191.97 L 1269.81 189.13 Z" fill="#724591" pointer-events="all" stroke="#724591" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1110 88.57 L 1233.75 194.64" fill="none" pointer-events="stroke" stroke="#724591" stroke-dasharray="6 2" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1238.3 198.54 L 1229.63 196.38 L 1233.75 194.64 L 1234.83 190.3 Z" fill="#724591" pointer-events="all" stroke="#724591" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 420 285 L 420 5" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<path d="M 870 285 L 870 5" fill="none" pointer-events="stroke" stroke="#000000" stroke-dasharray="3 3" stroke-miterlimit="10"/>
+		<rect fill="url(#mx-gradient-ffffff-1-ffffff00-1-e-0)" height="190" pointer-events="all" stroke="none" width="170" x="440" y="50"/>
+		<rect fill="url(#mx-gradient-ffffff-1-ffffff00-1-e-0)" height="190" pointer-events="all" stroke="none" width="170" x="880" y="50"/>
+		<path d="M 1110 164 L 1232.35 212.94" fill="none" pointer-events="stroke" stroke="#724591" stroke-dasharray="6 2" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1237.92 215.17 L 1229.01 215.91 L 1232.35 212.94 L 1231.98 208.48 Z" fill="#724591" pointer-events="all" stroke="#724591" stroke-miterlimit="10" stroke-width="2"/>
+		<path d="M 1130 146 C 1130 138 1190 138 1190 146 L 1190 164 C 1190 172 1130 172 1130 164 Z" fill="#70ad47" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<path d="M 1130 146 C 1130 152 1190 152 1190 146" fill="none" pointer-events="all" stroke="#000000" stroke-miterlimit="10"/>
+		<g fill="#000000" font-family="Helvetica" font-size="15px" text-anchor="middle">
+			<text x="1159.5" y="165.5">state</text>
+		</g>
+	</g>
+</svg>
\ No newline at end of file
diff --git a/docs/ops/state/checkpoints.md b/docs/ops/state/checkpoints.md
index cf54b07..9264231 100644
--- a/docs/ops/state/checkpoints.md
+++ b/docs/ops/state/checkpoints.md
@@ -113,4 +113,51 @@ above).
 $ bin/flink run -s :checkpointMetaDataPath [:runArgs]
 {% endhighlight %}
 
+### Unaligned checkpoints
+
+Starting with Flink 1.11, checkpoints can be unaligned. 
+[Unaligned checkpoints]({% link concepts/stateful-stream-processing.md
+%}#unaligned-checkpointing) contain in-flight data (i.e., data stored in
+buffers) as part of the checkpoint state, which allows checkpoint barriers to
+overtake these buffers. Thus, the checkpoint duration becomes independent of the
+current throughput as checkpoint barriers are effectively not embedded into 
+the stream of data anymore.
+
+You should use unaligned checkpoints if your checkpointing durations are very
+high due to backpressure. Then, checkpointing time becomes mostly
+independent of the end-to-end latency. Be aware unaligned checkpointing
+adds to I/O to the state backends, so you shouldn't use it when the I/O to
+the state backend is actually the bottleneck during checkpointing.
+
+Note that unaligned checkpoints is a brand-new feature that currently has the
+following limitations:
+
+- You cannot rescale or change job graph with from unaligned checkpoints. You 
+  have to take a savepoint before rescaling. Savepoints are always aligned 
+  independent of the alignment setting of checkpoints.
+- Flink currently does not support concurrent unaligned checkpoints. However, 
+  due to the more predictable and shorter checkpointing times, concurrent 
+  checkpoints might not be needed at all. However, savepoints can also not 
+  happen concurrently to unaligned checkpoints, so they will take slightly 
+  longer.
+- Unaligned checkpoints break with an implicit guarantee in respect to 
+  watermarks during recovery:
+
+Currently, Flink generates the watermark as a first step of recovery instead of 
+storing the latest watermark in the operators to ease rescaling. In unaligned 
+checkpoints, that means on recovery, **Flink generates watermarks after it 
+restores in-flight data**. If your pipeline uses an **operator that applies the
+latest watermark on each record**, it will produce **different results** than 
+for aligned checkpoints. If your operator depends on the latest watermark being
+always available, then the workaround is to store the watermark in the operator 
+state. To support rescaling, watermarks should be stored per key-group in a 
+union-state. We most likely will implement this approach as a general solution 
+(didn't make it into Flink 1.11.0).
+
+In the upcoming release(s), Flink will address these limitations and will
+provide a fine-grained way to trigger unaligned checkpoints only for the 
+in-flight data that moves slowly with timeout mechanism. These options will
+decrease the pressure on I/O in the state backends and eventually allow
+unaligned checkpoints to become the default checkpointing. 
+
 {% top %}
diff --git a/docs/ops/state/large_state_tuning.md b/docs/ops/state/large_state_tuning.md
index ee9e93c..55bf003 100644
--- a/docs/ops/state/large_state_tuning.md
+++ b/docs/ops/state/large_state_tuning.md
@@ -278,6 +278,8 @@ that the task-local state is an in-memory consisting of heap objects, and not st
 Task-local recovery is *deactivated by default* and can be activated through Flink's configuration with the key `state.backend.local-recovery` as specified
 in `CheckpointingOptions.LOCAL_RECOVERY`. The value for this setting can either be *true* to enable or *false* (default) to disable local recovery.
 
+Note that [unaligned checkpoints]({% link ops/state/checkpoints.md %}#unaligned-checkpoints) currently do not support task-local recovery.
+
 ### Details on task-local recovery for different state backends
 
 ***Limitation**: Currently, task-local recovery only covers keyed state backends. Keyed state is typically by far the largest part of the state. In the near future, we will
diff --git a/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/ExecutionCheckpointingOptions.java b/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/ExecutionCheckpointingOptions.java
index 08da029..fcfe264 100644
--- a/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/ExecutionCheckpointingOptions.java
+++ b/flink-streaming-java/src/main/java/org/apache/flink/streaming/api/environment/ExecutionCheckpointingOptions.java
@@ -138,8 +138,9 @@ public class ExecutionCheckpointingOptions {
 					"the stream of data anymore.")
 				.linebreak()
 				.linebreak()
-				.text("Unaligned checkpoints can only be enabled if %s is %s",
+				.text("Unaligned checkpoints can only be enabled if %s is %s and if %s is 1",
 					TextElement.code(CHECKPOINTING_MODE.key()),
-					TextElement.code(CheckpointingMode.EXACTLY_ONCE.toString()))
+					TextElement.code(CheckpointingMode.EXACTLY_ONCE.toString()),
+					TextElement.code(MAX_CONCURRENT_CHECKPOINTS.key()))
 				.build());
 }