Browse Source

tdb2: update design.lyx

Rusty Russell 15 years ago
parent
commit
b6df44dc1f
2 changed files with 235 additions and 152 deletions
  1. 45 3
      ccan/tdb2/doc/design.lyx
  2. 190 149
      ccan/tdb2/doc/design.lyx,v

+ 45 - 3
ccan/tdb2/doc/design.lyx

@@ -698,7 +698,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979572
 Incomplete; nesting flag is still defined as per tdb1.
 Incomplete; nesting flag is still defined as per tdb1.
+\change_inserted 0 1298979584
+Complete; the nesting flag has been removed.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -870,14 +876,32 @@ Proposed Solution
 
 
 \begin_layout Standard
 \begin_layout Standard
 Reachitecting the API to include a tdb_errcode pointer would be a great
 Reachitecting the API to include a tdb_errcode pointer would be a great
- deal of churn; we are better to guarantee that the tdb_errcode is per-thread
- so the current programming model can be maintained.
+ deal of churn
+\change_inserted 0 1298979557
+, but fortunately most functions return 0 on success and -1 on error: we
+ can change these to return 0 on success and a negative error code on error,
+ and the API remains similar to previous.
+ The tdb_fetch, tdb_firstkey and tdb_nextkey functions need to take a TDB_DATA
+ pointer and return an error code.
+ It is also simpler to have tdb_nextkey replace its key argument in place,
+ freeing up any old .dptr.
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979438
+; we are better to guarantee that the tdb_errcode is per-thread so the current
+ programming model can be maintained.
+\end_layout
+
+\begin_layout Standard
+
+\change_deleted 0 1298979438
 This requires dynamic per-thread allocations, which is awkward with POSIX
 This requires dynamic per-thread allocations, which is awkward with POSIX
  threads (pthread_key_create space is limited and we cannot simply allocate
  threads (pthread_key_create space is limited and we cannot simply allocate
  a key for every TDB).
  a key for every TDB).
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
@@ -903,7 +927,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
-Incomplete.
+Incomplete
+\change_inserted 0 1298979681
+; API has been changed but thread safety has not been implemented.
+\change_deleted 0 1298979669
+.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -1291,7 +1321,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979699
 Incomplete, TDB_CLEAR_IF_FIRST still defined, but not implemented.
 Incomplete, TDB_CLEAR_IF_FIRST still defined, but not implemented.
+\change_inserted 0 1298979700
+Complete.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -1497,7 +1533,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979837
 Incomplete; TDB_CLEAR_IF_FIRST still defined, but does nothing.
 Incomplete; TDB_CLEAR_IF_FIRST still defined, but does nothing.
+\change_inserted 0 1298979837
+Complete.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection

+ 190 - 149
ccan/tdb2/doc/design.lyx,v

@@ -6,7 +6,7 @@ comment	@# @;
 
 
 
 
 1.13
 1.13
-date	2010.12.01.12.22.08;	author rusty;	state Exp;
+date	2011.03.01.11.46.54;	author rusty;	state Exp;
 branches;
 branches;
 next	1.12;
 next	1.12;
 
 
@@ -78,7 +78,7 @@ desc
 
 
 1.13
 1.13
 log
 log
-@Merged changes.
+@Thread-safe API
 @
 @
 text
 text
 @#LyX 1.6.7 created this file. For more info see http://www.lyx.org/
 @#LyX 1.6.7 created this file. For more info see http://www.lyx.org/
@@ -781,7 +781,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979572
 Incomplete; nesting flag is still defined as per tdb1.
 Incomplete; nesting flag is still defined as per tdb1.
+\change_inserted 0 1298979584
+Complete; the nesting flag has been removed.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -953,14 +959,32 @@ Proposed Solution
 
 
 \begin_layout Standard
 \begin_layout Standard
 Reachitecting the API to include a tdb_errcode pointer would be a great
 Reachitecting the API to include a tdb_errcode pointer would be a great
- deal of churn; we are better to guarantee that the tdb_errcode is per-thread
- so the current programming model can be maintained.
+ deal of churn
+\change_inserted 0 1298979557
+, but fortunately most functions return 0 on success and -1 on error: we
+ can change these to return 0 on success and a negative error code on error,
+ and the API remains similar to previous.
+ The tdb_fetch, tdb_firstkey and tdb_nextkey functions need to take a TDB_DATA
+ pointer and return an error code.
+ It is also simpler to have tdb_nextkey replace its key argument in place,
+ freeing up any old .dptr.
+\end_layout
+
+\begin_layout Standard
+
+\change_deleted 0 1298979438
+; we are better to guarantee that the tdb_errcode is per-thread so the current
+ programming model can be maintained.
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979438
 This requires dynamic per-thread allocations, which is awkward with POSIX
 This requires dynamic per-thread allocations, which is awkward with POSIX
  threads (pthread_key_create space is limited and we cannot simply allocate
  threads (pthread_key_create space is limited and we cannot simply allocate
  a key for every TDB).
  a key for every TDB).
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
@@ -986,7 +1010,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
-Incomplete.
+Incomplete
+\change_inserted 0 1298979681
+; API has been changed but thread safety has not been implemented.
+\change_deleted 0 1298979669
+.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -1374,7 +1404,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979699
 Incomplete, TDB_CLEAR_IF_FIRST still defined, but not implemented.
 Incomplete, TDB_CLEAR_IF_FIRST still defined, but not implemented.
+\change_inserted 0 1298979700
+Complete.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -1580,7 +1616,13 @@ Status
 \end_layout
 \end_layout
 
 
 \begin_layout Standard
 \begin_layout Standard
+
+\change_deleted 0 1298979837
 Incomplete; TDB_CLEAR_IF_FIRST still defined, but does nothing.
 Incomplete; TDB_CLEAR_IF_FIRST still defined, but does nothing.
+\change_inserted 0 1298979837
+Complete.
+\change_unchanged
+
 \end_layout
 \end_layout
 
 
 \begin_layout Subsection
 \begin_layout Subsection
@@ -2822,211 +2864,210 @@ a693 2
 a696 2
 a696 2
 
 
 \change_inserted 0 1291204640
 \change_inserted 0 1291204640
-a700 2
-
+d702 1
+a702 1
 \change_inserted 0 1291204665
 \change_inserted 0 1291204665
-a701 2
-\change_unchanged
-
-a722 2
+d704 2
+a728 2
 \change_inserted 0 1291204671
 \change_inserted 0 1291204671
 
 
-a725 2
+a731 2
 
 
 \change_inserted 0 1291204671
 \change_inserted 0 1291204671
-a729 2
+a735 2
 
 
 \change_inserted 0 1291204673
 \change_inserted 0 1291204673
-a730 2
+a736 2
 \change_unchanged
 \change_unchanged
 
 
-a774 2
+a780 2
 \change_inserted 0 1291204731
 \change_inserted 0 1291204731
 
 
-a777 2
+a783 2
 
 
 \change_inserted 0 1291204732
 \change_inserted 0 1291204732
-a781 2
+a787 2
 
 
 \change_inserted 0 1291204779
 \change_inserted 0 1291204779
-a784 2
+a790 2
 \change_unchanged
 \change_unchanged
 
 
-a836 2
+a842 2
 \change_inserted 0 1291204830
 \change_inserted 0 1291204830
 
 
-a839 2
+a845 2
 
 
 \change_inserted 0 1291204831
 \change_inserted 0 1291204831
-a843 2
+a849 2
 
 
 \change_inserted 0 1291204834
 \change_inserted 0 1291204834
-a844 2
+a850 2
 \change_unchanged
 \change_unchanged
 
 
-a898 2
+d879 9
+a887 2
+ deal of churn; we are better to guarantee that the tdb_errcode is per-thread
+ so the current programming model can be maintained.
+d891 9
+d903 2
+a922 2
 \change_inserted 0 1291204847
 \change_inserted 0 1291204847
 
 
-a901 2
+a925 2
 
 
 \change_inserted 0 1291204847
 \change_inserted 0 1291204847
-a905 2
+d930 5
+a934 3
 
 
 \change_inserted 0 1291204852
 \change_inserted 0 1291204852
-a906 2
-\change_unchanged
-
-a1021 2
+Incomplete.
+a1051 2
 \change_inserted 0 1291204881
 \change_inserted 0 1291204881
 
 
-a1024 2
+a1054 2
 
 
 \change_inserted 0 1291204881
 \change_inserted 0 1291204881
-a1028 2
+a1058 2
 
 
 \change_inserted 0 1291204885
 \change_inserted 0 1291204885
-a1029 2
+a1059 2
 \change_unchanged
 \change_unchanged
 
 
-a1110 2
+a1140 2
 \change_inserted 0 1291204898
 \change_inserted 0 1291204898
 
 
-a1113 2
+a1143 2
 
 
 \change_inserted 0 1291204898
 \change_inserted 0 1291204898
-a1117 2
+a1147 2
 
 
 \change_inserted 0 1291204901
 \change_inserted 0 1291204901
-a1118 2
+a1148 2
 \change_unchanged
 \change_unchanged
 
 
-a1194 2
+a1224 2
 \change_inserted 0 1291204908
 \change_inserted 0 1291204908
 
 
-a1197 2
+a1227 2
 
 
 \change_inserted 0 1291204908
 \change_inserted 0 1291204908
-a1201 2
+a1231 2
 
 
 \change_inserted 0 1291204908
 \change_inserted 0 1291204908
-a1202 2
+a1232 2
 \change_unchanged
 \change_unchanged
 
 
-a1241 2
+a1271 2
 \change_inserted 0 1291204917
 \change_inserted 0 1291204917
 
 
-a1244 2
+a1274 2
 
 
 \change_inserted 0 1291204917
 \change_inserted 0 1291204917
-a1248 2
+a1278 2
 
 
 \change_inserted 0 1291204920
 \change_inserted 0 1291204920
-a1249 2
+a1279 2
 \change_unchanged
 \change_unchanged
 
 
-a1286 2
+a1316 2
 \change_inserted 0 1291204927
 \change_inserted 0 1291204927
 
 
-a1289 2
+a1319 2
 
 
 \change_inserted 0 1291204928
 \change_inserted 0 1291204928
-a1293 2
-
+d1325 1
+a1325 1
 \change_inserted 0 1291204942
 \change_inserted 0 1291204942
-a1294 2
-\change_unchanged
-
-a1345 2
+d1327 2
+a1381 2
 \change_inserted 0 1291205003
 \change_inserted 0 1291205003
 
 
-a1348 2
+a1384 2
 
 
 \change_inserted 0 1291205004
 \change_inserted 0 1291205004
-a1352 2
+a1388 2
 
 
 \change_inserted 0 1291205007
 \change_inserted 0 1291205007
-a1375 2
+a1411 2
 \change_inserted 0 1291205019
 \change_inserted 0 1291205019
 
 
-a1378 2
+a1414 2
 
 
 \change_inserted 0 1291205019
 \change_inserted 0 1291205019
-a1382 2
+a1418 2
 
 
 \change_inserted 0 1291205023
 \change_inserted 0 1291205023
-a1383 2
+a1419 2
 \change_unchanged
 \change_unchanged
 
 
-a1429 2
+a1465 2
 \change_inserted 0 1291205029
 \change_inserted 0 1291205029
 
 
-a1432 2
+a1468 2
 
 
 \change_inserted 0 1291205029
 \change_inserted 0 1291205029
-a1436 2
+a1472 2
 
 
 \change_inserted 0 1291206020
 \change_inserted 0 1291206020
-a1437 2
+a1473 2
 \change_unchanged
 \change_unchanged
 
 
-a1492 2
+a1528 2
 \change_inserted 0 1291205043
 \change_inserted 0 1291205043
 
 
-a1495 2
+a1531 2
 
 
 \change_inserted 0 1291205043
 \change_inserted 0 1291205043
-a1499 2
-
+d1537 1
+a1537 1
 \change_inserted 0 1291205057
 \change_inserted 0 1291205057
-a1500 2
-\change_unchanged
-
-a1547 2
+d1539 2
+a1589 2
 \change_inserted 0 1291205062
 \change_inserted 0 1291205062
 
 
-a1550 2
+a1592 2
 
 
 \change_inserted 0 1291205062
 \change_inserted 0 1291205062
-a1554 2
+a1596 2
 
 
 \change_inserted 0 1291205062
 \change_inserted 0 1291205062
-a1555 2
+a1597 2
 \change_unchanged
 \change_unchanged
 
 
-a1584 2
+a1626 2
 \change_inserted 0 1291205072
 \change_inserted 0 1291205072
 
 
-a1587 2
+a1629 2
 
 
 \change_inserted 0 1291205073
 \change_inserted 0 1291205073
-a1591 2
+a1633 2
 
 
 \change_inserted 0 1291205073
 \change_inserted 0 1291205073
-a1592 2
+a1634 2
 \change_unchanged
 \change_unchanged
 
 
-a1632 4
+a1674 4
 
 
 \change_deleted 0 1291204504
 \change_deleted 0 1291204504
  
  
 \change_unchanged
 \change_unchanged
-a1657 2
+a1699 2
 \change_inserted 0 1291205079
 \change_inserted 0 1291205079
 
 
-a1660 2
+a1702 2
 
 
 \change_inserted 0 1291205080
 \change_inserted 0 1291205080
-a1664 2
+a1706 2
 
 
 \change_inserted 0 1291205080
 \change_inserted 0 1291205080
-a1665 2
+a1707 2
 \change_unchanged
 \change_unchanged
 
 
-a1791 2
+a1833 2
 \change_inserted 0 1291205090
 \change_inserted 0 1291205090
 
 
-d1827 2
-a1828 7
+d1869 2
+a1870 7
  is to divide the file into zones, and using a free list (or 
  is to divide the file into zones, and using a free list (or 
 \change_inserted 0 1291205498
 \change_inserted 0 1291205498
 table
 table
@@ -3034,13 +3075,13 @@ table
 set
 set
 \change_unchanged
 \change_unchanged
  of free lists) for each.
  of free lists) for each.
-a1829 2
+a1871 2
 \change_inserted 0 1291205203
 \change_inserted 0 1291205203
 
 
-a1832 2
+a1874 2
 
 
 \change_inserted 0 1291205358
 \change_inserted 0 1291205358
-a1848 21
+a1890 21
 \change_unchanged
 \change_unchanged
 
 
 \end_layout
 \end_layout
@@ -3062,8 +3103,8 @@ reshuffling the free lists is trivial: we simply merge every consecutive
  pair of free lists.
  pair of free lists.
 \change_unchanged
 \change_unchanged
 
 
-d1857 1
-a1857 7
+d1899 1
+a1899 7
 Identify the correct 
 Identify the correct 
 \change_inserted 0 1291205366
 \change_inserted 0 1291205366
 free list
 free list
@@ -3071,8 +3112,8 @@ free list
 zone
 zone
 \change_unchanged
 \change_unchanged
 .
 .
-d1865 2
-a1866 7
+d1907 2
+a1908 7
 Re-check the 
 Re-check the 
 \change_inserted 0 1291205372
 \change_inserted 0 1291205372
 list
 list
@@ -3080,15 +3121,15 @@ list
 zone
 zone
 \change_unchanged
 \change_unchanged
  (we didn't have a lock, sizes could have changed): relock if necessary.
  (we didn't have a lock, sizes could have changed): relock if necessary.
-d1870 1
-a1870 5
+d1912 1
+a1912 5
 Place the freed entry in the list
 Place the freed entry in the list
 \change_deleted 0 1291205382
 \change_deleted 0 1291205382
  for that zone
  for that zone
 \change_unchanged
 \change_unchanged
 .
 .
-d1879 1
-a1879 15
+d1921 1
+a1921 15
 Pick a 
 Pick a 
 \change_deleted 0 1291205403
 \change_deleted 0 1291205403
 zone either the zone we last freed into, or based on a 
 zone either the zone we last freed into, or based on a 
@@ -3104,7 +3145,7 @@ random
 free table; usually the previous one.
 free table; usually the previous one.
 \change_unchanged
 \change_unchanged
 
 
-a1883 10
+a1925 10
 \change_deleted 0 1291205432
 \change_deleted 0 1291205432
 
 
 \end_layout
 \end_layout
@@ -3115,8 +3156,8 @@ a1883 10
 Re-check the zone: relock if necessary.
 Re-check the zone: relock if necessary.
 \change_unchanged
 \change_unchanged
 
 
-d1892 1
-a1892 7
+d1934 1
+a1934 7
  unlock the list and try the next 
  unlock the list and try the next 
 \change_inserted 0 1291205455
 \change_inserted 0 1291205455
 largest list
 largest list
@@ -3124,19 +3165,19 @@ largest list
 zone.
 zone.
 \change_inserted 0 1291205457
 \change_inserted 0 1291205457
 
 
-a1895 2
+a1937 2
 
 
 \change_inserted 0 1291205476
 \change_inserted 0 1291205476
-a1896 2
+a1938 2
 \change_unchanged
 \change_unchanged
 
 
-a1924 2
+a1966 2
 \change_inserted 0 1291205542
 \change_inserted 0 1291205542
 
 
-a1927 2
+a1969 2
 
 
 \change_inserted 0 1291205591
 \change_inserted 0 1291205591
-a1929 70
+a1971 70
 \change_unchanged
 \change_unchanged
 
 
 \end_layout
 \end_layout
@@ -3207,20 +3248,20 @@ means 0 gives a minimal 65536-byte zone, 15 gives the maximal
 
 
 \change_inserted 0 1291205139
 \change_inserted 0 1291205139
 
 
-d2176 1
-a2176 5
+d2218 1
+a2218 5
         uint32_t 
         uint32_t 
 \change_inserted 0 1291205758
 \change_inserted 0 1291205758
 used_
 used_
 \change_unchanged
 \change_unchanged
 magic : 16,
 magic : 16,
-a2180 4
+a2222 4
 \change_deleted 0 1291205693
 \change_deleted 0 1291205693
                  prev_is_free: 1,
                  prev_is_free: 1,
 \change_unchanged
 \change_unchanged
 
 
-d2188 1
-a2188 7
+d2230 1
+a2230 7
                  top_hash: 1
                  top_hash: 1
 \change_inserted 0 1291205704
 \change_inserted 0 1291205704
 1
 1
@@ -3228,8 +3269,8 @@ a2188 7
 0
 0
 \change_unchanged
 \change_unchanged
 ;
 ;
-d2212 1
-a2212 9
+d2254 1
+a2254 9
         uint
         uint
 \change_inserted 0 1291205725
 \change_inserted 0 1291205725
 64
 64
@@ -3239,10 +3280,10 @@ a2212 9
 _t 
 _t 
 \change_inserted 0 1291205753
 \change_inserted 0 1291205753
 free_magic: 8,
 free_magic: 8,
-a2215 2
+a2257 2
 
 
 \change_inserted 0 1291205746
 \change_inserted 0 1291205746
-a2220 24
+a2262 24
 \change_deleted 0 1291205749
 \change_deleted 0 1291205749
 free_magic;
 free_magic;
 \change_unchanged
 \change_unchanged
@@ -3267,8 +3308,8 @@ total_length
 ;
 ;
 \change_unchanged
 \change_unchanged
 
 
-d2224 1
-a2224 7
+d2266 1
+a2266 7
         uint64_t 
         uint64_t 
 \change_deleted 0 1291205801
 \change_deleted 0 1291205801
 prev, 
 prev, 
@@ -3276,20 +3317,20 @@ prev,
 next;
 next;
 \change_deleted 0 1291205811
 \change_deleted 0 1291205811
 
 
-d2228 1
-a2228 3
+d2270 1
+a2270 3
 
 
 \change_deleted 0 1291205811
 \change_deleted 0 1291205811
         ...
         ...
-d2232 1
-a2232 5
+d2274 1
+a2274 5
 
 
 \change_deleted 0 1291205808
 \change_deleted 0 1291205808
         uint64_t tailer
         uint64_t tailer
 \change_unchanged
 \change_unchanged
 ;
 ;
-d2241 5
-a2245 16
+d2283 5
+a2287 16
 \change_deleted 0 1291205827
 \change_deleted 0 1291205827
 We might want to take some bits from the used record's top_hash (and the
 We might want to take some bits from the used record's top_hash (and the
  free record which has 32 bits of padding to spare anyway) if we use variable
  free record which has 32 bits of padding to spare anyway) if we use variable
@@ -3306,90 +3347,90 @@ reference "freelist-in-zone"
 \change_inserted 0 1291205885
 \change_inserted 0 1291205885
  Note that by limiting valid offsets to 56 bits, we can pack everything
  Note that by limiting valid offsets to 56 bits, we can pack everything
  we need into 3 64-byte words, meaning our minimum record size is 8 bytes.
  we need into 3 64-byte words, meaning our minimum record size is 8 bytes.
-a2248 2
+a2290 2
 
 
 \change_inserted 0 1291205886
 \change_inserted 0 1291205886
-a2252 2
+a2294 2
 
 
 \change_inserted 0 1291205886
 \change_inserted 0 1291205886
-a2253 2
+a2295 2
 \change_unchanged
 \change_unchanged
 
 
-a2343 2
+a2385 2
 \change_inserted 0 1291205894
 \change_inserted 0 1291205894
 
 
-a2346 2
+a2388 2
 
 
 \change_inserted 0 1291205894
 \change_inserted 0 1291205894
-a2350 2
+a2392 2
 
 
 \change_inserted 0 1291205902
 \change_inserted 0 1291205902
-a2351 2
+a2393 2
 \change_unchanged
 \change_unchanged
 
 
-a2373 4
+a2415 4
 
 
 \change_deleted 0 1291204504
 \change_deleted 0 1291204504
  
  
 \change_unchanged
 \change_unchanged
-a2403 2
+a2445 2
 \change_inserted 0 1291205910
 \change_inserted 0 1291205910
 
 
-a2406 2
+a2448 2
 
 
 \change_inserted 0 1291205910
 \change_inserted 0 1291205910
-a2410 2
+a2452 2
 
 
 \change_inserted 0 1291205914
 \change_inserted 0 1291205914
-a2411 2
+a2453 2
 \change_unchanged
 \change_unchanged
 
 
-a2443 2
+a2485 2
 \change_inserted 0 1291205919
 \change_inserted 0 1291205919
 
 
-a2446 2
+a2488 2
 
 
 \change_inserted 0 1291205919
 \change_inserted 0 1291205919
-a2450 2
+a2492 2
 
 
 \change_inserted 0 1291205922
 \change_inserted 0 1291205922
-a2451 2
+a2493 2
 \change_unchanged
 \change_unchanged
 
 
-a2491 2
+a2533 2
 \change_inserted 0 1291205929
 \change_inserted 0 1291205929
 
 
-a2494 2
+a2536 2
 
 
 \change_inserted 0 1291205929
 \change_inserted 0 1291205929
-a2498 2
+a2540 2
 
 
 \change_inserted 0 1291205929
 \change_inserted 0 1291205929
-a2499 2
+a2541 2
 \change_unchanged
 \change_unchanged
 
 
-a2536 2
+a2578 2
 \change_inserted 0 1291205932
 \change_inserted 0 1291205932
 
 
-a2539 2
+a2581 2
 
 
 \change_inserted 0 1291205933
 \change_inserted 0 1291205933
-a2543 2
+a2585 2
 
 
 \change_inserted 0 1291205933
 \change_inserted 0 1291205933
-a2544 2
+a2586 2
 \change_unchanged
 \change_unchanged
 
 
-a2682 2
+a2724 2
 \change_inserted 0 1291205944
 \change_inserted 0 1291205944
 
 
-a2685 2
+a2727 2
 
 
 \change_inserted 0 1291205945
 \change_inserted 0 1291205945
-a2689 2
+a2731 2
 
 
 \change_inserted 0 1291205948
 \change_inserted 0 1291205948
-a2690 2
+a2732 2
 \change_unchanged
 \change_unchanged
 
 
 @
 @