meadow-integration 1.0.40 → 1.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BUILDING-AND-PUBLISHING.md +2 -2
- package/Dockerfile +1 -1
- package/README.md +27 -8
- package/docs/README.md +1 -1
- package/docs/_brand.json +18 -0
- package/docs/_cover.md +1 -1
- package/docs/_topbar.md +1 -1
- package/docs/_version.json +3 -3
- package/docs/architecture.md +14 -225
- package/docs/data-clone/configuration.md +9 -1
- package/docs/data-clone/diagrams/architecture-diagram.excalidraw +1756 -0
- package/docs/data-clone/diagrams/architecture-diagram.mmd +8 -0
- package/docs/data-clone/diagrams/architecture-diagram.svg +2 -0
- package/docs/data-clone/overview.md +2 -32
- package/docs/diagrams/configuration-cascade-2.excalidraw +831 -0
- package/docs/diagrams/configuration-cascade-2.mmd +8 -0
- package/docs/diagrams/configuration-cascade-2.svg +2 -0
- package/docs/diagrams/configuration-cascade.excalidraw +831 -0
- package/docs/diagrams/configuration-cascade.mmd +8 -0
- package/docs/diagrams/configuration-cascade.svg +2 -0
- package/docs/diagrams/data-synchronization-pipeline.excalidraw +3278 -0
- package/docs/diagrams/data-synchronization-pipeline.mmd +42 -0
- package/docs/diagrams/data-synchronization-pipeline.svg +2 -0
- package/docs/diagrams/data-transformation-pipeline.excalidraw +2929 -0
- package/docs/diagrams/data-transformation-pipeline.mmd +31 -0
- package/docs/diagrams/data-transformation-pipeline.svg +2 -0
- package/docs/diagrams/docker-deployment.excalidraw +1963 -0
- package/docs/diagrams/docker-deployment.mmd +23 -0
- package/docs/diagrams/docker-deployment.svg +2 -0
- package/docs/diagrams/high-level-system-architecture.excalidraw +5752 -0
- package/docs/diagrams/high-level-system-architecture.mmd +66 -0
- package/docs/diagrams/high-level-system-architecture.svg +2 -0
- package/docs/diagrams/module-structure.excalidraw +15206 -0
- package/docs/diagrams/module-structure.mmd +56 -0
- package/docs/diagrams/module-structure.svg +2 -0
- package/docs/diagrams/sync-mode-comparison.excalidraw +3660 -0
- package/docs/diagrams/sync-mode-comparison.mmd +33 -0
- package/docs/diagrams/sync-mode-comparison.svg +2 -0
- package/docs/implementation-reference.md +2 -58
- package/docs/index.html +6 -7
- package/docs/retold-catalog.json +388 -279
- package/docs/retold-keyword-index.json +24887 -16186
- package/example-applications/mapping-demo/README.md +2 -10
- package/example-applications/mapping-demo/diagrams/architecture.excalidraw +1866 -0
- package/example-applications/mapping-demo/diagrams/architecture.mmd +8 -0
- package/example-applications/mapping-demo/diagrams/architecture.svg +2 -0
- package/example-applications/mapping-demo/package.json +22 -1
- package/example-applications/mapping-demo/server.js +28 -0
- package/example-applications/mapping-demo/source/MappingDemoApp.js +42 -3
- package/example-applications/mapping-demo/source/MappingDemoBrand.js +17 -0
- package/example-applications/mapping-demo/web/favicons/apple-touch-icon.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-16.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-192.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-32.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-48.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-512.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-64.png +0 -0
- package/example-applications/mapping-demo/web/favicons/favicon-dark.svg +30 -0
- package/example-applications/mapping-demo/web/favicons/favicon-light.svg +30 -0
- package/example-applications/mapping-demo/web/favicons/favicon.svg +30 -0
- package/example-applications/mapping-demo/web/index.html +40 -26
- package/example-applications/mapping-demo/web/mapping-demo-editor.js +3267 -398
- package/example-applications/mapping-demo/web/mapping-demo-editor.js.map +1 -1
- package/example-applications/mapping-demo/web/mapping-demo-editor.min.js +34 -1
- package/example-applications/mapping-demo/web/mapping-demo-editor.min.js.map +1 -1
- package/example-applications/mapping-demo/web/pict.min.js +2 -2
- package/package.json +10 -7
- package/source/services/clone/Meadow-Service-DeleteCursorStore.js +105 -0
- package/source/services/clone/Meadow-Service-Sync-Entity-OngoingEventualConsistency.js +327 -92
- package/source/services/clone/Meadow-Service-Sync.js +2 -0
- package/source/views/PictView-MeadowMappingEditor.js +30 -30
- package/test/Meadow-Integration-BisectionSync_test.js +15 -5
- package/test/Meadow-Integration-NewStrategies_test.js +15 -5
- package/test/Meadow-Integration-OngoingEventualConsistencyDeleteCursor_test.js +228 -0
- package/test/Meadow-Integration-OngoingEventualConsistencyDeleteSync_test.js +311 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
flowchart TB
|
|
2
|
+
subgraph Initial["Initial Sync"]
|
|
3
|
+
I1["Query local max ID"]
|
|
4
|
+
I2["Query remote max ID + count"]
|
|
5
|
+
I3["Generate paginated URL partials\n(filter: ID > local max)"]
|
|
6
|
+
I4["Download each page"]
|
|
7
|
+
I5["For each record:\nRead local by ID"]
|
|
8
|
+
I6{"Record\nexists?"}
|
|
9
|
+
I7["Skip"]
|
|
10
|
+
I8["Create with\nidentity insert"]
|
|
11
|
+
|
|
12
|
+
I1 --> I2 --> I3 --> I4 --> I5 --> I6
|
|
13
|
+
I6 -->|"yes"| I7
|
|
14
|
+
I6 -->|"no"| I8
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
subgraph Ongoing["Ongoing Sync"]
|
|
18
|
+
O1["Query local max ID + UpdateDate"]
|
|
19
|
+
O2["Query remote max ID + UpdateDate + count"]
|
|
20
|
+
O3["Iterate all records\n(paginated, ID ascending)"]
|
|
21
|
+
O4["For each record:\nRead local by ID"]
|
|
22
|
+
O5{"Record\nexists?"}
|
|
23
|
+
O6{"UpdateDate\ndifference\n> 5ms?"}
|
|
24
|
+
O7["Update record"]
|
|
25
|
+
O8["Skip"]
|
|
26
|
+
O9["Create with\nidentity insert"]
|
|
27
|
+
|
|
28
|
+
O1 --> O2 --> O3 --> O4 --> O5
|
|
29
|
+
O5 -->|"yes"| O6
|
|
30
|
+
O5 -->|"no"| O9
|
|
31
|
+
O6 -->|"yes"| O7
|
|
32
|
+
O6 -->|"no"| O8
|
|
33
|
+
end
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1808 1091" width="1808" height="1091"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dW3fbyJF+n1+h47zsnlxmkL5f/JA9c3Oi3UyUjJPNXpJcdTAwMDdahCWOKVJD0WN758x/32qIINBgXHUwMDEz6FwiXHUwMDAwXHTMQPbMsUii2WhU9fd93VXVP312cfFi++k+e/Hy4kX28Xq2XFzMN7NcdTAwMGYvPnev/5htXHUwMDFlXHUwMDE261x1MDAxNbzF8t9cdTAwMWbW7zfX+Sdvt9v7l7/5XHJlOiXwh75cdTAwMTRWU/t4VbbM7rLV9lx1MDAwMT73v/D7xcVP+f/hncXcXXu9fP+wzTbJ1epmvVjd5Fx1MDAxN+VvXHUwMDE33dhk19vZ6maZlW99hNdcctH73z/B71x0tfvfPyzm21t4zVx1MDAxYb5/7TZb3Nxu4UVKNN2/+tjwy1x1MDAwYrJ/5WG7Wb/Lvlov11x1MDAxYvftvzJf6Feald/9Znb97mazfr+a7z+z3cxWXHUwMDBm97Ncctxm+bm3i+Xy9fZT3jpcZlx1MDAxNVxm5Ivad/xt10tae31/1Xz2cJtVLoNvvbldZVx1MDAwZlx1MDAwZt5F6/vZ9WL7Kb+z8jZcXFx1MDAxN+8v5/mw/6Ps1GZ2l126cV+9Xy6rXHKv5ruGi8dTPlx1MDAwMb575eeyn1nm2jBC7F+qXHUwMDE5R/W1P65XuZlQK4zhhsvyQS1cdTAwMWW+XHUwMDA2+9jmrb2dLVx1MDAxZrJymF2XvqnYTnlcdTAwMTPv7+ezx0uoNkRcYqZcdTAwMTTTrOzKcrF6V7/D5fr6XeBbXHUwMDE2q3nmjOnFjLz4rHKPR2x0OXuTLY9b6jb7uG0zUlx1MDAxMWek7ExMtHbVk1io98aJpmikZGA3YjymmFx1MDAxYlx1MDAwZozozrouXn9aXVdcdTAwMWXVerV9vfi/vO/Se/XV7G6xdGMrvaa+WC5uVrntQq+zzYvqSGxcdTAwMTcwse8/sF3fl+9eQ4uzxSrbXHUwMDFjPoL1ZnGzWM2Wf2ns6Oz9dv1d9vDY1e3mfVZcdTAwMWSL7Pf7SThlZX9LL6QxXni5WmxcdTAwMTezZTRSlFZwXGYnXGadcGJAnFx1MDAxMIpUza/VOVx1MDAwNbNWXHUwMDE5xcu+P7dzllx1MDAxNsriceKonVx1MDAxZeJE3URcdTAwMGZRXCJoolx1MDAxM0rgUFx1MDAwMmuI0iqumTVyNIZYoMTOtsaPXHUwMDEy4Y52Q1x03uSDXHUwMDBmt7P7LLmkXHTJf6rzYlx1MDAwYk5wVlqHXHUwMDFiKlXaZuGFrDIn7b1QKoRcdTAwMTfSL+krxof0QlZ7/Vm9XHUwMDEwgVx1MDAxMpLqqvm1OSdXQlGt5Ukgse9V2b+9XHUwMDAx7SbvwoDgpj+vfsibxPdv/Px5U5OzzWb9wTV5yXatqo/hVvNPVprd/WtgUFx1MDAxM01cdTAwMGV1fDxcdTAwMWFcdTAwMDCNM+P5klapPPSmyiRVYppcdTAwMWOVN41cdTAwMWbTrMK4XHI1XHUwMDFjruBUjYdcXFx1MDAxNZj25/fZ5tNcdTAwMDV8XGLg4m728eLy6yCyVWbpXpDtbjGfV6Hgzewhcyjkg6hcdTAwMGZ5TShTR8Cm2+qGgzJcdTAwMDJcdTAwMDeLXHTn+jpcdTAwMWFcdTAwMDdZRfd8ylx1MDAwN7ycmFx1MDAwYtflrFRRXHUwMDEzXHUwMDEw9iyXcGtcdTAwMTncKmotY6U+6Fx1MDAxN1xi95D14TmBMKZZllxc8l2z6/WY8FVF4GtgmJtcdTAwMDSjtr6PMlx1MDAxNlx1MDAwMFhcdTAwMWVcdTAwMTSNXHUwMDEzwKJcdTAwMDCWXHSDcUdcdTAwMTCNxFx1MDAxMG3tSf74XHUwMDA0XHUwMDAwu8nu1ttsXHUwMDA3RVx1MDAxN7++uIY+bEePtCFcdTAwMWNcdTAwMGIjbcv9dYNcXFx1MDAxZFx1MDAwMbnFXHUwMDFj9JZEQy4lJXS6XHUwMDEx5rK0nsKZlZwgdzDtKXBcdTAwMGJDmnEhLD1p9yBcdTAwMDJyXHUwMDBiXHUwMDBims97g9xcdTAwMTOwMaZZnlxcil2zm5sxQa6JgNzAMDdALq2syuY+qkxcdTAwMDBylZggt7umNVx1MDAxNOOOjEgtqOJifOu0v8tcdTAwMDDIoNGL+5mDKmj94q/f/Vx1MDAwMX7buFXRh7//ffUv8NxcdTAwMDA2Xzqw+m0pXHUwMDEz/3X0iFx1MDAxY4K5Olwi93H73Vx1MDAwMNtGXHUwMDAwdjGDzcTJa8XCXHUwMDFl7ipOi8XDXHUwMDAxNle4/X5CpVwigphyJaNfxC5MaEl6Q+xcdTAwMTOgNaZZkVxcyoJLv1x1MDAxYlx1MDAxM2J/XHUwMDExgdiBYUYsQksqplXoYVx1MDAxMFtL3Cq0UIYqTfj4RPLX61x1MDAwZqvleja/yGbXt1x1MDAwZbey0SNxXGK/6kjcdFvdXHUwMDEw9stcYoQtZpxcdTAwMWbiJTHjflCEXHUwMDEyh64rKivTXHUwMDEzwvaLsJajPFpcdTAwMWJmXHJj9iRcblx1MDAxZVx1MDAwMbCFXHUwMDA18f62Y09AwphmZXKpds3eXHUwMDFlWTJ/XHUwMDFlgP0qXHUwMDAyYFx1MDAwM8PctFxuLWpcdTAwMTFcdTAwMTOKhFahbYBcdTAwMDdPXHUwMDAwi1x1MDAwM1iKc0eqNVBkoke4XG79ar15XHUwMDA0IZj415v5S1x1MDAxMIHfZVx1MDAwMEyP2u/Np3PY91xy4VlcdTAwMWRxUffZXHKCv46A4GJOUlx1MDAwMc+eL2Z369W8xp65XHUwMDFmu67tYTxcdTAwMTS1XHUwMDEzXHUwMDAwXHUwMDBmXHUwMDA1wFxmXHUwMDE50q6MoGxAiVtcdTAwMTjQrD9cdTAwMDQ+XHUwMDAxKmOaVcml3jX75khnT2zW7JpdRDb7NMD+TVx1MDAwNLBcdTAwMDeeXpNyrpBtZ/uGhOK3qJmAvTOwc4PbXuaKcGIkP8nNXHUwMDA3XHUwMDA19u9ynFx1MDAwM5jLPi5cdTAwMWW2XHUwMDBm/zZ6XHUwMDE0XHUwMDBmQWJcdTAwMWTFj99UN8h+XHUwMDE1XHUwMDAx2cUkdlx1MDAxN6+aZSXi41Ou4lx1MDAwZWO3aOVcdTAwMTlMoN0vaGt74LmN3mwt58pUo3n6XHUwMDA17cKEfjiy53tcdTAwMDJon4CuT1x1MDAwM4O/i4DBwHg0wKBkfiSklaEoK0rEoT9NMIiDQYtMzdFMXHUwMDFixTlcdTAwMWJfXHUwMDE48+t3i/vRQ19cYlrq0OffSDe4+31cdTAwMDTcXHUwMDE15NrEp+zQ2lx1MDAwZU9cYu64mOBusG1Yglxu1Fx1MDAwMK9cdTAwMDVcdTAwMWZTVlxypVFcdTAwMGJcdTAwMTO6XvZcdHfjVH2XXHUwMDExcFx1MDAxN1x1MDAxOI+mXGIn7kchhuGOs1x07rpHOFVcdTAwMDI8o1winLQlRpHxod1Xm8zF93xYbG9BJC3m8KUwdFx1MDAxN4vVXHUwMDAzwNXoYTBcdTAwMDQ5dVx1MDAxOIy8w274+O/t+HhVJFx1MDAxYt1aRFxcsfGDXHUwMDE2XHUwMDAzOa1cXFx1MDAwN1wiXHUwMDE2J3zsXHUwMDA1XHUwMDFmXHUwMDE1Q+GjVsJaqoeCx71cdTAwMDXdX/dcdTAwMDWP0ORVXHUwMDExmj9cdTAwMWZVXHUwMDAw8H+0w2NoPJrgkVg/JCGY1MplYEtkgkekXHUwMDFhpKhlXHUwMDE0y1x1MDAxNZNa2PGtiVx1MDAxZSZ/Xvz64q/593xccv+NXHUwMDFkIIOY057geuRcdTAwMWW7QeRcdTAwMWZcIiCymIqywC7HUYjkPkSG0l3FhJHD5d5wlK8zy5iSklxyhZGFXHTd9ZbuelxuRsY0y5KrXCJcdTAwMDY/o2OC3m8joDcwzI3QK3zoXHLnu4pcdHt7KKXHcHFcdTAwMDeUXHUwMDAxZSWUjC/5JpxcdTAwMGZaXCLTuSS/XHUwMDA2YS0u+bXpZrvB8Vx1MDAxZiPguJiedMDJj8Ix8T09lFxuK3m57DvBcc9hR1x1MDAwNuX+xmiljFx1MDAxY0yy7k3oSJ2IXHUwMDEz4PhcdTAwMDTcjGmWJ1dFIP5ajVx0jq9cIuA4MMyNcEz9wN9wLqxk7NBNJzhGlp+oVFx1MDAxZozLhZVcbtjxXGLrO11uXHUwMDFmc0Fny+UuJjZPXHUwMDAw3aeGfu4ga/ZcdTAwMDBIOl+sbkafXHUwMDAwXHUwMDFiRLeD8oen3nM3cP5TXHUwMDA0OFx1MDAxN5PV9zNcdTAwMDQ4Kz8mOJT2OiXlXGa4nmxx3FxcXHUwMDFiYY3SYqDaUHtcdTAwMWJaXHUwMDFjkbUnoPNcdDBcdTAwMWHTrEiuiqB9Myp0/nNcdTAwMDQ6XHUwMDA3hrlcdTAwMTGdtVx1MDAxZr1cdTAwMWLOe53ScnpAZ4XMQ9dSUaHYXGJXqv9cdNJygpD2jGk530WgcDEprVx1MDAwMlx1MDAxMjmYlkOpbk+MnfJyXHUwMDA2PPVcdTAwMDRcdTAwMTmpSJXhhnI+UGbs3oLujmjZXHUwMDEzMPhcdTAwMDSwjGlWJldFyP31rNdm7eFcdTAwMDJZY7NPXHUwMDAz7a8joD3w9Fx1MDAxYWtQmZiM2ykxp4+SXHUwMDE2XHUwMDE2XHUwMDE1okU1tUZcdTAwMWFCxnekzLkl5lx1MDAwNEHxqVx1MDAxMnP+XHUwMDEyXHUwMDAx2vtkukBcdTAwMTZBXHUwMDE4tJmp1UNcdTAwMGYk03JcdTAwMTVYLptAu59AZdyqNjWCXHUwMDEzY4hcdTAwMWNcbrRcdTAwMGJcdTAwMGJcdTAwMTL9XHTngdBVJVdFssDbI2FjJzZbXHUwMDA0Xy7FmED7r1x1MDAxMaBcdTAwMWR4ek2gzaxcdTAwMWZXXHUwMDFkzqblovzUXHUwMDA02qeWycCmXHUwMDExSWKBmo9wtbzcuVx1MDAwNYybL96+zeChXbtffnsh785cdTAwMDDEQyBZXHUwMDA38fib7Fx1MDAwNur/XHUwMDE5XHUwMDAx6sUsN78/dOpj6+FC++vhwXTbymrcXHUwMDA06z1cdTAwMWaVgOPo2lprjFx1MDAxYapI1d6Evu8vduxcdTAwMDT4fVx1MDAxYZz8W1x1MDAwNE5cdTAwMDbGo1x0J4Xx162PpNuG6qBPOIlcdTAwMTS3XHUwMDE0VU6KXHUwMDExzvkote0jguxcdTAwMTZzR4+JIYxcdGPiwVx1MDAxZHVcdTAwMDPA/4pcdTAwMDDAPVx1MDAxZn9cdTAwMTdcdTAwMGaAVNZSXHUwMDA2p3pcdTAwMTNPXG6AWuPKwnFmtKJkqHpcdTAwMTN7XHUwMDFiOrZcdTAwMTB7XHUwMDFhXHUwMDAyjlMp/ndcdTAwMDRcdTAwMDJcdTAwMDbGo3F5V/m5XGJTwYnBXHUwMDEwXHUwMDEwmXZANaeWWTnCgornUHBcIlxiLkNcdTAwMTac+J9cYsArdo1u4rOFLPHrK1x1MDAwNddxp4JcdTAwMTPDXHUwMDA1QFx1MDAxMdQ6rnCHXWqihop/KiyI9yf4RrubOYuAu8B4NMCdpX55pSProlO9iVx1MDAxZdZFcVx1MDAwN1xccaGFplKPL0zprOtNXHUwMDA0XHUwMDEx51nqTbxpcubGUzprs5Dn0ILL1F/CoTSgXHUwMDA3U8qVUYZrzaiiivAsXHRcdTAwMWRUactcdTAwMDfX7uPsXHUwMDFi/bVcdTAwMTa/XHUwMDE4yFxmXHUwMDFmVGmrVtuaNFx1MDAwZlxmmDBxWr3gQXz8fr2oQ2/5r4vy4ee/7P/9j8/bP01V28dcdTAwMTOZKlx1MDAwM3SBXHUwMDFho4iBP1xmjFJ4bdjUaEk1XHUwMDE1XG5UtyBcXKC6wHgqqTWWMFx1MDAwNXyE4q5VqVWs/Gvbrm69XHUwMDE5TlLGQdEoKi1ljFx1MDAxON29SZ5ykEdWXHRcdTAwMGXwQURrJ71b5CrlmpR/Tff+2JRZYZmQXHUwMDEyPsVccm7IXHUwMDA1S2FuMkpKZcGercRdjfy4TvNcdTAwMThBITjRTINXoi6XJNVEXHUwMDEyLYWQXHUwMDA2eo1cdTAwMWJ5ydOqbSmGu1ql4Fx1MDAwYjCHS6UkjHfrc/OvtqlLXHUwMDFmhMftXG6Xg5hCXa14SqpG02rD/tUqXHUwMDE1hlBiNbdcXOHGTJOUwtTJXGbMoVxmrFx1MDAxZfe8NO7jtjLXfVa7XGaI98P2q/Xd3WJcdTAwMGKT8J/cXHUwMDA0eoBcdTAwMGXb2Wb75VwiTzDyxdbdep5cdTAwMDPYevNmsa1IjVx1MDAxN9njTO+VylxuXHUwMDFjdZ/D58fya707SCUpy5WVr1x1MDAxY9xKKfGy1bx7N1x1MDAwM+dcdTAwMDT33M18PL9w5Oc2m1x1MDAxZIA03ET1vTpLypZv1lx1MDAxZlx1MDAxYWXWdVx1MDAwNDNcdTAwMGJcdTAwMWbmimNmTFx1MDAxZOZVT8xsXHUwMDE4ZmZwNd4lUFx1MDAwNG3ZeDbbzouYIVx1MDAxMcwnZlx1MDAwZVx1MDAwZXCX17hcdTAwMTlvvXxcdTAwMDTkTOKGaHhyppCEyWNnnFx1MDAxMFx1MDAxY6J2pGe4q/tlZ7rVYVx1MDAwNqRnSILVJz0jOK/8XHUwMDA1XHUwMDEytOGZTy9cdTAwMDQtcGz0eVx1MDAxMbR5XHUwMDA0QVx1MDAwYp/diyNoglx1MDAxY+bWT1x1MDAwNG1cdTAwMTiCZpGH8MBcdTAwMGbMi4aNZzP4vChcdTAwMWFcdTAwMTJC61x1MDAxNK29S2e/fCZxSF1jaKJcdTAwMTXAnpahPen6mbJcdTAwMTZJkkbE0CRHssuJop1cdTAwMGZFXHUwMDFinvv0QtFcdTAwMDLniZ9cdTAwMTdFy1wiKFr49GdcdTAwMWNFkzJcdTAwMTCcN1G04tWeT8xAxetcdTAwMDFcdTAwMTRIY0ZcdTAwMTSwfk5cdTAwMDSNI+G6xs9MXHUwMDE3esbbb1x1MDAwN0vPaFx1MDAxZnRo3PTM4lx1MDAxNvSedf2M4nb5emVn8jnJmUF+e42dUZzNTexsdLSnXHUwMDE3dlx1MDAxNjh7/rzY2dtcYnZcdTAwMTY+XHUwMDE5XHUwMDFjx840OYzNntjZMOxM4Vx1MDAwZatnhFx1MDAxOXhcdTAwMDBmWj9zP1x1MDAxMz3r3uS46Vmn4DNOkeTufFx1MDAxN88melx1MDAxNnn1L5CeXHLPe3qhZ1x1MDAwNW1RXHUwMDBm0d1kklx1MDAxYqIpUVx1MDAxMiZp43eZcMaVgndcdTAwMDU8a/g/b+j/wLztJoK3hVx1MDAwZodv5G3gxJLy8sfjcEZcdTAwMDTyXHUwMDA3qHNcdTAwMWRV/lx1MDAwNFx1MDAwZVx1MDAwM5n4XHUwMDFicnVccnfoXHUwMDBmp1x1MDAxYexV04m/5Z9cdTAwMDAvNYozw1x0V0BouDft4MPTeGqt0IK6Y864LIu3u1x1MDAxZny0mlx1MDAwMYQ1SlCrJXA/7fWtxu2IaN1cdTAwMDCiXHUwMDAy4J4ooDZA3Vx1MDAwMHWNqrZX31x1MDAxN23tXHUwMDFjo6l1lmQpIKiVrDxFKm/OZ3XtQdru+1x0YUJZyiXQMr9zWJZcdTAwMDckjlxuI5RcdTAwMDGOXG7cSHtTM3pcdTAwMDFOmFRqXHUwMDA11NSdzqEq1d7yN7GMT5qUicqs6bHPdlx1MDAwNqh0XG5DXHUwMDBl5JVyS1x1MDAwMGOYdzmaXHUwMDExap1yuMJcdTAwMWEggTDwttpcdTAwMWGaIFx1MDAxYZVWXGZWXHSvb2jCaFx1MDAwNTiMlOCC4Fx1MDAwNrpSPChvXHJNICmhqXYncWtcdTAwMGV3VDmsKm9cdTAwMGVNKMH0U1c1dm+yno2ht2cpZamw1DJJKHBcdTAwMDXKPHdCU05KZSrgXHUwMDEyeLZcdTAwMWNmXHUwMDA3Kb3JXHUwMDAzzUGPXHUwMDAzd95cXMfrx8FS0fRcdTAwMGam8eqPZ55Pw1hcdTAwMGLCdneuXHUwMDBiirdNxDSb32TJY3p6lZ2uZUyGuqyUXHUwMDFiyOlopdxOed7NIf1k46Kfo09PN1xulbpcbmRcdTAwMDGojzKnledcdTAwMWSEf1x1MDAxNvnpn6qVfipZ6JV6a4NnoZfj5mehe/dRTzv3Ot4tuXxcdTAwMTEnXHUwMDE0i5Iwi0ihXGLUszr7+5U3J6H4RFx1MDAwYv3IgmPALoVcdTAwMWTV0ezPutJfk4pcdTAwMWWBwVx1MDAwYsXEV4ogXHUwMDE1Pb6H14qJL1x1MDAxNmX52PL20GoxqctFT8ui1WJSk4vEY0totZjU5WIntZjU5aLfXHUwMDFjVi4m/erFpKNgTHpWjIkvXHUwMDE5rc8o0Zox6Vc0JjXVKDw/wKvGpC5cdTAwMWJ9y8XrxqQmXHUwMDFjte+paOGY1JWjv52FVo5JXTr65ouWjklX7djSwJmKR3hcdTAwMWHVn2fY7ihInFx1MDAxOawswMDi8XuEeCxuVlx1MDAwNVx1MDAwMoZcdTAwMGbFI6+XN5vEY/Fqv3WPOIqSSrebXHUwMDA2s+z4tONqfZ7SsdrvbsrxXbtyvKLuXHUwMDA090c/nMflVlKmSURdMoB8V/aOS2KAQFx1MDAwMJeYQsN62VpEXHUwMDFlvaSplZqxylx1MDAxMXbP7Z/Pqlx1MDAxOFlcbvxec+W4MGecXHUwMDExVTXLvJEnLUzW3lx1MDAxZnS6ZXuT+HzLiDax9cpcIprE1snwo9CmgmUnJVxctmrf9lx1MDAwNzdVMftlXHUwMDA0kV1cdTAwMTVVzG7tmIPI9lx1MDAwNCeLXHUwMDBmXCJcdTAwMWKXqlpGXHUwMDEwOZZcXFx1MDAxNVx0sVng9Ns4XCJcdTAwMTcqY1b9zETbTj1cdTAwMWahXGbFiaom61x1MDAwZdHjakQ7cs/J2khKyFx1MDAwZdtcdTAwMDCRXfFcdTAwMDTSMSZcZlosPy6ttoZ7K2onVDHzYEdcdTAwMDBcdTAwMWE3LPbH1DWDXHUwMDA2gT/CtMM1dXtcdTAwMTJEePeM53DQoC1cYlx1MDAwNlx1MDAwN+Am1I/nQtc0S2nlhrSxqiN7XHUwMDAzxlWiPuOVwyHy9vBcdTAwMTU0Ulx1MDAxOFx1MDAxNkl2gC4qwbDu54SkzdRcdTAwMGZcdTAwMDCKYHnQZSrszpRkZZc1v1x1MDAxZV1cYi2tPnGtiL9MjeeB/p5cZtfaW6Y+oVx1MDAxNEdcbt70SJiBwmlljd8gmlx1MDAxN6aCK2OtUcwwabj1LFx1MDAxNl+sI1x1MDAxNf6Gm7etgWeOaZXtXHUwMDExVnMofEpCXG6mslx1MDAxMytcXICFd4tcdTAwMGar4HZ+PfaCcVDM4blbL1x1MDAxNLOgXvrDmVLMu1xiismTq1wiq3etYimmv2pcdTAwMWYqwzZcdTAwMTHMPmK+dNlwzLqgXHUwMDAwOFx1MDAwMlx1MDAwZaAmhul+XHUwMDEyn2JcdTAwMWHhptomitlcdTAwMGXWiccxXHUwMDE14DXzk1x1MDAwNdBV2Fx1MDAxMo9jKs2k8Fx1MDAwM1SwK4WJxzHd7ifpWJctQZLMVlx1MDAwNpD4LFx1MDAxM67yw+HxcSU+zSSu9GA3mplgeGbESmKC55lcdIZoRsWT+FTTXHUwMDFh40e44CNKeueaXHSObMaElfRMN1x1MDAxM49vMlx1MDAxN53TiW8mXHUwMDFl4eSgkfz20FElPuFU1I93w0eVoFx1MDAxOWf9inFQzuG5XFwvlLOgYt/PzpRyrlwiKKdwR/jtYmKiKWd9VTNUWG7ani5e7Td6xOK2p7l2m4XTOmf+g96dXHUwMDFlvHRcdHZ7OqKeXHR6ezqioFx0enu6nXiit6fbe9m0PT1VnDt2NTbYXHUwMDE4vT091TmJvfpcdTAwMWO3qIdnSb2QuYLkrOI555nUOVlHsDyZXFxcdTAwMTXB2tezSJZnaUOhk2CxOq2n/LW+o1x1MDAxMVx1MDAwNaqMMKWAWcSaie7ln0ilYdI5qLbKbVx1MDAxYXvLXHJopqdSIHRKXHUwMDE4ruFcdTAwMDIqlbdcdTAwMWGCZn6Up1Rot+1suWEuxLtcdTAwMWLrYym3oLRcdTAwMTR0QFx1MDAwMibzpkInXHUwMDExjFx1MDAwZvic0Eq6OY5cdTAwMDGH4o2VTtrZnoDBo5Ioqlx1MDAxOXAxWVtcdTAwMDZF17OzQDAslYJYmIZFx1p2WkDfoFx1MDAxOTBzaFL6dVPQmWvGpLpD4lx1MDAxYSVu4DmBQSeSMuozK/xCI6XuXHUwMDEysHMmoVuAad2WXHUwMDE5Kadp1Wqb1lx1MDAxOCPKiVxiN/Twh1x1MDAwMFVcdTAwMTLMX8o+odiJlOCiMGNcdTAwMTG4XHUwMDEw3Jr5u/f4aidKpNxZ685sXHUwMDFit7PbeSZMNanLpaPAXHUwMDBmYaZcdTAwMTDeOju+2ImWqSWCXHUwMDAyRzHGuWC3tcXj4J031/H6cVBVNFx1MDAwN6xcdTAwMTU78czzaWhrwdpm63jaqlx1MDAxNVx1MDAwM0+H2ZmxepdHRFvvI1x1MDAxM9mq3HV2fchdXHUwMDBmXHUwMDEz2Siv7IHnZJWX7GzKZOuPnHKNXCKnJqdNRo2nXG7fVFx1MDAwNaX0x1x1MDAxZuJkpD1cZlx1MDAxN2qWkcI2lEFcdMvIqVxmSt+eXG4sXHUwMDAw46nW5ehPOW27n1x1MDAwNHSkzitlSsGYNcwjbmhcdTAwMTmZgFx1MDAxNMpcdTAwMGJlXHUwMDFhXHUwMDA2n7aGN0WttOvIXHUwMDA0hCTReVx1MDAxMVx0V02CXHUwMDE5v4okWkgmzC3wuuIn0Fx1MDAxONxWY8XMXGIhmYBWZEZbSaUrw2qUX2dcdTAwMDRcdTAwMWSvXCJkqmVZSVx1MDAwMlRgJymZgCzgj/VPNFx1MDAxMHApumnJRMPzs3n9XHUwMDEzuC1QXHUwMDBl3cRkYjqWQaGEpSYvgELASHyBdULUilOTVLuSmdzCfdCuZVBg4NPSdn1PwFdBXHUwMDAxPpuC71x1MDAwMMmAmzLGkI56MqFSpGDjrv5cdFi6XHUwMDE1TeEqUVVQQDOKx9o9ufX6RUuwejKh2lx1MDAwNdS46idGMFxyttatfCa0J1LolXNcdTAwMDLAba69pYdcdTAwMTNqoFx1MDAxY1x1MDAwNfK8va5ccpyppqzVQOHeXHUwMDFhxdOIyoLD3Zxrut5cdTAwMDahXHUwMDFkXHUwMDAzN9ukXHUwMDFkaYXzT9pxwMJ8XHUwMDA0XHUwMDE3x0KNNlxmXGLWeFxu801lUFxud3yIkI4quSpq2b5ccqzihKSjUP4yTqhmppVTbkNcdTAwMGbyXHUwMDEwd1gp0H/DQFx0kWmbMf94akDcXHUwMDEwY4HegTgyzKN1p5ynwLQkXFwwXHUwMDEwXHUwMDEwoOe6XHUwMDE2ydQgXHUwMDBmxf4v5U3RZTEnKjAnXylTrlx1MDAxNKVcdTAwMTZKdKuRSU1KoDFcdTAwMDNiQkiXKtxcdTAwMTRV1l4wglx0UIeWXHUwMDE1f2tcdTAwMTXl8UcqwM2CUuCKaGXASJtcdTAwMTJm2yPM4Fx1MDAwMjBcdTAwMGVcdTAwMDG0nVhcdTAwMDVcdTAwMTLA5+tocVxi+k0j81x1MDAxOKRMlVPPzIJcdTAwMWWwtSqMeD3o5FxmXHUwMDExoHYt47Rm92gxXGJcdTAwMDKjYqfEeGRcdTAwMWYtXHUwMDA28+0oXHUwMDE4RcqNXHUwMDE0spY6jZeCXHUwMDA27lRoaFBbq1x1MDAxOYxgNyVcYrJe7I2U+Xmo6LRcdTAwMDXLUsaEVVx1MDAxMlx1MDAxY1x1MDAwNDrJu+0rWlx1MDAwMWNjhKXEcOVcdTAwMTa0OonAKj7nXHKgr1x1MDAxOIfM63lcdTAwMWbO5d9weCPfhGPVRb7dv3pWfFx1MDAwNfWa35+p4tvGKr5cbs+8XHUwMDBilNtcdTAwMGIovsqS31T3cshcdTAwMDTa8rCYKJLJXHUwMDE0XHUwMDA3wkTM+Fx1MDAxNN+0XVxiXHUwMDE3x2m+olx1MDAwNO1SxGk+VsL+ozPSw3R27qc6llm/pW/Scql2XHUwMDE0zjl6XHUwMDA1XGKOhnJOYJFEXHUwMDE58U+6QZj4XHUwMDFiJVx1MDAxMZ+3KdVWWcNgZLhkvsiiKSdOPDAlNHDR9n1cdTAwMDdcdTAwMDaSUlxiazlcdTAwMTXgXHUwMDEx1s+UlylxS/1GU+IqXGZEnFx1MDAxYsBoSkGi7v5Cu17n4LuoKP5cdTAwMDLKR7RcdTAwMDdcdTAwMGVorNRcdTAwMDKkloV++lxulebclrlcdTAwMTR+YVx1MDAxNPDO9l0uuMRcco1iTGtiYSQ9iapT6c4/Z5ZcdTAwMThgU5xG7NuotLwloO1+YSdXib5cdTAwMWOPmF0vYOTuq5k2QnFFfb4ubEqUZlRyxSWloPFbXHUwMDFitGn+UZdYQLSVtUhAeCCGXHUwMDBiQi0jgtv2zKPEr1VcdTAwMWZxLEXKgeJcdTAwMTffwXzdZmRa9kyRiFxiU29wuPFVrVXp/j33na1cdTAwMGZPVFx1MDAxZlx1MDAxZGiqmrFcdTAwMWH/7dbBUVXLYoT6RSecrVx1MDAxNlZnwavaWjNVw5fU38umzlL37/GIilxctuqXklH/Xrn03m6vaGb8WcNcdTAwMGZkplx1MDAwMmTH/j1XXHUwMDFloK053TinXHTQifv3wEFbn6t/dYTXsaNXfFa7csQ6kLjqXHUwMDBlMElqsFxiQ2GW8MZcdTAwMDFkXHUwMDE1XHUwMDAwg9zHYzJ7cJM9K8E9IXt3pkrwR4RcdTAwMTIsbnZcdTAwMWRcdTAwMTk3avwkp0lcdFx1MDAwZaRcdTAwMDRxh3JcdKE0sFx1MDAxZDtcdTAwMWWyOW39XHUwMDE13vhh542f7WbjXHUwMDE3s/v711tcdTAwMTjn/Vx1MDAxNFx1MDAwNaazmO9cdTAwMDamcJTH17bZfTko+Uvfwkz2zWr2ZllcdTAwMWbzXHUwMDE3Py6yXHUwMDBmX1x1MDAxZXrKr159+Up/883ubnaP69v3y+3iNVx1MDAxOMj1XHUwMDE2rMhZwU+uf/mM4dwo27308/9cdTAwMDO23FdcciJ9<!-- payload-end --><pict-renderer-graph:source xmlns:pict-renderer-graph="https://fable-retold.github.io/pict-renderer-graph/ns/v1"><![CDATA[{"type":"flowgraph","mermaid":"flowchart TB\n subgraph Initial[\"Initial Sync\"]\n I1[\"Query local max ID\"]\n I2[\"Query remote max ID + count\"]\n I3[\"Generate paginated URL partials\\n(filter: ID > local max)\"]\n I4[\"Download each page\"]\n I5[\"For each record:\\nRead local by ID\"]\n I6{\"Record\\nexists?\"}\n I7[\"Skip\"]\n I8[\"Create with\\nidentity insert\"]\n\n I1 --> I2 --> I3 --> I4 --> I5 --> I6\n I6 -->|\"yes\"| I7\n I6 -->|\"no\"| I8\n end\n\n subgraph Ongoing[\"Ongoing Sync\"]\n O1[\"Query local max ID + UpdateDate\"]\n O2[\"Query remote max ID + UpdateDate + count\"]\n O3[\"Iterate all records\\n(paginated, ID ascending)\"]\n O4[\"For each record:\\nRead local by ID\"]\n O5{\"Record\\nexists?\"}\n O6{\"UpdateDate\\ndifference\\n> 5ms?\"}\n O7[\"Update record\"]\n O8[\"Skip\"]\n O9[\"Create with\\nidentity insert\"]\n\n O1 --> O2 --> O3 --> O4 --> O5\n O5 -->|\"yes\"| O6\n O5 -->|\"no\"| O9\n O6 -->|\"yes\"| O7\n O6 -->|\"no\"| O8\n end\n","style":"notebook"}]]></pict-renderer-graph:source></metadata><defs><style class="style-fonts">
|
|
2
|
+
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><g stroke-linecap="round" transform="translate(815 10) rotate(0 491.5 535.5)"><path d="M32 0 C219.9 -0.35, 406.62 -0.27, 951 0 M951 0 C973.59 1.74, 983.21 11.8, 983 32 M983 32 C983.94 254.8, 984.24 476.9, 983 1039 M983 1039 C982.83 1062.25, 970.66 1071.75, 951 1071 M951 1071 C608.77 1069.82, 267.95 1069.37, 32 1071 M32 1071 C11.8 1072.17, -0.38 1060.6, 0 1039 M0 1039 C-2.57 711.03, -3.34 381.65, 0 32 M0 32 C-1.73 10.77, 11.47 0.59, 32 0" stroke="var(--diagram-deemphasis, #8A7F72)" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/></g><g transform="translate(815 15) rotate(0 491.5 10.5)"><text x="491.5" y="13.215" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="15px" fill="var(--diagram-deemphasis, #8A7F72)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Ongoing Sync</text></g><g stroke-linecap="round" transform="translate(10 10) rotate(0 406.5 535.5)"><path d="M32 0 C183.49 -0.11, 334.26 -0.24, 781 0 M781 0 C802.68 -1.88, 813.95 9.14, 813 32 M813 32 C813.45 256, 812.27 478.29, 813 1039 M813 1039 C814.48 1058.84, 802.39 1069.59, 781 1071 M781 1071 C593.31 1071.29, 404.71 1070.75, 32 1071 M32 1071 C12.27 1070.24, 1.65 1058.43, 0 1039 M0 1039 C0.73 774.59, 1.05 510.71, 0 32 M0 32 C-1.68 9.79, 10.99 -1.94, 32 0" stroke="var(--diagram-deemphasis, #8A7F72)" stroke-width="1.5" fill="none" stroke-dasharray="8 9"/></g><g transform="translate(10 15) rotate(0 406.5 10.5)"><text x="406.5" y="13.215" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="15px" fill="var(--diagram-deemphasis, #8A7F72)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Initial Sync</text></g><g stroke-linecap="round" transform="translate(328 90) rotate(0 115.5 28)"><path d="M14 0 C54.36 -2.9, 94.97 -0.19, 217 0 M14 0 C58.3 -2.1, 103.62 -2.27, 217 0 M217 0 C227.61 1.59, 229.39 6.03, 231 14 M217 0 C227.86 0.37, 230.88 2.84, 231 14 M231 14 C229.28 20.51, 230.93 27.97, 231 42 M231 14 C230.23 25.33, 231.71 35.94, 231 42 M231 42 C230.8 52.88, 224.59 54.64, 217 56 M231 42 C231.68 51.61, 227.15 56.25, 217 56 M217 56 C155.83 56.47, 94.77 55.18, 14 56 M217 56 C139.76 57.73, 62.57 56.58, 14 56 M14 56 C5.16 55.38, 1.14 52.12, 0 42 M14 56 C3.5 56.11, -1.29 50.49, 0 42 M0 42 C-0.33 32.63, 0.04 28.12, 0 14 M0 42 C0.08 33.06, -0.08 25.11, 0 14 M0 14 C1.37 4.83, 6.53 -0.17, 14 0 M0 14 C1.29 5.69, 4.35 1.87, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(336 105.5) rotate(0 107.5 12.5)"><text x="107.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Query local max ID</text></g><g stroke-linecap="round" transform="translate(279 236) rotate(0 164.5 28)"><path d="M14 0 C73.79 -0.72, 135.62 -3.29, 315 0 M14 0 C124.01 -1.95, 233.62 -1.31, 315 0 M315 0 C326.32 0.96, 329.23 5.23, 329 14 M315 0 C322.86 -1.5, 327.42 2.94, 329 14 M329 14 C329.3 25.64, 330.91 35.01, 329 42 M329 14 C329.21 24.42, 329.98 34.11, 329 42 M329 42 C327.34 51.58, 325.26 54.22, 315 56 M329 42 C331.09 49.32, 323.54 54.61, 315 56 M315 56 C208.12 55.95, 98.78 56.72, 14 56 M315 56 C247.08 57.56, 179.82 57.4, 14 56 M14 56 C4.9 54.37, -0.03 51.6, 0 42 M14 56 C5.56 55.09, -0.24 50.36, 0 42 M0 42 C-1.73 33.41, 2 22.17, 0 14 M0 42 C-1.02 32.91, -0.11 23.99, 0 14 M0 14 C-0.45 5.09, 5.79 1.3, 14 0 M0 14 C-1.72 2.79, 6.25 -0.72, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(287 251.5) rotate(0 156.5 12.5)"><text x="156.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Query remote max ID + count</text></g><g stroke-linecap="round" transform="translate(114 382) rotate(0 329.5 28)"><path d="M14 0 C142.1 -1.7, 270 -1.85, 645 0 M14 0 C188.95 -1.72, 363.04 -1.79, 645 0 M645 0 C655.77 -0.23, 659.61 5.46, 659 14 M645 0 C653.53 1.78, 658.08 3.56, 659 14 M659 14 C658.73 22.34, 658.32 26.41, 659 42 M659 14 C659.27 23.91, 659.98 33.06, 659 42 M659 42 C658.49 50.12, 653.73 57.07, 645 56 M659 42 C659.93 50.76, 655.97 54.19, 645 56 M645 56 C478.37 53.48, 312.29 54.69, 14 56 M645 56 C428.6 58.5, 212.55 58.45, 14 56 M14 56 C3.77 54.77, -0.9 50.26, 0 42 M14 56 C6.5 58, 0.08 50.4, 0 42 M0 42 C0.62 32.25, -1.44 27.16, 0 14 M0 42 C-0.53 33.92, -0.67 27.02, 0 14 M0 14 C1.39 4.75, 4.85 -0.25, 14 0 M0 14 C-1.47 6.36, 6.97 1.23, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(122 397.5) rotate(0 321.5 12.5)"><text x="321.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Generate paginated URL partials\n(filter: ID > local max)</text></g><g stroke-linecap="round" transform="translate(328 528) rotate(0 115.5 28)"><path d="M14 0 C53.18 -0.63, 97.3 -0.15, 217 0 M14 0 C56.13 -0.38, 97.45 -0.9, 217 0 M217 0 C228.1 -1.37, 232.92 3.04, 231 14 M217 0 C227.36 -0.4, 230.41 2.42, 231 14 M231 14 C232.62 25.59, 229.26 36.58, 231 42 M231 14 C231.88 24.77, 230.69 35.53, 231 42 M231 42 C229.71 51.46, 224.53 55.83, 217 56 M231 42 C230.23 53.5, 224.27 54.2, 217 56 M217 56 C156.22 54.62, 94.22 54.11, 14 56 M217 56 C143.81 54, 72.04 55.2, 14 56 M14 56 C3.85 57.36, -1.97 49.39, 0 42 M14 56 C6.31 56.5, 1.79 51.87, 0 42 M0 42 C-0.07 30.39, 1.15 21.35, 0 14 M0 42 C-0.44 35.07, 1.01 30.14, 0 14 M0 14 C0.67 5.37, 5.91 1.93, 14 0 M0 14 C1.9 2.88, 3.35 1.48, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(336 543.5) rotate(0 107.5 12.5)"><text x="107.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Download each page</text></g><g stroke-linecap="round" transform="translate(240 674) rotate(0 203.5 28)"><path d="M14 0 C91.63 -1.45, 168.01 -2.33, 393 0 M14 0 C160.74 1.43, 306.34 0.37, 393 0 M393 0 C402.03 1.33, 407.66 5.91, 407 14 M393 0 C402.02 -1.36, 406.47 3.83, 407 14 M407 14 C407.59 25.23, 405.81 36.92, 407 42 M407 14 C406.89 24.18, 406.4 35.9, 407 42 M407 42 C406.25 53.09, 401.42 55.86, 393 56 M407 42 C406.01 52.63, 401.96 57.61, 393 56 M393 56 C290.54 57.09, 187.85 58.96, 14 56 M393 56 C314.32 56.78, 234.92 57.13, 14 56 M14 56 C4.57 56.93, 1.5 51.2, 0 42 M14 56 C4.63 55.64, -0.33 51.72, 0 42 M0 42 C-0.57 33.45, -2 27.24, 0 14 M0 42 C0.77 32.72, 1.06 23.29, 0 14 M0 14 C-1.98 3.34, 6.45 1.83, 14 0 M0 14 C1.28 4.99, 3.59 -0.47, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(248 689.5) rotate(0 195.5 12.5)"><text x="195.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">For each record:\nRead local by ID</text></g><g stroke-linecap="round" transform="translate(345 820) rotate(0 98.5 28)"><path d="M123.75 7.25 C132.75 11.14, 143.31 14.68, 172.25 21.75 M123.75 7.25 C142.38 11.57, 158.59 18.13, 172.25 21.75 M172.25 21.75 C198.45 28.12, 197.45 28.09, 172.25 36.25 M172.25 21.75 C197.18 30.25, 195.59 30.58, 172.25 36.25 M172.25 36.25 C160.13 39.09, 144.18 41.52, 123.75 48.75 M172.25 36.25 C161.49 39.49, 148.56 43.47, 123.75 48.75 M123.75 48.75 C98.27 55.95, 99.11 54.26, 74.25 48.75 M123.75 48.75 C98.53 55.23, 99.64 58.18, 74.25 48.75 M74.25 48.75 C61.95 48.06, 53.4 42.24, 24.75 36.25 M74.25 48.75 C61.25 45.25, 47.76 42.7, 24.75 36.25 M24.75 36.25 C1.61 28.86, -0.88 27.74, 24.75 21.75 M24.75 36.25 C-1.83 27.01, 0.24 27.18, 24.75 21.75 M24.75 21.75 C41.79 17.68, 64.13 11.9, 74.25 7.25 M24.75 21.75 C36.63 19.17, 48.05 15.93, 74.25 7.25 M74.25 7.25 C99.36 1.13, 98.43 -1.12, 123.75 7.25 M74.25 7.25 C97.14 -1.66, 100.24 0.18, 123.75 7.25" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(353 835.5) rotate(0 90.5 12.5)"><text x="90.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Record\nexists?</text></g><g stroke-linecap="round" transform="translate(521 966) rotate(0 60 28)"><path d="M14 0 C33.68 1.85, 52.21 -0.31, 106 0 M14 0 C34.52 -0.57, 54.51 0.24, 106 0 M106 0 C113.85 1.12, 118.09 3.57, 120 14 M106 0 C114.01 0.62, 118.49 2.9, 120 14 M120 14 C118.88 21.78, 120.14 29.03, 120 42 M120 14 C120.52 23.13, 120.11 29.88, 120 42 M120 42 C121.52 51.28, 116.71 55.57, 106 56 M120 42 C118.45 52.79, 113.6 55.95, 106 56 M106 56 C86.26 57.41, 64.98 57.58, 14 56 M106 56 C74.87 56.45, 44.57 55.87, 14 56 M14 56 C4.28 54.33, -1.19 51.22, 0 42 M14 56 C3.22 58.17, 1.49 51.66, 0 42 M0 42 C-0.66 31.19, 0.59 21.76, 0 14 M0 42 C-0.69 33.01, 0.18 24.36, 0 14 M0 14 C-0.76 3.85, 5.86 -1.84, 14 0 M0 14 C-1.39 4.23, 4.82 -1.1, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(529 981.5) rotate(0 52 12.5)"><text x="52" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Skip</text></g><g stroke-linecap="round" transform="translate(136 966) rotate(0 170 28)"><path d="M14 0 C75.42 -3.56, 139.47 -3.57, 326 0 M14 0 C97.6 -1.78, 182.06 -1.29, 326 0 M326 0 C336.84 -0.71, 340.55 6.51, 340 14 M326 0 C335.34 -1.26, 338.41 6.04, 340 14 M340 14 C338.27 22.93, 338.5 27.33, 340 42 M340 14 C338.9 21.76, 340.49 27.92, 340 42 M340 42 C339.2 50.17, 337.04 54.21, 326 56 M340 42 C342.15 51.84, 336.41 56.06, 326 56 M326 56 C227.6 55.31, 126.62 56.84, 14 56 M326 56 C212.56 57.22, 100.62 57.18, 14 56 M14 56 C4.72 57.47, -0.9 50.15, 0 42 M14 56 C3.68 55.31, 1.43 52.7, 0 42 M0 42 C-1.03 32.05, -0.63 23.5, 0 14 M0 42 C0.74 36.3, -0.56 30.3, 0 14 M0 14 C-0.79 5.6, 5.66 -1.67, 14 0 M0 14 C1.88 6.86, 6.19 -1.39, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(144 981.5) rotate(0 162 12.5)"><text x="162" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Create with\nidentity insert</text></g><g stroke-linecap="round" transform="translate(1092 90) rotate(0 186.5 28)"><path d="M14 0 C84.2 -0.6, 154.87 -0.76, 359 0 M14 0 C120.2 0.67, 226.78 1, 359 0 M359 0 C366.69 0.63, 374.8 3.28, 373 14 M359 0 C367.53 -1.06, 372.05 3.51, 373 14 M373 14 C371.09 23.13, 371.22 29.05, 373 42 M373 14 C373.21 21.95, 372.64 29.46, 373 42 M373 42 C374.72 50.63, 368.94 55.73, 359 56 M373 42 C372.8 53.54, 369.88 57.71, 359 56 M359 56 C245.43 56.39, 129.43 56.83, 14 56 M359 56 C282.04 56.12, 204.66 55.89, 14 56 M14 56 C4.93 57.48, -1.14 51, 0 42 M14 56 C5.28 54.28, -2.1 51.3, 0 42 M0 42 C0.31 34.57, -1.25 23.59, 0 14 M0 42 C-0.46 34.86, 0.08 28.12, 0 14 M0 14 C-1.3 4.46, 5.17 -0.19, 14 0 M0 14 C1.18 6.5, 3.98 -1, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1100 105.5) rotate(0 178.5 12.5)"><text x="178.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Query local max ID + UpdateDate</text></g><g stroke-linecap="round" transform="translate(1042 236) rotate(0 236.5 28)"><path d="M14 0 C103.11 -2.38, 194.07 -1.38, 459 0 M14 0 C147.5 0.5, 281.41 0.54, 459 0 M459 0 C468.15 -0.47, 474.58 4.44, 473 14 M459 0 C470.54 1.89, 473.55 3.51, 473 14 M473 14 C472.35 22.02, 471.44 31.93, 473 42 M473 14 C472.91 21.19, 473.62 27.28, 473 42 M473 42 C471.73 50.91, 467.86 54.83, 459 56 M473 42 C473.64 50.25, 467.09 56.91, 459 56 M459 56 C307.76 54.66, 157.5 54.1, 14 56 M459 56 C362.53 55.32, 266.82 54.85, 14 56 M14 56 C2.86 57.07, 0.5 50.04, 0 42 M14 56 C5.66 58.14, 1.2 49.63, 0 42 M0 42 C-1.11 31.55, 0.98 21.48, 0 14 M0 42 C-0.06 35.13, 0.05 27.03, 0 14 M0 14 C1.91 4.78, 5.26 -1.79, 14 0 M0 14 C-1.11 4.53, 3.46 1.45, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1050 251.5) rotate(0 228.5 12.5)"><text x="228.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Query remote max ID + UpdateDate + count</text></g><g stroke-linecap="round" transform="translate(1010 382) rotate(0 269 28)"><path d="M14 0 C117.24 -1.23, 218.98 -0.99, 524 0 M14 0 C139.87 -0.78, 265.24 -0.79, 524 0 M524 0 C534.89 0.29, 537.61 4.85, 538 14 M524 0 C532.26 0.7, 538.4 6.51, 538 14 M538 14 C536.39 25.54, 536.05 34.15, 538 42 M538 14 C537.55 19.52, 538.4 25.74, 538 42 M538 42 C537.08 51.35, 532.81 57.45, 524 56 M538 42 C538.97 53.07, 534.61 53.79, 524 56 M524 56 C396.4 56.45, 267.45 55.57, 14 56 M524 56 C374.46 55.78, 225.03 55.35, 14 56 M14 56 C2.8 56.36, 0.09 51.18, 0 42 M14 56 C2.46 57.91, -0.78 53.37, 0 42 M0 42 C1.6 32.96, 0.31 27.72, 0 14 M0 42 C-0.42 33.63, -0.43 25.08, 0 14 M0 14 C1.8 5.66, 6.04 -1.44, 14 0 M0 14 C0.93 2.97, 5.06 -0.92, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1018 397.5) rotate(0 261 12.5)"><text x="261" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Iterate all records\n(paginated, ID ascending)</text></g><g stroke-linecap="round" transform="translate(1075 528) rotate(0 203.5 28)"><path d="M14 0 C91.55 0.17, 168.02 1.56, 393 0 M14 0 C151.33 0.37, 290.03 1.23, 393 0 M393 0 C403.99 1.26, 406.96 4.08, 407 14 M393 0 C404.53 0.82, 407.51 3.41, 407 14 M407 14 C407.63 23.6, 407.8 33.21, 407 42 M407 14 C406.23 22.86, 406.37 33.29, 407 42 M407 42 C406.18 51.94, 404.27 56.16, 393 56 M407 42 C405.39 51.23, 400.89 54.75, 393 56 M393 56 C288.52 56.09, 183.93 54.99, 14 56 M393 56 C249.83 56.47, 105.77 56.83, 14 56 M14 56 C5.19 54.5, 0.03 51.51, 0 42 M14 56 C3.22 55.3, 1.45 51.43, 0 42 M0 42 C1.72 33.78, 0.79 29.55, 0 14 M0 42 C0.64 35.01, 0.11 29.23, 0 14 M0 14 C0.52 4.2, 5.91 -1.67, 14 0 M0 14 C-0.4 4.8, 6.68 1.59, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1083 543.5) rotate(0 195.5 12.5)"><text x="195.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">For each record:\nRead local by ID</text></g><g stroke-linecap="round" transform="translate(1180 674) rotate(0 98.5 28)"><path d="M123.75 7.25 C132.78 9.49, 142.43 11.84, 172.25 21.75 M123.75 7.25 C138.58 12.56, 154.81 16.77, 172.25 21.75 M172.25 21.75 C195.3 30.11, 198.86 30.56, 172.25 36.25 M172.25 21.75 C195.38 30.99, 196.72 29.97, 172.25 36.25 M172.25 36.25 C159.58 40.48, 146.86 42.17, 123.75 48.75 M172.25 36.25 C152.5 40.77, 134.18 47.25, 123.75 48.75 M123.75 48.75 C97.01 55.25, 97.3 54.6, 74.25 48.75 M123.75 48.75 C97.59 57.12, 101.1 55.84, 74.25 48.75 M74.25 48.75 C59.94 43.59, 46.92 41.67, 24.75 36.25 M74.25 48.75 C63.53 46.36, 52.99 43.38, 24.75 36.25 M24.75 36.25 C-0.69 27.78, -1.14 28.77, 24.75 21.75 M24.75 36.25 C-1.16 29.98, 1.14 31.27, 24.75 21.75 M24.75 21.75 C35.83 18.39, 48.48 14.34, 74.25 7.25 M24.75 21.75 C40.84 16.78, 56.3 13.44, 74.25 7.25 M74.25 7.25 C99.89 -1.06, 98.69 1.23, 123.75 7.25 M74.25 7.25 C96.82 1.33, 99.08 1.62, 123.75 7.25" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1188 689.5) rotate(0 90.5 12.5)"><text x="90.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Record\nexists?</text></g><g stroke-linecap="round" transform="translate(1296 820) rotate(0 181 28)"><path d="M214 7.25 C236.63 9.36, 260.06 12.81, 330 21.75 M214 7.25 C242.94 11.07, 270.44 14.42, 330 21.75 M330 21.75 C361.82 30.21, 361.5 27.92, 330 36.25 M330 21.75 C362.4 30.62, 362.31 29.19, 330 36.25 M330 36.25 C292.83 39.16, 255.5 43.38, 214 48.75 M330 36.25 C286.41 40.58, 242.54 45.74, 214 48.75 M214 48.75 C180.62 56.16, 181.88 57.43, 150 48.75 M214 48.75 C184.25 54.82, 180.25 56.6, 150 48.75 M150 48.75 C122.62 47.09, 100.27 44.2, 32 36.25 M150 48.75 C117.12 45.34, 85.11 42.35, 32 36.25 M32 36.25 C1.45 28.61, -1.49 29.61, 32 21.75 M32 36.25 C1.46 29.15, -1.02 26.86, 32 21.75 M32 21.75 C72.84 17.68, 109.19 10.01, 150 7.25 M32 21.75 C72.09 15.89, 112.49 11.8, 150 7.25 M150 7.25 C183.39 0.64, 180.22 -0.22, 214 7.25 M150 7.25 C180.7 -1.81, 182.56 0.93, 214 7.25" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1304 835.5) rotate(0 173 12.5)"><text x="173" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">UpdateDate\ndifference\n> 5ms?</text></g><g stroke-linecap="round" transform="translate(1485 966) rotate(0 87.5 28)"><path d="M14 0 C42.36 -0.67, 71.81 1.58, 161 0 M14 0 C57.77 -0.29, 99.58 0.28, 161 0 M161 0 C170.75 0.89, 176.3 2.97, 175 14 M161 0 C171.69 0.7, 174.71 2.68, 175 14 M175 14 C176.7 21.93, 176.86 25.32, 175 42 M175 14 C174.58 20.75, 174.07 27.81, 175 42 M175 42 C176.51 51.25, 168.98 55.92, 161 56 M175 42 C174.82 50.1, 171.69 55.21, 161 56 M161 56 C112.03 54.34, 65 56.4, 14 56 M161 56 C102.82 57.26, 42.69 57.44, 14 56 M14 56 C6.45 54.28, 1.36 51.46, 0 42 M14 56 C5.56 56.53, 2.08 52.78, 0 42 M0 42 C0.8 32.12, 1.62 18.28, 0 14 M0 42 C0.6 34.71, -0.8 27.15, 0 14 M0 14 C-1.09 4.91, 3.77 -0.78, 14 0 M0 14 C-2.22 4.8, 3.02 -2.07, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1493 981.5) rotate(0 79.5 12.5)"><text x="79.5" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Update record</text></g><g stroke-linecap="round" transform="translate(1164 966) rotate(0 60 28)"><path d="M14 0 C31.96 1.73, 53.31 0.38, 106 0 M14 0 C37.81 1.53, 63.02 0.85, 106 0 M106 0 C114.6 0.66, 120.03 5.53, 120 14 M106 0 C115.43 0.84, 121.45 2.79, 120 14 M120 14 C118.68 25.13, 118.95 36.06, 120 42 M120 14 C119.79 21.29, 119.38 29.53, 120 42 M120 42 C120 52.86, 116.97 55.1, 106 56 M120 42 C117.88 51.78, 117.03 56.78, 106 56 M106 56 C71.68 56.98, 41.03 56.82, 14 56 M106 56 C80.99 55.66, 54.14 55.4, 14 56 M14 56 C6.47 54.93, 1.62 50.78, 0 42 M14 56 C6.13 53.85, -0.86 50.12, 0 42 M0 42 C-1.24 31.39, 0.31 21.59, 0 14 M0 42 C-1.19 33.44, 0.18 24.38, 0 14 M0 14 C0.27 3.91, 2.69 -0.91, 14 0 M0 14 C-0.67 5.17, 2.4 -0.66, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(1172 981.5) rotate(0 52 12.5)"><text x="52" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Skip</text></g><g stroke-linecap="round" transform="translate(911 820) rotate(0 170 28)"><path d="M14 0 C77.1 1.46, 141.11 1.72, 326 0 M14 0 C102.32 1.46, 190.75 1.31, 326 0 M326 0 C333.75 1.64, 340.86 5.62, 340 14 M326 0 C333.45 0.9, 341.04 3.98, 340 14 M340 14 C338.2 25.74, 341.77 35.87, 340 42 M340 14 C340.31 21.71, 338.99 29.28, 340 42 M340 42 C341.59 51.81, 333.71 54.98, 326 56 M340 42 C338.62 50.18, 337.07 55.44, 326 56 M326 56 C244.3 57.91, 160.18 58.15, 14 56 M326 56 C214.47 54.78, 104.04 55.23, 14 56 M14 56 C3.01 56.37, -0.15 52.03, 0 42 M14 56 C4.06 56.88, 0.29 51.96, 0 42 M0 42 C-1.06 35.47, -0.31 27.82, 0 14 M0 42 C0.94 32.19, 0.77 22.9, 0 14 M0 14 C1.29 4.52, 5.55 0.04, 14 0 M0 14 C0.23 2.61, 2.84 -0.53, 14 0" stroke="var(--diagram-ink, #1B1F23)" stroke-width="2" fill="none"/></g><g transform="translate(919 835.5) rotate(0 162 12.5)"><text x="162" y="17.619999999999997" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="20px" fill="var(--diagram-ink, #1B1F23)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Create with\nidentity insert</text></g><g stroke-linecap="round"><g transform="translate(443.5 146) rotate(0 0.017319846593011334 45)"><path d="M0 0 C1.06 3.22, 0.2 7.74, 0 16 M0 0 C0.77 5.36, -0.58 10.04, 0 16 M0 16 C0.23 17.16, 0.29 18.5, 0 19.88 M0 16 C0.18 16.82, 0.06 18.06, 0 19.88 M0 19.88 C-0.29 20.58, -0.22 21.59, 0 23.52 M0 19.88 C0.05 21.25, -0.15 22.84, 0 23.52 M0 23.52 C-0.35 24.43, -0.33 24.91, 0 26.96 M0 23.52 C0.05 24.76, -0.04 25.62, 0 26.96 M0 26.96 C0.09 28.3, -0.08 29.62, 0 30.23 M0 26.96 C-0.14 28.09, 0.06 29.03, 0 30.23 M0 30.23 C-0.2 31.6, -0.07 32.66, 0 33.36 M0 30.23 C0.02 31.5, 0.11 32.47, 0 33.36 M0 33.36 C0 34.75, -0.01 35.73, 0 36.37 M0 33.36 C-0.13 34.22, 0.02 34.78, 0 36.37 M0 36.37 C0.26 37.22, 0.13 37.92, 0 39.29 M0 36.37 C-0.06 37.05, 0.01 37.72, 0 39.29 M0 39.29 C0 39.96, -0.07 40.39, 0 42.16 M0 39.29 C0.06 40.34, 0.08 41.41, 0 42.16 M0 42.16 C-0.11 42.94, -0.27 43.86, 0 45 M0 42.16 C-0.04 43.04, 0.16 43.88, 0 45 M0 45 C-0.02 46.37, 0.12 47.26, 0 47.84 M0 45 C0.08 45.83, -0.05 46.43, 0 47.84 M0 47.84 C-0.15 48.41, 0.22 49.46, 0 50.71 M0 47.84 C-0.07 48.54, -0.05 49.31, 0 50.71 M0 50.71 C0.29 51.39, 0.08 51.69, 0 53.63 M0 50.71 C-0.15 51.3, -0.01 52.09, 0 53.63 M0 53.63 C-0.28 54.41, -0.25 55.39, 0 56.64 M0 53.63 C-0.14 54.6, -0.14 55.7, 0 56.64 M0 56.64 C0.22 57.25, -0.18 58.24, 0 59.77 M0 56.64 C-0.13 57.5, 0.06 57.96, 0 59.77 M0 59.77 C-0.24 61.12, -0.17 62.55, 0 63.04 M0 59.77 C-0.12 60.96, -0.01 62.15, 0 63.04 M0 63.04 C0.06 64.17, -0.3 65.6, 0 66.48 M0 63.04 C0.16 64.44, 0.13 65.59, 0 66.48 M0 66.48 C-0.18 67.91, 0.35 69.15, 0 70.12 M0 66.48 C-0.14 67.48, -0.06 68.28, 0 70.12 M0 70.12 C0.31 71.23, 0.14 72.68, 0 74 M0 70.12 C0.06 71.49, -0.06 72.86, 0 74 M0 74 C-1.35 78.89, 0.62 81.17, 0 90 M0 74 C-0.46 78.64, -0.45 82.44, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 146) rotate(0 0.017319846593011334 45)"><path d="M-3.1 82.62 C-1.94 84.1, -1.75 86.23, 0 90 M-3.1 82.62 C-1.7 85.12, -1.37 87.26, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 146) rotate(0 0.017319846593011334 45)"><path d="M2.37 82.36 C2.43 83.91, 1.52 86.1, 0 90 M2.37 82.36 C1.98 84.9, 0.53 87.13, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(443.5 292) rotate(0 -0.33282601618191165 45)"><path d="M0 0 C-0.6 4.81, -1.55 5.64, 0 16 M0 0 C-0.51 5.77, 0.36 10.87, 0 16 M0 16 C-0.17 17.43, -0.12 18.94, 0 19.88 M0 16 C-0.07 16.83, 0.07 18.12, 0 19.88 M0 19.88 C0.15 20.33, 0.13 21.7, 0 23.52 M0 19.88 C-0.04 20.93, 0.13 22.13, 0 23.52 M0 23.52 C0.3 24.47, 0.15 25.88, 0 26.96 M0 23.52 C-0.03 24.8, -0.05 25.78, 0 26.96 M0 26.96 C-0.19 28.42, -0.22 29.16, 0 30.23 M0 26.96 C0 27.92, -0.07 28.91, 0 30.23 M0 30.23 C-0.11 31.47, -0.05 31.97, 0 33.36 M0 30.23 C0.06 30.84, 0 31.68, 0 33.36 M0 33.36 C0.09 34.25, 0.04 34.63, 0 36.37 M0 33.36 C-0.02 33.9, -0.1 34.69, 0 36.37 M0 36.37 C-0.16 37.45, 0 38.25, 0 39.29 M0 36.37 C-0.11 37.5, -0.07 38.36, 0 39.29 M0 39.29 C-0.26 39.7, -0.18 40.27, 0 42.16 M0 39.29 C-0.1 39.97, 0.05 40.89, 0 42.16 M0 42.16 C0.02 42.95, -0.2 44.03, 0 45 M0 42.16 C0.01 42.77, 0.07 43.55, 0 45 M0 45 C-0.21 45.74, -0.26 46.84, 0 47.84 M0 45 C0.12 45.63, -0.05 46.15, 0 47.84 M0 47.84 C-0.2 49.02, 0.03 49.39, 0 50.71 M0 47.84 C-0.03 48.81, 0.02 49.68, 0 50.71 M0 50.71 C0.12 51.77, -0.16 52.51, 0 53.63 M0 50.71 C0 51.55, -0.13 52.24, 0 53.63 M0 53.63 C0.03 54.52, -0.04 55.69, 0 56.64 M0 53.63 C0 54.52, 0.1 55.33, 0 56.64 M0 56.64 C-0.12 57.86, 0.02 58.98, 0 59.77 M0 56.64 C0.05 57.46, 0.12 58.27, 0 59.77 M0 59.77 C0.06 60.68, 0.32 61.4, 0 63.04 M0 59.77 C-0.07 61.11, -0.13 62.18, 0 63.04 M0 63.04 C0.1 64.06, 0.34 65.02, 0 66.48 M0 63.04 C-0.06 63.92, 0.15 64.65, 0 66.48 M0 66.48 C0.15 67.68, 0.28 68.84, 0 70.12 M0 66.48 C-0.08 67.85, -0.11 69.12, 0 70.12 M0 70.12 C-0.2 71.16, -0.11 72.77, 0 74 M0 70.12 C0.13 71.13, 0.11 72.09, 0 74 M0 74 C0.13 77.98, -1.41 84.06, 0 90 M0 74 C-0.36 78.44, -0.66 84.4, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 292) rotate(0 -0.33282601618191165 45)"><path d="M-3.26 82.69 C-2.89 84.92, -2.7 85.2, 0 90 M-3.26 82.69 C-2.44 85.33, -0.93 87.65, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 292) rotate(0 -0.33282601618191165 45)"><path d="M2.2 82.31 C1.45 84.67, 0.53 85.03, 0 90 M2.2 82.31 C1.21 85.11, 0.92 87.55, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(443.5 438) rotate(0 -0.15921320025299224 45)"><path d="M0 0 C0.62 1.93, -1.69 5.91, 0 16 M0 0 C0.7 5.24, -0.39 10.18, 0 16 M0 16 C0.38 17.35, 0.05 18.26, 0 19.88 M0 16 C0.07 17.49, 0.15 18.9, 0 19.88 M0 19.88 C-0.04 21.07, 0.25 22.61, 0 23.52 M0 19.88 C-0.01 20.53, -0.15 21.46, 0 23.52 M0 23.52 C0.31 25.03, -0.35 26.12, 0 26.96 M0 23.52 C-0.16 24.6, -0.07 25.44, 0 26.96 M0 26.96 C0.33 28.25, -0.11 29.22, 0 30.23 M0 26.96 C0.13 27.77, -0.12 28.4, 0 30.23 M0 30.23 C-0.01 31.13, -0.21 31.83, 0 33.36 M0 30.23 C0.08 30.74, 0.11 31.63, 0 33.36 M0 33.36 C-0.27 34.56, -0.24 35.34, 0 36.37 M0 33.36 C0.04 34.16, 0.01 35, 0 36.37 M0 36.37 C0.18 37.63, 0.17 38.42, 0 39.29 M0 36.37 C-0.17 37.11, 0.11 37.75, 0 39.29 M0 39.29 C-0.2 39.66, 0.15 40.4, 0 42.16 M0 39.29 C0.04 40.14, 0.12 41.03, 0 42.16 M0 42.16 C-0.24 43.04, 0.05 44, 0 45 M0 42.16 C-0.05 43.36, -0.01 44.25, 0 45 M0 45 C0.04 45.82, 0.03 46.93, 0 47.84 M0 45 C-0.09 45.57, -0.03 46.22, 0 47.84 M0 47.84 C-0.3 48.68, 0.13 49.39, 0 50.71 M0 47.84 C0.13 48.46, 0.06 49.3, 0 50.71 M0 50.71 C0.32 51.57, -0.15 52.5, 0 53.63 M0 50.71 C0 51.18, 0.11 51.88, 0 53.63 M0 53.63 C-0.19 54.37, -0.06 55.54, 0 56.64 M0 53.63 C-0.06 54.26, -0.02 55.2, 0 56.64 M0 56.64 C-0.19 57.51, -0.01 58.31, 0 59.77 M0 56.64 C0.08 57.53, -0.08 58.03, 0 59.77 M0 59.77 C0.15 60.92, -0.22 61.93, 0 63.04 M0 59.77 C0.03 61, 0.18 61.92, 0 63.04 M0 63.04 C-0.02 63.98, 0.16 65.26, 0 66.48 M0 63.04 C0.04 64.02, 0.16 65.29, 0 66.48 M0 66.48 C0.2 67.63, 0.14 68.71, 0 70.12 M0 66.48 C0.11 67.29, 0.11 68.19, 0 70.12 M0 70.12 C0.28 71.06, -0.39 72.58, 0 74 M0 70.12 C0.03 71.24, -0.11 72.76, 0 74 M0 74 C1.17 76.24, -1.45 79.68, 0 90 M0 74 C-0.45 79.7, -0.51 86.1, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 438) rotate(0 -0.15921320025299224 45)"><path d="M-3.29 82.71 C-2.3 83.55, -2.78 85.4, 0 90 M-3.29 82.71 C-1.86 85.06, -1.32 87.3, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 438) rotate(0 -0.15921320025299224 45)"><path d="M2.17 82.3 C2.04 83.18, 0.44 85.12, 0 90 M2.17 82.3 C1.8 84.84, 0.54 87.21, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(443.5 584) rotate(0 0.34776962088281493 45)"><path d="M0 0 C1.17 4.57, 1.16 6.27, 0 16 M0 0 C-0.27 5.07, -0.15 11.03, 0 16 M0 16 C0.33 17.11, -0.25 18.43, 0 19.88 M0 16 C0.02 16.94, -0.07 17.64, 0 19.88 M0 19.88 C-0.28 20.81, 0.04 21.1, 0 23.52 M0 19.88 C0.06 20.98, -0.19 21.88, 0 23.52 M0 23.52 C-0.33 24.92, 0.33 26.47, 0 26.96 M0 23.52 C0.07 24.52, -0.06 25.52, 0 26.96 M0 26.96 C0.03 27.66, 0.1 29.07, 0 30.23 M0 26.96 C-0.12 27.64, 0.09 28.65, 0 30.23 M0 30.23 C0.12 30.88, 0.23 31.86, 0 33.36 M0 30.23 C-0.1 30.96, 0.03 31.53, 0 33.36 M0 33.36 C-0.12 33.79, 0.09 34.41, 0 36.37 M0 33.36 C0.04 34.25, 0.03 35.44, 0 36.37 M0 36.37 C-0.16 36.87, -0.29 37.8, 0 39.29 M0 36.37 C0.02 37.37, -0.12 38.37, 0 39.29 M0 39.29 C-0.15 40.51, 0.15 41.2, 0 42.16 M0 39.29 C0.02 40.16, 0.07 41.14, 0 42.16 M0 42.16 C-0.02 43.22, -0.24 44.48, 0 45 M0 42.16 C-0.09 42.88, 0 43.34, 0 45 M0 45 C0.14 45.62, 0.14 46.09, 0 47.84 M0 45 C-0.11 45.87, -0.06 47.01, 0 47.84 M0 47.84 C0.09 48.59, -0.16 49.4, 0 50.71 M0 47.84 C-0.06 48.58, 0 48.97, 0 50.71 M0 50.71 C0.12 51.52, 0.19 52.14, 0 53.63 M0 50.71 C0.05 51.77, 0 52.98, 0 53.63 M0 53.63 C0.21 54.5, -0.11 55.7, 0 56.64 M0 53.63 C0.11 54.55, -0.02 55.39, 0 56.64 M0 56.64 C-0.1 57.72, 0.08 58.32, 0 59.77 M0 56.64 C0.13 57.18, 0.13 57.97, 0 59.77 M0 59.77 C-0.17 60.71, -0.04 62.53, 0 63.04 M0 59.77 C0.11 60.78, 0.05 61.41, 0 63.04 M0 63.04 C0.14 64.21, 0.01 65.34, 0 66.48 M0 63.04 C0.01 63.73, -0.11 64.67, 0 66.48 M0 66.48 C0.32 67.48, 0.03 68.65, 0 70.12 M0 66.48 C0.11 67.34, -0.14 68.46, 0 70.12 M0 70.12 C-0.15 70.83, -0.1 71.67, 0 74 M0 70.12 C-0.14 71.58, 0.1 72.94, 0 74 M0 74 C-0.53 78.12, 1.24 85.24, 0 90 M0 74 C0.51 79.09, -0.36 84.47, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 584) rotate(0 0.34776962088281493 45)"><path d="M-2.83 82.52 C-1.67 84.68, -1.11 85.42, 0 90 M-2.83 82.52 C-2 84.88, -0.97 87.69, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 584) rotate(0 0.34776962088281493 45)"><path d="M2.64 82.45 C2.69 84.66, 2.15 85.42, 0 90 M2.64 82.45 C1.61 84.82, 0.76 87.65, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(443.5 730) rotate(0 -0.0009551075631293315 45)"><path d="M0 0 C-1.45 2.24, 0.15 5.76, 0 16 M0 0 C-0.55 6.23, -0.03 10.87, 0 16 M0 16 C-0.4 17.12, 0.04 17.46, 0 19.88 M0 16 C-0.03 17.06, -0.07 18.34, 0 19.88 M0 19.88 C0.26 20.32, -0.21 21.34, 0 23.52 M0 19.88 C0.18 20.97, 0.03 22.5, 0 23.52 M0 23.52 C-0.29 24.25, 0 25.01, 0 26.96 M0 23.52 C0 24.89, -0.13 26.11, 0 26.96 M0 26.96 C0.17 28.18, 0.32 29, 0 30.23 M0 26.96 C0 28.03, 0.1 29.13, 0 30.23 M0 30.23 C-0.24 31.59, -0.11 32.54, 0 33.36 M0 30.23 C-0.12 31.04, -0.12 31.87, 0 33.36 M0 33.36 C-0.24 33.96, 0.2 34.65, 0 36.37 M0 33.36 C-0.13 34.38, -0.07 35.18, 0 36.37 M0 36.37 C-0.1 37.69, -0.05 38.97, 0 39.29 M0 36.37 C0.08 37.41, -0.14 38.55, 0 39.29 M0 39.29 C0.16 40.14, -0.14 40.76, 0 42.16 M0 39.29 C0.14 39.91, 0.08 40.59, 0 42.16 M0 42.16 C-0.16 42.6, -0.1 43.75, 0 45 M0 42.16 C0.09 43.01, -0.07 43.75, 0 45 M0 45 C-0.1 45.96, -0.06 46.8, 0 47.84 M0 45 C-0.02 45.97, -0.07 47.08, 0 47.84 M0 47.84 C-0.12 48.46, 0.12 49.32, 0 50.71 M0 47.84 C-0.06 48.7, 0.15 49.35, 0 50.71 M0 50.71 C-0.01 51.86, 0.06 52.61, 0 53.63 M0 50.71 C0.06 51.64, 0.03 52.72, 0 53.63 M0 53.63 C0.25 54.52, -0.3 55.43, 0 56.64 M0 53.63 C-0.02 54.52, 0.06 55.51, 0 56.64 M0 56.64 C0.29 57.64, -0.19 58.81, 0 59.77 M0 56.64 C0.07 57.74, -0.03 58.77, 0 59.77 M0 59.77 C0.1 60.55, 0.28 61.48, 0 63.04 M0 59.77 C-0.02 60.79, 0.03 62.18, 0 63.04 M0 63.04 C-0.01 64.26, -0.01 65.71, 0 66.48 M0 63.04 C-0.1 64.27, -0.17 65.38, 0 66.48 M0 66.48 C0.31 67.52, -0.36 69.04, 0 70.12 M0 66.48 C0.05 67.95, -0.09 68.95, 0 70.12 M0 70.12 C0.31 71.41, 0.37 73.19, 0 74 M0 70.12 C0.18 71.53, 0.12 72.74, 0 74 M0 74 C-0.33 78.12, 1.53 80.67, 0 90 M0 74 C0.75 77.54, 0.3 81.4, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 730) rotate(0 -0.0009551075631293315 45)"><path d="M-2.42 82.38 C-2.66 83.43, -1.37 85.11, 0 90 M-2.42 82.38 C-1.82 85.37, -0.67 87.55, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(443.5 730) rotate(0 -0.0009551075631293315 45)"><path d="M3.05 82.6 C1.7 83.59, 1.88 85.22, 0 90 M3.05 82.6 C1.66 85.48, 0.81 87.58, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(464.5133333333333 876) rotate(0 58.301108211292814 45)"><path d="M0 0 C1.04 2.18, -1.4 5.81, 0 16 M0 0 C0.17 4.83, 0.2 10.45, 0 16 M0 16 C0.28 17.01, 0.77 18.68, 1.04 19.88 M0 16 C0.24 17.4, 0.66 18.48, 1.04 19.88 M1.04 19.88 C1.8 21.25, 3.19 22.17, 3.99 23.52 M1.04 19.88 C1.94 21.2, 2.96 22.53, 3.99 23.52 M3.99 23.52 C5.01 24.67, 6.45 25.13, 8.63 26.96 M3.99 23.52 C5.38 24.46, 6.11 25.45, 8.63 26.96 M8.63 26.96 C10.77 27.86, 13.43 29.5, 14.7 30.23 M8.63 26.96 C9.95 28.07, 12.11 28.8, 14.7 30.23 M14.7 30.23 C15.62 30.22, 18.46 31.07, 21.97 33.36 M14.7 30.23 C16.19 31.08, 18.17 31.62, 21.97 33.36 M21.97 33.36 C24.88 34.23, 28.28 36.14, 30.2 36.37 M21.97 33.36 C24.89 34.44, 28.16 35.39, 30.2 36.37 M30.2 36.37 C33.2 36.89, 34.31 37.35, 39.15 39.29 M30.2 36.37 C32.4 36.89, 33.47 37.11, 39.15 39.29 M39.15 39.29 C41.73 39.22, 43.29 40.04, 48.58 42.16 M39.15 39.29 C41.48 39.76, 43.65 41.06, 48.58 42.16 M48.58 42.16 C51.62 42.53, 55.97 43.09, 58.24 45 M48.58 42.16 C51.49 42.9, 54.37 44.24, 58.24 45 M58.24 45 C61.2 46.62, 65.65 48, 67.91 47.84 M58.24 45 C59.95 45.84, 62.26 46.51, 67.91 47.84 M67.91 47.84 C71.67 49.77, 74.93 50.57, 77.34 50.71 M67.91 47.84 C70.04 48.36, 72.09 48.82, 77.34 50.71 M77.34 50.71 C79.7 51.87, 81.23 51.59, 86.29 53.63 M77.34 50.71 C80.51 52.21, 83.89 52.97, 86.29 53.63 M86.29 53.63 C88.53 54.98, 91.83 56.05, 94.52 56.64 M86.29 53.63 C89.49 54.94, 92.52 55.6, 94.52 56.64 M94.52 56.64 C95.45 57.55, 98.06 58.46, 101.79 59.77 M94.52 56.64 C96.89 57.22, 98.82 58.8, 101.79 59.77 M101.79 59.77 C103.35 60.13, 105.19 61.2, 107.86 63.04 M101.79 59.77 C104.13 61.16, 106.58 62.27, 107.86 63.04 M107.86 63.04 C108.42 63.86, 110.17 64.6, 112.49 66.48 M107.86 63.04 C109.49 63.89, 110.8 65.15, 112.49 66.48 M112.49 66.48 C113.07 67.7, 113.94 68.83, 115.45 70.12 M112.49 66.48 C113.28 67.2, 113.93 68.32, 115.45 70.12 M115.45 70.12 C115.76 70.85, 116.09 72.55, 116.49 74 M115.45 70.12 C115.9 71.2, 115.83 72.19, 116.49 74 M116.49 74 C117.83 77.46, 116.32 80.71, 116.49 90 M116.49 74 C117.06 77.65, 116.7 81.82, 116.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(464.5133333333333 876) rotate(0 58.301108211292814 45)"><path d="M113.99 82.4 C115.02 83.39, 114.3 85.12, 116.49 90 M113.99 82.4 C114.89 84.67, 115.71 87.35, 116.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(464.5133333333333 876) rotate(0 58.301108211292814 45)"><path d="M119.46 82.57 C119.39 83.58, 117.56 85.27, 116.49 90 M119.46 82.57 C118.58 84.83, 117.62 87.45, 116.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(512 905) rotate(0 20 10)"><text x="20" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-link, #2E7D74)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">yes</text></g><g stroke-linecap="round"><g transform="translate(422.4866666666667 876) rotate(0 -57.857357820784614 45)"><path d="M0 0 C1.2 4.52, 1.47 6.74, 0 16 M0 0 C-0.28 3.76, 0.58 9.24, 0 16 M0 16 C-0.75 17.12, -0.75 18.98, -1.04 19.88 M0 16 C-0.49 17.22, -0.69 18.35, -1.04 19.88 M-1.04 19.88 C-2.63 20.89, -3.6 22.58, -3.99 23.52 M-1.04 19.88 C-1.64 20.72, -2.41 21.63, -3.99 23.52 M-3.99 23.52 C-5.71 24.46, -6.36 26.16, -8.63 26.96 M-3.99 23.52 C-5.05 24.22, -5.94 25.14, -8.63 26.96 M-8.63 26.96 C-11 27.86, -13.61 28.7, -14.7 30.23 M-8.63 26.96 C-10.42 27.71, -11.84 28.58, -14.7 30.23 M-14.7 30.23 C-17.14 31.03, -19.66 31.53, -21.97 33.36 M-14.7 30.23 C-16.76 31.14, -18.89 32.55, -21.97 33.36 M-21.97 33.36 C-24.2 34.63, -28.45 36, -30.2 36.37 M-21.97 33.36 C-23.77 34.44, -25.78 34.33, -30.2 36.37 M-30.2 36.37 C-32.78 37.85, -36.69 38.87, -39.15 39.29 M-30.2 36.37 C-33.26 37.45, -36.45 38.54, -39.15 39.29 M-39.15 39.29 C-40.61 38.99, -43.89 41.29, -48.58 42.16 M-39.15 39.29 C-42.72 40.16, -45.55 41.29, -48.58 42.16 M-48.58 42.16 C-50.02 43.41, -53.55 44.07, -58.24 45 M-48.58 42.16 C-50.87 42.94, -54.35 43.35, -58.24 45 M-58.24 45 C-62.44 45.47, -65.37 46.77, -67.91 47.84 M-58.24 45 C-60.74 46.16, -63.82 46.26, -67.91 47.84 M-67.91 47.84 C-69.82 48.49, -72.41 48.42, -77.34 50.71 M-67.91 47.84 C-70.56 48.8, -72.6 48.73, -77.34 50.71 M-77.34 50.71 C-79.94 52.06, -83.79 53.54, -86.29 53.63 M-77.34 50.71 C-79.11 51.89, -82.18 51.82, -86.29 53.63 M-86.29 53.63 C-87.26 54.69, -90.43 54.5, -94.52 56.64 M-86.29 53.63 C-87.77 54.38, -89.57 54.98, -94.52 56.64 M-94.52 56.64 C-96.74 57.51, -99.48 59.29, -101.79 59.77 M-94.52 56.64 C-96.45 57.76, -99.2 58.88, -101.79 59.77 M-101.79 59.77 C-104.17 61.4, -105.98 61.96, -107.86 63.04 M-101.79 59.77 C-103.74 60.33, -104.86 61.74, -107.86 63.04 M-107.86 63.04 C-110.06 64.08, -111.17 65.34, -112.49 66.48 M-107.86 63.04 C-109.51 64.14, -111.28 65.49, -112.49 66.48 M-112.49 66.48 C-114.02 67.57, -115.01 69.36, -115.45 70.12 M-112.49 66.48 C-113.59 67.55, -114.6 69.07, -115.45 70.12 M-115.45 70.12 C-115.7 71.38, -115.91 72.55, -116.49 74 M-115.45 70.12 C-115.79 71.47, -115.99 72.71, -116.49 74 M-116.49 74 C-116.31 80.25, -117.09 86.31, -116.49 90 M-116.49 74 C-115.85 81.02, -115.97 86.49, -116.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(422.4866666666667 876) rotate(0 -57.857357820784614 45)"><path d="M-118.51 82.26 C-117.49 84.47, -116.95 85.52, -116.49 90 M-118.51 82.26 C-118.11 84.05, -117.14 86.73, -116.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(422.4866666666667 876) rotate(0 -57.857357820784614 45)"><path d="M-113.06 82.77 C-113.15 84.87, -113.71 85.83, -116.49 90 M-113.06 82.77 C-114.12 84.47, -114.61 87.01, -116.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(319 905) rotate(0 20 10)"><text x="20" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-link, #2E7D74)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">no</text></g><g stroke-linecap="round"><g transform="translate(1278.5 146) rotate(0 -0.02059107523905368 45)"><path d="M0 0 C0.62 3.65, -0.72 7.25, 0 16 M0 0 C0 4.19, 0.46 7.8, 0 16 M0 16 C0.29 17.11, -0.38 17.62, 0 19.88 M0 16 C-0.13 17.09, -0.08 18.01, 0 19.88 M0 19.88 C-0.17 21.46, 0.02 22.36, 0 23.52 M0 19.88 C-0.01 20.73, -0.12 21.37, 0 23.52 M0 23.52 C-0.23 24.46, -0.09 25.31, 0 26.96 M0 23.52 C0.14 24.58, -0.1 25.91, 0 26.96 M0 26.96 C-0.17 28.18, 0.24 29.17, 0 30.23 M0 26.96 C-0.16 27.76, 0.1 28.57, 0 30.23 M0 30.23 C0.27 31.62, 0.07 32.39, 0 33.36 M0 30.23 C0.1 31.08, -0.05 31.95, 0 33.36 M0 33.36 C-0.26 34.32, -0.32 35.45, 0 36.37 M0 33.36 C0.16 34.02, 0.02 34.8, 0 36.37 M0 36.37 C0.14 37.3, -0.25 38.58, 0 39.29 M0 36.37 C-0.01 37.38, 0.07 38.3, 0 39.29 M0 39.29 C-0.19 39.97, 0.01 40.55, 0 42.16 M0 39.29 C-0.13 39.97, 0.15 40.76, 0 42.16 M0 42.16 C-0.22 43.02, 0.28 44.36, 0 45 M0 42.16 C-0.09 42.86, -0.04 43.55, 0 45 M0 45 C0.03 45.49, 0.13 46.21, 0 47.84 M0 45 C0.01 45.84, 0.05 46.5, 0 47.84 M0 47.84 C-0.19 48.66, -0.17 49.67, 0 50.71 M0 47.84 C-0.07 49.03, 0.11 50.08, 0 50.71 M0 50.71 C0.27 51.48, 0.05 51.93, 0 53.63 M0 50.71 C0.13 51.4, 0.13 52.31, 0 53.63 M0 53.63 C0.19 54.41, -0.06 55.66, 0 56.64 M0 53.63 C-0.15 54.65, -0.09 56.01, 0 56.64 M0 56.64 C-0.25 57.08, -0.29 57.88, 0 59.77 M0 56.64 C0.1 57.38, -0.02 57.84, 0 59.77 M0 59.77 C0.33 60.68, -0.18 61.81, 0 63.04 M0 59.77 C-0.03 60.83, 0.09 62.19, 0 63.04 M0 63.04 C-0.13 64.1, 0.11 65.05, 0 66.48 M0 63.04 C0.16 64.05, 0.16 64.91, 0 66.48 M0 66.48 C-0.3 67.61, 0.2 68.96, 0 70.12 M0 66.48 C-0.01 67.32, -0.12 68.17, 0 70.12 M0 70.12 C0.28 71.57, 0.33 72.57, 0 74 M0 70.12 C-0.01 71.51, 0.05 72.91, 0 74 M0 74 C-0.01 80.25, -0.9 84.48, 0 90 M0 74 C0.71 79.37, 0.18 83.16, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1278.5 146) rotate(0 -0.02059107523905368 45)"><path d="M-2.44 82.38 C-1.63 84.15, -1.81 85.87, 0 90 M-2.44 82.38 C-1.84 84.36, -1.02 86.07, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1278.5 146) rotate(0 -0.02059107523905368 45)"><path d="M3.03 82.6 C2.73 84.27, 1.45 85.95, 0 90 M3.03 82.6 C2.29 84.58, 1.77 86.23, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1278.5 292) rotate(0 0.1922229735257588 45)"><path d="M0 0 C0.88 2.25, -1.04 5.99, 0 16 M0 0 C-0.89 6.37, 0.43 11.43, 0 16 M0 16 C0.34 17.18, -0.31 19.01, 0 19.88 M0 16 C-0.18 17.23, 0.03 18.36, 0 19.88 M0 19.88 C-0.31 21.38, 0.16 22.88, 0.02 23.52 M0 19.88 C0.06 20.75, -0.14 21.73, 0.02 23.52 M0.02 23.52 C-0.03 24.23, -0.03 25.26, 0.04 26.96 M0.02 23.52 C0 24.56, 0.02 25.6, 0.04 26.96 M0.04 26.96 C-0.15 27.91, -0.2 29.09, 0.06 30.23 M0.04 26.96 C-0.05 28.07, 0.12 29.02, 0.06 30.23 M0.06 30.23 C0.37 31.29, -0.08 32.52, 0.09 33.36 M0.06 30.23 C0.1 31.19, 0.14 32.08, 0.09 33.36 M0.09 33.36 C0.37 34.18, 0.08 35.05, 0.13 36.37 M0.09 33.36 C0.06 34.19, -0.01 34.73, 0.13 36.37 M0.13 36.37 C-0.09 37.73, 0.03 38.3, 0.17 39.29 M0.13 36.37 C0.11 37.1, 0.28 38.05, 0.17 39.29 M0.17 39.29 C0.38 40.24, 0.1 41.52, 0.21 42.16 M0.17 39.29 C0.26 40.29, 0.04 41.24, 0.21 42.16 M0.21 42.16 C0.16 43.07, 0 44.02, 0.25 45 M0.21 42.16 C0.14 43.11, 0.31 44.16, 0.25 45 M0.25 45 C0.3 45.88, 0.13 47.07, 0.29 47.84 M0.25 45 C0.15 46.15, 0.19 47.18, 0.29 47.84 M0.29 47.84 C0.47 49, 0.17 49.93, 0.33 50.71 M0.29 47.84 C0.38 48.42, 0.24 49.35, 0.33 50.71 M0.33 50.71 C0.29 51.65, 0.66 52.32, 0.37 53.63 M0.33 50.71 C0.42 51.91, 0.42 53.1, 0.37 53.63 M0.37 53.63 C0.23 54.23, 0.18 55.02, 0.41 56.64 M0.37 53.63 C0.3 54.45, 0.28 55.26, 0.41 56.64 M0.41 56.64 C0.72 57.77, 0.49 58.48, 0.44 59.77 M0.41 56.64 C0.3 57.53, 0.46 58.5, 0.44 59.77 M0.44 59.77 C0.17 60.91, 0.33 62.03, 0.46 63.04 M0.44 59.77 C0.56 60.76, 0.51 61.54, 0.46 63.04 M0.46 63.04 C0.53 64.01, 0.37 64.72, 0.48 66.48 M0.46 63.04 C0.49 64.25, 0.41 65.73, 0.48 66.48 M0.48 66.48 C0.51 68.22, 0.77 69.43, 0.5 70.12 M0.48 66.48 C0.49 67.69, 0.59 68.57, 0.5 70.12 M0.5 70.12 C0.64 70.97, 0.5 72.12, 0.5 74 M0.5 70.12 C0.51 71.3, 0.51 72.59, 0.5 74 M0.5 74 C0.68 76.75, 0.66 81.48, 0.5 90 M0.5 74 C0.04 79.25, 1.13 84.75, 0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1278.5 292) rotate(0 0.1922229735257588 45)"><path d="M-1.93 82.38 C-1.01 83.42, -1.47 85.21, 0.5 90 M-1.93 82.38 C-1.5 85.44, 0.02 87.83, 0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1278.5 292) rotate(0 0.1922229735257588 45)"><path d="M3.54 82.6 C3.35 83.61, 1.78 85.36, 0.5 90 M3.54 82.6 C2.01 85.56, 1.59 87.88, 0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1279 438) rotate(0 -0.36951052419021835 45)"><path d="M0 0 C0.01 3.73, 0 8.09, 0 16 M0 0 C-0.21 4.36, 0.37 7.98, 0 16 M0 16 C0.32 17.48, -0.3 18.87, 0 19.88 M0 16 C-0.14 17.04, -0.03 18.1, 0 19.88 M0 19.88 C-0.05 21.33, 0 22.5, -0.02 23.52 M0 19.88 C-0.09 21.43, -0.01 22.86, -0.02 23.52 M-0.02 23.52 C0.02 24.77, 0.28 26.32, -0.04 26.96 M-0.02 23.52 C0.05 24.27, -0.15 24.96, -0.04 26.96 M-0.04 26.96 C-0.04 28.37, 0.13 29.23, -0.06 30.23 M-0.04 26.96 C-0.01 28.12, 0.03 29.08, -0.06 30.23 M-0.06 30.23 C-0.15 31.13, 0.03 32.57, -0.09 33.36 M-0.06 30.23 C0.03 31.01, -0.06 31.97, -0.09 33.36 M-0.09 33.36 C0.06 34.63, -0.31 35.33, -0.13 36.37 M-0.09 33.36 C-0.18 34.45, 0 35.69, -0.13 36.37 M-0.13 36.37 C0.1 37.51, 0.07 38.07, -0.17 39.29 M-0.13 36.37 C-0.14 37.4, -0.29 38.16, -0.17 39.29 M-0.17 39.29 C0.09 40.03, -0.07 40.99, -0.21 42.16 M-0.17 39.29 C-0.23 40.27, -0.27 41.01, -0.21 42.16 M-0.21 42.16 C-0.21 42.99, -0.27 43.92, -0.25 45 M-0.21 42.16 C-0.1 43.15, -0.23 44.41, -0.25 45 M-0.25 45 C-0.13 45.56, -0.11 46.35, -0.29 47.84 M-0.25 45 C-0.28 46.05, -0.18 46.73, -0.29 47.84 M-0.29 47.84 C-0.53 48.98, -0.44 49.67, -0.33 50.71 M-0.29 47.84 C-0.16 48.72, -0.37 49.42, -0.33 50.71 M-0.33 50.71 C-0.46 51.54, -0.07 52.6, -0.37 53.63 M-0.33 50.71 C-0.38 51.66, -0.3 52.77, -0.37 53.63 M-0.37 53.63 C-0.16 54.5, -0.57 55.11, -0.41 56.64 M-0.37 53.63 C-0.44 54.6, -0.28 55.41, -0.41 56.64 M-0.41 56.64 C-0.66 57.71, -0.44 58.56, -0.44 59.77 M-0.41 56.64 C-0.5 57.78, -0.45 58.73, -0.44 59.77 M-0.44 59.77 C-0.61 60.2, -0.37 61.39, -0.46 63.04 M-0.44 59.77 C-0.45 60.89, -0.27 62.27, -0.46 63.04 M-0.46 63.04 C-0.22 64.33, -0.63 65.31, -0.48 66.48 M-0.46 63.04 C-0.46 63.85, -0.43 64.73, -0.48 66.48 M-0.48 66.48 C-0.18 67.47, -0.27 68.12, -0.5 70.12 M-0.48 66.48 C-0.49 68.11, -0.4 69.3, -0.5 70.12 M-0.5 70.12 C-0.44 71.57, -0.74 72.61, -0.5 74 M-0.5 70.12 C-0.69 71.19, -0.44 71.92, -0.5 74 M-0.5 74 C-1.82 77.78, 0.93 83.89, -0.5 90 M-0.5 74 C0.19 79.69, 0.1 86.24, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1279 438) rotate(0 -0.36951052419021835 45)"><path d="M-2.49 82.25 C-2.08 84.08, -1.68 86.21, -0.5 90 M-2.49 82.25 C-2.13 84.38, -1.37 86.13, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1279 438) rotate(0 -0.36951052419021835 45)"><path d="M2.95 82.78 C2.25 84.46, 1.54 86.49, -0.5 90 M2.95 82.78 C2.04 84.77, 1.52 86.4, -0.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1278.5 584) rotate(0 -0.04951581187560805 45)"><path d="M0 0 C-1.41 4.33, 0.15 6.42, 0 16 M0 0 C0.65 5.68, 0.01 11.66, 0 16 M0 16 C0.12 17.43, 0.32 18.7, 0 19.88 M0 16 C0.03 17.46, -0.01 18.68, 0 19.88 M0 19.88 C-0.21 20.62, 0.04 21.79, 0 23.52 M0 19.88 C0.05 20.73, -0.15 21.36, 0 23.52 M0 23.52 C-0.06 24.71, -0.06 25.88, 0 26.96 M0 23.52 C0.15 24.88, -0.03 25.94, 0 26.96 M0 26.96 C0.26 27.44, 0.21 28.14, 0 30.23 M0 26.96 C0 28.25, 0.07 29.27, 0 30.23 M0 30.23 C-0.09 30.88, 0.01 31.78, 0 33.36 M0 30.23 C-0.15 31.39, 0.14 32.52, 0 33.36 M0 33.36 C-0.15 34.1, 0 35.2, 0 36.37 M0 33.36 C-0.13 34.07, -0.1 34.68, 0 36.37 M0 36.37 C0.11 36.8, 0.14 37.5, 0 39.29 M0 36.37 C0.07 36.99, -0.13 37.92, 0 39.29 M0 39.29 C-0.1 39.98, -0.17 40.59, 0 42.16 M0 39.29 C-0.03 40.16, 0 41.24, 0 42.16 M0 42.16 C-0.27 43.12, 0 44.41, 0 45 M0 42.16 C0.04 42.79, 0.1 43.45, 0 45 M0 45 C-0.3 45.67, 0.2 47.07, 0 47.84 M0 45 C0.07 45.76, -0.08 46.52, 0 47.84 M0 47.84 C-0.13 48.8, 0.25 49.34, 0 50.71 M0 47.84 C-0.03 48.92, -0.1 49.7, 0 50.71 M0 50.71 C0.2 51.68, 0.05 52.94, 0 53.63 M0 50.71 C-0.06 51.45, -0.04 52.38, 0 53.63 M0 53.63 C-0.03 55.06, 0.25 55.92, 0 56.64 M0 53.63 C-0.01 54.4, 0.13 55.04, 0 56.64 M0 56.64 C-0.1 57.93, 0.23 58.97, 0 59.77 M0 56.64 C-0.04 57.33, 0.02 57.89, 0 59.77 M0 59.77 C-0.32 60.67, -0.23 61.91, 0 63.04 M0 59.77 C0.01 60.84, 0.16 61.6, 0 63.04 M0 63.04 C0.02 64.17, -0.13 64.88, 0 66.48 M0 63.04 C-0.15 64.28, 0.09 65.38, 0 66.48 M0 66.48 C0.2 67.34, -0.19 68.4, 0 70.12 M0 66.48 C0.11 67.74, -0.13 68.92, 0 70.12 M0 70.12 C0.16 71.38, -0.2 71.94, 0 74 M0 70.12 C-0.06 71.33, -0.08 72.91, 0 74 M0 74 C0.99 77.79, 0.24 81.6, 0 90 M0 74 C0.6 77.93, -0.72 81.05, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1278.5 584) rotate(0 -0.04951581187560805 45)"><path d="M-2.96 82.57 C-3.08 84.6, -1.7 85.53, 0 90 M-2.96 82.57 C-1.56 85.19, -0.79 87.97, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1278.5 584) rotate(0 -0.04951581187560805 45)"><path d="M2.51 82.4 C1.29 84.5, 1.57 85.46, 0 90 M2.51 82.4 C1.91 85.1, 0.67 87.94, 0 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g stroke-linecap="round"><g transform="translate(1299.5133333333333 730) rotate(0 88.81142674609953 45)"><path d="M0 0 C0.76 3.26, 0.56 6.56, 0 16 M0 0 C-0.13 3.04, 0.18 6.94, 0 16 M0 16 C0.79 16.95, 1.4 18.76, 1.58 19.88 M0 16 C0.41 17.18, 0.96 18.08, 1.58 19.88 M1.58 19.88 C3.54 21.78, 4.71 22.77, 6.09 23.52 M1.58 19.88 C2.87 21.16, 4.25 21.67, 6.09 23.52 M6.09 23.52 C9.15 25.02, 11.27 26.01, 13.15 26.96 M6.09 23.52 C8.82 25.07, 11.29 26.23, 13.15 26.96 M13.15 26.96 C15.59 28.17, 18.69 29.85, 22.4 30.23 M13.15 26.96 C15.91 27.76, 17.67 28.6, 22.4 30.23 M22.4 30.23 C27.47 32.4, 30.55 33.22, 33.48 33.36 M22.4 30.23 C26.31 31.59, 31.02 32.64, 33.48 33.36 M33.48 33.36 C36.63 33.36, 39.44 35.15, 46.02 36.37 M33.48 33.36 C35.96 33.73, 38.87 34.28, 46.02 36.37 M46.02 36.37 C48.23 36.84, 53.31 38.5, 59.65 39.29 M46.02 36.37 C49.29 37.06, 52.37 38.55, 59.65 39.29 M59.65 39.29 C63.57 40.54, 66.7 39.85, 74.01 42.16 M59.65 39.29 C62.68 39.84, 66.6 41.13, 74.01 42.16 M74.01 42.16 C78.25 42.79, 83.19 44.55, 88.74 45 M74.01 42.16 C78.92 43.13, 85.02 44.54, 88.74 45 M88.74 45 C93.04 46.04, 97.83 47.48, 103.47 47.84 M88.74 45 C93.3 45.74, 97.92 46.15, 103.47 47.84 M103.47 47.84 C109.33 47.35, 112.08 49.27, 117.84 50.71 M103.47 47.84 C107.01 47.93, 110.99 49.83, 117.84 50.71 M117.84 50.71 C122.13 51.24, 129.29 52.61, 131.47 53.63 M117.84 50.71 C121.37 51.67, 125.34 52.89, 131.47 53.63 M131.47 53.63 C133.33 53.56, 138.78 55.26, 144.01 56.64 M131.47 53.63 C136.57 54.6, 140.94 56.28, 144.01 56.64 M144.01 56.64 C146.18 58.1, 150.06 57.61, 155.09 59.77 M144.01 56.64 C148.27 58.39, 152.54 58.78, 155.09 59.77 M155.09 59.77 C158.87 60.94, 160.44 62.14, 164.34 63.04 M155.09 59.77 C158.43 60.98, 162.2 62.24, 164.34 63.04 M164.34 63.04 C167.6 64.18, 169.55 65.77, 171.4 66.48 M164.34 63.04 C166.35 63.98, 167.82 65.06, 171.4 66.48 M171.4 66.48 C172.63 67.84, 174.7 69.6, 175.9 70.12 M171.4 66.48 C172.2 67.41, 173.42 68.22, 175.9 70.12 M175.9 70.12 C176.11 71.22, 177.03 72.73, 177.49 74 M175.9 70.12 C176.49 71.14, 176.73 72.38, 177.49 74 M177.49 74 C177.08 77.66, 177.68 80.88, 177.49 90 M177.49 74 C177.02 79.6, 178.04 86.38, 177.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1299.5133333333333 730) rotate(0 88.81142674609953 45)"><path d="M175.05 82.38 C175.92 83.92, 176.31 85.49, 177.49 90 M175.05 82.38 C175.52 83.83, 176.21 85.69, 177.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1299.5133333333333 730) rotate(0 88.81142674609953 45)"><path d="M180.52 82.6 C180.28 84.12, 179.57 85.65, 177.49 90 M180.52 82.6 C179.77 83.97, 179.26 85.79, 177.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(1317 759) rotate(0 20 10)"><text x="20" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-link, #2E7D74)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">yes</text></g><g stroke-linecap="round"><g transform="translate(1257.4866666666667 730) rotate(0 -88.38217760163639 45)"><path d="M0 0 C-1.63 2.27, -0.17 7.12, 0 16 M0 0 C-0.39 5.29, -0.23 10.16, 0 16 M0 16 C-0.51 17.54, -0.58 18.37, -1.57 19.88 M0 16 C-0.32 16.91, -0.85 17.78, -1.57 19.88 M-1.57 19.88 C-2.54 20.94, -4.01 22.54, -6.05 23.52 M-1.57 19.88 C-3.29 21.02, -4.77 22.38, -6.05 23.52 M-6.05 23.52 C-7.83 23.83, -10.24 25.42, -13.07 26.96 M-6.05 23.52 C-7.9 23.99, -9.14 25.24, -13.07 26.96 M-13.07 26.96 C-16.12 28.39, -20.84 29.84, -22.27 30.23 M-13.07 26.96 C-16.27 27.74, -20.44 29.13, -22.27 30.23 M-22.27 30.23 C-26.24 32.27, -28.68 32.45, -33.29 33.36 M-22.27 30.23 C-25.28 31.19, -29.22 31.66, -33.29 33.36 M-33.29 33.36 C-35.62 33.18, -40.66 33.68, -45.76 36.37 M-33.29 33.36 C-38.44 34.8, -42.69 35.62, -45.76 36.37 M-45.76 36.37 C-50.28 37.49, -54.44 38.17, -59.31 39.29 M-45.76 36.37 C-49.41 36.49, -52.71 37.7, -59.31 39.29 M-59.31 39.29 C-62.63 40.01, -65.9 40.69, -73.6 42.16 M-59.31 39.29 C-63.72 39.64, -68.84 41.35, -73.6 42.16 M-73.6 42.16 C-78.45 42.31, -79.69 42.64, -88.24 45 M-73.6 42.16 C-76.61 43.5, -81.04 43.05, -88.24 45 M-88.24 45 C-93.19 46.37, -100.3 46.15, -102.89 47.84 M-88.24 45 C-92.43 45.1, -96.45 45.9, -102.89 47.84 M-102.89 47.84 C-107.64 48.01, -115.36 50.13, -117.17 50.71 M-102.89 47.84 C-106.61 47.95, -109.78 48.91, -117.17 50.71 M-117.17 50.71 C-120.01 52.24, -124.37 52.65, -130.73 53.63 M-117.17 50.71 C-120.98 51.39, -126.42 53.32, -130.73 53.63 M-130.73 53.63 C-132.89 53.77, -136.65 54.44, -143.2 56.64 M-130.73 53.63 C-135.59 55.47, -140.96 55.68, -143.2 56.64 M-143.2 56.64 C-147.64 57.49, -151.71 58.58, -154.21 59.77 M-143.2 56.64 C-146.96 57.32, -151.05 58.69, -154.21 59.77 M-154.21 59.77 C-157.14 60.14, -159.76 62.14, -163.41 63.04 M-154.21 59.77 C-156.61 60.07, -159.18 61.37, -163.41 63.04 M-163.41 63.04 C-165.38 64.39, -167.62 65.98, -170.43 66.48 M-163.41 63.04 C-166.2 64.43, -168.73 65.65, -170.43 66.48 M-170.43 66.48 C-171.68 67.46, -172.98 67.79, -174.91 70.12 M-170.43 66.48 C-171.52 67.58, -172.68 68.4, -174.91 70.12 M-174.91 70.12 C-175.21 71.52, -175.71 72.74, -176.49 74 M-174.91 70.12 C-175.45 71.21, -175.89 72.07, -176.49 74 M-176.49 74 C-175.73 78.65, -177.39 81.73, -176.49 90 M-176.49 74 C-176.75 79.78, -176.78 85.19, -176.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1257.4866666666667 730) rotate(0 -88.38217760163639 45)"><path d="M-179.52 82.6 C-179.72 83.59, -178.38 85.89, -176.49 90 M-179.52 82.6 C-178.81 85.06, -177.82 87.32, -176.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1257.4866666666667 730) rotate(0 -88.38217760163639 45)"><path d="M-174.06 82.38 C-175.36 83.46, -175.12 85.81, -176.49 90 M-174.06 82.38 C-174.98 84.9, -175.64 87.23, -176.49 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(1124 759) rotate(0 20 10)"><text x="20" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-link, #2E7D74)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">no</text></g><g stroke-linecap="round"><g transform="translate(1477 876) rotate(0 47.9911854158845 45)"><path d="M0 0 C-0.49 1.69, 1.34 6.54, 0 16 M0 0 C-0.66 6.14, 0.71 10.34, 0 16 M0 16 C0.36 17.8, 0.52 19.31, 0.85 19.88 M0 16 C0.47 17.2, 0.62 18.81, 0.85 19.88 M0.85 19.88 C2.03 20.75, 2.78 22.8, 3.28 23.52 M0.85 19.88 C1.88 21.32, 2.59 22.68, 3.28 23.52 M3.28 23.52 C3.8 23.96, 5.01 25.37, 7.07 26.96 M3.28 23.52 C4.1 24.3, 4.99 25.17, 7.07 26.96 M7.07 26.96 C8.44 28.27, 10.57 29.21, 12.05 30.23 M7.07 26.96 C8.99 28.08, 10.94 29.46, 12.05 30.23 M12.05 30.23 C14.01 31.46, 15.07 31.81, 18.01 33.36 M12.05 30.23 C14.22 31.5, 17.09 32.75, 18.01 33.36 M18.01 33.36 C20.41 33.77, 21.76 34.9, 24.76 36.37 M18.01 33.36 C20.74 34.53, 23.45 35.9, 24.76 36.37 M24.76 36.37 C27.63 36.68, 29.12 37.62, 32.1 39.29 M24.76 36.37 C26.29 36.91, 28.18 37.89, 32.1 39.29 M32.1 39.29 C34.41 40.87, 36.88 41.58, 39.82 42.16 M32.1 39.29 C34.21 40.59, 36.66 40.78, 39.82 42.16 M39.82 42.16 C42.47 42.48, 43.61 42.83, 47.75 45 M39.82 42.16 C42.88 43.3, 45.02 43.83, 47.75 45 M47.75 45 C49.24 45.65, 51.39 47.29, 55.68 47.84 M47.75 45 C50.47 46.19, 53.35 47.1, 55.68 47.84 M55.68 47.84 C58.14 49.02, 60.39 49.02, 63.4 50.71 M55.68 47.84 C58.36 49.02, 60.54 50.02, 63.4 50.71 M63.4 50.71 C66.87 52.09, 69.25 52.46, 70.74 53.63 M63.4 50.71 C66.06 51.57, 68.42 53.07, 70.74 53.63 M70.74 53.63 C72.67 53.97, 74.5 55.56, 77.49 56.64 M70.74 53.63 C72.63 54.05, 73.9 55.32, 77.49 56.64 M77.49 56.64 C78.48 57.41, 80.27 58.56, 83.45 59.77 M77.49 56.64 C78.98 57.15, 79.8 58.08, 83.45 59.77 M83.45 59.77 C84.42 60.18, 85.82 61.04, 88.43 63.04 M83.45 59.77 C84.95 60.76, 85.84 61.59, 88.43 63.04 M88.43 63.04 C89.84 64.09, 90.95 65.62, 92.22 66.48 M88.43 63.04 C89.72 64.26, 90.53 64.95, 92.22 66.48 M92.22 66.48 C93.37 67.4, 93.58 68.48, 94.65 70.12 M92.22 66.48 C93.04 67.89, 94.09 68.96, 94.65 70.12 M94.65 70.12 C95.2 70.72, 95.46 72.26, 95.5 74 M94.65 70.12 C95.01 70.91, 94.93 72.06, 95.5 74 M95.5 74 C96.01 76.39, 96.7 80.86, 95.5 90 M95.5 74 C95.92 80.35, 95.3 86.17, 95.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1477 876) rotate(0 47.9911854158845 45)"><path d="M92.74 82.49 C93.05 83.21, 94.52 85.54, 95.5 90 M92.74 82.49 C93.36 85.39, 94.98 87.33, 95.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1477 876) rotate(0 47.9911854158845 45)"><path d="M98.22 82.48 C97.42 83.25, 97.78 85.57, 95.5 90 M98.22 82.48 C96.97 85.38, 96.72 87.32, 95.5 90" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(1552 905) rotate(0 20 10)"><text x="20" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-link, #2E7D74)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">yes</text></g><g stroke-linecap="round"><g transform="translate(1296 848) rotate(0 -6.0839676465034245 72.58572821649426)"><path d="M0 0 C-2.04 -1.32, -7.32 -1.75, -16 0 M0 0 C-4.97 -0.67, -10.49 -0.81, -16 0 M-16 0 C-17.16 0.65, -17.76 0.79, -19.18 1.3 M-16 0 C-16.62 0.44, -17.32 0.66, -19.18 1.3 M-19.18 1.3 C-20.03 2.85, -20.04 3.98, -20.84 5.01 M-19.18 1.3 C-19.5 2.23, -20.01 3.4, -20.84 5.01 M-20.84 5.01 C-21.23 7.37, -21.57 8.69, -21.19 10.81 M-20.84 5.01 C-21.25 7.32, -21.21 9.12, -21.19 10.81 M-21.19 10.81 C-21.06 13.89, -20.96 16.56, -20.39 18.43 M-21.19 10.81 C-20.68 12.69, -21.01 13.82, -20.39 18.43 M-20.39 18.43 C-20.07 20.64, -19.43 24.61, -18.65 27.54 M-20.39 18.43 C-19.58 20.66, -19.69 23.21, -18.65 27.54 M-18.65 27.54 C-17.93 31.59, -17.9 34.11, -16.15 37.85 M-18.65 27.54 C-17.78 29.45, -17.66 31.65, -16.15 37.85 M-16.15 37.85 C-16.16 39.86, -15.21 44.34, -13.08 49.07 M-16.15 37.85 C-14.88 42.09, -13.84 45.4, -13.08 49.07 M-13.08 49.07 C-12.28 52.45, -11.54 56.61, -9.64 60.88 M-13.08 49.07 C-11.66 53.72, -10.96 58.33, -9.64 60.88 M-9.64 60.88 C-9.24 65.17, -6.23 70.97, -6 73 M-9.64 60.88 C-9.37 63.93, -7.62 65.6, -6 73 M-6 73 C-6.07 75.93, -4.54 78.8, -2.36 85.12 M-6 73 C-4.85 76.2, -4.4 79.3, -2.36 85.12 M-2.36 85.12 C-1.34 88.74, 1.12 94.14, 1.08 96.93 M-2.36 85.12 C-1.99 87.59, -0.54 90.9, 1.08 96.93 M1.08 96.93 C2.18 101.68, 4.64 104.9, 4.15 108.15 M1.08 96.93 C1.58 100.1, 2.19 103.1, 4.15 108.15 M4.15 108.15 C5.17 112.55, 7.13 115.79, 6.65 118.46 M4.15 108.15 C4.58 109.9, 4.97 112.65, 6.65 118.46 M6.65 118.46 C6.65 122.17, 8.35 124.94, 8.39 127.57 M6.65 118.46 C7.51 121.27, 7.84 123.77, 8.39 127.57 M8.39 127.57 C8.84 129.93, 8.09 131.96, 9.19 135.19 M8.39 127.57 C9.03 130.17, 8.94 132, 9.19 135.19 M9.19 135.19 C8.6 137.62, 8.71 139.28, 8.84 140.99 M9.19 135.19 C9.01 136.84, 9.04 138.08, 8.84 140.99 M8.84 140.99 C7.98 141.64, 8.21 142.85, 7.18 144.7 M8.84 140.99 C8.48 141.72, 8.23 142.59, 7.18 144.7 M7.18 144.7 C6.34 145, 5.32 145.84, 4 146 M7.18 144.7 C6.41 145.21, 5.41 145.31, 4 146 M4 146 C0.01 145.97, -5.53 145.82, -12 146 M4 146 C-2.39 146.53, -8.54 146.33, -12 146" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1296 848) rotate(0 -6.0839676465034245 72.58572821649426)"><path d="M-4.32 143.76 C-5.27 143.56, -7.84 143.8, -12 146 M-4.32 143.76 C-6.72 144.13, -9.37 144.77, -12 146" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g><g transform="translate(1296 848) rotate(0 -6.0839676465034245 72.58572821649426)"><path d="M-4.68 149.22 C-5.57 147.91, -8.07 147.04, -12 146 M-4.68 149.22 C-6.93 147.87, -9.48 146.79, -12 146" stroke="var(--diagram-link, #2E7D74)" stroke-width="2" fill="none"/></g></g><mask/><g transform="translate(1391 905) rotate(0 20 10)"><text x="20" y="14.096" font-family="Excalifont, Xiaolai, sans-serif, Segoe UI Emoji" font-size="16px" fill="var(--diagram-link, #2E7D74)" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">no</text></g></svg>
|
|
@@ -4,64 +4,8 @@ This document covers the internal structure of Meadow Integration, including mod
|
|
|
4
4
|
|
|
5
5
|
## Module Structure
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
├── package.json
|
|
10
|
-
├── Dockerfile
|
|
11
|
-
├── docker-compose.yml
|
|
12
|
-
├── scripts/
|
|
13
|
-
│ └── run.sh
|
|
14
|
-
├── source/
|
|
15
|
-
│ ├── Meadow-Integration.js # Main export (programmatic API)
|
|
16
|
-
│ ├── Meadow-Service-Integration-Adapter.js # IntegrationAdapter service
|
|
17
|
-
│ ├── Meadow-Service-Integration-GUIDMap.js # GUIDMap service
|
|
18
|
-
│ ├── cli/
|
|
19
|
-
│ │ ├── Meadow-Integration-CLI-Program.js # CLI program setup
|
|
20
|
-
│ │ ├── Meadow-Integration-CLI-Run.js # CLI entry point
|
|
21
|
-
│ │ ├── Default-Meadow-Integration-Configuration.json
|
|
22
|
-
│ │ └── commands/
|
|
23
|
-
│ │ ├── Meadow-Integration-Command-CSVCheck.js
|
|
24
|
-
│ │ ├── Meadow-Integration-Command-CSVTransform.js
|
|
25
|
-
│ │ ├── Meadow-Integration-Command-TSVCheck.js
|
|
26
|
-
│ │ ├── Meadow-Integration-Command-TSVTransform.js
|
|
27
|
-
│ │ ├── Meadow-Integration-Command-JSONArrayTransform.js
|
|
28
|
-
│ │ ├── Meadow-Integration-Command-ComprehensionIntersect.js
|
|
29
|
-
│ │ ├── Meadow-Integration-Command-ComprehensionArray.js
|
|
30
|
-
│ │ ├── Meadow-Integration-Command-ComprehensionPush.js
|
|
31
|
-
│ │ ├── Meadow-Integration-Command-ObjectArrayToCSV.js
|
|
32
|
-
│ │ ├── Meadow-Integration-Command-EntityFromTabularFolder.js
|
|
33
|
-
│ │ ├── Meadow-Integration-Command-DataClone.js
|
|
34
|
-
│ │ ├── Meadow-Integration-Command-ConvertXLSMToXLSX.js
|
|
35
|
-
│ │ └── Meadow-Integration-Command-Serve.js
|
|
36
|
-
│ ├── restserver/
|
|
37
|
-
│ │ ├── Meadow-Integration-Server.js # REST server class
|
|
38
|
-
│ │ ├── Meadow-Integration-Server-Endpoints.js # Endpoint registration
|
|
39
|
-
│ │ └── endpoints/
|
|
40
|
-
│ │ ├── Endpoint-CSVCheck.js
|
|
41
|
-
│ │ ├── Endpoint-CSVTransform.js
|
|
42
|
-
│ │ ├── Endpoint-TSVCheck.js
|
|
43
|
-
│ │ ├── Endpoint-TSVTransform.js
|
|
44
|
-
│ │ ├── Endpoint-JSONArrayTransform.js
|
|
45
|
-
│ │ ├── Endpoint-ComprehensionIntersect.js
|
|
46
|
-
│ │ ├── Endpoint-ComprehensionArray.js
|
|
47
|
-
│ │ ├── Endpoint-ComprehensionPush.js
|
|
48
|
-
│ │ ├── Endpoint-ObjectArrayToCSV.js
|
|
49
|
-
│ │ └── Endpoint-EntityFromTabularFolder.js
|
|
50
|
-
│ └── services/
|
|
51
|
-
│ ├── clone/
|
|
52
|
-
│ │ ├── Meadow-Service-ConnectionManager.js # Database connection pooling
|
|
53
|
-
│ │ ├── Meadow-Service-RestClient.js # Authenticated REST client
|
|
54
|
-
│ │ ├── Meadow-Service-Sync.js # Sync orchestrator
|
|
55
|
-
│ │ ├── Meadow-Service-Sync-Entity-Initial.js # Initial sync strategy
|
|
56
|
-
│ │ ├── Meadow-Service-Sync-Entity-Ongoing.js # Ongoing sync strategy
|
|
57
|
-
│ │ └── Meadow-Service-Operation.js # Timing and progress tracking
|
|
58
|
-
│ └── tabular/
|
|
59
|
-
│ ├── Service-TabularCheck.js # Statistics collection
|
|
60
|
-
│ └── Service-TabularTransform.js # Record transformation
|
|
61
|
-
├── test/
|
|
62
|
-
├── examples/
|
|
63
|
-
└── docs/
|
|
64
|
-
```
|
|
7
|
+
<!-- bespoke diagram: edit diagrams/module-structure.mmd or .hints.json, then: npx pict-renderer-graph build modules/meadow/meadow-integration/docs -->
|
|
8
|
+

|
|
65
9
|
|
|
66
10
|
## Service Registration Patterns
|
|
67
11
|
|
package/docs/index.html
CHANGED
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
7
|
-
<meta name="description" content="Meadow Integration v1.0.
|
|
7
|
+
<meta name="description" content="Meadow Integration v1.0.41 Documentation — Meadow Data Integration">
|
|
8
8
|
|
|
9
|
-
<title>Meadow Integration v1.0.
|
|
9
|
+
<title>Meadow Integration v1.0.41 Documentation</title>
|
|
10
10
|
|
|
11
|
-
<!-- Application Stylesheet -->
|
|
12
|
-
<link href="css/docuserve.css" rel="stylesheet">
|
|
13
11
|
<!-- KaTeX stylesheet for LaTeX equation rendering -->
|
|
14
12
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css">
|
|
15
13
|
<!-- PICT Dynamic View CSS Container -->
|
|
@@ -28,12 +26,13 @@
|
|
|
28
26
|
<!-- The root container for the Pict application -->
|
|
29
27
|
<div id="Docuserve-Application-Container"></div>
|
|
30
28
|
|
|
31
|
-
<!-- Mermaid diagram rendering
|
|
29
|
+
<!-- Mermaid diagram rendering. pict-section-content (v0.1.8+) drives
|
|
30
|
+
initialization with theme: 'base' + themeVariables sourced
|
|
31
|
+
from --theme-color-* so diagrams follow the active theme. -->
|
|
32
32
|
<script src="https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js"></script>
|
|
33
|
-
<script>mermaid.initialize({ startOnLoad: false, theme: 'default' });</script>
|
|
34
33
|
<!-- KaTeX for LaTeX equation rendering -->
|
|
35
34
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.js"></script>
|
|
36
35
|
<!-- Load the Docuserve PICT Application Bundle from jsDelivr CDN -->
|
|
37
|
-
<script src="https://cdn.jsdelivr.net/npm/pict-docuserve@
|
|
36
|
+
<script src="https://cdn.jsdelivr.net/npm/pict-docuserve@1/dist/pict-docuserve.min.js" type="text/javascript"></script>
|
|
38
37
|
</body>
|
|
39
38
|
</html>
|