diff --git a/coverage/coverage.out b/coverage/coverage.out index dec1d16..5f9ec7b 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -54,54 +54,6 @@ github.com/echovault/echovault/internal/aof/preamble/store.go:185.43,187.4 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:189.2,189.35 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:189.35,191.3 1 1 github.com/echovault/echovault/internal/aof/preamble/store.go:192.2,192.14 1 1 -github.com/echovault/echovault/internal/aof/engine.go:50.56,51.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:51.30,53.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:56.57,57.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:57.30,59.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:62.59,63.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:63.30,65.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:68.58,69.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:69.30,71.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:74.59,75.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:75.30,77.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:80.82,81.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:81.30,83.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:86.89,87.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:87.30,89.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:92.73,93.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:93.30,95.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:98.82,99.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:99.30,101.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:104.78,105.30 1 1 -github.com/echovault/echovault/internal/aof/engine.go:105.30,107.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:110.69,118.29 1 1 -github.com/echovault/echovault/internal/aof/engine.go:118.30,118.31 0 0 -github.com/echovault/echovault/internal/aof/engine.go:119.30,119.31 0 0 -github.com/echovault/echovault/internal/aof/engine.go:120.57,120.71 1 0 -github.com/echovault/echovault/internal/aof/engine.go:121.63,121.64 0 0 -github.com/echovault/echovault/internal/aof/engine.go:122.44,122.45 0 0 -github.com/echovault/echovault/internal/aof/engine.go:127.2,127.33 1 1 -github.com/echovault/echovault/internal/aof/engine.go:127.33,129.3 1 1 -github.com/echovault/echovault/internal/aof/engine.go:132.2,139.16 2 1 -github.com/echovault/echovault/internal/aof/engine.go:139.16,141.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:142.2,152.16 3 1 -github.com/echovault/echovault/internal/aof/engine.go:152.16,154.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:155.2,159.12 2 1 -github.com/echovault/echovault/internal/aof/engine.go:159.12,160.7 1 1 -github.com/echovault/echovault/internal/aof/engine.go:160.7,162.54 2 1 -github.com/echovault/echovault/internal/aof/engine.go:162.54,164.5 1 0 -github.com/echovault/echovault/internal/aof/engine.go:168.2,168.20 1 1 -github.com/echovault/echovault/internal/aof/engine.go:171.52,173.2 1 1 -github.com/echovault/echovault/internal/aof/engine.go:175.42,183.62 5 1 -github.com/echovault/echovault/internal/aof/engine.go:183.62,185.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:188.2,188.54 1 1 -github.com/echovault/echovault/internal/aof/engine.go:188.54,190.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:192.2,192.12 1 1 -github.com/echovault/echovault/internal/aof/engine.go:195.39,196.55 1 1 -github.com/echovault/echovault/internal/aof/engine.go:196.55,198.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:199.2,199.53 1 1 -github.com/echovault/echovault/internal/aof/engine.go:199.53,201.3 1 0 -github.com/echovault/echovault/internal/aof/engine.go:202.2,202.12 1 1 github.com/echovault/echovault/internal/aof/log/store.go:46.60,47.34 1 1 github.com/echovault/echovault/internal/aof/log/store.go:47.34,49.3 1 1 github.com/echovault/echovault/internal/aof/log/store.go:52.61,53.34 1 1 @@ -157,6 +109,54 @@ github.com/echovault/echovault/internal/aof/log/store.go:191.2,191.47 1 0 github.com/echovault/echovault/internal/aof/log/store.go:191.47,193.3 1 0 github.com/echovault/echovault/internal/aof/log/store.go:194.2,194.12 1 0 github.com/echovault/echovault/internal/aof/log/store.go:197.41,201.2 3 1 +github.com/echovault/echovault/internal/aof/engine.go:50.56,51.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:51.30,53.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:56.57,57.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:57.30,59.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:62.59,63.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:63.30,65.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:68.58,69.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:69.30,71.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:74.59,75.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:75.30,77.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:80.82,81.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:81.30,83.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:86.89,87.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:87.30,89.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:92.73,93.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:93.30,95.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:98.82,99.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:99.30,101.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:104.78,105.30 1 1 +github.com/echovault/echovault/internal/aof/engine.go:105.30,107.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:110.69,118.29 1 1 +github.com/echovault/echovault/internal/aof/engine.go:118.30,118.31 0 0 +github.com/echovault/echovault/internal/aof/engine.go:119.30,119.31 0 0 +github.com/echovault/echovault/internal/aof/engine.go:120.57,120.71 1 0 +github.com/echovault/echovault/internal/aof/engine.go:121.63,121.64 0 0 +github.com/echovault/echovault/internal/aof/engine.go:122.44,122.45 0 0 +github.com/echovault/echovault/internal/aof/engine.go:127.2,127.33 1 1 +github.com/echovault/echovault/internal/aof/engine.go:127.33,129.3 1 1 +github.com/echovault/echovault/internal/aof/engine.go:132.2,139.16 2 1 +github.com/echovault/echovault/internal/aof/engine.go:139.16,141.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:142.2,152.16 3 1 +github.com/echovault/echovault/internal/aof/engine.go:152.16,154.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:155.2,159.12 2 1 +github.com/echovault/echovault/internal/aof/engine.go:159.12,160.7 1 1 +github.com/echovault/echovault/internal/aof/engine.go:160.7,162.54 2 1 +github.com/echovault/echovault/internal/aof/engine.go:162.54,164.5 1 0 +github.com/echovault/echovault/internal/aof/engine.go:168.2,168.20 1 1 +github.com/echovault/echovault/internal/aof/engine.go:171.52,173.2 1 1 +github.com/echovault/echovault/internal/aof/engine.go:175.42,183.62 5 1 +github.com/echovault/echovault/internal/aof/engine.go:183.62,185.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:188.2,188.54 1 1 +github.com/echovault/echovault/internal/aof/engine.go:188.54,190.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:192.2,192.12 1 1 +github.com/echovault/echovault/internal/aof/engine.go:195.39,196.55 1 1 +github.com/echovault/echovault/internal/aof/engine.go:196.55,198.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:199.2,199.53 1 1 +github.com/echovault/echovault/internal/aof/engine.go:199.53,201.3 1 0 +github.com/echovault/echovault/internal/aof/engine.go:202.2,202.12 1 1 github.com/echovault/echovault/internal/eviction/lfu.go:35.29,42.2 3 1 github.com/echovault/echovault/internal/eviction/lfu.go:44.34,46.2 1 1 github.com/echovault/echovault/internal/eviction/lfu.go:48.44,50.54 1 1 @@ -634,184 +634,144 @@ github.com/echovault/echovault/internal/modules/connection/commands.go:28.9,29.3 github.com/echovault/echovault/internal/modules/connection/commands.go:30.9,31.94 1 1 github.com/echovault/echovault/internal/modules/connection/commands.go:35.36,45.84 1 1 github.com/echovault/echovault/internal/modules/connection/commands.go:45.84,51.5 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:32.67,34.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:34.16,36.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:38.2,44.16 6 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:44.16,46.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:50.2,50.17 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:50.17,51.45 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:51.45,53.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:53.9,55.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:58.2,58.45 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:58.45,60.45 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:60.45,62.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:63.3,63.47 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:64.8,64.52 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:64.52,66.44 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:66.44,68.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:69.3,69.56 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:70.8,72.45 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:72.45,75.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:75.9,78.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:80.2,80.16 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:80.16,82.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:83.2,85.87 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:85.87,87.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:90.2,90.29 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:90.29,92.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:94.2,94.17 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:97.68,99.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:99.16,101.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:103.2,106.15 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:106.15,107.29 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:107.29,108.16 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:108.16,114.5 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:119.2,119.41 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:119.41,120.15 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:120.15,125.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:130.2,130.28 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:130.28,131.42 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:131.42,132.63 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:132.63,134.5 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:135.4,136.12 2 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:138.3,138.71 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:138.71,140.4 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:141.3,141.55 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:145.2,145.28 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:145.28,146.69 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:146.69,148.4 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:151.2,151.42 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:33.67,35.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:35.16,37.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:39.2,46.16 7 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:46.16,48.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:52.2,52.17 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:52.17,53.17 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:53.17,55.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:55.9,57.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:60.2,60.45 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:60.45,62.17 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:62.17,64.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:65.8,65.52 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:65.52,67.16 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:67.16,69.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:72.2,74.17 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:74.17,76.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:79.2,79.29 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:79.29,81.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:83.2,83.17 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:86.68,88.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:88.16,90.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:92.2,95.41 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:95.41,96.15 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:96.15,98.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:102.2,102.65 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:102.65,104.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:106.2,106.42 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:109.67,111.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:111.16,113.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:114.2,117.16 3 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:117.16,119.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:121.2,123.51 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:126.68,128.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:128.16,130.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:132.2,133.74 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:133.74,134.19 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:134.19,136.12 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:138.3,138.41 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:141.2,143.41 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:143.41,144.24 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:144.24,146.12 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:148.3,148.96 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:151.2,151.19 1 1 github.com/echovault/echovault/internal/modules/generic/commands.go:154.67,156.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:156.16,158.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:159.2,161.44 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:161.44,163.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:165.2,166.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:166.16,168.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:169.2,173.51 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:176.68,178.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:178.16,180.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:182.2,185.36 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:185.36,186.31 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:186.31,188.12 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:190.3,190.44 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:190.44,192.18 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:192.18,194.5 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:195.4,196.12 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:198.3,198.19 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:200.2,200.15 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:200.15,201.34 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:201.34,202.14 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:202.14,205.5 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:209.2,209.28 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:209.28,211.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:213.2,215.41 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:215.41,216.24 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:216.24,218.12 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:220.3,220.96 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:223.2,223.19 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:226.67,228.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:228.16,230.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:231.2,232.37 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:232.37,234.17 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:234.17,236.12 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:238.3,238.13 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:240.2,240.51 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:243.71,245.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:245.16,247.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:249.2,251.44 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:251.44,253.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:255.2,255.62 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:255.62,257.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:258.2,261.31 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:261.31,263.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:265.2,267.30 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:270.74,272.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:272.16,274.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:276.2,278.44 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:278.44,280.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:282.2,282.63 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:282.63,284.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:285.2,289.31 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:289.31,291.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:293.2,294.57 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:294.57,296.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:298.2,298.47 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:301.67,303.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:303.16,305.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:307.2,311.44 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:311.44,313.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:315.2,315.63 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:315.63,317.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:318.2,322.31 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:322.31,324.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:326.2,327.50 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:327.50,329.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:331.2,331.12 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:331.12,333.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:335.2,335.47 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:338.70,340.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:340.16,342.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:344.2,348.16 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:348.16,350.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:351.2,352.53 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:352.53,354.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:356.2,356.44 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:356.44,358.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:360.2,360.62 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:360.62,362.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:363.2,365.30 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:365.30,368.3 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:370.2,372.44 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:373.12,374.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:374.39,376.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:156.16,158.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:159.2,160.60 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:160.60,161.14 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:161.14,162.12 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:164.3,165.17 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:165.17,167.12 2 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:169.3,169.13 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:171.2,171.51 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:174.71,176.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:176.16,178.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:180.2,183.16 3 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:183.16,185.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:187.2,188.31 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:188.31,190.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:192.2,194.30 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:197.74,199.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:199.16,201.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:203.2,206.16 3 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:206.16,208.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:210.2,212.31 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:212.31,214.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:216.2,217.57 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:217.57,219.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:221.2,221.47 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:224.67,226.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:226.16,228.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:230.2,235.16 4 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:235.16,237.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:239.2,241.31 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:241.31,243.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:245.2,246.50 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:246.50,248.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:250.2,250.12 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:250.12,252.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:254.2,254.47 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:257.70,259.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:259.16,261.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:263.2,268.16 4 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:268.16,270.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:271.2,272.53 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:272.53,274.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:276.2,276.16 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:276.16,278.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:280.2,280.30 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:280.30,283.3 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:285.2,287.44 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:288.12,289.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:289.39,291.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:292.3,292.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:293.12,294.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:294.39,296.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:297.3,297.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:298.12,299.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:299.39,301.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:302.3,302.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:302.39,304.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:305.3,305.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:306.12,307.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:307.39,308.40 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:308.40,310.5 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:311.4,311.58 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:313.3,313.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:314.10,315.82 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:318.2,318.30 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:321.72,323.16 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:323.16,325.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:327.2,332.16 4 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:332.16,334.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:335.2,336.55 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:336.55,338.3 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:340.2,340.16 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:340.16,342.3 1 0 +github.com/echovault/echovault/internal/modules/generic/commands.go:344.2,344.30 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:344.30,347.3 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:349.2,351.44 2 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:352.12,353.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:353.39,355.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:356.3,356.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:357.12,358.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:358.39,360.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:361.3,361.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:362.12,363.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:363.39,365.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:366.3,366.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:366.39,368.4 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:369.3,369.57 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:370.12,371.39 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:371.39,372.40 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:372.40,374.5 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:375.4,375.58 1 1 github.com/echovault/echovault/internal/modules/generic/commands.go:377.3,377.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:378.12,379.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:379.39,381.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:382.3,382.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:383.12,384.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:384.39,386.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:387.3,387.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:387.39,389.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:390.3,390.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:391.12,392.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:392.39,393.40 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:393.40,395.5 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:396.4,396.58 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:398.3,398.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:399.10,400.82 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:403.2,403.30 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:406.72,408.16 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:408.16,410.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:412.2,416.16 3 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:416.16,418.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:419.2,420.55 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:420.55,422.3 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:424.2,424.44 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:424.44,426.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:428.2,428.62 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:428.62,430.3 1 0 -github.com/echovault/echovault/internal/modules/generic/commands.go:431.2,433.30 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:433.30,436.3 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:438.2,440.44 2 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:441.12,442.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:442.39,444.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:445.3,445.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:446.12,447.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:447.39,449.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:450.3,450.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:451.12,452.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:452.39,454.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:455.3,455.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:455.39,457.4 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:458.3,458.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:459.12,460.39 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:460.39,461.40 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:461.40,463.5 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:464.4,464.58 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:466.3,466.57 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:467.10,468.82 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:471.2,471.30 1 1 -github.com/echovault/echovault/internal/modules/generic/commands.go:474.36,643.2 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:378.10,379.82 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:382.2,382.30 1 1 +github.com/echovault/echovault/internal/modules/generic/commands.go:385.36,554.2 1 1 github.com/echovault/echovault/internal/modules/generic/key_funcs.go:23.73,24.34 1 1 github.com/echovault/echovault/internal/modules/generic/key_funcs.go:24.34,26.3 1 1 github.com/echovault/echovault/internal/modules/generic/key_funcs.go:27.2,31.8 1 1 @@ -842,9 +802,9 @@ github.com/echovault/echovault/internal/modules/generic/key_funcs.go:110.2,114.8 github.com/echovault/echovault/internal/modules/generic/key_funcs.go:117.76,118.34 1 1 github.com/echovault/echovault/internal/modules/generic/key_funcs.go:118.34,120.3 1 1 github.com/echovault/echovault/internal/modules/generic/key_funcs.go:121.2,125.8 1 1 -github.com/echovault/echovault/internal/modules/generic/key_funcs.go:128.78,129.34 1 0 -github.com/echovault/echovault/internal/modules/generic/key_funcs.go:129.34,131.3 1 0 -github.com/echovault/echovault/internal/modules/generic/key_funcs.go:132.2,136.8 1 0 +github.com/echovault/echovault/internal/modules/generic/key_funcs.go:128.78,129.34 1 1 +github.com/echovault/echovault/internal/modules/generic/key_funcs.go:129.34,131.3 1 1 +github.com/echovault/echovault/internal/modules/generic/key_funcs.go:132.2,136.8 1 1 github.com/echovault/echovault/internal/modules/generic/utils.go:32.100,33.19 1 1 github.com/echovault/echovault/internal/modules/generic/utils.go:33.19,35.3 1 1 github.com/echovault/echovault/internal/modules/generic/utils.go:36.2,36.33 1 1 @@ -885,237 +845,213 @@ github.com/echovault/echovault/internal/modules/generic/utils.go:109.17,111.4 1 github.com/echovault/echovault/internal/modules/generic/utils.go:112.3,113.55 2 1 github.com/echovault/echovault/internal/modules/generic/utils.go:115.10,116.96 1 1 github.com/echovault/echovault/internal/modules/hash/commands.go:28.68,30.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:30.16,32.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:34.2,37.36 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:37.36,39.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:41.2,41.49 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:41.49,43.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:45.2,45.44 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:45.44,47.17 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:30.16,32.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:34.2,38.36 4 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:38.36,40.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:42.2,42.49 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:42.49,44.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:46.2,46.16 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:46.16,47.17 1 1 github.com/echovault/echovault/internal/modules/hash/commands.go:47.17,49.4 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:50.3,51.70 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:51.70,53.4 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:54.3,54.59 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:57.2,57.62 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:57.62,59.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:60.2,63.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:63.9,65.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:67.2,68.36 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:68.36,69.53 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:69.53,70.26 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:70.26,73.5 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:74.4,74.12 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:76.3,77.13 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:79.2,79.66 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:79.66,81.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:83.2,83.51 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:86.68,88.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:88.16,90.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:92.2,95.44 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:95.44,97.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:99.2,99.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:99.63,101.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:102.2,105.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:105.9,107.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:109.2,112.31 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:112.31,114.19 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:114.19,116.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:118.3,118.34 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:118.34,120.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:122.3,122.31 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:122.31,124.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:126.3,126.35 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:126.35,129.12 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:131.3,131.32 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:134.2,134.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:137.71,139.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:139.16,141.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:143.2,146.44 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:146.44,148.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:150.2,150.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:150.63,152.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:153.2,156.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:156.9,158.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:160.2,163.31 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:163.31,165.19 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:165.19,167.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:169.3,169.34 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:169.34,171.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:173.3,173.35 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:173.35,176.12 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:178.3,178.31 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:178.31,180.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:182.3,182.18 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:185.2,185.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:188.69,190.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:190.16,192.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:194.2,196.44 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:196.44,198.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:200.2,200.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:200.63,202.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:203.2,206.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:206.9,208.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:210.2,211.27 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:211.27,212.32 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:212.32,214.12 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:216.3,216.33 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:216.33,219.12 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:221.3,221.29 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:221.29,223.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:226.2,226.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:229.74,231.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:231.16,233.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:235.2,238.30 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:238.30,240.17 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:240.17,242.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:243.3,243.13 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:243.13,245.4 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:246.3,246.12 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:249.2,250.30 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:250.30,251.57 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:251.57,253.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:253.9,255.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:258.2,258.44 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:258.44,260.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:262.2,262.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:262.63,264.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:265.2,268.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:268.9,270.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:273.2,273.24 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:273.24,275.17 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:275.17,277.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:278.3,278.34 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:278.34,280.18 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:280.18,281.36 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:281.36,283.14 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:285.5,285.37 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:285.37,288.14 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:290.5,290.33 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:290.33,292.14 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:296.3,296.26 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:300.2,301.29 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:301.29,303.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:306.2,308.46 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:308.46,312.16 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:312.16,313.59 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:313.59,315.5 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:319.2,320.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:320.16,322.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:323.2,323.38 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:323.38,325.17 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:325.17,326.41 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:326.41,328.13 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:330.4,330.42 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:330.42,333.13 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:335.4,335.38 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:335.38,337.13 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:342.2,342.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:345.68,347.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:347.16,349.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:351.2,353.44 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:353.44,355.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:357.2,357.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:357.63,359.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:360.2,363.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:363.9,365.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:367.2,367.55 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:370.69,372.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:372.16,374.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:376.2,378.44 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:378.44,380.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:382.2,382.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:382.63,384.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:385.2,388.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:388.9,390.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:392.2,393.29 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:393.29,395.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:397.2,397.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:400.71,402.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:402.16,404.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:406.2,412.58 5 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:412.58,414.17 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:414.17,416.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:417.3,417.21 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:418.8,420.17 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:420.17,422.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:423.3,423.19 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:426.2,426.44 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:426.44,427.73 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:427.73,429.4 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:430.3,432.59 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:432.59,434.68 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:434.68,436.5 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:437.4,437.96 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:438.9,440.68 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:440.68,442.5 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:443.4,443.60 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:447.2,447.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:447.63,449.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:450.2,453.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:453.9,455.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:457.2,457.24 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:457.24,459.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:461.2,461.28 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:462.10,463.69 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:464.11,466.59 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:466.59,468.4 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:468.9,470.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:471.15,473.59 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:473.59,475.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:475.9,477.4 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:480.2,480.66 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:480.66,482.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:484.2,484.40 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:484.40,486.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:488.2,489.47 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:492.71,494.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:494.16,496.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:498.2,500.44 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:500.44,502.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:504.2,504.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:504.63,506.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:507.2,510.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:510.9,512.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:514.2,515.33 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:515.33,517.34 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:517.34,519.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:520.3,520.35 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:520.35,523.4 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:524.3,524.31 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:524.31,526.4 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:529.2,529.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:532.71,534.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:534.16,536.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:538.2,541.44 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:541.44,543.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:545.2,545.63 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:545.63,547.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:548.2,551.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:551.9,553.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:555.2,555.24 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:555.24,557.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:559.2,559.30 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:562.68,564.16 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:564.16,566.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:568.2,571.44 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:571.44,573.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:575.2,575.62 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:575.62,577.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:578.2,581.9 3 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:581.9,583.3 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:585.2,587.31 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:587.31,588.25 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:588.25,591.4 2 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:594.2,594.66 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:594.66,596.3 1 0 -github.com/echovault/echovault/internal/modules/hash/commands.go:598.2,598.51 1 1 -github.com/echovault/echovault/internal/modules/hash/commands.go:601.36,725.2 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:50.3,50.95 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:50.95,52.4 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:53.3,53.59 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:56.2,57.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:57.9,59.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:61.2,62.36 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:62.36,63.53 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:63.53,64.26 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:64.26,67.5 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:68.4,68.12 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:70.3,71.13 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:73.2,73.91 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:73.91,75.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:77.2,77.51 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:80.68,82.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:82.16,84.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:86.2,90.16 4 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:90.16,92.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:94.2,95.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:95.9,97.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:99.2,102.31 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:102.31,104.19 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:104.19,106.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:108.3,108.34 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:108.34,110.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:112.3,112.31 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:112.31,114.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:116.3,116.35 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:116.35,119.12 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:121.3,121.32 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:124.2,124.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:127.71,129.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:129.16,131.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:133.2,137.16 4 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:137.16,139.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:141.2,142.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:142.9,144.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:146.2,149.31 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:149.31,151.19 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:151.19,153.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:155.3,155.34 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:155.34,157.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:159.3,159.35 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:159.35,162.12 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:164.3,164.31 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:164.31,166.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:168.3,168.18 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:171.2,171.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:174.69,176.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:176.16,178.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:180.2,183.16 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:183.16,185.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:187.2,188.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:188.9,190.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:192.2,193.27 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:193.27,194.32 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:194.32,196.12 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:198.3,198.33 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:198.33,201.12 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:203.3,203.29 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:203.29,205.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:208.2,208.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:211.74,213.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:213.16,215.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:217.2,221.30 4 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:221.30,223.17 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:223.17,225.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:226.3,226.13 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:226.13,228.4 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:229.3,229.12 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:232.2,233.30 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:233.30,234.57 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:234.57,236.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:236.9,238.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:241.2,241.16 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:241.16,243.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:245.2,246.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:246.9,248.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:251.2,251.24 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:251.24,253.17 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:253.17,255.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:256.3,256.34 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:256.34,258.18 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:258.18,259.36 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:259.36,261.14 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:263.5,263.37 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:263.37,266.14 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:268.5,268.33 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:268.33,270.14 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:274.3,274.26 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:278.2,279.29 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:279.29,281.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:284.2,286.46 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:286.46,290.16 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:290.16,291.59 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:291.59,293.5 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:297.2,298.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:298.16,300.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:301.2,301.38 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:301.38,303.17 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:303.17,304.41 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:304.41,306.13 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:308.4,308.42 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:308.42,311.13 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:313.4,313.38 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:313.38,315.13 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:320.2,320.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:323.68,325.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:325.16,327.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:329.2,332.16 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:332.16,334.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:336.2,337.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:337.9,339.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:341.2,341.55 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:344.69,346.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:346.16,348.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:350.2,353.16 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:353.16,355.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:357.2,358.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:358.9,360.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:362.2,363.29 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:363.29,365.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:367.2,367.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:370.71,372.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:372.16,374.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:376.2,383.58 6 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:383.58,385.17 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:385.17,387.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:388.3,388.21 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:389.8,391.17 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:391.17,393.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:394.3,394.19 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:397.2,397.16 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:397.16,399.59 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:399.59,401.93 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:401.93,403.5 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:404.4,404.96 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:405.9,407.93 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:407.93,409.5 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:410.4,410.60 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:414.2,415.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:415.9,417.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:419.2,419.24 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:419.24,421.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:423.2,423.28 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:424.10,425.69 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:426.11,428.59 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:428.59,430.4 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:430.9,432.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:433.15,435.59 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:435.59,437.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:437.9,439.4 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:442.2,442.91 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:442.91,444.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:446.2,446.40 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:446.40,448.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:450.2,451.47 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:454.71,456.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:456.16,458.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:460.2,463.16 3 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:463.16,465.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:467.2,468.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:468.9,470.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:472.2,473.33 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:473.33,475.34 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:475.34,477.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:478.3,478.35 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:478.35,481.4 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:482.3,482.31 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:482.31,484.4 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:487.2,487.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:490.71,492.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:492.16,494.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:496.2,500.16 4 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:500.16,502.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:504.2,505.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:505.9,507.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:509.2,509.24 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:509.24,511.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:513.2,513.30 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:516.68,518.16 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:518.16,520.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:522.2,526.16 4 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:526.16,528.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:530.2,531.9 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:531.9,533.3 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:535.2,537.31 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:537.31,538.25 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:538.25,541.4 2 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:544.2,544.91 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:544.91,546.3 1 0 +github.com/echovault/echovault/internal/modules/hash/commands.go:548.2,548.51 1 1 +github.com/echovault/echovault/internal/modules/hash/commands.go:551.36,675.2 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:23.74,24.18 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:24.18,26.3 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:27.2,31.8 1 1 -github.com/echovault/echovault/internal/modules/hash/key_funcs.go:34.76,35.18 1 0 +github.com/echovault/echovault/internal/modules/hash/key_funcs.go:34.76,35.18 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:35.18,37.3 1 0 -github.com/echovault/echovault/internal/modules/hash/key_funcs.go:38.2,42.8 1 0 +github.com/echovault/echovault/internal/modules/hash/key_funcs.go:38.2,42.8 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:45.74,46.18 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:46.18,48.3 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:49.2,53.8 1 1 @@ -1149,194 +1085,167 @@ github.com/echovault/echovault/internal/modules/hash/key_funcs.go:151.74,152.18 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:152.18,154.3 1 1 github.com/echovault/echovault/internal/modules/hash/key_funcs.go:155.2,159.8 1 1 github.com/echovault/echovault/internal/modules/list/commands.go:27.68,29.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:29.16,31.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:33.2,35.44 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:35.44,38.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:40.2,40.63 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:40.63,42.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:43.2,45.74 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:45.74,47.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:49.2,49.57 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:52.70,54.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:54.16,56.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:58.2,61.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:61.9,63.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:65.2,65.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:65.44,67.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:69.2,69.63 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:69.63,71.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:72.2,75.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:75.9,77.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:79.2,79.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:79.40,81.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:83.2,83.57 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:86.70,88.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:88.16,90.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:92.2,96.24 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:96.24,98.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:100.2,100.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:100.44,102.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:104.2,104.63 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:104.63,106.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:107.2,110.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:110.9,112.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:115.2,115.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:115.40,117.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:120.2,120.51 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:120.51,122.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:124.2,127.15 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:127.15,129.43 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:129.43,132.4 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:133.3,133.20 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:137.2,137.18 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:137.18,139.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:144.2,148.17 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:148.17,150.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:152.2,152.13 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:152.13,155.18 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:155.18,157.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:157.9,159.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:162.2,162.19 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:165.68,167.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:29.16,31.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:33.2,36.16 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:36.16,39.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:41.2,41.90 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:41.90,43.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:45.2,45.57 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:48.70,50.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:50.16,52.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:54.2,58.9 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:58.9,60.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:62.2,62.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:62.16,64.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:66.2,67.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:67.9,69.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:71.2,71.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:71.40,73.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:75.2,75.57 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:78.70,80.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:80.16,82.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:84.2,89.24 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:89.24,91.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:93.2,93.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:93.16,95.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:97.2,98.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:98.9,100.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:103.2,103.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:103.40,105.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:108.2,108.51 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:108.51,110.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:112.2,115.15 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:115.15,117.43 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:117.43,120.4 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:121.3,121.20 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:125.2,125.18 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:125.18,127.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:132.2,136.17 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:136.17,138.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:140.2,140.13 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:140.13,143.18 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:143.18,145.4 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:145.9,147.4 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:150.2,150.19 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:153.68,155.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:155.16,157.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:159.2,163.9 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:163.9,165.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:167.2,167.16 1 1 github.com/echovault/echovault/internal/modules/list/commands.go:167.16,169.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:171.2,174.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:174.9,176.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:178.2,178.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:178.44,180.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:182.2,182.62 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:182.62,184.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:185.2,188.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:188.9,190.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:192.2,192.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:192.40,194.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:196.2,197.66 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:197.66,199.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:201.2,201.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:204.69,206.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:206.16,208.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:210.2,214.24 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:214.24,216.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:218.2,218.30 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:218.30,220.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:222.2,222.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:222.44,224.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:226.2,226.62 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:226.62,228.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:229.2,232.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:232.9,234.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:236.2,236.40 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:236.40,238.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:240.2,240.34 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:240.34,241.75 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:241.75,243.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:244.3,244.43 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:247.2,247.77 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:247.77,249.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:250.2,250.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:253.68,255.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:255.16,257.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:259.2,263.9 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:263.9,265.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:267.2,269.44 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:269.44,271.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:273.2,273.62 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:273.62,275.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:276.2,279.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:279.9,281.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:283.2,283.9 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:284.10,284.10 0 0 -github.com/echovault/echovault/internal/modules/list/commands.go:286.17,288.34 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:288.34,289.26 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:289.26,290.10 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:292.4,292.43 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:292.43,295.5 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:297.17,299.39 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:299.39,300.26 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:300.26,301.10 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:303.4,303.43 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:303.43,306.5 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:310.2,310.61 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:310.61,312.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:314.2,314.66 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:314.66,316.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:318.2,318.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:321.69,323.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:323.16,325.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:327.2,331.116 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:331.116,333.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:335.2,335.97 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:335.97,337.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:339.2,339.65 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:339.65,341.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:342.2,345.16 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:345.16,347.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:348.2,353.33 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:353.33,355.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:357.2,357.19 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:358.14,360.24 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:360.24,362.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:362.9,362.32 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:362.32,364.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:365.15,367.24 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:367.24,369.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:369.9,369.32 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:369.32,371.4 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:374.2,374.16 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:374.16,376.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:378.2,378.42 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:381.69,383.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:383.16,385.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:387.2,389.42 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:389.42,391.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:393.2,395.44 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:395.44,396.45 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:397.17,398.61 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:399.11,400.73 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:400.73,402.5 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:403.4,403.79 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:403.79,405.5 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:407.8,408.63 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:408.63,410.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:412.2,417.9 4 1 -github.com/echovault/echovault/internal/modules/list/commands.go:417.9,419.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:421.2,421.84 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:421.84,423.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:424.2,424.66 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:427.69,429.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:429.16,431.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:433.2,437.42 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:437.42,439.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:441.2,441.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:441.44,442.45 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:443.17,444.61 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:445.11,446.73 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:446.73,448.5 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:449.4,450.79 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:450.79,452.5 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:454.8,455.63 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:455.63,457.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:458.3,458.46 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:461.2,465.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:465.9,467.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:469.2,469.84 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:469.84,471.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:472.2,472.66 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:475.67,477.16 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:477.16,479.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:481.2,483.44 2 1 -github.com/echovault/echovault/internal/modules/list/commands.go:483.44,485.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:487.2,487.62 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:487.62,489.3 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:490.2,493.9 3 1 -github.com/echovault/echovault/internal/modules/list/commands.go:493.9,495.3 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:497.2,497.44 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:498.10,499.71 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:499.71,501.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:502.3,502.54 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:503.14,504.81 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:504.81,506.4 1 0 -github.com/echovault/echovault/internal/modules/list/commands.go:507.3,507.64 1 1 -github.com/echovault/echovault/internal/modules/list/commands.go:511.36,634.2 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:171.2,172.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:172.9,174.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:176.2,176.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:176.40,178.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:180.2,181.91 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:181.91,183.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:185.2,185.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:188.69,190.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:190.16,192.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:194.2,199.24 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:199.24,201.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:203.2,203.30 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:203.30,205.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:207.2,207.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:207.16,209.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:211.2,212.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:212.9,214.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:216.2,216.40 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:216.40,218.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:220.2,220.34 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:220.34,221.100 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:221.100,223.4 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:224.3,224.43 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:227.2,227.102 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:227.102,229.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:230.2,230.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:233.68,235.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:235.16,237.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:239.2,244.9 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:244.9,246.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:248.2,250.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:250.16,252.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:254.2,255.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:255.9,257.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:259.2,259.9 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:260.10,260.10 0 0 +github.com/echovault/echovault/internal/modules/list/commands.go:262.17,264.34 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:264.34,265.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:265.26,266.10 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:268.4,268.43 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:268.43,271.5 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:273.17,275.39 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:275.39,276.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:276.26,277.10 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:279.4,279.43 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:279.43,282.5 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:286.2,286.61 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:286.61,288.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:290.2,290.91 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:290.91,292.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:294.2,294.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:297.69,299.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:299.16,301.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:303.2,308.116 5 1 +github.com/echovault/echovault/internal/modules/list/commands.go:308.116,310.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:312.2,312.51 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:312.51,314.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:316.2,320.33 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:320.33,322.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:324.2,324.19 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:325.14,328.38 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:328.38,329.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:329.26,331.6 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:333.5,333.50 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:336.15,339.38 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:339.38,340.26 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:340.26,342.6 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:344.5,344.66 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:349.2,349.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:349.16,351.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:353.2,353.42 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:356.69,358.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:358.16,360.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:362.2,364.42 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:364.42,366.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:368.2,371.16 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:371.16,372.45 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:373.17,374.64 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:375.11,376.104 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:376.104,378.5 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:382.2,384.9 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:384.9,386.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:388.2,388.109 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:388.109,390.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:392.2,392.66 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:395.69,397.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:397.16,399.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:401.2,406.42 4 1 +github.com/echovault/echovault/internal/modules/list/commands.go:406.42,408.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:410.2,410.16 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:410.16,411.45 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:412.17,413.64 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:414.11,415.104 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:415.104,417.5 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:421.2,423.9 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:423.9,425.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:427.2,427.109 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:427.109,429.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:430.2,430.66 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:433.67,435.16 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:435.16,437.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:439.2,442.16 3 1 +github.com/echovault/echovault/internal/modules/list/commands.go:442.16,444.3 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:446.2,447.9 2 1 +github.com/echovault/echovault/internal/modules/list/commands.go:447.9,449.3 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:451.2,451.44 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:452.10,453.96 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:453.96,455.4 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:456.3,456.54 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:457.14,458.106 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:458.106,460.4 1 0 +github.com/echovault/echovault/internal/modules/list/commands.go:461.3,461.64 1 1 +github.com/echovault/echovault/internal/modules/list/commands.go:465.36,588.2 1 1 github.com/echovault/echovault/internal/modules/list/key_funcs.go:23.75,24.18 1 1 github.com/echovault/echovault/internal/modules/list/key_funcs.go:24.18,26.3 1 1 github.com/echovault/echovault/internal/modules/list/key_funcs.go:27.2,31.8 1 1 @@ -1518,1506 +1427,6 @@ github.com/echovault/echovault/internal/modules/pubsub/pubsub.go:263.2,263.20 1 github.com/echovault/echovault/internal/modules/pubsub/pubsub.go:266.47,271.38 4 1 github.com/echovault/echovault/internal/modules/pubsub/pubsub.go:271.38,273.3 1 1 github.com/echovault/echovault/internal/modules/pubsub/pubsub.go:275.2,275.17 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:26.68,28.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:28.16,30.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:32.2,36.44 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:36.44,38.81 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:38.81,40.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:41.3,41.66 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:41.66,43.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:44.3,45.70 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:48.2,48.62 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:48.62,50.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:51.2,54.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:54.9,56.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:58.2,60.51 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:63.69,65.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:65.16,67.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:69.2,71.44 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:71.44,73.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:75.2,75.63 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:75.63,77.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:78.2,81.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:81.9,83.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:85.2,87.57 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:90.69,92.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:92.16,94.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:97.2,97.57 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:97.57,99.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:100.2,100.76 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:100.76,102.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:103.2,105.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:105.9,107.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:109.2,110.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:110.15,111.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:111.34,112.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:112.14,114.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:118.2,118.40 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:118.40,119.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:119.45,120.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:122.3,122.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:122.64,123.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:125.3,125.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:128.2,129.41 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:129.41,131.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:131.10,132.12 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:134.3,134.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:137.2,141.26 4 1 -github.com/echovault/echovault/internal/modules/set/commands.go:141.26,143.24 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:143.24,145.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:148.2,148.25 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:151.74,153.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:153.16,155.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:157.2,160.57 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:160.57,162.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:163.2,163.77 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:163.77,165.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:166.2,168.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:168.9,170.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:172.2,173.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:173.15,174.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:174.34,175.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:175.14,177.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:181.2,181.40 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:181.40,182.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:182.45,183.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:185.3,185.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:185.64,186.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:188.3,188.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:191.2,192.40 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:192.40,194.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:194.10,195.12 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:197.3,197.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:200.2,205.51 4 1 -github.com/echovault/echovault/internal/modules/set/commands.go:205.51,206.71 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:206.71,208.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:209.3,209.75 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:209.75,211.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:212.3,213.26 2 0 -github.com/echovault/echovault/internal/modules/set/commands.go:216.2,216.79 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:216.79,218.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:219.2,219.74 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:219.74,221.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:222.2,224.25 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:227.70,229.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:229.16,231.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:233.2,234.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:234.15,235.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:235.34,236.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:236.14,238.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:242.2,242.36 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:242.36,243.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:243.45,246.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:247.3,247.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:247.64,249.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:250.3,250.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:253.2,255.28 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:255.28,257.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:257.10,260.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:261.3,261.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:264.2,264.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:264.20,266.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:268.2,272.26 4 1 -github.com/echovault/echovault/internal/modules/set/commands.go:272.26,274.24 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:274.24,276.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:279.2,279.25 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:282.74,284.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:284.16,286.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:289.2,290.67 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:290.67,292.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:293.2,293.35 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:293.35,295.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:296.2,296.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:296.20,298.38 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:298.38,300.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:302.3,302.71 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:302.71,304.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:304.9,306.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:309.2,310.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:310.15,311.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:311.34,312.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:312.14,314.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:318.2,318.36 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:318.36,319.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:319.45,322.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:323.3,323.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:323.64,325.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:326.3,326.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:329.2,331.28 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:331.28,333.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:333.10,336.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:337.3,337.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:340.2,340.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:340.20,342.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:344.2,346.69 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:349.75,351.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:351.16,353.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:355.2,356.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:356.15,357.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:357.34,358.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:358.14,360.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:364.2,364.36 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:364.36,365.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:365.45,368.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:369.3,369.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:369.64,371.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:372.3,372.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:375.2,377.28 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:377.28,379.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:379.10,382.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:383.3,383.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:386.2,389.51 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:389.51,390.71 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:390.71,392.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:393.8,394.80 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:394.80,396.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:399.2,399.79 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:399.79,401.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:402.2,404.69 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:407.73,409.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:409.16,411.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:413.2,415.44 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:415.44,417.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:419.2,419.63 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:419.63,421.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:422.2,425.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:425.9,427.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:429.2,429.38 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:429.38,431.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:433.2,433.30 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:436.72,438.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:438.16,440.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:442.2,444.44 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:444.44,446.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:448.2,448.63 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:448.63,450.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:451.2,454.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:454.9,456.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:458.2,461.26 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:461.26,463.24 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:463.24,465.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:468.2,468.25 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:471.74,473.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:473.16,475.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:477.2,480.44 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:480.44,482.29 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:482.29,484.27 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:484.27,486.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:488.3,488.26 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:491.2,491.63 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:491.63,493.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:494.2,497.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:497.9,499.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:501.2,502.36 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:502.36,503.31 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:503.31,505.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:505.9,507.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:509.2,511.25 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:514.69,516.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:516.16,518.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:520.2,523.47 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:523.47,525.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:527.2,527.65 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:527.65,529.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:530.2,533.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:533.9,535.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:537.2,539.52 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:539.52,541.80 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:541.80,543.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:544.3,546.85 3 0 -github.com/echovault/echovault/internal/modules/set/commands.go:546.85,548.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:549.8,551.72 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:551.72,553.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:554.3,556.10 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:556.10,558.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:559.3,559.22 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:562.2,564.49 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:567.68,569.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:569.16,571.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:573.2,576.30 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:576.30,578.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:578.10,580.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:581.3,581.12 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:584.2,584.44 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:584.44,586.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:588.2,588.62 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:588.62,590.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:591.2,594.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:594.9,596.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:598.2,601.28 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:601.28,603.26 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:603.26,605.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:608.2,608.25 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:611.75,613.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:613.16,615.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:617.2,620.30 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:620.30,622.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:622.10,624.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:625.3,625.12 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:628.2,628.44 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:628.44,630.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:632.2,632.62 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:632.62,634.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:635.2,638.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:638.9,640.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:642.2,645.28 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:645.28,647.26 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:647.26,649.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:652.2,652.25 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:655.68,657.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:657.16,659.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:661.2,664.44 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:664.44,666.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:668.2,668.62 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:668.62,670.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:671.2,674.9 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:674.9,676.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:678.2,680.51 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:683.70,685.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:685.16,687.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:689.2,690.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:690.15,691.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:691.34,692.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:692.14,694.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:698.2,698.36 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:698.36,699.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:699.45,700.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:702.3,702.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:702.64,704.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:705.3,705.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:708.2,710.33 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:710.33,711.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:711.14,712.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:714.3,715.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:715.10,717.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:718.3,718.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:721.2,724.35 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:724.35,726.33 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:726.33,728.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:731.2,731.25 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:734.75,736.16 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:736.16,738.3 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:740.2,741.15 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:741.15,742.34 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:742.34,743.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:743.14,745.5 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:749.2,749.36 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:749.36,750.45 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:750.45,751.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:753.3,753.64 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:753.64,755.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:756.3,756.20 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:759.2,761.33 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:761.33,762.14 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:762.14,763.12 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:765.3,766.10 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:766.10,768.4 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:769.3,769.27 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:772.2,776.51 3 1 -github.com/echovault/echovault/internal/modules/set/commands.go:776.51,777.71 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:777.71,779.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:780.8,781.80 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:781.80,783.4 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:785.2,787.75 2 1 -github.com/echovault/echovault/internal/modules/set/commands.go:787.75,789.3 1 0 -github.com/echovault/echovault/internal/modules/set/commands.go:790.2,790.65 1 1 -github.com/echovault/echovault/internal/modules/set/commands.go:793.36,946.2 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:25.74,26.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:26.18,28.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:29.2,33.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:36.75,37.19 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:37.19,39.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:40.2,44.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:47.75,48.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:48.18,50.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:51.2,55.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:58.80,59.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:59.18,61.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:62.2,66.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:69.76,70.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:70.18,72.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:73.2,77.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:80.80,81.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:81.18,83.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:85.2,85.56 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:85.56,87.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:89.2,89.20 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:89.20,95.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:97.2,101.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:104.81,105.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:105.18,107.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:108.2,112.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:115.79,116.19 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:116.19,118.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:119.2,123.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:126.78,127.19 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:127.19,129.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:130.2,134.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:137.80,138.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:138.18,140.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:141.2,145.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:148.75,149.19 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:149.19,151.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:152.2,156.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:159.74,160.34 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:160.34,162.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:163.2,167.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:170.81,171.34 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:171.34,173.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:174.2,178.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:181.74,182.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:182.18,184.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:185.2,189.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:192.76,193.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:193.18,195.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:196.2,200.8 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:203.81,204.18 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:204.18,206.3 1 1 -github.com/echovault/echovault/internal/modules/set/key_funcs.go:207.2,211.8 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:28.34,35.2 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:37.41,39.26 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:39.26,40.23 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:40.23,43.4 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:45.2,46.14 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:49.43,51.2 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:53.35,55.32 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:55.32,57.3 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:58.2,58.12 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:61.35,63.2 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:65.47,68.16 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:68.16,70.3 1 0 -github.com/echovault/echovault/internal/modules/set/set.go:72.2,72.49 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:72.49,74.3 1 0 -github.com/echovault/echovault/internal/modules/set/set.go:76.2,80.15 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:80.15,82.47 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:82.47,85.4 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:86.8,88.43 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:88.43,90.38 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:90.38,92.59 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:92.59,94.6 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:95.5,95.8 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:100.2,100.12 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:103.44,105.26 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:105.26,106.24 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:106.24,109.4 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:111.2,112.14 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:115.41,119.2 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:121.41,123.2 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:126.46,129.27 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:129.27,130.31 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:130.31,131.24 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:131.24,133.5 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:136.2,137.13 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:140.54,141.22 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:141.22,143.3 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:144.2,146.10 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:152.57,154.19 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:155.9,156.24 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:157.9,160.43 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:160.43,161.56 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:161.56,163.10 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:165.4,165.32 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:165.32,167.5 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:169.3,169.36 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:170.10,172.11 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:172.11,174.4 1 0 -github.com/echovault/echovault/internal/modules/set/set.go:175.3,176.11 2 1 -github.com/echovault/echovault/internal/modules/set/set.go:176.11,178.4 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:179.3,179.42 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:184.31,185.19 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:186.9,187.17 1 1 -github.com/echovault/echovault/internal/modules/set/set.go:188.9,191.15 3 1 -github.com/echovault/echovault/internal/modules/set/set.go:192.10,195.28 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:27.78,33.29 4 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:33.29,34.54 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:34.54,40.42 4 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:40.42,42.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:44.4,47.12 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:50.3,50.36 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:50.36,57.43 5 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:57.43,59.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:61.4,63.21 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:67.2,69.25 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:72.76,76.35 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:76.35,77.65 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:77.65,78.41 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:78.41,80.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:81.4,81.12 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:83.3,83.13 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:86.2,86.51 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:89.75,90.29 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:91.9,96.36 4 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:96.36,97.66 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:97.66,98.52 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:98.52,102.6 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:103.5,103.13 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:105.4,106.14 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:108.3,109.26 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:111.9,115.56 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:115.56,117.4 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:118.3,118.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:118.53,122.37 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:122.37,123.67 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:123.67,124.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:124.53,125.59 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:125.59,129.8 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:131.6,131.14 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:133.5,133.54 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:133.54,136.6 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:138.9,138.61 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:138.61,142.37 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:142.37,143.67 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:143.67,144.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:144.53,146.24 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:146.24,149.8 2 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:151.6,151.14 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:153.5,153.33 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:153.33,156.6 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:158.9,158.60 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:158.60,162.37 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:162.37,163.67 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:163.67,164.53 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:164.53,165.55 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:165.55,169.8 3 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:171.6,171.14 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:173.5,173.50 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:173.50,176.6 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:178.9,180.4 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:181.3,182.26 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:183.10,184.54 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:188.75,190.2 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:192.36,200.84 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:200.84,204.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:213.84,217.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:225.86,229.7 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:238.86,242.7 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:252.86,256.7 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:267.84,271.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:272.73,273.49 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:273.49,275.6 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:276.5,276.45 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:285.84,289.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:290.73,292.18 2 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:292.18,294.6 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:295.5,295.53 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:304.84,308.5 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:309.73,310.47 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:310.47,312.6 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:313.5,313.45 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:321.84,325.5 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:335.86,339.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:340.75,341.34 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:341.34,343.8 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:344.7,345.34 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:345.34,347.8 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:348.7,348.75 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:348.75,350.8 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:351.7,351.47 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:361.86,365.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:366.75,367.35 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:367.35,369.8 1 0 -github.com/echovault/echovault/internal/modules/admin/commands.go:370.7,371.47 2 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:380.86,384.7 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:385.75,388.38 3 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:388.38,390.8 1 1 -github.com/echovault/echovault/internal/modules/admin/commands.go:391.7,391.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:29.68,31.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:31.16,33.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:35.2,44.43 7 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:44.43,45.29 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:45.29,46.9 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:48.3,48.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:49.15,50.85 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:50.85,52.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:53.16,54.25 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:55.12,56.25 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:60.2,60.77 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:60.77,62.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:64.2,66.63 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:66.63,67.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:67.15,68.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:70.3,71.23 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:72.11,73.64 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:74.15,76.49 2 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:76.49,82.5 2 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:83.4,83.49 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:83.49,89.5 2 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:90.16,95.6 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:96.12,101.6 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:106.2,106.27 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:106.27,108.34 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:108.34,109.70 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:109.70,112.61 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:112.61,114.6 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:115.5,115.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:117.4,117.70 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:117.70,121.36 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:121.36,123.6 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:124.5,124.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:126.4,126.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:126.39,128.13 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:130.4,130.41 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:130.41,133.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:133.25,135.6 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:136.5,136.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:138.4,138.55 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:142.2,142.43 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:142.43,145.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:145.17,147.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:148.3,150.10 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:150.10,152.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:153.3,154.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:154.17,156.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:158.3,158.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:158.18,161.4 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:163.3,163.52 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:167.2,167.71 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:167.71,169.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:170.2,173.65 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:173.65,175.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:177.2,177.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:180.69,182.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:182.16,184.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:185.2,187.44 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:187.44,189.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:191.2,191.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:191.63,193.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:194.2,197.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:197.9,199.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:201.2,201.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:204.70,206.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:206.16,208.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:210.2,213.54 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:214.10,215.60 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:216.14,217.51 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:217.51,219.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:219.9,221.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:222.15,224.21 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:225.11,227.21 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:230.2,231.54 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:232.10,233.60 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:234.14,235.51 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:235.51,237.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:237.9,239.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:240.15,242.21 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:243.11,245.21 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:248.2,248.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:248.44,250.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:252.2,252.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:252.63,254.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:255.2,258.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:258.9,260.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:262.2,263.33 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:263.33,264.47 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:264.47,266.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:269.2,269.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:272.73,274.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:274.16,276.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:278.2,282.44 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:282.44,284.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:286.2,286.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:286.63,288.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:289.2,292.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:292.9,294.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:296.2,299.38 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:299.38,300.45 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:300.45,302.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:305.2,307.28 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:307.28,309.81 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:309.81,311.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:314.2,314.51 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:317.69,319.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:319.16,321.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:323.2,323.74 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:323.74,325.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:326.2,326.49 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:326.49,328.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:330.2,331.15 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:331.15,332.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:332.34,333.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:333.14,335.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:340.2,340.57 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:340.57,343.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:344.2,344.76 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:344.76,346.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:347.2,349.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:349.9,351.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:354.2,356.42 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:356.42,357.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:357.58,358.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:360.3,361.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:361.17,363.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:364.3,366.10 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:366.10,368.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:369.3,369.27 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:372.2,377.34 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:377.34,378.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:378.20,380.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:380.9,382.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:385.2,387.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:390.74,392.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:392.16,394.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:396.2,399.15 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:399.15,400.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:400.34,401.14 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:401.14,403.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:408.2,408.57 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:408.57,411.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:412.2,412.76 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:412.76,414.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:415.2,417.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:417.9,419.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:421.2,423.42 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:423.42,424.57 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:424.57,425.78 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:425.78,427.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:428.4,429.11 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:429.11,431.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:432.4,432.28 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:436.2,438.51 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:438.51,439.71 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:439.71,441.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:442.8,443.80 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:443.80,445.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:447.2,449.74 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:449.74,451.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:453.2,453.64 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:456.71,458.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:458.16,460.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:462.2,466.54 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:467.10,468.55 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:469.14,470.68 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:470.68,472.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:472.9,472.75 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:472.75,474.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:474.9,476.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:477.15,479.23 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:480.11,482.23 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:485.2,485.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:485.44,488.72 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:488.72,490.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:491.3,495.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:495.17,497.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:498.3,499.99 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:502.2,502.62 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:502.62,504.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:505.2,507.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:507.9,509.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:510.2,516.23 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:516.23,518.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:519.2,520.74 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:523.70,525.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:525.16,527.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:529.2,530.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:530.16,532.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:534.2,535.15 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:535.15,536.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:536.34,537.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:537.14,539.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:543.2,545.33 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:545.33,546.49 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:546.49,549.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:550.3,550.68 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:550.68,552.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:553.3,555.10 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:555.10,557.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:558.3,561.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:564.2,568.33 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:568.33,569.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:569.40,570.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:570.18,572.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:572.10,574.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:578.2,580.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:583.75,585.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:585.16,587.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:589.2,592.63 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:592.63,594.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:596.2,597.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:597.16,599.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:601.2,602.15 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:602.15,603.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:603.34,604.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:604.14,606.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:610.2,612.33 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:612.33,613.49 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:613.49,615.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:616.3,616.68 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:616.68,618.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:619.3,621.10 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:621.10,623.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:624.3,627.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:630.2,632.82 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:632.82,633.71 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:633.71,635.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:636.8,636.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:636.40,637.80 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:637.80,639.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:641.2,643.79 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:643.79,645.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:647.2,647.69 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:650.69,652.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:652.16,654.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:656.2,661.67 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:661.67,663.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:664.2,664.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:664.20,665.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:665.19,667.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:668.3,668.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:668.40,670.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:671.3,672.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:672.17,674.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:675.3,675.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:675.13,677.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:678.3,679.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:683.2,683.68 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:683.68,685.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:686.2,686.21 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:686.21,687.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:687.20,689.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:690.3,691.53 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:691.53,693.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:696.2,696.43 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:696.43,697.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:697.58,698.78 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:698.78,699.13 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:701.4,702.35 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:702.35,704.13 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:706.4,707.18 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:707.18,710.5 2 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:711.4,715.38 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:715.38,717.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:719.4,721.27 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:725.2,725.30 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:728.68,730.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:730.16,732.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:734.2,738.53 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:738.53,740.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:742.2,742.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:742.30,744.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:744.17,746.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:747.3,747.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:747.12,749.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:752.2,752.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:752.44,754.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:756.2,756.62 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:756.62,758.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:759.2,762.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:762.9,764.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:766.2,767.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:767.16,769.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:771.2,772.36 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:772.36,774.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:776.2,778.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:781.71,783.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:783.16,785.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:787.2,789.44 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:789.44,791.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:793.2,793.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:793.63,795.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:796.2,799.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:799.9,801.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:803.2,809.36 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:809.36,811.21 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:811.21,813.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:813.9,815.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:818.2,820.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:823.75,825.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:825.16,827.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:829.2,832.30 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:832.30,834.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:834.17,836.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:837.3,837.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:837.13,839.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:842.2,843.30 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:843.30,844.57 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:844.57,846.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:846.9,848.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:851.2,851.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:851.44,853.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:855.2,855.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:855.63,857.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:858.2,861.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:861.9,863.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:865.2,868.28 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:868.28,869.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:869.17,871.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:871.9,873.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:876.2,878.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:881.69,883.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:883.16,885.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:887.2,891.84 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:891.84,893.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:895.2,895.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:895.44,897.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:899.2,899.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:899.63,901.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:902.2,905.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:905.9,907.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:909.2,910.54 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:910.54,911.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:911.55,913.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:914.3,914.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:917.2,917.36 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:917.36,918.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:918.40,919.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:919.18,922.5 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:922.10,924.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:928.2,928.31 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:931.68,933.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:933.16,935.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:937.2,939.44 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:939.44,941.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:943.2,943.62 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:943.62,945.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:946.2,949.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:949.9,951.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:953.2,954.39 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:954.39,955.27 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:955.27,957.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:960.2,960.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:963.70,965.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:965.16,967.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:969.2,971.44 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:971.44,973.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:974.2,974.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:974.63,976.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:977.2,979.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:979.9,981.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:982.2,983.20 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:983.20,985.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:987.2,989.69 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:992.80,994.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:994.16,996.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:998.2,1003.16 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1003.16,1005.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1007.2,1008.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1008.16,1010.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1012.2,1012.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1012.44,1014.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1016.2,1016.62 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1016.62,1018.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1019.2,1022.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1022.9,1024.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1026.2,1026.33 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1026.33,1027.61 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1027.61,1030.4 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1033.2,1033.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1036.79,1038.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1038.16,1040.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1042.2,1045.16 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1045.16,1047.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1049.2,1050.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1050.16,1052.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1054.2,1054.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1054.44,1056.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1058.2,1058.62 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1058.62,1060.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1061.2,1064.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1064.9,1066.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1068.2,1068.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1068.15,1070.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1071.2,1071.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1071.14,1073.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1075.2,1075.88 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1075.88,1077.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1079.2,1080.54 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1080.54,1082.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1084.2,1086.18 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1086.18,1087.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1087.34,1090.4 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1091.8,1092.34 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1092.34,1095.4 2 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1098.2,1098.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1101.78,1103.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1103.16,1105.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1107.2,1111.44 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1111.44,1113.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1115.2,1115.62 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1115.62,1117.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1118.2,1121.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1121.9,1123.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1125.2,1128.38 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1128.38,1129.45 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1129.45,1131.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1134.2,1137.28 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1137.28,1139.81 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1139.81,1142.4 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1145.2,1145.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1148.70,1150.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1150.16,1152.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1154.2,1163.76 9 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1163.76,1165.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1167.2,1167.73 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1167.73,1169.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1171.2,1171.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1171.65,1173.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1173.5,1175.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1175.8,1178.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1178.17,1180.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1181.3,1182.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1182.17,1184.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1187.2,1187.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1187.65,1189.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1189.5,1190.72 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1190.72,1192.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1193.3,1193.61 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1193.61,1195.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1196.3,1197.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1197.17,1199.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1200.3,1200.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1200.17,1202.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1203.3,1204.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1204.17,1206.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1209.2,1209.44 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1209.44,1211.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1213.2,1213.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1213.63,1215.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1216.2,1219.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1219.9,1221.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1223.2,1223.32 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1223.32,1225.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1226.2,1226.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1226.15,1228.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1230.2,1231.42 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1231.42,1232.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1232.55,1234.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1234.15,1236.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1237.4,1237.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1240.2,1240.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1240.40,1242.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1242.39,1243.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1243.46,1245.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1247.3,1247.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1247.55,1248.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1248.15,1250.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1251.4,1251.64 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1255.2,1257.35 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1257.35,1258.24 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1258.24,1259.9 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1261.3,1261.43 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1261.43,1262.85 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1262.85,1264.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1265.4,1265.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1267.3,1268.90 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1268.90,1270.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1273.2,1275.34 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1275.34,1276.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1276.17,1278.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1278.9,1280.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1283.2,1285.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1288.75,1290.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1290.16,1292.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1294.2,1304.73 10 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1304.73,1306.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1308.2,1308.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1308.65,1310.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1310.5,1312.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1312.8,1315.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1315.17,1317.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1318.3,1319.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1319.17,1321.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1324.2,1324.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1324.65,1326.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1326.5,1327.72 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1327.72,1329.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1330.3,1330.61 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1330.61,1332.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1333.3,1334.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1334.17,1336.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1337.3,1337.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1337.17,1339.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1340.3,1341.17 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1341.17,1343.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1346.2,1346.47 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1346.47,1348.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1350.2,1350.66 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1350.66,1352.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1353.2,1356.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1356.9,1358.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1360.2,1360.32 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1360.32,1362.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1363.2,1363.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1363.15,1365.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1367.2,1368.42 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1368.42,1369.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1369.55,1371.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1371.15,1373.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1374.4,1374.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1377.2,1377.40 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1377.40,1379.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1379.39,1380.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1380.46,1382.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1384.3,1384.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1384.55,1385.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1385.15,1387.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1388.4,1388.64 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1392.2,1394.35 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1394.35,1395.24 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1395.24,1396.9 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1398.3,1398.43 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1398.43,1399.85 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1399.85,1401.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1402.4,1402.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1404.3,1405.90 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1405.90,1407.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1410.2,1412.51 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1412.51,1413.71 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1413.71,1415.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1416.8,1417.80 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1417.80,1419.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1421.2,1423.82 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1423.82,1425.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1427.2,1427.72 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1430.70,1431.57 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1431.57,1433.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1435.2,1436.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1436.16,1438.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1440.2,1441.15 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1441.15,1442.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1442.34,1443.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1443.14,1445.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1449.2,1451.33 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1451.33,1452.48 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1452.48,1453.69 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1453.69,1455.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1456.4,1458.11 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1458.11,1460.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1461.4,1464.6 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1468.2,1471.35 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1471.35,1472.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1472.17,1474.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1474.9,1476.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1479.2,1481.25 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1484.75,1486.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1486.16,1488.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1490.2,1493.73 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1493.73,1495.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1497.2,1498.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1498.16,1500.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1502.2,1503.15 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1503.15,1504.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1504.34,1505.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1505.14,1507.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1511.2,1513.33 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1513.33,1514.48 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1514.48,1515.69 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1515.69,1517.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1518.4,1520.11 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1520.11,1522.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1523.4,1526.6 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1530.2,1532.51 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1532.51,1533.71 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1533.71,1535.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1536.8,1537.80 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1537.80,1539.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1541.2,1543.75 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1543.75,1545.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1547.2,1547.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/commands.go:1550.36,1822.2 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:25.74,26.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:26.18,28.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:29.2,33.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:36.75,37.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:37.19,39.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:40.2,44.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:47.76,48.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:48.19,50.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:51.2,55.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:58.75,59.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:59.18,61.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:63.2,63.63 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:63.63,65.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:67.2,67.27 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:67.27,73.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:75.2,79.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:82.80,83.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:83.18,85.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:86.2,90.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:93.77,94.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:94.19,96.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:97.2,101.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:104.76,105.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:105.18,107.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:108.2,108.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:108.58,111.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:111.39,113.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:114.3,114.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:116.2,116.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:116.18,122.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:123.2,123.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:123.17,129.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:130.2,130.84 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:133.81,134.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:134.18,136.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:137.2,137.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:137.58,140.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:140.39,142.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:143.3,143.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:145.2,145.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:145.18,151.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:152.2,152.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:152.17,158.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:159.2,159.84 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:162.75,163.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:163.18,165.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:166.2,166.54 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:166.54,168.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:169.2,169.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:169.18,175.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:176.2,176.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:176.17,182.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:183.2,183.84 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:186.77,187.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:187.18,189.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:190.2,194.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:197.74,198.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:198.34,200.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:201.2,205.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:208.81,209.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:209.34,211.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:212.2,216.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:219.75,220.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:220.34,222.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:223.2,227.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:230.74,231.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:231.18,233.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:234.2,238.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:241.78,242.18 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:242.18,244.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:245.2,249.8 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:252.76,253.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:253.19,255.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:256.2,260.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:263.84,264.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:264.19,266.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:267.2,271.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:274.85,275.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:275.19,277.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:278.2,282.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:285.86,286.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:286.19,288.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:289.2,293.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:296.79,297.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:297.19,299.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:300.2,304.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:307.77,308.35 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:308.35,310.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:311.2,315.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:318.81,319.35 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:319.35,321.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:322.2,326.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:329.76,330.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:330.18,332.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:333.2,333.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:333.58,336.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:336.39,338.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:339.3,339.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:341.2,341.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:341.18,347.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:348.2,348.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:348.17,354.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:355.2,355.84 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:358.81,359.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:359.18,361.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:362.2,362.58 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:362.58,365.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:365.39,367.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:368.3,368.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:370.2,370.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:370.18,376.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:377.2,377.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:377.17,383.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/key_funcs.go:384.2,384.84 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:48.53,52.28 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:52.28,58.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:59.2,59.10 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:62.46,64.2 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:66.49,68.2 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:70.58,75.44 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:75.44,77.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:79.2,81.15 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:81.15,83.47 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:83.47,86.4 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:87.8,89.43 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:89.43,91.58 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:91.58,93.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:93.7,95.57 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:95.57,97.6 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:98.5,98.8 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:103.2,103.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:106.46,108.32 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:108.32,113.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:114.2,114.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:117.41,119.2 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:123.16,125.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:125.16,127.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:128.2,129.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:129.16,131.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:132.2,133.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:133.16,135.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:136.2,137.16 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:137.16,139.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:140.2,140.51 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:140.51,142.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:143.2,143.57 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:143.57,145.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:147.2,149.36 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:149.36,150.29 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:150.29,151.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:151.30,161.5 3 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:162.4,162.101 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:162.101,164.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:165.4,170.35 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:170.35,172.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:174.3,174.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:177.2,177.28 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:177.28,178.38 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:178.38,180.29 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:180.29,186.36 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:186.36,188.6 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:190.4,190.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:192.3,192.38 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:192.38,194.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:194.30,201.5 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:202.4,202.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:205.3,205.76 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:205.76,207.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:208.3,212.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:214.2,214.19 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:217.44,218.21 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:218.21,221.3 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:222.2,222.14 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:225.73,227.71 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:227.71,229.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:230.2,230.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:230.15,232.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:233.2,233.16 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:233.16,235.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:237.2,239.54 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:239.54,240.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:240.39,242.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:243.3,243.39 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:246.2,246.29 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:246.29,247.24 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:247.24,248.9 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:250.3,252.17 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:252.17,254.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:257.2,257.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:260.64,262.28 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:262.28,263.33 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:263.33,264.29 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:264.29,266.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:269.2,269.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:278.53,279.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:279.46,281.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:282.2,282.28 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:282.28,284.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:285.2,285.37 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:285.37,286.36 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:286.36,288.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:289.3,289.52 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:289.52,291.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:293.2,293.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:297.70,298.24 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:299.9,300.39 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:301.9,303.52 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:303.52,308.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:309.3,309.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:310.9,313.52 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:313.52,315.48 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:315.48,320.13 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:323.4,325.42 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:325.42,327.23 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:328.17,329.26 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:330.17,331.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:332.14,334.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:341.4,341.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:345.3,345.52 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:345.52,346.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:346.65,348.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:348.7,353.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:355.3,355.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:356.10,363.40 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:363.40,364.37 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:364.37,367.13 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:369.4,371.42 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:371.42,372.23 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:373.17,374.26 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:375.17,376.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:377.14,379.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:385.3,385.41 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:385.41,386.65 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:386.65,388.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:388.7,390.5 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:392.3,392.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:397.74,398.24 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:399.9,400.39 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:401.9,403.52 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:403.52,408.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:409.3,409.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:410.9,413.52 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:413.52,415.48 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:415.48,416.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:419.4,421.42 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:421.42,423.23 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:424.17,425.26 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:426.17,427.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:428.14,430.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:437.4,437.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:439.3,439.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:440.10,446.40 4 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:446.40,447.37 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:447.37,448.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:450.4,452.42 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:452.42,453.23 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:454.17,455.26 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:456.17,457.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:458.14,460.46 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/sorted_set.go:466.3,466.30 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:24.97,26.60 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:26.60,28.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:29.2,29.24 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:29.24,30.48 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:30.48,31.85 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:31.85,32.10 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:34.4,35.18 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:35.18,37.5 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:38.4,38.32 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:42.2,43.62 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:43.62,45.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:46.2,46.26 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:46.26,47.94 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:47.94,49.4 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:50.3,50.53 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:53.2,54.63 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:54.63,56.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:57.2,57.27 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:57.27,59.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:62.2,63.85 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:63.85,64.26 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:64.26,65.12 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:67.3,67.31 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:67.31,69.12 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:71.3,71.41 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:71.41,73.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:76.2,77.30 2 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:77.30,79.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:79.8,81.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:83.2,83.55 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:83.55,85.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:85.8,85.31 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:85.31,86.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:86.34,88.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:91.2,91.50 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:94.69,95.25 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:95.25,97.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:98.2,100.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:100.9,102.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:103.2,103.69 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:103.69,105.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:106.2,106.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:109.65,110.23 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:110.23,112.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:113.2,115.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:115.9,117.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:118.2,118.67 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:118.67,120.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:121.2,121.18 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:124.59,125.20 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:125.20,127.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:128.2,130.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:130.9,132.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:133.2,133.34 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:133.34,135.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:136.2,136.16 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:139.53,140.17 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:140.17,142.3 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:143.2,145.9 3 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:145.9,147.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:148.2,148.35 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:148.35,150.3 1 0 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:151.2,151.15 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:154.61,155.31 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:156.10,157.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:158.12,159.16 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:159.16,161.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:162.3,162.13 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:163.12,164.16 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:164.16,166.4 1 1 -github.com/echovault/echovault/internal/modules/sorted_set/utils.go:167.3,167.13 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:24.72,26.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:26.16,28.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:30.2,33.9 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:33.9,35.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:37.2,39.44 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:39.44,40.72 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:40.72,42.4 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:43.3,43.69 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:43.69,45.4 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:46.3,47.58 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:50.2,50.63 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:50.63,52.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:53.2,56.9 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:56.9,58.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:61.2,61.24 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:61.24,63.69 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:63.69,65.4 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:66.3,66.58 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:70.2,70.16 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:70.16,72.69 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:72.69,74.4 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:75.3,75.58 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:78.2,80.35 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:80.35,82.24 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:82.24,85.12 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:88.3,89.8 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:92.2,92.78 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:92.78,94.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:96.2,96.59 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:99.70,101.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:101.16,103.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:105.2,107.44 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:107.44,109.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:111.2,111.64 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:111.64,113.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:114.2,118.9 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:118.9,120.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:122.2,122.56 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:125.70,127.16 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:127.16,129.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:131.2,137.24 5 1 -github.com/echovault/echovault/internal/modules/string/commands.go:137.24,139.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:141.2,141.44 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:141.44,143.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:145.2,145.63 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:145.63,147.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:148.2,151.9 3 1 -github.com/echovault/echovault/internal/modules/string/commands.go:151.9,153.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:155.2,155.15 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:155.15,157.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:158.2,158.13 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:158.13,160.3 1 0 -github.com/echovault/echovault/internal/modules/string/commands.go:162.2,162.30 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:162.30,164.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:166.2,166.22 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:166.22,168.3 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:170.2,170.17 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:170.17,173.3 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:175.2,177.14 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:177.14,179.38 2 1 -github.com/echovault/echovault/internal/modules/string/commands.go:179.38,181.4 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:182.3,182.12 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:185.2,185.65 1 1 -github.com/echovault/echovault/internal/modules/string/commands.go:188.36,228.2 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:23.78,24.19 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:24.19,26.3 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:27.2,31.8 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:34.76,35.19 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:35.19,37.3 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:38.2,42.8 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:45.76,46.19 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:46.19,48.3 1 1 -github.com/echovault/echovault/internal/modules/string/key_funcs.go:49.2,53.8 1 1 github.com/echovault/echovault/internal/snapshot/snapshot.go:55.56,56.30 1 1 github.com/echovault/echovault/internal/snapshot/snapshot.go:56.30,58.3 1 1 github.com/echovault/echovault/internal/snapshot/snapshot.go:61.59,62.30 1 1 @@ -3120,1035 +1529,3 @@ github.com/echovault/echovault/internal/snapshot/snapshot.go:354.94,356.3 1 1 github.com/echovault/echovault/internal/snapshot/snapshot.go:358.2,360.12 2 1 github.com/echovault/echovault/internal/snapshot/snapshot.go:363.46,365.2 1 0 github.com/echovault/echovault/internal/snapshot/snapshot.go:367.42,369.2 1 1 -github.com/echovault/echovault/echovault/api_acl.go:126.71,128.23 2 0 -github.com/echovault/echovault/echovault/api_acl.go:128.23,130.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:131.2,132.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:132.16,134.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:135.2,135.45 1 0 -github.com/echovault/echovault/echovault/api_acl.go:139.55,141.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:141.16,143.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:144.2,144.45 1 0 -github.com/echovault/echovault/echovault/api_acl.go:155.62,158.18 2 0 -github.com/echovault/echovault/echovault/api_acl.go:158.18,160.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:160.8,162.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:164.2,164.21 1 0 -github.com/echovault/echovault/echovault/api_acl.go:164.21,166.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:168.2,168.17 1 0 -github.com/echovault/echovault/echovault/api_acl.go:168.17,170.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:172.2,172.21 1 0 -github.com/echovault/echovault/echovault/api_acl.go:172.21,174.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:176.2,176.20 1 0 -github.com/echovault/echovault/echovault/api_acl.go:176.20,178.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:180.2,180.20 1 0 -github.com/echovault/echovault/echovault/api_acl.go:180.20,182.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:184.2,184.24 1 0 -github.com/echovault/echovault/echovault/api_acl.go:184.24,186.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:188.2,188.50 1 0 -github.com/echovault/echovault/echovault/api_acl.go:188.50,190.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:192.2,192.53 1 0 -github.com/echovault/echovault/echovault/api_acl.go:192.53,194.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:196.2,196.49 1 0 -github.com/echovault/echovault/echovault/api_acl.go:196.49,198.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:200.2,200.52 1 0 -github.com/echovault/echovault/echovault/api_acl.go:200.52,202.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:204.2,204.50 1 0 -github.com/echovault/echovault/echovault/api_acl.go:204.50,206.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:208.2,208.50 1 0 -github.com/echovault/echovault/echovault/api_acl.go:208.50,210.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:212.2,212.47 1 0 -github.com/echovault/echovault/echovault/api_acl.go:212.47,214.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:216.2,216.47 1 0 -github.com/echovault/echovault/echovault/api_acl.go:216.47,218.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:220.2,220.48 1 0 -github.com/echovault/echovault/echovault/api_acl.go:220.48,222.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:224.2,224.43 1 0 -github.com/echovault/echovault/echovault/api_acl.go:224.43,226.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:228.2,228.44 1 0 -github.com/echovault/echovault/echovault/api_acl.go:228.44,230.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:232.2,232.47 1 0 -github.com/echovault/echovault/echovault/api_acl.go:232.47,234.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:236.2,236.47 1 0 -github.com/echovault/echovault/echovault/api_acl.go:236.47,238.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:240.2,241.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:241.16,243.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:245.2,246.40 2 0 -github.com/echovault/echovault/echovault/api_acl.go:293.83,295.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:295.16,297.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:299.2,301.16 3 0 -github.com/echovault/echovault/echovault/api_acl.go:301.16,303.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:305.2,308.35 3 0 -github.com/echovault/echovault/echovault/api_acl.go:308.35,314.35 4 0 -github.com/echovault/echovault/echovault/api_acl.go:314.35,316.4 1 0 -github.com/echovault/echovault/echovault/api_acl.go:319.2,319.20 1 0 -github.com/echovault/echovault/echovault/api_acl.go:329.72,332.16 3 0 -github.com/echovault/echovault/echovault/api_acl.go:332.16,334.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:335.2,336.40 2 0 -github.com/echovault/echovault/echovault/api_acl.go:340.54,342.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:342.16,344.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:345.2,345.45 1 0 -github.com/echovault/echovault/echovault/api_acl.go:356.72,358.9 2 0 -github.com/echovault/echovault/echovault/api_acl.go:359.21,360.29 1 0 -github.com/echovault/echovault/echovault/api_acl.go:361.23,362.31 1 0 -github.com/echovault/echovault/echovault/api_acl.go:363.10,364.31 1 0 -github.com/echovault/echovault/echovault/api_acl.go:367.2,368.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:368.16,370.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:372.2,373.40 2 0 -github.com/echovault/echovault/echovault/api_acl.go:379.50,381.16 2 0 -github.com/echovault/echovault/echovault/api_acl.go:381.16,383.3 1 0 -github.com/echovault/echovault/echovault/api_acl.go:384.2,385.40 2 0 -github.com/echovault/echovault/echovault/api_admin.go:166.84,169.9 2 0 -github.com/echovault/echovault/echovault/api_admin.go:170.28,171.71 1 0 -github.com/echovault/echovault/echovault/api_admin.go:172.29,173.73 1 0 -github.com/echovault/echovault/echovault/api_admin.go:174.28,175.71 1 0 -github.com/echovault/echovault/echovault/api_admin.go:178.2,179.16 2 0 -github.com/echovault/echovault/echovault/api_admin.go:179.16,181.3 1 0 -github.com/echovault/echovault/echovault/api_admin.go:183.2,183.45 1 0 -github.com/echovault/echovault/echovault/api_admin.go:189.54,191.16 2 0 -github.com/echovault/echovault/echovault/api_admin.go:191.16,193.3 1 0 -github.com/echovault/echovault/echovault/api_admin.go:194.2,194.41 1 0 -github.com/echovault/echovault/echovault/api_admin.go:198.49,200.16 2 0 -github.com/echovault/echovault/echovault/api_admin.go:200.16,202.3 1 0 -github.com/echovault/echovault/echovault/api_admin.go:203.2,203.40 1 0 -github.com/echovault/echovault/echovault/api_admin.go:207.50,209.16 2 0 -github.com/echovault/echovault/echovault/api_admin.go:209.16,211.3 1 0 -github.com/echovault/echovault/echovault/api_admin.go:212.2,212.41 1 0 -github.com/echovault/echovault/echovault/api_admin.go:216.55,218.16 2 0 -github.com/echovault/echovault/echovault/api_admin.go:218.16,220.3 1 0 -github.com/echovault/echovault/echovault/api_admin.go:221.2,221.40 1 0 -github.com/echovault/echovault/echovault/api_admin.go:233.67,237.36 3 1 -github.com/echovault/echovault/echovault/api_admin.go:237.36,238.52 1 1 -github.com/echovault/echovault/echovault/api_admin.go:238.52,240.4 1 0 -github.com/echovault/echovault/echovault/api_admin.go:243.2,243.63 1 1 -github.com/echovault/echovault/echovault/api_admin.go:243.63,248.32 1 1 -github.com/echovault/echovault/echovault/api_admin.go:248.32,251.44 2 1 -github.com/echovault/echovault/echovault/api_admin.go:251.44,253.6 1 0 -github.com/echovault/echovault/echovault/api_admin.go:254.5,254.16 1 1 -github.com/echovault/echovault/echovault/api_admin.go:258.111,260.19 2 0 -github.com/echovault/echovault/echovault/api_admin.go:260.19,262.6 1 0 -github.com/echovault/echovault/echovault/api_admin.go:263.5,267.11 1 0 -github.com/echovault/echovault/echovault/api_admin.go:269.94,282.5 1 1 -github.com/echovault/echovault/echovault/api_admin.go:284.3,284.13 1 1 -github.com/echovault/echovault/echovault/api_admin.go:288.2,291.31 1 1 -github.com/echovault/echovault/echovault/api_admin.go:291.31,294.43 2 1 -github.com/echovault/echovault/echovault/api_admin.go:294.43,296.5 1 0 -github.com/echovault/echovault/echovault/api_admin.go:297.4,297.15 1 1 -github.com/echovault/echovault/echovault/api_admin.go:301.83,303.4 1 0 -github.com/echovault/echovault/echovault/api_admin.go:304.71,304.90 1 0 -github.com/echovault/echovault/echovault/api_admin.go:308.2,308.40 1 1 -github.com/echovault/echovault/echovault/api_admin.go:308.40,310.92 1 1 -github.com/echovault/echovault/echovault/api_admin.go:310.92,312.4 1 1 -github.com/echovault/echovault/echovault/api_admin.go:312.6,313.12 1 0 -github.com/echovault/echovault/echovault/api_admin.go:315.3,318.32 1 1 -github.com/echovault/echovault/echovault/api_admin.go:318.32,321.39 2 1 -github.com/echovault/echovault/echovault/api_admin.go:321.39,323.6 1 0 -github.com/echovault/echovault/echovault/api_admin.go:324.5,324.16 1 1 -github.com/echovault/echovault/echovault/api_admin.go:328.111,330.19 2 0 -github.com/echovault/echovault/echovault/api_admin.go:330.19,332.6 1 0 -github.com/echovault/echovault/echovault/api_admin.go:333.5,337.11 1 0 -github.com/echovault/echovault/echovault/api_admin.go:339.94,352.5 1 1 -github.com/echovault/echovault/echovault/api_admin.go:356.2,358.12 2 1 -github.com/echovault/echovault/echovault/api_admin.go:384.76,386.2 1 1 -github.com/echovault/echovault/echovault/api_admin.go:402.59,406.22 3 1 -github.com/echovault/echovault/echovault/api_admin.go:407.9,409.86 1 1 -github.com/echovault/echovault/echovault/api_admin.go:409.86,411.4 1 1 -github.com/echovault/echovault/echovault/api_admin.go:412.9,414.45 1 1 -github.com/echovault/echovault/echovault/api_admin.go:414.45,415.66 1 1 -github.com/echovault/echovault/echovault/api_admin.go:415.66,416.13 1 1 -github.com/echovault/echovault/echovault/api_admin.go:418.4,418.88 1 1 -github.com/echovault/echovault/echovault/api_admin.go:418.88,419.122 1 1 -github.com/echovault/echovault/echovault/api_admin.go:419.122,421.6 1 1 -github.com/echovault/echovault/echovault/api_generic.go:88.91,91.9 2 1 -github.com/echovault/echovault/echovault/api_generic.go:92.18,93.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:94.18,95.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:98.2,98.9 1 1 -github.com/echovault/echovault/echovault/api_generic.go:99.23,100.65 1 1 -github.com/echovault/echovault/echovault/api_generic.go:101.23,102.65 1 1 -github.com/echovault/echovault/echovault/api_generic.go:103.25,104.69 1 1 -github.com/echovault/echovault/echovault/api_generic.go:105.25,106.69 1 1 -github.com/echovault/echovault/echovault/api_generic.go:109.2,109.17 1 1 -github.com/echovault/echovault/echovault/api_generic.go:109.17,111.3 1 1 -github.com/echovault/echovault/echovault/api_generic.go:113.2,114.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:114.16,116.3 1 1 -github.com/echovault/echovault/echovault/api_generic.go:118.2,119.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:119.16,121.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:122.2,122.18 1 1 -github.com/echovault/echovault/echovault/api_generic.go:122.18,124.3 1 1 -github.com/echovault/echovault/echovault/api_generic.go:126.2,126.33 1 1 -github.com/echovault/echovault/echovault/api_generic.go:141.72,144.28 2 1 -github.com/echovault/echovault/echovault/api_generic.go:144.28,146.3 1 1 -github.com/echovault/echovault/echovault/api_generic.go:148.2,149.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:149.16,151.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:153.2,154.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:154.16,156.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:158.2,158.40 1 1 -github.com/echovault/echovault/echovault/api_generic.go:169.58,171.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:171.16,173.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:174.2,174.40 1 1 -github.com/echovault/echovault/echovault/api_generic.go:185.65,187.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:187.16,189.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:190.2,190.45 1 1 -github.com/echovault/echovault/echovault/api_generic.go:200.59,202.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:202.16,204.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:205.2,205.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:216.60,218.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:218.16,220.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:221.2,221.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:231.62,233.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:233.16,235.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:236.2,236.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:246.63,248.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:248.16,250.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:251.2,251.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:261.55,263.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:263.16,265.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:266.2,266.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:276.56,278.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:278.16,280.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:281.2,281.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:296.95,299.9 2 1 -github.com/echovault/echovault/echovault/api_generic.go:300.18,301.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:302.18,303.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:304.18,305.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:306.18,307.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:310.2,311.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:311.16,313.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:315.2,315.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:330.102,333.9 2 1 -github.com/echovault/echovault/echovault/api_generic.go:334.18,335.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:336.18,337.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:338.18,339.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:340.18,341.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:344.2,345.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:345.16,347.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:349.2,349.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:364.102,367.9 2 1 -github.com/echovault/echovault/echovault/api_generic.go:368.18,369.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:370.18,371.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:372.18,373.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:374.18,375.26 1 1 -github.com/echovault/echovault/echovault/api_generic.go:378.2,379.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:379.16,381.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:383.2,383.41 1 1 -github.com/echovault/echovault/echovault/api_generic.go:398.109,401.9 2 1 -github.com/echovault/echovault/echovault/api_generic.go:402.18,403.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:404.18,405.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:406.18,407.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:408.18,409.26 1 0 -github.com/echovault/echovault/echovault/api_generic.go:412.2,413.16 2 1 -github.com/echovault/echovault/echovault/api_generic.go:413.16,415.3 1 0 -github.com/echovault/echovault/echovault/api_generic.go:417.2,417.41 1 1 -github.com/echovault/echovault/echovault/api_hash.go:46.91,49.36 2 1 -github.com/echovault/echovault/echovault/api_hash.go:49.36,51.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:53.2,54.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:54.16,56.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:58.2,58.41 1 1 -github.com/echovault/echovault/echovault/api_hash.go:76.93,79.36 2 1 -github.com/echovault/echovault/echovault/api_hash.go:79.36,81.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:83.2,84.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:84.16,86.3 1 0 -github.com/echovault/echovault/echovault/api_hash.go:88.2,88.41 1 1 -github.com/echovault/echovault/echovault/api_hash.go:104.79,112.16 2 0 -github.com/echovault/echovault/echovault/api_hash.go:112.16,114.3 1 0 -github.com/echovault/echovault/echovault/api_hash.go:115.2,115.45 1 0 -github.com/echovault/echovault/echovault/api_hash.go:132.79,136.16 3 1 -github.com/echovault/echovault/echovault/api_hash.go:136.16,138.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:140.2,140.46 1 1 -github.com/echovault/echovault/echovault/api_hash.go:154.62,156.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:156.16,158.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:159.2,159.45 1 1 -github.com/echovault/echovault/echovault/api_hash.go:175.94,178.24 2 1 -github.com/echovault/echovault/echovault/api_hash.go:178.24,180.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:180.8,182.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:184.2,184.24 1 1 -github.com/echovault/echovault/echovault/api_hash.go:184.24,186.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:188.2,189.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:189.16,191.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:193.2,193.45 1 1 -github.com/echovault/echovault/echovault/api_hash.go:207.56,209.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:209.16,211.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:212.2,212.41 1 1 -github.com/echovault/echovault/echovault/api_hash.go:226.62,228.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:228.16,230.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:231.2,231.45 1 1 -github.com/echovault/echovault/echovault/api_hash.go:250.85,252.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:252.16,254.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:255.2,255.39 1 1 -github.com/echovault/echovault/echovault/api_hash.go:259.94,261.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:261.16,263.3 1 0 -github.com/echovault/echovault/echovault/api_hash.go:264.2,264.39 1 1 -github.com/echovault/echovault/echovault/api_hash.go:279.64,281.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:281.16,283.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:284.2,284.45 1 1 -github.com/echovault/echovault/echovault/api_hash.go:300.67,302.16 2 1 -github.com/echovault/echovault/echovault/api_hash.go:302.16,304.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:305.2,305.41 1 1 -github.com/echovault/echovault/echovault/api_hash.go:321.74,324.16 3 1 -github.com/echovault/echovault/echovault/api_hash.go:324.16,326.3 1 1 -github.com/echovault/echovault/echovault/api_hash.go:327.2,327.41 1 1 -github.com/echovault/echovault/echovault/api_list.go:34.56,36.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:36.16,38.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:39.2,39.41 1 1 -github.com/echovault/echovault/echovault/api_list.go:62.79,64.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:64.16,66.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:67.2,67.45 1 1 -github.com/echovault/echovault/echovault/api_list.go:85.73,87.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:87.16,89.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:90.2,90.40 1 1 -github.com/echovault/echovault/echovault/api_list.go:110.82,112.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:112.16,114.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:115.2,116.40 2 1 -github.com/echovault/echovault/echovault/api_list.go:123.78,125.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:125.16,127.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:128.2,129.40 2 1 -github.com/echovault/echovault/echovault/api_list.go:147.82,154.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:154.16,156.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:157.2,158.40 2 1 -github.com/echovault/echovault/echovault/api_list.go:182.94,184.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:184.16,186.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:187.2,188.40 2 1 -github.com/echovault/echovault/echovault/api_list.go:202.59,204.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:204.16,206.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:207.2,207.40 1 1 -github.com/echovault/echovault/echovault/api_list.go:221.59,223.16 2 1 -github.com/echovault/echovault/echovault/api_list.go:223.16,225.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:226.2,226.40 1 1 -github.com/echovault/echovault/echovault/api_list.go:243.75,246.16 3 1 -github.com/echovault/echovault/echovault/api_list.go:246.16,248.3 1 0 -github.com/echovault/echovault/echovault/api_list.go:249.2,249.41 1 1 -github.com/echovault/echovault/echovault/api_list.go:265.76,268.16 3 1 -github.com/echovault/echovault/echovault/api_list.go:268.16,270.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:271.2,271.41 1 1 -github.com/echovault/echovault/echovault/api_list.go:288.75,291.16 3 1 -github.com/echovault/echovault/echovault/api_list.go:291.16,293.3 1 0 -github.com/echovault/echovault/echovault/api_list.go:294.2,294.41 1 1 -github.com/echovault/echovault/echovault/api_list.go:310.76,313.16 3 1 -github.com/echovault/echovault/echovault/api_list.go:313.16,315.3 1 1 -github.com/echovault/echovault/echovault/api_list.go:316.2,316.41 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:50.86,52.24 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:52.24,54.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:57.2,59.36 3 0 -github.com/echovault/echovault/echovault/api_pubsub.go:59.36,65.3 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:68.2,69.12 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:69.12,71.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:73.2,73.25 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:73.25,78.33 4 0 -github.com/echovault/echovault/echovault/api_pubsub.go:78.33,80.4 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:82.3,82.13 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:93.70,94.24 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:94.24,96.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:98.2,98.36 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:98.36,100.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:102.2,103.115 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:116.87,118.24 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:118.24,120.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:123.2,125.36 3 0 -github.com/echovault/echovault/echovault/api_pubsub.go:125.36,131.3 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:134.2,135.12 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:135.12,137.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:139.2,139.25 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:139.25,144.33 4 0 -github.com/echovault/echovault/echovault/api_pubsub.go:144.33,146.4 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:148.3,148.13 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:159.71,160.24 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:160.24,162.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:164.2,164.36 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:164.36,166.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:168.2,169.115 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:182.73,184.16 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:184.16,186.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:187.2,188.40 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:198.75,200.19 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:200.19,202.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:203.2,204.16 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:204.16,206.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:207.2,207.45 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:213.54,215.16 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:215.16,217.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:218.2,218.41 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:228.82,232.16 3 0 -github.com/echovault/echovault/echovault/api_pubsub.go:232.16,234.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:236.2,238.16 3 0 -github.com/echovault/echovault/echovault/api_pubsub.go:238.16,240.3 1 0 -github.com/echovault/echovault/echovault/api_pubsub.go:242.2,245.28 3 0 -github.com/echovault/echovault/echovault/api_pubsub.go:245.28,248.3 2 0 -github.com/echovault/echovault/echovault/api_pubsub.go:250.2,250.20 1 0 -github.com/echovault/echovault/echovault/api_set.go:36.75,39.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:39.16,41.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:42.2,42.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:56.57,58.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:58.16,60.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:61.2,61.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:78.66,81.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:81.16,83.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:84.2,84.45 1 1 -github.com/echovault/echovault/echovault/api_set.go:91.86,94.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:94.16,96.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:97.2,97.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:114.67,117.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:117.16,119.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:120.2,120.45 1 1 -github.com/echovault/echovault/echovault/api_set.go:138.77,140.15 2 1 -github.com/echovault/echovault/echovault/api_set.go:140.15,142.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:143.2,144.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:144.16,146.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:147.2,147.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:152.87,155.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:155.16,157.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:158.2,158.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:174.70,176.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:176.16,178.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:179.2,179.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:193.65,195.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:195.16,197.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:198.2,198.45 1 1 -github.com/echovault/echovault/echovault/api_set.go:215.84,218.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:218.16,220.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:221.2,221.46 1 1 -github.com/echovault/echovault/echovault/api_set.go:243.82,245.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:245.16,247.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:248.2,248.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:264.73,266.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:266.16,268.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:269.2,269.45 1 1 -github.com/echovault/echovault/echovault/api_set.go:286.79,288.16 2 1 -github.com/echovault/echovault/echovault/api_set.go:288.16,290.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:291.2,291.45 1 1 -github.com/echovault/echovault/echovault/api_set.go:307.75,310.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:310.16,312.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:313.2,313.41 1 1 -github.com/echovault/echovault/echovault/api_set.go:328.67,331.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:331.16,333.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:334.2,334.45 1 1 -github.com/echovault/echovault/echovault/api_set.go:341.87,344.16 3 1 -github.com/echovault/echovault/echovault/api_set.go:344.16,346.3 1 1 -github.com/echovault/echovault/echovault/api_set.go:347.2,347.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:105.87,107.28 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:107.28,108.17 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:108.17,110.18 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:110.18,112.5 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:113.4,114.12 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:116.3,116.23 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:118.2,118.20 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:121.85,123.28 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:123.28,125.17 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:125.17,127.4 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:128.3,129.17 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:129.17,131.18 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:131.18,133.5 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:134.4,134.24 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:137.2,137.20 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:161.105,164.9 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:165.18,166.26 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:167.18,168.26 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:171.2,171.9 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:172.18,173.26 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:174.18,175.26 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:178.2,178.16 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:178.16,180.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:182.2,182.18 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:182.18,184.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:186.2,186.37 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:186.37,188.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:190.2,191.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:191.16,193.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:195.2,195.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:209.57,211.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:211.16,213.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:214.2,214.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:232.76,240.16 3 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:240.16,242.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:243.2,243.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:261.93,263.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:263.16,265.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:266.2,267.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:267.16,269.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:271.2,272.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:272.16,274.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:276.2,276.45 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:293.86,296.16 3 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:296.16,298.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:299.2,299.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:316.99,319.30 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:319.30,321.45 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:321.45,323.4 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:326.2,326.29 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:326.29,328.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:330.2,330.24 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:330.24,332.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:334.2,335.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:335.16,337.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:339.2,340.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:340.16,342.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:344.2,344.53 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:363.114,366.30 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:366.30,368.42 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:368.42,370.4 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:373.2,373.29 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:373.29,375.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:377.2,377.24 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:377.24,379.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:381.2,382.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:382.16,384.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:386.2,386.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:403.99,406.30 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:406.30,408.42 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:408.42,410.4 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:413.2,413.29 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:413.29,415.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:417.2,417.24 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:417.24,419.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:421.2,422.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:422.16,424.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:426.2,427.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:427.16,429.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:431.2,431.53 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:450.114,453.30 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:453.30,455.42 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:455.42,457.4 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:460.2,460.29 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:460.29,462.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:464.2,464.24 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:464.24,466.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:468.2,469.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:469.16,471.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:473.2,473.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:492.97,495.16 3 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:495.16,497.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:498.2,499.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:499.16,501.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:502.2,502.15 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:519.89,522.9 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:523.19,524.27 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:525.19,526.27 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:527.10,528.27 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:531.2,531.9 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:532.26,533.76 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:534.10,535.59 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:538.2,539.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:539.16,541.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:543.2,543.51 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:561.88,563.33 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:563.33,565.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:567.2,568.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:568.16,570.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:572.2,573.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:573.16,575.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:577.2,578.24 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:578.24,579.14 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:579.14,581.12 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:583.3,584.17 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:584.17,586.4 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:587.3,587.20 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:590.2,590.20 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:610.71,613.16 3 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:613.16,615.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:616.2,616.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:635.78,637.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:637.16,639.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:640.2,640.51 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:659.78,661.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:661.16,663.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:664.2,664.51 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:688.98,690.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:690.16,692.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:693.2,693.16 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:693.16,695.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:697.2,698.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:698.16,700.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:702.2,702.51 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:723.101,725.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:725.16,727.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:729.2,730.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:730.16,732.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:734.2,736.19 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:736.19,738.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:740.2,741.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:741.16,743.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:745.2,747.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:747.16,749.17 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:749.17,751.4 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:752.3,752.13 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:755.2,755.17 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:760.104,762.16 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:762.16,764.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:766.2,767.16 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:767.16,769.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:771.2,773.46 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:790.81,793.16 3 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:793.16,795.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:797.2,798.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:798.16,800.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:802.2,802.11 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:802.11,804.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:806.2,807.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:807.16,809.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:811.2,811.19 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:827.75,829.33 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:829.33,831.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:832.2,833.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:833.16,835.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:836.2,836.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:854.94,863.16 3 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:863.16,865.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:867.2,867.41 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:885.76,892.16 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:892.16,894.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:895.2,895.41 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:913.81,920.16 2 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:920.16,922.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:923.2,923.41 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:943.109,946.9 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:947.23,948.31 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:949.21,950.29 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:951.19,952.27 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:953.10,954.31 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:957.2,957.24 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:957.24,959.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:961.2,961.47 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:961.47,963.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:965.2,966.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:966.16,968.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:970.2,971.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:971.16,973.3 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:975.2,975.53 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:997.120,1000.9 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1001.23,1002.31 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1003.21,1004.29 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1005.19,1006.27 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:1007.10,1008.31 1 0 -github.com/echovault/echovault/echovault/api_sorted_set.go:1011.2,1011.47 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1011.47,1013.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1015.2,1016.16 2 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1016.16,1018.3 1 1 -github.com/echovault/echovault/echovault/api_sorted_set.go:1020.2,1020.41 1 1 -github.com/echovault/echovault/echovault/api_string.go:30.84,32.16 2 1 -github.com/echovault/echovault/echovault/api_string.go:32.16,34.3 1 0 -github.com/echovault/echovault/echovault/api_string.go:35.2,35.41 1 1 -github.com/echovault/echovault/echovault/api_string.go:45.58,47.16 2 1 -github.com/echovault/echovault/echovault/api_string.go:47.16,49.3 1 0 -github.com/echovault/echovault/echovault/api_string.go:50.2,50.41 1 1 -github.com/echovault/echovault/echovault/api_string.go:63.77,65.16 2 1 -github.com/echovault/echovault/echovault/api_string.go:65.16,67.3 1 0 -github.com/echovault/echovault/echovault/api_string.go:68.2,68.40 1 1 -github.com/echovault/echovault/echovault/api_string.go:72.79,74.16 2 1 -github.com/echovault/echovault/echovault/api_string.go:74.16,76.3 1 0 -github.com/echovault/echovault/echovault/api_string.go:77.2,77.40 1 1 -github.com/echovault/echovault/echovault/cluster.go:25.45,27.2 1 1 -github.com/echovault/echovault/echovault/cluster.go:29.84,40.16 4 0 -github.com/echovault/echovault/echovault/cluster.go:40.16,42.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:44.2,46.43 2 0 -github.com/echovault/echovault/echovault/cluster.go:46.43,48.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:50.2,52.9 2 0 -github.com/echovault/echovault/echovault/cluster.go:52.9,54.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:56.2,56.20 1 0 -github.com/echovault/echovault/echovault/cluster.go:56.20,58.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:60.2,60.12 1 0 -github.com/echovault/echovault/echovault/cluster.go:63.94,75.16 5 1 -github.com/echovault/echovault/echovault/cluster.go:75.16,77.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:79.2,81.43 2 1 -github.com/echovault/echovault/echovault/cluster.go:81.43,83.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:85.2,87.9 2 1 -github.com/echovault/echovault/echovault/cluster.go:87.9,89.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:91.2,91.20 1 1 -github.com/echovault/echovault/echovault/cluster.go:91.20,93.3 1 0 -github.com/echovault/echovault/echovault/cluster.go:95.2,95.24 1 1 -github.com/echovault/echovault/echovault/config.go:23.36,25.2 1 1 -github.com/echovault/echovault/echovault/echovault.go:113.66,114.36 1 0 -github.com/echovault/echovault/echovault/echovault.go:114.36,116.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:122.66,123.36 1 1 -github.com/echovault/echovault/echovault/echovault.go:123.36,125.3 1 1 -github.com/echovault/echovault/echovault/echovault.go:130.78,140.39 1 1 -github.com/echovault/echovault/echovault/echovault.go:140.39,153.4 12 1 -github.com/echovault/echovault/echovault/echovault.go:156.2,156.33 1 1 -github.com/echovault/echovault/echovault/echovault.go:156.33,158.3 1 1 -github.com/echovault/echovault/echovault/echovault.go:160.2,166.48 2 1 -github.com/echovault/echovault/echovault/echovault.go:166.48,167.52 1 0 -github.com/echovault/echovault/echovault/echovault.go:167.52,169.12 2 0 -github.com/echovault/echovault/echovault/echovault.go:171.3,171.41 1 0 -github.com/echovault/echovault/echovault/echovault.go:175.2,175.52 1 1 -github.com/echovault/echovault/echovault/echovault.go:175.52,177.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:180.2,180.42 1 1 -github.com/echovault/echovault/echovault/echovault.go:180.42,182.3 1 1 -github.com/echovault/echovault/echovault/echovault.go:185.2,186.40 2 1 -github.com/echovault/echovault/echovault/echovault.go:186.40,188.3 1 1 -github.com/echovault/echovault/echovault/echovault.go:191.2,192.43 2 1 -github.com/echovault/echovault/echovault/echovault.go:192.43,194.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:196.2,196.29 1 1 -github.com/echovault/echovault/echovault/echovault.go:196.29,209.49 1 1 -github.com/echovault/echovault/echovault/echovault.go:209.49,211.44 2 0 -github.com/echovault/echovault/echovault/echovault.go:211.44,212.46 1 0 -github.com/echovault/echovault/echovault/echovault.go:212.46,214.7 1 0 -github.com/echovault/echovault/echovault/echovault.go:216.5,216.17 1 0 -github.com/echovault/echovault/echovault/echovault.go:219.3,227.5 1 1 -github.com/echovault/echovault/echovault/echovault.go:228.8,239.65 1 1 -github.com/echovault/echovault/echovault/echovault.go:239.65,241.44 2 0 -github.com/echovault/echovault/echovault/echovault.go:241.44,242.46 1 0 -github.com/echovault/echovault/echovault/echovault.go:242.46,244.7 1 0 -github.com/echovault/echovault/echovault/echovault.go:246.5,246.17 1 0 -github.com/echovault/echovault/echovault/echovault.go:248.72,250.67 2 0 -github.com/echovault/echovault/echovault/echovault.go:250.67,252.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:253.5,253.68 1 0 -github.com/echovault/echovault/echovault/echovault.go:253.68,255.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:256.5,257.34 2 0 -github.com/echovault/echovault/echovault/echovault.go:261.3,267.60 1 1 -github.com/echovault/echovault/echovault/echovault.go:267.60,269.44 2 0 -github.com/echovault/echovault/echovault/echovault.go:269.44,270.46 1 0 -github.com/echovault/echovault/echovault/echovault.go:270.46,272.7 1 0 -github.com/echovault/echovault/echovault/echovault.go:274.5,274.17 1 0 -github.com/echovault/echovault/echovault/echovault.go:276.68,278.67 2 0 -github.com/echovault/echovault/echovault/echovault.go:278.67,280.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:281.5,281.69 1 0 -github.com/echovault/echovault/echovault/echovault.go:281.69,283.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:284.5,285.34 2 0 -github.com/echovault/echovault/echovault/echovault.go:287.51,289.19 2 0 -github.com/echovault/echovault/echovault/echovault.go:289.19,291.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:294.3,294.17 1 1 -github.com/echovault/echovault/echovault/echovault.go:294.17,296.4 1 0 -github.com/echovault/echovault/echovault/echovault.go:297.3,297.34 1 1 -github.com/echovault/echovault/echovault/echovault.go:301.2,301.61 1 1 -github.com/echovault/echovault/echovault/echovault.go:301.61,302.13 1 1 -github.com/echovault/echovault/echovault/echovault.go:302.13,303.8 1 1 -github.com/echovault/echovault/echovault/echovault.go:303.8,305.83 2 1 -github.com/echovault/echovault/echovault/echovault.go:305.83,307.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:312.2,312.69 1 1 -github.com/echovault/echovault/echovault/echovault.go:312.69,314.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:316.2,316.29 1 1 -github.com/echovault/echovault/echovault/echovault.go:316.29,320.36 3 1 -github.com/echovault/echovault/echovault/echovault.go:320.36,322.4 1 0 -github.com/echovault/echovault/echovault/echovault.go:325.2,325.30 1 1 -github.com/echovault/echovault/echovault/echovault.go:325.30,328.34 2 1 -github.com/echovault/echovault/echovault/echovault.go:328.34,330.18 2 0 -github.com/echovault/echovault/echovault/echovault.go:330.18,332.5 1 0 -github.com/echovault/echovault/echovault/echovault.go:336.3,336.71 1 1 -github.com/echovault/echovault/echovault/echovault.go:336.71,338.18 2 0 -github.com/echovault/echovault/echovault/echovault.go:338.18,340.5 1 0 -github.com/echovault/echovault/echovault/echovault.go:344.2,344.23 1 1 -github.com/echovault/echovault/echovault/echovault.go:347.37,356.16 4 1 -github.com/echovault/echovault/echovault/echovault.go:356.16,358.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:360.2,360.15 1 1 -github.com/echovault/echovault/echovault/echovault.go:360.15,363.3 1 1 -github.com/echovault/echovault/echovault/echovault.go:365.2,365.27 1 1 -github.com/echovault/echovault/echovault/echovault.go:365.27,367.15 1 0 -github.com/echovault/echovault/echovault/echovault.go:367.15,369.4 1 0 -github.com/echovault/echovault/echovault/echovault.go:369.9,371.4 1 0 -github.com/echovault/echovault/echovault/echovault.go:373.3,374.49 2 0 -github.com/echovault/echovault/echovault/echovault.go:374.49,376.18 2 0 -github.com/echovault/echovault/echovault/echovault.go:376.18,378.5 1 0 -github.com/echovault/echovault/echovault/echovault.go:379.4,379.42 1 0 -github.com/echovault/echovault/echovault/echovault.go:382.3,385.16 3 0 -github.com/echovault/echovault/echovault/echovault.go:385.16,387.37 2 0 -github.com/echovault/echovault/echovault/echovault.go:387.37,389.19 2 0 -github.com/echovault/echovault/echovault/echovault.go:389.19,391.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:392.5,393.19 2 0 -github.com/echovault/echovault/echovault/echovault.go:393.19,395.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:396.5,396.61 1 0 -github.com/echovault/echovault/echovault/echovault.go:396.61,398.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:402.3,406.5 1 0 -github.com/echovault/echovault/echovault/echovault.go:410.2,410.6 1 1 -github.com/echovault/echovault/echovault/echovault.go:410.6,412.17 2 1 -github.com/echovault/echovault/echovault/echovault.go:412.17,414.12 2 0 -github.com/echovault/echovault/echovault/echovault.go:417.3,417.35 1 1 -github.com/echovault/echovault/echovault/echovault.go:421.58,423.23 1 1 -github.com/echovault/echovault/echovault/echovault.go:423.23,425.3 1 1 -github.com/echovault/echovault/echovault/echovault.go:427.2,433.6 4 1 -github.com/echovault/echovault/echovault/echovault.go:433.6,436.43 2 1 -github.com/echovault/echovault/echovault/echovault.go:436.43,439.9 2 0 -github.com/echovault/echovault/echovault/echovault.go:442.3,442.17 1 1 -github.com/echovault/echovault/echovault/echovault.go:442.17,444.9 2 0 -github.com/echovault/echovault/echovault/echovault.go:447.3,449.43 2 1 -github.com/echovault/echovault/echovault/echovault.go:449.43,450.9 1 0 -github.com/echovault/echovault/echovault/echovault.go:453.3,453.17 1 1 -github.com/echovault/echovault/echovault/echovault.go:453.17,454.87 1 0 -github.com/echovault/echovault/echovault/echovault.go:454.87,456.5 1 0 -github.com/echovault/echovault/echovault/echovault.go:457.4,457.12 1 0 -github.com/echovault/echovault/echovault/echovault.go:460.3,463.20 2 1 -github.com/echovault/echovault/echovault/echovault.go:463.20,464.12 1 0 -github.com/echovault/echovault/echovault/echovault.go:467.3,467.28 1 1 -github.com/echovault/echovault/echovault/echovault.go:467.28,469.12 2 1 -github.com/echovault/echovault/echovault/echovault.go:473.3,474.7 2 0 -github.com/echovault/echovault/echovault/echovault.go:474.7,476.41 1 0 -github.com/echovault/echovault/echovault/echovault.go:476.41,478.19 2 0 -github.com/echovault/echovault/echovault/echovault.go:478.19,480.6 1 0 -github.com/echovault/echovault/echovault/echovault.go:481.5,481.10 1 0 -github.com/echovault/echovault/echovault/echovault.go:483.4,484.21 2 0 -github.com/echovault/echovault/echovault/echovault.go:484.21,485.10 1 0 -github.com/echovault/echovault/echovault/echovault.go:487.4,487.27 1 0 -github.com/echovault/echovault/echovault/echovault.go:491.2,491.37 1 0 -github.com/echovault/echovault/echovault/echovault.go:491.37,493.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:501.34,503.2 1 1 -github.com/echovault/echovault/echovault/echovault.go:506.47,507.38 1 0 -github.com/echovault/echovault/echovault/echovault.go:507.38,509.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:511.2,511.12 1 0 -github.com/echovault/echovault/echovault/echovault.go:511.12,512.27 1 0 -github.com/echovault/echovault/echovault/echovault.go:512.27,514.53 1 0 -github.com/echovault/echovault/echovault/echovault.go:514.53,516.5 1 0 -github.com/echovault/echovault/echovault/echovault.go:517.4,517.10 1 0 -github.com/echovault/echovault/echovault/echovault.go:520.3,520.62 1 0 -github.com/echovault/echovault/echovault/echovault.go:520.62,522.4 1 0 -github.com/echovault/echovault/echovault/echovault.go:525.2,525.12 1 0 -github.com/echovault/echovault/echovault/echovault.go:528.42,530.2 1 0 -github.com/echovault/echovault/echovault/echovault.go:532.43,534.2 1 0 -github.com/echovault/echovault/echovault/echovault.go:536.56,538.2 1 0 -github.com/echovault/echovault/echovault/echovault.go:541.56,543.2 1 0 -github.com/echovault/echovault/echovault/echovault.go:545.44,547.2 1 0 -github.com/echovault/echovault/echovault/echovault.go:549.45,551.2 1 0 -github.com/echovault/echovault/echovault/echovault.go:554.45,555.40 1 0 -github.com/echovault/echovault/echovault/echovault.go:555.40,557.3 1 0 -github.com/echovault/echovault/echovault/echovault.go:558.2,558.12 1 0 -github.com/echovault/echovault/echovault/echovault.go:558.12,559.55 1 0 -github.com/echovault/echovault/echovault/echovault.go:559.55,561.4 1 0 -github.com/echovault/echovault/echovault/echovault.go:563.2,563.12 1 0 -github.com/echovault/echovault/echovault/echovault.go:568.37,569.26 1 0 -github.com/echovault/echovault/echovault/echovault.go:569.26,572.3 2 0 -github.com/echovault/echovault/echovault/echovault.go:575.45,592.2 2 1 -github.com/echovault/echovault/echovault/keyspace.go:38.81,41.34 2 1 -github.com/echovault/echovault/echovault/keyspace.go:41.34,44.3 2 1 -github.com/echovault/echovault/echovault/keyspace.go:46.2,46.6 1 1 -github.com/echovault/echovault/echovault/keyspace.go:46.6,47.10 1 1 -github.com/echovault/echovault/echovault/keyspace.go:48.11,49.35 1 1 -github.com/echovault/echovault/echovault/keyspace.go:49.35,51.5 1 1 -github.com/echovault/echovault/echovault/keyspace.go:52.4,53.10 2 1 -github.com/echovault/echovault/echovault/keyspace.go:53.10,55.5 1 1 -github.com/echovault/echovault/echovault/keyspace.go:56.21,57.36 1 0 -github.com/echovault/echovault/echovault/keyspace.go:66.67,67.39 1 1 -github.com/echovault/echovault/echovault/keyspace.go:67.39,69.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:77.82,80.34 2 1 -github.com/echovault/echovault/echovault/keyspace.go:80.34,83.3 2 1 -github.com/echovault/echovault/echovault/keyspace.go:85.2,85.6 1 1 -github.com/echovault/echovault/echovault/keyspace.go:85.6,86.10 1 1 -github.com/echovault/echovault/echovault/keyspace.go:87.11,88.35 1 1 -github.com/echovault/echovault/echovault/keyspace.go:88.35,90.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:91.4,92.10 2 1 -github.com/echovault/echovault/echovault/keyspace.go:92.10,94.5 1 1 -github.com/echovault/echovault/echovault/keyspace.go:95.21,96.36 1 0 -github.com/echovault/echovault/echovault/keyspace.go:105.68,106.39 1 1 -github.com/echovault/echovault/echovault/keyspace.go:106.39,108.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:116.74,119.9 3 1 -github.com/echovault/echovault/echovault/keyspace.go:119.9,122.3 2 1 -github.com/echovault/echovault/echovault/keyspace.go:123.2,125.82 2 1 -github.com/echovault/echovault/echovault/keyspace.go:125.82,126.28 1 0 -github.com/echovault/echovault/echovault/keyspace.go:126.28,129.18 2 0 -github.com/echovault/echovault/echovault/keyspace.go:129.18,131.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:132.9,132.64 1 0 -github.com/echovault/echovault/echovault/keyspace.go:132.64,135.18 2 0 -github.com/echovault/echovault/echovault/keyspace.go:135.18,137.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:138.9,138.65 1 0 -github.com/echovault/echovault/echovault/keyspace.go:138.65,143.4 1 0 -github.com/echovault/echovault/echovault/keyspace.go:145.3,145.15 1 0 -github.com/echovault/echovault/echovault/keyspace.go:148.2,148.13 1 1 -github.com/echovault/echovault/echovault/keyspace.go:156.90,157.115 1 1 -github.com/echovault/echovault/echovault/keyspace.go:157.115,159.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:161.2,164.33 3 1 -github.com/echovault/echovault/echovault/keyspace.go:164.33,175.3 5 1 -github.com/echovault/echovault/echovault/keyspace.go:177.2,177.33 1 1 -github.com/echovault/echovault/echovault/keyspace.go:182.80,183.58 1 1 -github.com/echovault/echovault/echovault/keyspace.go:183.58,185.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:186.2,186.32 1 1 -github.com/echovault/echovault/echovault/keyspace.go:193.93,194.115 1 1 -github.com/echovault/echovault/echovault/keyspace.go:194.115,196.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:198.2,204.16 3 1 -github.com/echovault/echovault/echovault/keyspace.go:204.16,206.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:208.2,208.27 1 1 -github.com/echovault/echovault/echovault/keyspace.go:208.27,210.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:212.2,212.12 1 1 -github.com/echovault/echovault/echovault/keyspace.go:217.79,218.58 1 1 -github.com/echovault/echovault/echovault/keyspace.go:218.58,220.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:221.2,221.35 1 1 -github.com/echovault/echovault/echovault/keyspace.go:230.101,238.55 3 1 -github.com/echovault/echovault/echovault/keyspace.go:238.55,240.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:241.2,244.11 2 1 -github.com/echovault/echovault/echovault/keyspace.go:244.11,246.17 2 1 -github.com/echovault/echovault/echovault/keyspace.go:246.17,248.4 1 0 -github.com/echovault/echovault/echovault/keyspace.go:254.70,263.97 4 1 -github.com/echovault/echovault/echovault/keyspace.go:263.97,265.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:273.60,275.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:275.6,276.83 1 0 -github.com/echovault/echovault/echovault/keyspace.go:276.83,278.9 2 0 -github.com/echovault/echovault/echovault/keyspace.go:281.2,282.33 2 0 -github.com/echovault/echovault/echovault/keyspace.go:282.33,284.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:285.2,286.13 2 0 -github.com/echovault/echovault/echovault/keyspace.go:293.75,294.52 1 1 -github.com/echovault/echovault/echovault/keyspace.go:294.52,296.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:299.2,306.9 4 1 -github.com/echovault/echovault/echovault/keyspace.go:307.108,308.36 1 0 -github.com/echovault/echovault/echovault/keyspace.go:309.108,310.36 1 0 -github.com/echovault/echovault/echovault/keyspace.go:315.2,315.12 1 1 -github.com/echovault/echovault/echovault/keyspace.go:320.82,322.83 1 1 -github.com/echovault/echovault/echovault/keyspace.go:322.83,324.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:326.2,326.34 1 1 -github.com/echovault/echovault/echovault/keyspace.go:326.34,328.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:329.2,329.55 1 0 -github.com/echovault/echovault/echovault/keyspace.go:330.28,333.36 3 0 -github.com/echovault/echovault/echovault/keyspace.go:334.28,337.36 3 0 -github.com/echovault/echovault/echovault/keyspace.go:338.29,341.50 3 0 -github.com/echovault/echovault/echovault/keyspace.go:341.50,343.4 1 0 -github.com/echovault/echovault/echovault/keyspace.go:344.29,347.50 3 0 -github.com/echovault/echovault/echovault/keyspace.go:347.50,349.4 1 0 -github.com/echovault/echovault/echovault/keyspace.go:351.2,351.54 1 0 -github.com/echovault/echovault/echovault/keyspace.go:351.54,353.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:354.2,354.12 1 0 -github.com/echovault/echovault/echovault/keyspace.go:358.71,360.34 1 0 -github.com/echovault/echovault/echovault/keyspace.go:360.34,362.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:365.2,368.50 3 0 -github.com/echovault/echovault/echovault/keyspace.go:368.50,370.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:372.2,374.50 3 0 -github.com/echovault/echovault/echovault/keyspace.go:374.50,376.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:380.2,380.9 1 0 -github.com/echovault/echovault/echovault/keyspace.go:381.125,386.7 3 0 -github.com/echovault/echovault/echovault/keyspace.go:386.7,388.40 1 0 -github.com/echovault/echovault/echovault/keyspace.go:388.40,390.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:392.4,393.29 2 0 -github.com/echovault/echovault/echovault/keyspace.go:393.29,395.54 1 0 -github.com/echovault/echovault/echovault/keyspace.go:395.54,397.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:398.10,398.65 1 0 -github.com/echovault/echovault/echovault/keyspace.go:398.65,400.63 1 0 -github.com/echovault/echovault/echovault/keyspace.go:400.63,402.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:406.4,409.52 3 0 -github.com/echovault/echovault/echovault/keyspace.go:409.52,411.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:413.125,418.7 3 0 -github.com/echovault/echovault/echovault/keyspace.go:418.7,420.40 1 0 -github.com/echovault/echovault/echovault/keyspace.go:420.40,422.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:424.4,425.29 2 0 -github.com/echovault/echovault/echovault/keyspace.go:425.29,427.54 1 0 -github.com/echovault/echovault/echovault/keyspace.go:427.54,429.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:430.10,430.65 1 0 -github.com/echovault/echovault/echovault/keyspace.go:430.65,433.63 1 0 -github.com/echovault/echovault/echovault/keyspace.go:433.63,435.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:439.4,442.52 3 0 -github.com/echovault/echovault/echovault/keyspace.go:442.52,444.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:446.105,449.7 1 0 -github.com/echovault/echovault/echovault/keyspace.go:449.7,451.33 1 0 -github.com/echovault/echovault/echovault/keyspace.go:451.33,454.5 2 0 -github.com/echovault/echovault/echovault/keyspace.go:456.4,457.40 2 0 -github.com/echovault/echovault/echovault/keyspace.go:457.40,458.17 1 0 -github.com/echovault/echovault/echovault/keyspace.go:458.17,459.31 1 0 -github.com/echovault/echovault/echovault/keyspace.go:459.31,461.56 1 0 -github.com/echovault/echovault/echovault/keyspace.go:461.56,463.8 1 0 -github.com/echovault/echovault/echovault/keyspace.go:464.12,464.67 1 0 -github.com/echovault/echovault/echovault/keyspace.go:464.67,465.65 1 0 -github.com/echovault/echovault/echovault/keyspace.go:465.65,467.8 1 0 -github.com/echovault/echovault/echovault/keyspace.go:470.6,473.54 3 0 -github.com/echovault/echovault/echovault/keyspace.go:473.54,475.7 1 0 -github.com/echovault/echovault/echovault/keyspace.go:477.5,477.10 1 0 -github.com/echovault/echovault/echovault/keyspace.go:480.106,483.7 1 0 -github.com/echovault/echovault/echovault/keyspace.go:483.7,490.29 5 0 -github.com/echovault/echovault/echovault/keyspace.go:490.29,492.54 1 0 -github.com/echovault/echovault/echovault/keyspace.go:492.54,494.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:495.10,495.65 1 0 -github.com/echovault/echovault/echovault/keyspace.go:495.65,496.63 1 0 -github.com/echovault/echovault/echovault/keyspace.go:496.63,498.6 1 0 -github.com/echovault/echovault/echovault/keyspace.go:502.4,505.52 3 0 -github.com/echovault/echovault/echovault/keyspace.go:505.52,507.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:509.10,510.13 1 0 -github.com/echovault/echovault/echovault/keyspace.go:519.77,521.57 1 1 -github.com/echovault/echovault/echovault/keyspace.go:521.57,523.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:525.2,530.50 3 1 -github.com/echovault/echovault/echovault/keyspace.go:530.50,532.3 1 0 -github.com/echovault/echovault/echovault/keyspace.go:533.2,540.33 6 1 -github.com/echovault/echovault/echovault/keyspace.go:540.33,541.7 1 0 -github.com/echovault/echovault/echovault/keyspace.go:541.7,545.35 3 0 -github.com/echovault/echovault/echovault/keyspace.go:545.35,547.10 2 0 -github.com/echovault/echovault/echovault/keyspace.go:551.2,554.25 2 1 -github.com/echovault/echovault/echovault/keyspace.go:554.25,555.52 1 0 -github.com/echovault/echovault/echovault/keyspace.go:555.52,556.12 1 0 -github.com/echovault/echovault/echovault/keyspace.go:560.3,560.57 1 0 -github.com/echovault/echovault/echovault/keyspace.go:560.57,562.12 2 0 -github.com/echovault/echovault/echovault/keyspace.go:566.3,568.28 3 0 -github.com/echovault/echovault/echovault/keyspace.go:568.28,569.51 1 0 -github.com/echovault/echovault/echovault/keyspace.go:569.51,571.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:572.9,572.64 1 0 -github.com/echovault/echovault/echovault/keyspace.go:572.64,573.60 1 0 -github.com/echovault/echovault/echovault/keyspace.go:573.60,575.5 1 0 -github.com/echovault/echovault/echovault/keyspace.go:580.2,580.21 1 1 -github.com/echovault/echovault/echovault/keyspace.go:580.21,583.3 1 1 -github.com/echovault/echovault/echovault/keyspace.go:585.2,588.58 2 0 -github.com/echovault/echovault/echovault/keyspace.go:588.58,592.3 2 0 -github.com/echovault/echovault/echovault/keyspace.go:594.2,594.12 1 0 -github.com/echovault/echovault/echovault/modules.go:27.75,30.42 3 1 -github.com/echovault/echovault/echovault/modules.go:30.42,31.46 1 1 -github.com/echovault/echovault/echovault/modules.go:31.46,33.4 1 1 -github.com/echovault/echovault/echovault/modules.go:35.2,35.72 1 1 -github.com/echovault/echovault/echovault/modules.go:38.125,65.2 1 1 -github.com/echovault/echovault/echovault/modules.go:67.137,69.16 2 1 -github.com/echovault/echovault/echovault/modules.go:69.16,71.3 1 0 -github.com/echovault/echovault/echovault/modules.go:73.2,74.16 2 1 -github.com/echovault/echovault/echovault/modules.go:74.16,76.3 1 1 -github.com/echovault/echovault/echovault/modules.go:78.2,82.16 4 1 -github.com/echovault/echovault/echovault/modules.go:82.16,84.3 1 1 -github.com/echovault/echovault/echovault/modules.go:85.2,86.8 2 1 -github.com/echovault/echovault/echovault/modules.go:86.8,89.3 2 1 -github.com/echovault/echovault/echovault/modules.go:91.2,91.51 1 1 -github.com/echovault/echovault/echovault/modules.go:91.51,94.87 1 1 -github.com/echovault/echovault/echovault/modules.go:94.87,96.4 1 0 -github.com/echovault/echovault/echovault/modules.go:100.2,100.50 1 1 -github.com/echovault/echovault/echovault/modules.go:100.50,101.7 1 1 -github.com/echovault/echovault/echovault/modules.go:101.7,102.42 1 1 -github.com/echovault/echovault/echovault/modules.go:102.42,104.10 2 1 -github.com/echovault/echovault/echovault/modules.go:109.2,109.43 1 1 -github.com/echovault/echovault/echovault/modules.go:109.43,111.17 2 1 -github.com/echovault/echovault/echovault/modules.go:111.17,113.4 1 1 -github.com/echovault/echovault/echovault/modules.go:115.3,115.62 1 1 -github.com/echovault/echovault/echovault/modules.go:115.62,117.4 1 1 -github.com/echovault/echovault/echovault/modules.go:119.3,121.18 2 1 -github.com/echovault/echovault/echovault/modules.go:125.2,125.32 1 1 -github.com/echovault/echovault/echovault/modules.go:125.32,128.17 3 1 -github.com/echovault/echovault/echovault/modules.go:128.17,130.4 1 0 -github.com/echovault/echovault/echovault/modules.go:131.3,131.18 1 1 -github.com/echovault/echovault/echovault/modules.go:135.2,135.34 1 0 -github.com/echovault/echovault/echovault/modules.go:135.34,138.3 2 0 -github.com/echovault/echovault/echovault/modules.go:140.2,140.72 1 0 -github.com/echovault/echovault/echovault/plugin.go:37.72,41.41 3 1 -github.com/echovault/echovault/echovault/plugin.go:41.41,42.37 1 1 -github.com/echovault/echovault/echovault/plugin.go:42.37,44.4 1 1 -github.com/echovault/echovault/echovault/plugin.go:45.3,45.44 1 0 -github.com/echovault/echovault/echovault/plugin.go:48.2,49.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:49.16,51.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:53.2,54.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:54.16,56.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:57.2,58.9 2 1 -github.com/echovault/echovault/echovault/plugin.go:58.9,60.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:62.2,63.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:63.16,65.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:66.2,67.9 2 1 -github.com/echovault/echovault/echovault/plugin.go:67.9,69.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:71.2,72.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:72.16,74.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:75.2,76.9 2 1 -github.com/echovault/echovault/echovault/plugin.go:76.9,78.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:80.2,81.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:81.16,83.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:84.2,85.9 2 1 -github.com/echovault/echovault/echovault/plugin.go:85.9,87.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:89.2,90.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:90.16,92.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:93.2,94.9 2 1 -github.com/echovault/echovault/echovault/plugin.go:94.9,96.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:98.2,99.16 2 1 -github.com/echovault/echovault/echovault/plugin.go:99.16,101.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:102.2,115.9 2 1 -github.com/echovault/echovault/echovault/plugin.go:115.9,117.3 1 0 -github.com/echovault/echovault/echovault/plugin.go:120.2,120.91 1 1 -github.com/echovault/echovault/echovault/plugin.go:120.91,122.3 1 1 -github.com/echovault/echovault/echovault/plugin.go:125.2,128.31 1 1 -github.com/echovault/echovault/echovault/plugin.go:128.31,131.36 2 1 -github.com/echovault/echovault/echovault/plugin.go:131.36,133.5 1 1 -github.com/echovault/echovault/echovault/plugin.go:134.4,134.15 1 1 -github.com/echovault/echovault/echovault/plugin.go:139.83,141.18 2 0 -github.com/echovault/echovault/echovault/plugin.go:141.18,143.5 1 0 -github.com/echovault/echovault/echovault/plugin.go:144.4,148.10 1 0 -github.com/echovault/echovault/echovault/plugin.go:150.72,164.4 1 1 -github.com/echovault/echovault/echovault/plugin.go:167.2,167.12 1 1 -github.com/echovault/echovault/echovault/plugin.go:175.54,178.91 3 1 -github.com/echovault/echovault/echovault/plugin.go:178.91,180.3 1 1 -github.com/echovault/echovault/echovault/plugin.go:186.49,190.42 4 1 -github.com/echovault/echovault/echovault/plugin.go:190.42,191.61 1 1 -github.com/echovault/echovault/echovault/plugin.go:191.61,193.4 1 1 -github.com/echovault/echovault/echovault/plugin.go:193.6,195.4 1 1 -github.com/echovault/echovault/echovault/plugin.go:197.2,197.16 1 1 -github.com/echovault/echovault/echovault/test_helpers.go:9.35,16.2 2 1 -github.com/echovault/echovault/echovault/test_helpers.go:18.95,19.61 1 1 -github.com/echovault/echovault/echovault/test_helpers.go:19.61,21.3 1 0 -github.com/echovault/echovault/echovault/test_helpers.go:22.2,22.57 1 1 -github.com/echovault/echovault/echovault/test_helpers.go:22.57,24.3 1 0 -github.com/echovault/echovault/echovault/test_helpers.go:25.2,26.12 2 1 -github.com/echovault/echovault/echovault/test_helpers.go:29.95,34.2 4 1 diff --git a/echovault/echovault.go b/echovault/echovault.go index 8ea688b..5258389 100644 --- a/echovault/echovault.go +++ b/echovault/echovault.go @@ -34,6 +34,7 @@ import ( "github.com/echovault/echovault/internal/modules/hash" "github.com/echovault/echovault/internal/modules/list" "github.com/echovault/echovault/internal/modules/pubsub" + "github.com/echovault/echovault/internal/modules/set" "github.com/echovault/echovault/internal/raft" "github.com/echovault/echovault/internal/snapshot" "io" @@ -139,7 +140,7 @@ func NewEchoVault(options ...func(echovault *EchoVault)) (*EchoVault, error) { commands = append(commands, hash.Commands()...) commands = append(commands, list.Commands()...) commands = append(commands, pubsub.Commands()...) - // commands = append(commands, set.Commands()...) + commands = append(commands, set.Commands()...) // commands = append(commands, sorted_set.Commands()...) // commands = append(commands, str.Commands()...) return commands diff --git a/internal/modules/set/commands.go b/internal/modules/set/commands.go index f32e732..225022d 100644 --- a/internal/modules/set/commands.go +++ b/internal/modules/set/commands.go @@ -30,27 +30,19 @@ func handleSADD(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.WriteKeys[0] + keyExists := params.KeysExist(keys.WriteKeys)[key] var set *Set - if !params.KeyExists(params.Context, key) { + if !keyExists { set = NewSet(params.Command[2:]) - if ok, err := params.CreateKeyAndLock(params.Context, key); !ok && err != nil { + if err = params.SetValues(params.Context, map[string]interface{}{key: set}); err != nil { return nil, err } - if err = params.SetValue(params.Context, key, set); err != nil { - return nil, err - } - params.KeyUnlock(params.Context, key) return []byte(fmt.Sprintf(":%d\r\n", len(params.Command[2:]))), nil } - if _, err = params.KeyLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -67,17 +59,13 @@ func handleSCARD(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.ReadKeys[0] + keyExists := params.KeysExist(keys.ReadKeys)[key] - if !params.KeyExists(params.Context, key) { + if !keyExists { return []byte(fmt.Sprintf(":0\r\n")), nil } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyRUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -93,41 +81,21 @@ func handleSDIFF(params internal.HandlerFuncParams) ([]byte, error) { return nil, err } + keyExists := params.KeysExist(keys.ReadKeys) + // Extract base set first - if !params.KeyExists(params.Context, keys.ReadKeys[0]) { + if !keyExists[keys.ReadKeys[0]] { return nil, fmt.Errorf("key for base set \"%s\" does not exist", keys.ReadKeys[0]) } - if _, err = params.KeyRLock(params.Context, keys.ReadKeys[0]); err != nil { - return nil, err - } - defer params.KeyRUnlock(params.Context, keys.ReadKeys[0]) - baseSet, ok := params.GetValue(params.Context, keys.ReadKeys[0]).(*Set) + + baseSet, ok := params.GetValues(params.Context, []string{keys.ReadKeys[0]})[keys.ReadKeys[0]].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", keys.ReadKeys[0]) } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys[1:] { - if !params.KeyExists(params.Context, key) { - continue - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - continue - } - locks[key] = true - } - var sets []*Set for _, key := range params.Command[2:] { - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { continue } @@ -155,42 +123,21 @@ func handleSDIFFSTORE(params internal.HandlerFuncParams) ([]byte, error) { } destination := keys.WriteKeys[0] + keyExists := params.KeysExist(append(keys.WriteKeys, keys.ReadKeys...)) // Extract base set first - if !params.KeyExists(params.Context, keys.ReadKeys[0]) { + if !keyExists[keys.ReadKeys[0]] { return nil, fmt.Errorf("key for base set \"%s\" does not exist", keys.ReadKeys[0]) } - if _, err := params.KeyRLock(params.Context, keys.ReadKeys[0]); err != nil { - return nil, err - } - defer params.KeyRUnlock(params.Context, keys.ReadKeys[0]) - baseSet, ok := params.GetValue(params.Context, keys.ReadKeys[0]).(*Set) + + baseSet, ok := params.GetValues(params.Context, []string{keys.ReadKeys[0]})[keys.ReadKeys[0]].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", keys.ReadKeys[0]) } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys[1:] { - if !params.KeyExists(params.Context, key) { - continue - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - continue - } - locks[key] = true - } - var sets []*Set for _, key := range keys.ReadKeys[1:] { - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { continue } @@ -202,24 +149,9 @@ func handleSDIFFSTORE(params internal.HandlerFuncParams) ([]byte, error) { res := fmt.Sprintf(":%d\r\n", len(elems)) - if params.KeyExists(params.Context, destination) { - if _, err = params.KeyLock(params.Context, destination); err != nil { - return nil, err - } - if err = params.SetValue(params.Context, destination, diff); err != nil { - return nil, err - } - params.KeyUnlock(params.Context, destination) - return []byte(res), nil - } - - if _, err = params.CreateKeyAndLock(params.Context, destination); err != nil { + if err = params.SetValues(params.Context, map[string]interface{}{destination: diff}); err != nil { return nil, err } - if err = params.SetValue(params.Context, destination, diff); err != nil { - return nil, err - } - params.KeyUnlock(params.Context, destination) return []byte(res), nil } @@ -230,30 +162,15 @@ func handleSINTER(params internal.HandlerFuncParams) ([]byte, error) { return nil, err } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys { - if !params.KeyExists(params.Context, key) { - // If key does not exist, then there is no intersection - return []byte("*0\r\n"), nil - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - locks[key] = true - } + keyExists := params.KeysExist(keys.ReadKeys) var sets []*Set - for key, _ := range locks { - set, ok := params.GetValue(params.Context, key).(*Set) + for key, exists := range keyExists { + if !exists { + return []byte("*0\r\n"), nil + } + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { // If the value at the key is not a set, return error return nil, fmt.Errorf("value at key %s is not a set", key) @@ -285,6 +202,8 @@ func handleSINTERCARD(params internal.HandlerFuncParams) ([]byte, error) { return nil, err } + keyExists := params.KeysExist(keys.ReadKeys) + // Extract the limit from the command var limit int limitIdx := slices.IndexFunc(params.Command, func(s string) bool { @@ -306,30 +225,13 @@ func handleSINTERCARD(params internal.HandlerFuncParams) ([]byte, error) { } } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys { - if !params.KeyExists(params.Context, key) { - // If key does not exist, then there is no intersection - return []byte(":0\r\n"), nil - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - locks[key] = true - } - var sets []*Set - for key, _ := range locks { - set, ok := params.GetValue(params.Context, key).(*Set) + for key, exists := range keyExists { + if !exists { + return []byte(":0\r\n"), nil + } + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { // If the value at the key is not a set, return error return nil, fmt.Errorf("value at key %s is not a set", key) @@ -352,30 +254,15 @@ func handleSINTERSTORE(params internal.HandlerFuncParams) ([]byte, error) { return nil, err } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys { - if !params.KeyExists(params.Context, key) { - // If key does not exist, then there is no intersection - return []byte(":0\r\n"), nil - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - locks[key] = true - } + keyExists := params.KeysExist(keys.ReadKeys) var sets []*Set - for key, _ := range locks { - set, ok := params.GetValue(params.Context, key).(*Set) + for key, exists := range keyExists { + if !exists { + return []byte(":0\r\n"), err + } + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { // If the value at the key is not a set, return error return nil, fmt.Errorf("value at key %s is not a set", key) @@ -386,20 +273,9 @@ func handleSINTERSTORE(params internal.HandlerFuncParams) ([]byte, error) { intersect, _ := Intersection(0, sets...) destination := keys.WriteKeys[0] - if params.KeyExists(params.Context, destination) { - if _, err = params.KeyLock(params.Context, destination); err != nil { - return nil, err - } - } else { - if _, err = params.CreateKeyAndLock(params.Context, destination); err != nil { - return nil, err - } - } - - if err = params.SetValue(params.Context, destination, intersect); err != nil { + if err = params.SetValues(params.Context, map[string]interface{}{destination: intersect}); err != nil { return nil, err } - params.KeyUnlock(params.Context, destination) return []byte(fmt.Sprintf(":%d\r\n", intersect.Cardinality())), nil } @@ -411,17 +287,13 @@ func handleSISMEMBER(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.ReadKeys[0] + keyExists := params.KeysExist(keys.ReadKeys)[key] - if !params.KeyExists(params.Context, key) { + if !keyExists { return []byte(":0\r\n"), nil } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyRUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -440,17 +312,13 @@ func handleSMEMBERS(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.ReadKeys[0] + keyExists := params.KeysExist(keys.ReadKeys)[key] - if !params.KeyExists(params.Context, key) { + if !keyExists { return []byte("*0\r\n"), nil } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyRUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -475,9 +343,10 @@ func handleSMISMEMBER(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.ReadKeys[0] + keyExists := params.KeysExist(keys.ReadKeys)[key] members := params.Command[2:] - if !params.KeyExists(params.Context, key) { + if !keyExists { res := fmt.Sprintf("*%d", len(members)) for i, _ := range members { res = fmt.Sprintf("%s\r\n:0", res) @@ -488,12 +357,7 @@ func handleSMISMEMBER(params internal.HandlerFuncParams) ([]byte, error) { return []byte(res), nil } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyRUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -518,45 +382,23 @@ func handleSMOVE(params internal.HandlerFuncParams) ([]byte, error) { } source, destination := keys.WriteKeys[0], keys.WriteKeys[1] + keyExists := params.KeysExist(keys.WriteKeys) member := params.Command[3] - if !params.KeyExists(params.Context, source) { + if !keyExists[source] { return []byte(":0\r\n"), nil } - if _, err = params.KeyLock(params.Context, source); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, source) + sets := params.GetValues(params.Context, keys.WriteKeys) - sourceSet, ok := params.GetValue(params.Context, source).(*Set) + sourceSet, ok := sets[source].(*Set) if !ok { return nil, errors.New("source is not a set") } - var destinationSet *Set - - if !params.KeyExists(params.Context, destination) { - // Destination key does not exist - if _, err = params.CreateKeyAndLock(params.Context, destination); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, destination) - destinationSet = NewSet([]string{}) - if err = params.SetValue(params.Context, destination, destinationSet); err != nil { - return nil, err - } - } else { - // Destination key exists - if _, err := params.KeyLock(params.Context, destination); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, destination) - ds, ok := params.GetValue(params.Context, destination).(*Set) - if !ok { - return nil, errors.New("destination is not a set") - } - destinationSet = ds + destinationSet, ok := sets[destination].(*Set) + if !ok { + return nil, errors.New("destination is not a set") } res := sourceSet.Move(destinationSet, member) @@ -571,6 +413,7 @@ func handleSPOP(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.WriteKeys[0] + keyExists := params.KeysExist(keys.WriteKeys)[key] count := 1 if len(params.Command) == 3 { @@ -581,16 +424,11 @@ func handleSPOP(params internal.HandlerFuncParams) ([]byte, error) { count = c } - if !params.KeyExists(params.Context, key) { + if !keyExists { return []byte("*-1\r\n"), nil } - if _, err = params.KeyLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at %s is not a set", key) } @@ -615,6 +453,7 @@ func handleSRANDMEMBER(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.ReadKeys[0] + keyExists := params.KeysExist(keys.ReadKeys)[key] count := 1 if len(params.Command) == 3 { @@ -625,16 +464,11 @@ func handleSRANDMEMBER(params internal.HandlerFuncParams) ([]byte, error) { count = c } - if !params.KeyExists(params.Context, key) { + if !keyExists { return []byte("*-1\r\n"), nil } - if _, err = params.KeyLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at %s is not a set", key) } @@ -659,18 +493,14 @@ func handleSREM(params internal.HandlerFuncParams) ([]byte, error) { } key := keys.WriteKeys[0] + keyExists := params.KeysExist(keys.WriteKeys)[key] members := params.Command[2:] - if !params.KeyExists(params.Context, key) { + if !keyExists { return []byte(":0\r\n"), nil } - if _, err = params.KeyLock(params.Context, key); err != nil { - return nil, err - } - defer params.KeyUnlock(params.Context, key) - - set, ok := params.GetValue(params.Context, key).(*Set) + set, ok := params.GetValues(params.Context, []string{key})[key].(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -686,32 +516,11 @@ func handleSUNION(params internal.HandlerFuncParams) ([]byte, error) { return nil, err } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys { - if !params.KeyExists(params.Context, key) { - continue - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - locks[key] = true - } - var sets []*Set - for key, locked := range locks { - if !locked { - continue - } - set, ok := params.GetValue(params.Context, key).(*Set) + values := params.GetValues(params.Context, keys.ReadKeys) + for key, value := range values { + set, ok := value.(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -737,32 +546,13 @@ func handleSUNIONSTORE(params internal.HandlerFuncParams) ([]byte, error) { return nil, err } - locks := make(map[string]bool) - defer func() { - for key, locked := range locks { - if locked { - params.KeyRUnlock(params.Context, key) - } - } - }() - - for _, key := range keys.ReadKeys { - if !params.KeyExists(params.Context, key) { - continue - } - if _, err = params.KeyRLock(params.Context, key); err != nil { - return nil, err - } - locks[key] = true - } + destination := keys.WriteKeys[0] var sets []*Set - for key, locked := range locks { - if !locked { - continue - } - set, ok := params.GetValue(params.Context, key).(*Set) + values := params.GetValues(params.Context, keys.ReadKeys) + for key, value := range values { + set, ok := value.(*Set) if !ok { return nil, fmt.Errorf("value at key %s is not a set", key) } @@ -771,20 +561,7 @@ func handleSUNIONSTORE(params internal.HandlerFuncParams) ([]byte, error) { union := Union(sets...) - destination := keys.WriteKeys[0] - - if params.KeyExists(params.Context, destination) { - if _, err = params.KeyLock(params.Context, destination); err != nil { - return nil, err - } - } else { - if _, err = params.CreateKeyAndLock(params.Context, destination); err != nil { - return nil, err - } - } - defer params.KeyUnlock(params.Context, destination) - - if err = params.SetValue(params.Context, destination, union); err != nil { + if err = params.SetValues(params.Context, map[string]interface{}{destination: union}); err != nil { return nil, err } return []byte(fmt.Sprintf(":%d\r\n", union.Cardinality())), nil diff --git a/internal/modules/set/commands_test.go b/internal/modules/set/commands_test.go index 4c20d4c..9f5b99b 100644 --- a/internal/modules/set/commands_test.go +++ b/internal/modules/set/commands_test.go @@ -15,8 +15,6 @@ package set_test import ( - "bytes" - "context" "errors" "fmt" "github.com/echovault/echovault/echovault" @@ -26,68 +24,43 @@ import ( "github.com/echovault/echovault/internal/modules/set" "github.com/tidwall/resp" "net" - "reflect" "slices" + "strconv" "strings" + "sync" "testing" - "unsafe" ) var mockServer *echovault.EchoVault +var addr = "localhost" +var port int func init() { + port, _ = internal.GetFreePort() mockServer, _ = echovault.NewEchoVault( echovault.WithConfig(config.Config{ + BindAddr: addr, + Port: uint16(port), DataDir: "", EvictionPolicy: constants.NoEviction, }), ) -} - -func getUnexportedField(field reflect.Value) interface{} { - return reflect.NewAt(field.Type(), unsafe.Pointer(field.UnsafeAddr())).Elem().Interface() -} - -func getHandler(commands ...string) internal.HandlerFunc { - if len(commands) == 0 { - return nil - } - getCommands := - getUnexportedField(reflect.ValueOf(mockServer).Elem().FieldByName("getCommands")).(func() []internal.Command) - for _, c := range getCommands() { - if strings.EqualFold(commands[0], c.Command) && len(commands) == 1 { - // Get command handler - return c.HandlerFunc - } - if strings.EqualFold(commands[0], c.Command) { - // Get sub-command handler - for _, sc := range c.SubCommands { - if strings.EqualFold(commands[1], sc.Command) { - return sc.HandlerFunc - } - } - } - } - return nil -} - -func getHandlerFuncParams(ctx context.Context, cmd []string, conn *net.Conn) internal.HandlerFuncParams { - return internal.HandlerFuncParams{ - Context: ctx, - Command: cmd, - Connection: conn, - KeyExists: mockServer.KeyExists, - CreateKeyAndLock: mockServer.CreateKeyAndLock, - KeyLock: mockServer.KeyLock, - KeyRLock: mockServer.KeyRLock, - KeyUnlock: mockServer.KeyUnlock, - KeyRUnlock: mockServer.KeyRUnlock, - GetValue: mockServer.GetValue, - SetValue: mockServer.SetValue, - } + wg := sync.WaitGroup{} + wg.Add(1) + go func() { + wg.Done() + mockServer.Start() + }() + wg.Wait() } func Test_HandleSADD(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string preset bool @@ -138,69 +111,101 @@ func Test_HandleSADD(t *testing.T) { }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SADD, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + } if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) + } + + // Check if the resulting set(s) contain the expected members. + if test.expectedValue == nil { + return + } + + if err := client.WriteArray([]resp.Value{resp.StringValue("SMEMBERS"), resp.StringValue(test.key)}); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() if err != nil { t.Error(err) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) + + if len(res.Array()) != test.expectedValue.Cardinality() { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.key, test.expectedValue.Cardinality(), len(res.Array())) } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected integer response %d, got %d", test.expectedResponse, rv.Integer()) - } - if _, err = mockServer.KeyRLock(ctx, test.key); err != nil { - t.Error(err) - } - currSet, ok := mockServer.GetValue(ctx, test.key).(*set.Set) - if !ok { - t.Errorf("expected set value at key \"%s\"", test.key) - } - if currSet.Cardinality() != test.expectedValue.Cardinality() { - t.Errorf("expected resulting cardinality to be %d, got %d", test.expectedValue.Cardinality(), currSet.Cardinality()) - } - for _, member := range currSet.GetAll() { - if !test.expectedValue.Contains(member) { - t.Errorf("could not find member \"%s\" in expected set", member) + + for _, item := range res.Array() { + if !test.expectedValue.Contains(item.String()) { + t.Errorf("unexpected memeber \"%s\", in response", item.String()) } } - mockServer.KeyRUnlock(ctx, test.key) }) } } func Test_HandleSCARD(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValue interface{} key string command []string @@ -210,7 +215,6 @@ func Test_HandleSCARD(t *testing.T) { }{ { name: "1. Get cardinality of valid set.", - preset: true, presetValue: set.NewSet([]string{"one", "two", "three", "four"}), key: "ScardKey1", command: []string{"SCARD", "ScardKey1"}, @@ -220,7 +224,6 @@ func Test_HandleSCARD(t *testing.T) { }, { name: "2. Return 0 when trying to get cardinality on non-existent key", - preset: false, presetValue: nil, key: "ScardKey2", command: []string{"SCARD", "ScardKey2"}, @@ -230,7 +233,6 @@ func Test_HandleSCARD(t *testing.T) { }, { name: "3. Throw error when trying to get cardinality of a value that is not a set", - preset: true, presetValue: "Default value", key: "ScardKey3", command: []string{"SCARD", "ScardKey3"}, @@ -239,7 +241,6 @@ func Test_HandleSCARD(t *testing.T) { }, { name: "4. Command too short", - preset: false, key: "ScardKey4", command: []string{"SCARD"}, expectedValue: nil, @@ -248,7 +249,6 @@ func Test_HandleSCARD(t *testing.T) { }, { name: "5. Command too long", - preset: false, key: "ScardKey5", command: []string{"SCARD", "ScardKey5", "ScardKey5"}, expectedValue: nil, @@ -257,61 +257,84 @@ func Test_HandleSCARD(t *testing.T) { }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SCARD, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + } if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) - } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected integer response %d, got %d", test.expectedResponse, rv.Integer()) + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) } }) } } func Test_HandleSDIFF(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} command []string expectedResponse []string expectedError error }{ { - name: "1. Get the difference between 2 sets.", - preset: true, + name: "1. Get the difference between 2 sets.", presetValues: map[string]interface{}{ "SdiffKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SdiffKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -321,8 +344,7 @@ func Test_HandleSDIFF(t *testing.T) { expectedError: nil, }, { - name: "2. Get the difference between 3 sets.", - preset: true, + name: "2. Get the difference between 3 sets.", presetValues: map[string]interface{}{ "SdiffKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SdiffKey4": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -333,8 +355,7 @@ func Test_HandleSDIFF(t *testing.T) { expectedError: nil, }, { - name: "3. Return base set element if base set is the only valid set", - preset: true, + name: "3. Return base set element if base set is the only valid set", presetValues: map[string]interface{}{ "SdiffKey6": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SdiffKey7": "Default value", @@ -345,8 +366,7 @@ func Test_HandleSDIFF(t *testing.T) { expectedError: nil, }, { - name: "4. Throw error when base set is not a set.", - preset: true, + name: "4. Throw error when base set is not a set.", presetValues: map[string]interface{}{ "SdiffKey9": "Default value", "SdiffKey10": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -357,8 +377,7 @@ func Test_HandleSDIFF(t *testing.T) { expectedError: errors.New("value at key SdiffKey9 is not a set"), }, { - name: "5. Throw error when base set is non-existent.", - preset: true, + name: "5. Throw error when base set is non-existent.", presetValues: map[string]interface{}{ "SdiffKey12": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), "SdiffKey13": set.NewSet([]string{"seven", "eight", "nine", "ten", "twelve"}), @@ -369,54 +388,76 @@ func Test_HandleSDIFF(t *testing.T) { }, { name: "6. Command too short", - preset: false, command: []string{"SDIFF"}, expectedResponse: []string{}, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SDIFF, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + } if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) + + if len(res.Array()) != len(test.expectedResponse) { + t.Errorf("expected response array of length \"%d\", got \"%d\"", + len(test.expectedResponse), len(res.Array())) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - for _, responseElement := range rv.Array() { - if !slices.Contains(test.expectedResponse, responseElement.String()) { - t.Errorf("could not find response element \"%s\" from expected response array", responseElement.String()) + + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.String()) { + t.Errorf("unexpected element \"%s\" in response", item.String()) } } }) @@ -424,9 +465,14 @@ func Test_HandleSDIFF(t *testing.T) { } func Test_HandleSDIFFSTORE(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} destination string command []string @@ -435,8 +481,7 @@ func Test_HandleSDIFFSTORE(t *testing.T) { expectedError error }{ { - name: "1. Get the difference between 2 sets.", - preset: true, + name: "1. Get the difference between 2 sets.", presetValues: map[string]interface{}{ "SdiffStoreKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SdiffStoreKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -448,8 +493,7 @@ func Test_HandleSDIFFSTORE(t *testing.T) { expectedError: nil, }, { - name: "2. Get the difference between 3 sets.", - preset: true, + name: "2. Get the difference between 3 sets.", presetValues: map[string]interface{}{ "SdiffStoreKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SdiffStoreKey4": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -462,8 +506,7 @@ func Test_HandleSDIFFSTORE(t *testing.T) { expectedError: nil, }, { - name: "3. Return base set element if base set is the only valid set", - preset: true, + name: "3. Return base set element if base set is the only valid set", presetValues: map[string]interface{}{ "SdiffStoreKey6": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SdiffStoreKey7": "Default value", @@ -476,8 +519,7 @@ func Test_HandleSDIFFSTORE(t *testing.T) { expectedError: nil, }, { - name: "4. Throw error when base set is not a set.", - preset: true, + name: "4. Throw error when base set is not a set.", presetValues: map[string]interface{}{ "SdiffStoreKey9": "Default value", "SdiffStoreKey10": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -491,7 +533,6 @@ func Test_HandleSDIFFSTORE(t *testing.T) { }, { name: "5. Throw error when base set is non-existent.", - preset: true, destination: "SdiffStoreDestination5", presetValues: map[string]interface{}{ "SdiffStoreKey12": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -504,85 +545,118 @@ func Test_HandleSDIFFSTORE(t *testing.T) { }, { name: "6. Command too short", - preset: false, command: []string{"SDIFFSTORE", "SdiffStoreDestination6"}, expectedResponse: 0, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SDIFFSTORE, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + } if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) + } + + // Check if the resulting set(s) contain the expected members. + if test.expectedValue == nil { + return + } + + if err := client.WriteArray([]resp.Value{ + resp.StringValue("SMEMBERS"), + resp.StringValue(test.destination), + }); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() if err != nil { t.Error(err) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) + + if len(res.Array()) != test.expectedValue.Cardinality() { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.destination, test.expectedValue.Cardinality(), len(res.Array())) } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected response integer %d, got %d", test.expectedResponse, rv.Integer()) - } - if test.expectedValue != nil { - if _, err = mockServer.KeyRLock(ctx, test.destination); err != nil { - t.Error(err) + + for _, item := range res.Array() { + if !test.expectedValue.Contains(item.String()) { + t.Errorf("unexpected memeber \"%s\", in response", item.String()) } - currSet, ok := mockServer.GetValue(ctx, test.destination).(*set.Set) - if !ok { - t.Errorf("expected vaule at key %s to be set, got another type", test.destination) - } - for _, elem := range currSet.GetAll() { - if !test.expectedValue.Contains(elem) { - t.Errorf("could not find element %s in the expected values", elem) - } - } - mockServer.KeyRUnlock(ctx, test.destination) } }) } } func Test_HandleSINTER(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} command []string expectedResponse []string expectedError error }{ { - name: "1. Get the intersection between 2 sets.", - preset: true, + name: "1. Get the intersection between 2 sets.", presetValues: map[string]interface{}{ "SinterKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SinterKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -592,8 +666,7 @@ func Test_HandleSINTER(t *testing.T) { expectedError: nil, }, { - name: "2. Get the intersection between 3 sets.", - preset: true, + name: "2. Get the intersection between 3 sets.", presetValues: map[string]interface{}{ "SinterKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterKey4": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven", "eight"}), @@ -604,8 +677,7 @@ func Test_HandleSINTER(t *testing.T) { expectedError: nil, }, { - name: "3. Throw an error if any of the provided keys are not sets", - preset: true, + name: "3. Throw an error if any of the provided keys are not sets", presetValues: map[string]interface{}{ "SinterKey6": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterKey7": "Default value", @@ -616,8 +688,7 @@ func Test_HandleSINTER(t *testing.T) { expectedError: errors.New("value at key SinterKey7 is not a set"), }, { - name: "4. Throw error when base set is not a set.", - preset: true, + name: "4. Throw error when base set is not a set.", presetValues: map[string]interface{}{ "SinterKey9": "Default value", "SinterKey10": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -628,8 +699,7 @@ func Test_HandleSINTER(t *testing.T) { expectedError: errors.New("value at key SinterKey9 is not a set"), }, { - name: "5. If any of the keys does not exist, return an empty array.", - preset: true, + name: "5. If any of the keys does not exist, return an empty array.", presetValues: map[string]interface{}{ "SinterKey12": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), "SinterKey13": set.NewSet([]string{"seven", "eight", "nine", "ten", "twelve"}), @@ -640,54 +710,76 @@ func Test_HandleSINTER(t *testing.T) { }, { name: "6. Command too short", - preset: false, command: []string{"SINTER"}, expectedResponse: []string{}, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SINTER, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + } if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) + + if len(res.Array()) != len(test.expectedResponse) { + t.Errorf("expected response array of length \"%d\", got \"%d\"", + len(test.expectedResponse), len(res.Array())) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - for _, responseElement := range rv.Array() { - if !slices.Contains(test.expectedResponse, responseElement.String()) { - t.Errorf("could not find response element \"%s\" from expected response array", responseElement.String()) + + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.String()) { + t.Errorf("unexpected element \"%s\" in response", item.String()) } } }) @@ -695,17 +787,21 @@ func Test_HandleSINTER(t *testing.T) { } func Test_HandleSINTERCARD(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} command []string expectedResponse int expectedError error }{ { - name: "1. Get the full intersect cardinality between 2 sets.", - preset: true, + name: "1. Get the full intersect cardinality between 2 sets.", presetValues: map[string]interface{}{ "SinterCardKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SinterCardKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -715,8 +811,7 @@ func Test_HandleSINTERCARD(t *testing.T) { expectedError: nil, }, { - name: "2. Get an intersect cardinality between 2 sets with a limit", - preset: true, + name: "2. Get an intersect cardinality between 2 sets with a limit", presetValues: map[string]interface{}{ "SinterCardKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}), "SinterCardKey4": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve"}), @@ -726,8 +821,7 @@ func Test_HandleSINTERCARD(t *testing.T) { expectedError: nil, }, { - name: "3. Get the full intersect cardinality between 3 sets.", - preset: true, + name: "3. Get the full intersect cardinality between 3 sets.", presetValues: map[string]interface{}{ "SinterCardKey5": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterCardKey6": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven", "eight"}), @@ -738,8 +832,7 @@ func Test_HandleSINTERCARD(t *testing.T) { expectedError: nil, }, { - name: "4. Get the intersection of 3 sets with a limit", - preset: true, + name: "4. Get the intersection of 3 sets with a limit", presetValues: map[string]interface{}{ "SinterCardKey8": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterCardKey9": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven", "eight"}), @@ -750,8 +843,7 @@ func Test_HandleSINTERCARD(t *testing.T) { expectedError: nil, }, { - name: "5. Return 0 if any of the keys does not exist", - preset: true, + name: "5. Return 0 if any of the keys does not exist", presetValues: map[string]interface{}{ "SinterCardKey11": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterCardKey12": "Default value", @@ -762,8 +854,7 @@ func Test_HandleSINTERCARD(t *testing.T) { expectedError: nil, }, { - name: "6. Throw error when one of the keys is not a valid set.", - preset: true, + name: "6. Throw error when one of the keys is not a valid set.", presetValues: map[string]interface{}{ "SinterCardKey14": "Default value", "SinterCardKey15": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -775,62 +866,85 @@ func Test_HandleSINTERCARD(t *testing.T) { }, { name: "7. Command too short", - preset: false, command: []string{"SINTERCARD"}, expectedResponse: 0, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SINTERCARD, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) + } if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) - } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected response integer %d, got %d", test.expectedResponse, rv.Integer()) + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response array of length \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) } }) } + } func Test_HandleSINTERSTORE(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} destination string command []string @@ -839,8 +953,7 @@ func Test_HandleSINTERSTORE(t *testing.T) { expectedError error }{ { - name: "1. Get the intersection between 2 sets and store it at the destination.", - preset: true, + name: "1. Get the intersection between 2 sets and store it at the destination.", presetValues: map[string]interface{}{ "SinterStoreKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SinterStoreKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -852,8 +965,7 @@ func Test_HandleSINTERSTORE(t *testing.T) { expectedError: nil, }, { - name: "2. Get the intersection between 3 sets and store it at the destination key.", - preset: true, + name: "2. Get the intersection between 3 sets and store it at the destination key.", presetValues: map[string]interface{}{ "SinterStoreKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterStoreKey4": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven", "eight"}), @@ -866,8 +978,7 @@ func Test_HandleSINTERSTORE(t *testing.T) { expectedError: nil, }, { - name: "3. Throw error when any of the keys is not a set", - preset: true, + name: "3. Throw error when any of the keys is not a set", presetValues: map[string]interface{}{ "SinterStoreKey6": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SinterStoreKey7": "Default value", @@ -880,8 +991,7 @@ func Test_HandleSINTERSTORE(t *testing.T) { expectedError: errors.New("value at key SinterStoreKey7 is not a set"), }, { - name: "4. Throw error when base set is not a set.", - preset: true, + name: "4. Throw error when base set is not a set.", presetValues: map[string]interface{}{ "SinterStoreKey9": "Default value", "SinterStoreKey10": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -895,7 +1005,6 @@ func Test_HandleSINTERSTORE(t *testing.T) { }, { name: "5. Return an empty intersection if one of the keys does not exist.", - preset: true, destination: "SinterStoreDestination5", presetValues: map[string]interface{}{ "SinterStoreKey12": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -908,75 +1017,111 @@ func Test_HandleSINTERSTORE(t *testing.T) { }, { name: "6. Command too short", - preset: false, command: []string{"SINTERSTORE", "SinterStoreDestination6"}, expectedResponse: 0, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SINTERSTORE, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) + } + + // Check if the resulting set(s) contain the expected members. + if test.expectedValue == nil { + return + } + + if err := client.WriteArray([]resp.Value{ + resp.StringValue("SMEMBERS"), + resp.StringValue(test.destination), + }); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() if err != nil { t.Error(err) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) + + if len(res.Array()) != test.expectedValue.Cardinality() { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.destination, test.expectedValue.Cardinality(), len(res.Array())) } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected response integer %d, got %d", test.expectedResponse, rv.Integer()) - } - if test.expectedValue != nil { - if _, err = mockServer.KeyRLock(ctx, test.destination); err != nil { - t.Error(err) + + for _, item := range res.Array() { + if !test.expectedValue.Contains(item.String()) { + t.Errorf("unexpected memeber \"%s\", in response", item.String()) } - currSet, ok := mockServer.GetValue(ctx, test.destination).(*set.Set) - if !ok { - t.Errorf("expected vaule at key %s to be set, got another type", test.destination) - } - for _, elem := range currSet.GetAll() { - if !test.expectedValue.Contains(elem) { - t.Errorf("could not find element %s in the expected values", elem) - } - } - mockServer.KeyRUnlock(ctx, test.destination) } }) } } func Test_HandleSISMEMBER(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValue interface{} key string command []string @@ -985,7 +1130,6 @@ func Test_HandleSISMEMBER(t *testing.T) { }{ { name: "1. Return 1 when element is a member of the set", - preset: true, presetValue: set.NewSet([]string{"one", "two", "three", "four"}), key: "SIsMemberKey1", command: []string{"SISMEMBER", "SIsMemberKey1", "three"}, @@ -994,7 +1138,6 @@ func Test_HandleSISMEMBER(t *testing.T) { }, { name: "2. Return 0 when element is not a member of the set", - preset: true, presetValue: set.NewSet([]string{"one", "two", "three", "four"}), key: "SIsMemberKey2", command: []string{"SISMEMBER", "SIsMemberKey2", "five"}, @@ -1003,7 +1146,6 @@ func Test_HandleSISMEMBER(t *testing.T) { }, { name: "3. Throw error when trying to assert membership when the key does not hold a valid set", - preset: true, presetValue: "Default value", key: "SIsMemberKey3", command: []string{"SISMEMBER", "SIsMemberKey3", "one"}, @@ -1012,7 +1154,6 @@ func Test_HandleSISMEMBER(t *testing.T) { }, { name: "4. Command too short", - preset: false, key: "SIsMemberKey4", command: []string{"SISMEMBER", "SIsMemberKey4"}, expectedResponse: 0, @@ -1020,7 +1161,6 @@ func Test_HandleSISMEMBER(t *testing.T) { }, { name: "5. Command too long", - preset: false, key: "SIsMemberKey5", command: []string{"SISMEMBER", "SIsMemberKey5", "one", "two", "three"}, expectedResponse: 0, @@ -1028,52 +1168,77 @@ func Test_HandleSISMEMBER(t *testing.T) { }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SISMEMBER, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) - } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected integer response %d, got %d", test.expectedResponse, rv.Integer()) + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) } }) } } func Test_HandleSMEMBERS(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool key string presetValue interface{} command []string @@ -1082,7 +1247,6 @@ func Test_HandleSMEMBERS(t *testing.T) { }{ { name: "1. Return all the members of the set.", - preset: true, key: "SmembersKey1", presetValue: set.NewSet([]string{"one", "two", "three", "four", "five"}), command: []string{"SMEMBERS", "SmembersKey1"}, @@ -1091,16 +1255,14 @@ func Test_HandleSMEMBERS(t *testing.T) { }, { name: "2. If the key does not exist, return an empty array.", - preset: false, key: "SmembersKey2", presetValue: nil, command: []string{"SMEMBERS", "SmembersKey2"}, - expectedResponse: []string{}, + expectedResponse: nil, expectedError: nil, }, { name: "3. Throw error when the provided key is not a set.", - preset: true, key: "SmembersKey3", presetValue: "Default value", command: []string{"SMEMBERS", "SmembersKey3"}, @@ -1109,61 +1271,81 @@ func Test_HandleSMEMBERS(t *testing.T) { }, { name: "4. Command too short", - preset: false, command: []string{"SMEMBERS"}, expectedResponse: []string{}, expectedError: errors.New(constants.WrongArgsResponse), }, { name: "5. Command too long", - preset: false, command: []string{"SMEMBERS", "SmembersKey5", "SmembersKey6"}, expectedResponse: []string{}, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SMEMBERS, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) + + if len(res.Array()) != len(test.expectedResponse) { + t.Errorf("expected response array of length \"%d\", got \"%d\"", + len(test.expectedResponse), len(res.Array())) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - if len(rv.Array()) != len(test.expectedResponse) { - t.Errorf("expected response array of length %d, got %d", len(test.expectedResponse), len(rv.Array())) - } - for _, responseElement := range rv.Array() { - if !slices.Contains(test.expectedResponse, responseElement.String()) { - t.Errorf("could not find response element \"%s\" from expected response array", responseElement.String()) + + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.String()) { + t.Errorf("unexpected element \"%s\" in response", item.String()) } } }) @@ -1171,9 +1353,14 @@ func Test_HandleSMEMBERS(t *testing.T) { } func Test_HandleSMISMEMBER(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValue interface{} key string command []string @@ -1186,7 +1373,6 @@ func Test_HandleSMISMEMBER(t *testing.T) { // The placement of the membership status flag should me consistent with the order the elements // are in within the original command name: "1. Return set membership status for multiple elements", - preset: true, presetValue: set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven"}), key: "SmismemberKey1", command: []string{"SMISMEMBER", "SmismemberKey1", "three", "four", "five", "six", "eight", "nine", "seven"}, @@ -1195,7 +1381,6 @@ func Test_HandleSMISMEMBER(t *testing.T) { }, { name: "2. If the set key does not exist, return an array of zeroes as long as the list of members", - preset: false, presetValue: nil, key: "SmismemberKey2", command: []string{"SMISMEMBER", "SmismemberKey2", "one", "two", "three", "four"}, @@ -1204,7 +1389,6 @@ func Test_HandleSMISMEMBER(t *testing.T) { }, { name: "3. Throw error when trying to assert membership when the key does not hold a valid set", - preset: true, presetValue: "Default value", key: "SmismemberKey3", command: []string{"SMISMEMBER", "SmismemberKey3", "one"}, @@ -1213,7 +1397,7 @@ func Test_HandleSMISMEMBER(t *testing.T) { }, { name: "4. Command too short", - preset: false, + presetValue: nil, key: "SmismemberKey4", command: []string{"SMISMEMBER", "SmismemberKey4"}, expectedResponse: nil, @@ -1221,45 +1405,69 @@ func Test_HandleSMISMEMBER(t *testing.T) { }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SMISMEMBER, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) + + if len(res.Array()) != len(test.expectedResponse) { + t.Errorf("expected response array of length \"%d\", got \"%d\"", + len(test.expectedResponse), len(res.Array())) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - responseArray := rv.Array() - for i := 0; i < len(responseArray); i++ { - if responseArray[i].Integer() != test.expectedResponse[i] { - t.Errorf("expected integer %d at index %d, got %d", test.expectedResponse[i], i, responseArray[i].Integer()) + + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.Integer()) { + t.Errorf("unexpected element \"%d\" in response", item.Integer()) } } }) @@ -1267,9 +1475,14 @@ func Test_HandleSMISMEMBER(t *testing.T) { } func Test_HandleSMOVE(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} command []string expectedValues map[string]interface{} @@ -1277,8 +1490,7 @@ func Test_HandleSMOVE(t *testing.T) { expectedError error }{ { - name: "1. Return 1 after a successful move of a member from source set to destination set", - preset: true, + name: "1. Return 1 after a successful move of a member from source set to destination set", presetValues: map[string]interface{}{ "SmoveSource1": set.NewSet([]string{"one", "two", "three", "four"}), "SmoveDestination1": set.NewSet([]string{"five", "six", "seven", "eight"}), @@ -1292,8 +1504,7 @@ func Test_HandleSMOVE(t *testing.T) { expectedError: nil, }, { - name: "2. Return 0 when trying to move a member from source set to destination set when it doesn't exist in source", - preset: true, + name: "2. Return 0 when trying to move a member from source set to destination set when it doesn't exist in source", presetValues: map[string]interface{}{ "SmoveSource2": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SmoveDestination2": set.NewSet([]string{"five", "six", "seven", "eight"}), @@ -1307,8 +1518,7 @@ func Test_HandleSMOVE(t *testing.T) { expectedError: nil, }, { - name: "3. Return error when the source key is not a set", - preset: true, + name: "3. Return error when the source key is not a set", presetValues: map[string]interface{}{ "SmoveSource3": "Default value", "SmoveDestination3": set.NewSet([]string{"five", "six", "seven", "eight"}), @@ -1322,8 +1532,7 @@ func Test_HandleSMOVE(t *testing.T) { expectedError: errors.New("source is not a set"), }, { - name: "4. Return error when the destination key is not a set", - preset: true, + name: "4. Return error when the destination key is not a set", presetValues: map[string]interface{}{ "SmoveSource4": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SmoveDestination4": "Default value", @@ -1338,88 +1547,133 @@ func Test_HandleSMOVE(t *testing.T) { }, { name: "5. Command too short", - preset: false, + presetValues: nil, command: []string{"SMOVE", "SmoveSource5", "SmoveSource6"}, expectedError: errors.New(constants.WrongArgsResponse), }, { name: "6. Command too long", - preset: false, + presetValues: nil, command: []string{"SMOVE", "SmoveSource5", "SmoveSource6", "member1", "member2"}, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SMOVE, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected response integer %d, got %d", test.expectedResponse, rv.Integer()) + + // Check if the resulting set(s) contain the expected members. + if test.expectedValues == nil { + return } + for key, value := range test.expectedValues { - expectedSet, ok := value.(*set.Set) - if !ok { - t.Errorf("expected value at \"%s\" should be a set", key) - } - if _, err = mockServer.KeyRLock(ctx, key); err != nil { - t.Error(key) - } - currSet, ok := mockServer.GetValue(ctx, key).(*set.Set) - if !ok { - t.Errorf("expected set \"%s\" to be a set, got another type", key) - } - if expectedSet.Cardinality() != currSet.Cardinality() { - t.Errorf("expected set to have cardinaltity %d, got %d", expectedSet.Cardinality(), currSet.Cardinality()) - } - for _, element := range expectedSet.GetAll() { - if !currSet.Contains(element) { - t.Errorf("could not find element \"%s\" in the expected set", element) + switch value.(type) { + case string: + if err := client.WriteArray([]resp.Value{resp.StringValue("GET"), resp.StringValue(key)}); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() + if err != nil { + t.Error(err) + } + if res.String() != value.(string) { + t.Errorf("expected value at key \"%s\" to be \"%s\", got \"%s\"", key, value.(string), res.String()) + } + case *set.Set: + if err := client.WriteArray([]resp.Value{ + resp.StringValue("SMEMBERS"), + resp.StringValue(key), + }); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() + if err != nil { + t.Error(err) + } + + if len(res.Array()) != value.(*set.Set).Cardinality() { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + key, value.(*set.Set).Cardinality(), len(res.Array())) + } + + for _, item := range res.Array() { + if !value.(*set.Set).Contains(item.String()) { + t.Errorf("unexpected memeber \"%s\", in response", item.String()) + } } } - mockServer.KeyRUnlock(ctx, key) } }) } } func Test_HandleSPOP(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool key string presetValue interface{} command []string @@ -1429,7 +1683,6 @@ func Test_HandleSPOP(t *testing.T) { }{ { name: "1. Return multiple popped elements and modify the set", - preset: true, key: "SpopKey1", presetValue: set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), command: []string{"SPOP", "SpopKey1", "3"}, @@ -1439,100 +1692,125 @@ func Test_HandleSPOP(t *testing.T) { }, { name: "2. Return error when the source key is not a set", - preset: true, key: "SpopKey2", presetValue: "Default value", command: []string{"SPOP", "SpopKey2"}, expectedValue: 0, - expectedResponse: []string{}, + expectedResponse: nil, expectedError: errors.New("value at SpopKey2 is not a set"), }, { - name: "3. Command too short", - preset: false, - command: []string{"SPOP"}, - expectedError: errors.New(constants.WrongArgsResponse), + name: "3. Command too short", + presetValue: nil, + command: []string{"SPOP"}, + expectedValue: 0, + expectedResponse: nil, + expectedError: errors.New(constants.WrongArgsResponse), }, { name: "4. Command too long", - preset: false, + presetValue: nil, command: []string{"SPOP", "SpopSource5", "SpopSource6", "member1", "member2"}, + expectedValue: 0, expectedError: errors.New(constants.WrongArgsResponse), }, { name: "5. Throw error when count is not an integer", - preset: false, + presetValue: nil, command: []string{"SPOP", "SpopKey1", "count"}, + expectedValue: 0, expectedError: errors.New("count must be an integer"), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SPOP, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } + + // Check that each returned element is in the list of expected elements. + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.String()) { + t.Errorf("unexpected element \"%s\" in response", item.String()) + } + } + + // Check if the resulting set's cardinality is as expected. + if err := client.WriteArray([]resp.Value{resp.StringValue("SCARD"), resp.StringValue(test.key)}); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() if err != nil { t.Error(err) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - // 1. Check if the response array members are all included in test.expectedResponse. - for _, element := range rv.Array() { - if !slices.Contains(test.expectedResponse, element.String()) { - t.Errorf("expected response array does not contain element \"%s\"", element.String()) - } - } - // 2. Fetch the set and check if its cardinality is what we expect. - if _, err = mockServer.KeyRLock(ctx, test.key); err != nil { - t.Error(err) - } - currSet, ok := mockServer.GetValue(ctx, test.key).(*set.Set) - if !ok { - t.Errorf("expected value at key \"%s\" to be a set, got another type", test.key) - } - if currSet.Cardinality() != test.expectedValue { - t.Errorf("expected cardinality of final set to be %d, got %d", test.expectedValue, currSet.Cardinality()) - } - // 3. Check if all the popped elements we received are no longer in the set. - for _, element := range rv.Array() { - if currSet.Contains(element.String()) { - t.Errorf("expected element \"%s\" to not be in set but it was found", element.String()) - } + + if res.Integer() != test.expectedValue { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.key, test.expectedValue, res.Integer()) } }) } } func Test_HandleSRANDMEMBER(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool key string presetValue interface{} command []string @@ -1545,7 +1823,6 @@ func Test_HandleSRANDMEMBER(t *testing.T) { // 1. Return multiple random elements without removing them // Count is positive, do not allow repeated elements name: "1. Return multiple random elements without removing them", - preset: true, key: "SRandMemberKey1", presetValue: set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), command: []string{"SRANDMEMBER", "SRandMemberKey1", "3"}, @@ -1558,7 +1835,6 @@ func Test_HandleSRANDMEMBER(t *testing.T) { // 2. Return multiple random elements without removing them // Count is negative, so allow repeated numbers name: "2. Return multiple random elements without removing them", - preset: true, key: "SRandMemberKey2", presetValue: set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), command: []string{"SRANDMEMBER", "SRandMemberKey2", "-5"}, @@ -1569,7 +1845,6 @@ func Test_HandleSRANDMEMBER(t *testing.T) { }, { name: "3. Return error when the source key is not a set", - preset: true, key: "SRandMemberKey3", presetValue: "Default value", command: []string{"SRANDMEMBER", "SRandMemberKey3"}, @@ -1579,101 +1854,123 @@ func Test_HandleSRANDMEMBER(t *testing.T) { }, { name: "4. Command too short", - preset: false, command: []string{"SRANDMEMBER"}, expectedError: errors.New(constants.WrongArgsResponse), }, { name: "5. Command too long", - preset: false, command: []string{"SRANDMEMBER", "SRandMemberSource5", "SRandMemberSource6", "member1", "member2"}, expectedError: errors.New(constants.WrongArgsResponse), }, { name: "6. Throw error when count is not an integer", - preset: false, command: []string{"SRANDMEMBER", "SRandMemberKey1", "count"}, expectedError: errors.New("count must be an integer"), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SRANDMEMBER, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) - } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - // 1. Check if the response array members are all included in test.expectedResponse. - for _, element := range rv.Array() { - if !slices.Contains(test.expectedResponse, element.String()) { - t.Errorf("expected response array does not contain element \"%s\"", element.String()) + + // Check that each returned element is in the list of expected elements. + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.String()) { + t.Errorf("unexpected element \"%s\" in response", item.String()) } } - // 2. Fetch the set and check if its cardinality is what we expect. - if _, err = mockServer.KeyRLock(ctx, test.key); err != nil { - t.Error(err) - } - currSet, ok := mockServer.GetValue(ctx, test.key).(*set.Set) - if !ok { - t.Errorf("expected value at key \"%s\" to be a set, got another type", test.key) - } - if currSet.Cardinality() != test.expectedValue { - t.Errorf("expected cardinality of final set to be %d, got %d", test.expectedValue, currSet.Cardinality()) - } - // 3. Check if all the returned elements we received are still in the set. - for _, element := range rv.Array() { - if !currSet.Contains(element.String()) { - t.Errorf("expected element \"%s\" to be in set but it was not found", element.String()) - } - } - // 4. If allowRepeat is false, check that all the elements make a valid set + + // If no repeats are allowed, check if the response contains any repeated elements if !test.allowRepeat { - var elems []string - for _, e := range rv.Array() { - elems = append(elems, e.String()) - } - s := set.NewSet(elems) - if s.Cardinality() != len(elems) { - t.Errorf("expected non-repeating elements for random elements at key \"%s\"", test.key) + s := set.NewSet(func() []string { + elements := make([]string, len(res.Array())) + for i, item := range res.Array() { + elements[i] = item.String() + } + return elements + }()) + if s.Cardinality() != len(res.Array()) { + t.Error("response has repeated elements, expected only unique elements.") } } + + // Check if the resulting set's cardinality is as expected. + if err := client.WriteArray([]resp.Value{resp.StringValue("SCARD"), resp.StringValue(test.key)}); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() + if err != nil { + t.Error(err) + } + + if res.Integer() != test.expectedValue { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.key, test.expectedValue, res.Integer()) + } }) } } func Test_HandleSREM(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool key string presetValue interface{} command []string @@ -1683,7 +1980,6 @@ func Test_HandleSREM(t *testing.T) { }{ { name: "1. Remove multiple elements and return the number of elements removed", - preset: true, key: "SremKey1", presetValue: set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), command: []string{"SREM", "SremKey1", "one", "two", "three", "nine"}, @@ -1693,7 +1989,6 @@ func Test_HandleSREM(t *testing.T) { }, { name: "2. If key does not exist, return 0", - preset: false, key: "SremKey2", presetValue: nil, command: []string{"SREM", "SremKey1", "one", "two", "three", "nine"}, @@ -1703,7 +1998,6 @@ func Test_HandleSREM(t *testing.T) { }, { name: "3. Return error when the source key is not a set", - preset: true, key: "SremKey3", presetValue: "Default value", command: []string{"SREM", "SremKey3", "one"}, @@ -1713,81 +2007,113 @@ func Test_HandleSREM(t *testing.T) { }, { name: "4. Command too short", - preset: false, command: []string{"SREM", "SremKey"}, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SREM, %d", i)) + if test.presetValue != nil { + var command []resp.Value + var expected string - if test.preset { - if _, err := mockServer.CreateKeyAndLock(ctx, test.key); err != nil { + switch test.presetValue.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(test.key), + resp.StringValue(test.presetValue.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(test.key)} + for _, element := range test.presetValue.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(test.presetValue.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, test.key, test.presetValue); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, test.key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) + } + + // Check if the resulting set(s) contain the expected members. + if test.expectedValue == nil { + return + } + + if err := client.WriteArray([]resp.Value{resp.StringValue("SMEMBERS"), resp.StringValue(test.key)}); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() if err != nil { t.Error(err) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) + + if len(res.Array()) != test.expectedValue.Cardinality() { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.key, test.expectedValue.Cardinality(), len(res.Array())) } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected integer response %d, got %d", test.expectedResponse, rv.Integer()) - } - if test.expectedValue != nil { - if _, err = mockServer.KeyRLock(ctx, test.key); err != nil { - t.Error(err) + + for _, item := range res.Array() { + if !test.expectedValue.Contains(item.String()) { + t.Errorf("unexpected memeber \"%s\", in response", item.String()) } - currSet, ok := mockServer.GetValue(ctx, test.key).(*set.Set) - if !ok { - t.Errorf("expected value at key \"%s\" to be a set, got another type", test.key) - } - for _, element := range currSet.GetAll() { - if !test.expectedValue.Contains(element) { - t.Errorf("element \"%s\" not found in expected set values but found in set", element) - } - } - mockServer.KeyRUnlock(ctx, test.key) } }) } } func Test_HandleSUNION(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} command []string expectedResponse []string expectedError error }{ { - name: "1. Get the union between 2 sets.", - preset: true, + name: "1. Get the union between 2 sets.", presetValues: map[string]interface{}{ "SunionKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SunionKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -1797,8 +2123,7 @@ func Test_HandleSUNION(t *testing.T) { expectedError: nil, }, { - name: "2. Get the union between 3 sets.", - preset: true, + name: "2. Get the union between 3 sets.", presetValues: map[string]interface{}{ "SunionKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SunionKey4": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven", "eight"}), @@ -1812,8 +2137,7 @@ func Test_HandleSUNION(t *testing.T) { expectedError: nil, }, { - name: "3. Throw an error if any of the provided keys are not sets", - preset: true, + name: "3. Throw an error if any of the provided keys are not sets", presetValues: map[string]interface{}{ "SunionKey6": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SunionKey7": "Default value", @@ -1824,8 +2148,7 @@ func Test_HandleSUNION(t *testing.T) { expectedError: errors.New("value at key SunionKey7 is not a set"), }, { - name: "4. Throw error any of the keys does not hold a set.", - preset: true, + name: "4. Throw error any of the keys does not hold a set.", presetValues: map[string]interface{}{ "SunionKey9": "Default value", "SunionKey10": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven"}), @@ -1837,53 +2160,76 @@ func Test_HandleSUNION(t *testing.T) { }, { name: "6. Command too short", - preset: false, command: []string{"SUNION"}, expectedResponse: []string{}, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SUNION, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } - if err != nil { - t.Error(err) + + if len(res.Array()) != len(test.expectedResponse) { + t.Errorf("expected response array of length \"%d\", got \"%d\"", + len(test.expectedResponse), len(res.Array())) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) - } - for _, responseElement := range rv.Array() { - if !slices.Contains(test.expectedResponse, responseElement.String()) { - t.Errorf("could not find response element \"%s\" from expected response array", responseElement.String()) + + for _, item := range res.Array() { + if !slices.Contains(test.expectedResponse, item.String()) { + t.Errorf("unexpected element \"%s\" in response", item.String()) } } }) @@ -1891,9 +2237,14 @@ func Test_HandleSUNION(t *testing.T) { } func Test_HandleSUNIONSTORE(t *testing.T) { + conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", addr, port)) + if err != nil { + t.Error() + } + client := resp.NewConn(conn) + tests := []struct { name string - preset bool presetValues map[string]interface{} destination string command []string @@ -1902,8 +2253,7 @@ func Test_HandleSUNIONSTORE(t *testing.T) { expectedError error }{ { - name: "1. Get the intersection between 2 sets and store it at the destination.", - preset: true, + name: "1. Get the intersection between 2 sets and store it at the destination.", presetValues: map[string]interface{}{ "SunionStoreKey1": set.NewSet([]string{"one", "two", "three", "four", "five"}), "SunionStoreKey2": set.NewSet([]string{"three", "four", "five", "six", "seven", "eight"}), @@ -1915,8 +2265,7 @@ func Test_HandleSUNIONSTORE(t *testing.T) { expectedError: nil, }, { - name: "2. Get the intersection between 3 sets and store it at the destination key.", - preset: true, + name: "2. Get the intersection between 3 sets and store it at the destination key.", presetValues: map[string]interface{}{ "SunionStoreKey3": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SunionStoreKey4": set.NewSet([]string{"one", "two", "thirty-six", "twelve", "eleven", "eight"}), @@ -1932,8 +2281,7 @@ func Test_HandleSUNIONSTORE(t *testing.T) { expectedError: nil, }, { - name: "3. Throw error when any of the keys is not a set", - preset: true, + name: "3. Throw error when any of the keys is not a set", presetValues: map[string]interface{}{ "SunionStoreKey6": set.NewSet([]string{"one", "two", "three", "four", "five", "six", "seven", "eight"}), "SunionStoreKey7": "Default value", @@ -1947,67 +2295,97 @@ func Test_HandleSUNIONSTORE(t *testing.T) { }, { name: "5. Command too short", - preset: false, command: []string{"SUNIONSTORE", "SunionStoreDestination6"}, expectedResponse: 0, expectedError: errors.New(constants.WrongArgsResponse), }, } - for i, test := range tests { + for _, test := range tests { t.Run(test.name, func(t *testing.T) { - ctx := context.WithValue(context.Background(), "test_name", fmt.Sprintf("SUNIONSTORE, %d", i)) - - if test.preset { + if test.presetValues != nil { + var command []resp.Value + var expected string for key, value := range test.presetValues { - if _, err := mockServer.CreateKeyAndLock(ctx, key); err != nil { + switch value.(type) { + case string: + command = []resp.Value{ + resp.StringValue("SET"), + resp.StringValue(key), + resp.StringValue(value.(string)), + } + expected = "ok" + case *set.Set: + command = []resp.Value{resp.StringValue("SADD"), resp.StringValue(key)} + for _, element := range value.(*set.Set).GetAll() { + command = append(command, []resp.Value{resp.StringValue(element)}...) + } + expected = strconv.Itoa(value.(*set.Set).Cardinality()) + } + + if err = client.WriteArray(command); err != nil { t.Error(err) } - if err := mockServer.SetValue(ctx, key, value); err != nil { + res, _, err := client.ReadValue() + if err != nil { t.Error(err) } - mockServer.KeyUnlock(ctx, key) + + if !strings.EqualFold(res.String(), expected) { + t.Errorf("expected preset response to be \"%s\", got %s", expected, res.String()) + } } } - handler := getHandler(test.command[0]) - if handler == nil { - t.Errorf("no handler found for command %s", test.command[0]) - return + command := make([]resp.Value, len(test.command)) + for i, c := range test.command { + command[i] = resp.StringValue(c) + } + + if err = client.WriteArray(command); err != nil { + t.Error(err) + } + res, _, err := client.ReadValue() + if err != nil { + t.Error(err) } - res, err := handler(getHandlerFuncParams(ctx, test.command, nil)) if test.expectedError != nil { - if err.Error() != test.expectedError.Error() { + if !strings.Contains(res.Error().Error(), test.expectedError.Error()) { t.Errorf("expected error \"%s\", got \"%s\"", test.expectedError.Error(), err.Error()) } return } + + if res.Integer() != test.expectedResponse { + t.Errorf("expected response \"%d\", got \"%d\"", test.expectedResponse, res.Integer()) + } + + // Check if the resulting set(s) contain the expected members. + if test.expectedValue == nil { + return + } + + if err := client.WriteArray([]resp.Value{ + resp.StringValue("SMEMBERS"), + resp.StringValue(test.destination), + }); err != nil { + t.Error(err) + } + res, _, err = client.ReadValue() if err != nil { t.Error(err) } - rd := resp.NewReader(bytes.NewBuffer(res)) - rv, _, err := rd.ReadValue() - if err != nil { - t.Error(err) + + if len(res.Array()) != test.expectedValue.Cardinality() { + t.Errorf("expected set at key \"%s\" to have cardinality %d, got %d", + test.destination, test.expectedValue.Cardinality(), len(res.Array())) } - if rv.Integer() != test.expectedResponse { - t.Errorf("expected response integer %d, got %d", test.expectedResponse, rv.Integer()) - } - if test.expectedValue != nil { - if _, err = mockServer.KeyRLock(ctx, test.destination); err != nil { - t.Error(err) + + for _, item := range res.Array() { + if !test.expectedValue.Contains(item.String()) { + t.Errorf("unexpected memeber \"%s\", in response", item.String()) } - currSet, ok := mockServer.GetValue(ctx, test.destination).(*set.Set) - if !ok { - t.Errorf("expected vaule at key %s to be set, got another type", test.destination) - } - for _, elem := range currSet.GetAll() { - if !test.expectedValue.Contains(elem) { - t.Errorf("could not find element %s in the expected values", elem) - } - } - mockServer.KeyRUnlock(ctx, test.destination) } }) }