├── Project.toml
├── Basics.jl
├── sim-01-phase1.dat
├── sim-01-phase2.dat
├── sim-01-phase3.dat
├── README.md
├── sim-01-phase4.dat
├── ProtocolDA.jl
├── sim-01-phase5.dat
├── 004-simulation-03-dynamic-participation-01.jl
├── Validators.jl
├── 003-simulation-01-network-partitions-01.jl
├── ProtocolP.jl
├── 005-simulation-02-convergence-01.jl
├── 006-simulation-04-overview-01.jl
├── sim-03.dat
├── sim-01.dat
├── sim-02-phases.dat
├── sim-04-phases.dat
└── Manifest.toml
/Project.toml:
--------------------------------------------------------------------------------
1 | [deps]
2 | DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
3 | IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a"
4 | Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
5 | PyPlot = "d330b81b-6aea-500a-939a-2ce795aea3ee"
6 |
--------------------------------------------------------------------------------
/Basics.jl:
--------------------------------------------------------------------------------
1 | # constants
2 |
3 | RNG_SEED_POS_MINING = 2342
4 | RNG_SEED_BFT_LEADER = 4242
5 | RNG_SEED_DYNAMIC_PARTICIPATION = 2121
6 |
7 |
8 | # values derived from parameters
9 |
10 | λ0 = λ / n
11 | prob_pos_mining_success_per_slot = λ0 / second
12 |
13 |
14 | # basic types
15 |
16 | const Txs = String
17 | abstract type Block end
18 | abstract type Msg end
19 |
20 | depth(b) = b.parent === nothing ? 0 : depth(b.parent) + 1
21 | chain(b) = b.parent === nothing ? [b,] : vcat(chain(b.parent), [b,])
22 | ledger(b) = b.parent === nothing ? [b.payload,] : vcat(ledger(b.parent), [b.payload,])
23 |
--------------------------------------------------------------------------------
/sim-01-phase1.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_A l_Lp_B l_Lda l_Lda_A l_Lda_B
2 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 | 15.0 0.0 0.0 0.0 0.0 0.0 0.0
4 | 30.0 0.0 0.0 0.0 0.0 0.0 0.0
5 | 45.0 0.0 0.0 0.0 0.0 0.0 0.0
6 | 60.0 0.0 0.0 0.0 0.0 0.0 0.0
7 | 75.0 0.0 0.0 0.0 0.0 0.0 0.0
8 | 90.0 0.0 0.0 0.0 0.0 0.0 0.0
9 | 105.0 0.0 0.0 0.0 0.0 0.0 0.0
10 | 120.0 0.0 0.0 0.0 0.0 0.0 0.0
11 | 135.0 0.0 0.0 0.0 0.0 0.0 0.0
12 | 150.0 0.0 0.0 0.0 0.0 0.0 0.0
13 | 165.0 0.0 0.0 0.0 0.0 0.0 0.0
14 | 180.0 0.0 0.0 0.0 0.0 0.0 0.0
15 | 195.0 0.0 0.0 0.0 0.0 0.0 0.0
16 | 210.0 0.0 0.0 0.0 0.0 0.0 0.0
17 | 225.0 0.0 0.0 0.0 0.0 0.0 0.0
18 | 240.0 0.0 0.0 0.0 0.0 0.0 0.0
19 | 255.0 0.0 0.0 0.0 0.0 0.0 0.0
20 | 270.0 0.0 0.0 0.0 0.0 0.0 0.0
21 | 285.0 0.0 0.0 0.0 1.0 1.0 1.0
22 | 300.0 1.0 1.0 1.0 1.0 1.0 1.0
23 | 315.0 1.0 1.0 1.0 1.0 1.0 1.0
24 | 330.0 1.0 1.0 1.0 4.0 4.0 4.0
25 | 345.0 1.0 1.0 1.0 7.0 7.0 7.0
26 | 360.0 1.0 1.0 1.0 7.0 7.0 7.0
27 | 375.0 1.0 1.0 1.0 7.0 7.0 7.0
28 | 390.0 1.0 1.0 1.0 8.0 8.0 8.0
29 | 405.0 1.0 1.0 1.0 8.0 8.0 8.0
30 | 420.0 1.0 1.0 1.0 10.0 10.0 10.0
31 | 435.0 1.0 1.0 1.0 11.0 11.0 11.0
32 | 450.0 1.0 1.0 1.0 11.0 11.0 11.0
33 | 465.0 1.0 1.0 1.0 11.0 11.0 11.0
34 | 480.0 1.0 1.0 1.0 12.0 12.0 12.0
35 | 495.0 1.0 1.0 1.0 12.0 12.0 12.0
36 | 510.0 1.0 1.0 1.0 13.0 13.0 13.0
37 | 525.0 1.0 1.0 1.0 14.0 14.0 14.0
38 | 540.0 1.0 1.0 1.0 14.0 14.0 14.0
39 | 555.0 14.0 14.0 14.0 16.0 16.0 16.0
40 | 570.0 14.0 14.0 14.0 17.0 17.0 17.0
41 | 585.0 14.0 14.0 14.0 17.0 17.0 17.0
42 | 600.0 17.0 17.0 17.0 20.0 20.0 20.0
43 |
--------------------------------------------------------------------------------
/sim-01-phase2.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_A l_Lp_B l_Lda l_Lda_A l_Lda_B
2 | 600.0 17.0 17.0 17.0 20.0 20.0 20.0
3 | 615.0 17.0 17.0 17.0 20.0 22.0 20.0
4 | 630.0 17.0 17.0 17.0 21.0 22.0 21.0
5 | 645.0 17.0 17.0 17.0 21.0 22.0 21.0
6 | 660.0 17.0 17.0 17.0 22.0 24.0 22.0
7 | 675.0 17.0 17.0 17.0 22.0 24.0 22.0
8 | 690.0 17.0 17.0 17.0 22.0 24.0 22.0
9 | 705.0 17.0 17.0 17.0 22.0 26.0 22.0
10 | 720.0 17.0 17.0 17.0 24.0 26.0 24.0
11 | 735.0 17.0 17.0 17.0 25.0 27.0 25.0
12 | 750.0 17.0 17.0 17.0 25.0 28.0 25.0
13 | 765.0 17.0 17.0 17.0 26.0 30.0 26.0
14 | 780.0 17.0 17.0 17.0 26.0 31.0 26.0
15 | 795.0 17.0 17.0 17.0 28.0 32.0 28.0
16 | 810.0 17.0 17.0 17.0 28.0 32.0 28.0
17 | 825.0 17.0 17.0 17.0 28.0 33.0 28.0
18 | 840.0 17.0 17.0 17.0 29.0 34.0 29.0
19 | 855.0 17.0 17.0 17.0 29.0 35.0 29.0
20 | 870.0 17.0 17.0 17.0 29.0 37.0 29.0
21 | 885.0 17.0 17.0 17.0 30.0 37.0 30.0
22 | 900.0 17.0 17.0 17.0 31.0 38.0 31.0
23 | 915.0 17.0 17.0 17.0 31.0 39.0 31.0
24 | 930.0 17.0 17.0 17.0 31.0 41.0 31.0
25 | 945.0 17.0 17.0 17.0 33.0 42.0 33.0
26 | 960.0 17.0 17.0 17.0 33.0 42.0 33.0
27 | 975.0 17.0 17.0 17.0 33.0 42.0 33.0
28 | 990.0 17.0 17.0 17.0 34.0 43.0 34.0
29 | 1005.0 17.0 17.0 17.0 35.0 44.0 35.0
30 | 1020.0 17.0 17.0 17.0 35.0 44.0 35.0
31 | 1035.0 17.0 17.0 17.0 37.0 46.0 37.0
32 | 1050.0 17.0 17.0 17.0 37.0 46.0 37.0
33 | 1065.0 17.0 17.0 17.0 37.0 46.0 37.0
34 | 1080.0 17.0 17.0 17.0 37.0 46.0 37.0
35 | 1095.0 17.0 17.0 17.0 37.0 46.0 37.0
36 | 1110.0 17.0 17.0 17.0 37.0 47.0 37.0
37 | 1125.0 17.0 17.0 17.0 37.0 47.0 37.0
38 | 1140.0 17.0 17.0 17.0 38.0 47.0 38.0
39 | 1155.0 17.0 17.0 17.0 38.0 47.0 38.0
40 | 1170.0 17.0 17.0 17.0 38.0 47.0 38.0
41 | 1185.0 17.0 17.0 17.0 41.0 47.0 41.0
42 | 1200.0 17.0 17.0 17.0 48.0 48.0 48.0
--------------------------------------------------------------------------------
/sim-01-phase3.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_A l_Lp_B l_Lda l_Lda_A l_Lda_B
2 | 1200.0 17.0 17.0 17.0 48.0 48.0 48.0
3 | 1215.0 17.0 17.0 17.0 50.0 50.0 50.0
4 | 1230.0 17.0 17.0 17.0 51.0 51.0 51.0
5 | 1245.0 17.0 17.0 17.0 52.0 52.0 52.0
6 | 1260.0 17.0 17.0 17.0 53.0 53.0 53.0
7 | 1275.0 17.0 17.0 17.0 54.0 54.0 54.0
8 | 1290.0 54.0 54.0 54.0 55.0 55.0 55.0
9 | 1305.0 54.0 54.0 54.0 56.0 56.0 56.0
10 | 1320.0 55.0 55.0 55.0 56.0 56.0 56.0
11 | 1335.0 56.0 56.0 56.0 56.0 56.0 56.0
12 | 1350.0 56.0 56.0 56.0 56.0 56.0 56.0
13 | 1365.0 56.0 56.0 56.0 57.0 57.0 57.0
14 | 1380.0 57.0 57.0 57.0 58.0 58.0 58.0
15 | 1395.0 57.0 57.0 57.0 59.0 59.0 59.0
16 | 1410.0 57.0 57.0 57.0 61.0 61.0 61.0
17 | 1425.0 57.0 57.0 57.0 62.0 62.0 62.0
18 | 1440.0 57.0 57.0 57.0 63.0 63.0 63.0
19 | 1455.0 57.0 57.0 57.0 63.0 63.0 63.0
20 | 1470.0 57.0 57.0 57.0 65.0 65.0 65.0
21 | 1485.0 65.0 65.0 65.0 67.0 67.0 67.0
22 | 1500.0 67.0 67.0 67.0 68.0 68.0 68.0
23 | 1515.0 67.0 67.0 67.0 68.0 68.0 68.0
24 | 1530.0 67.0 67.0 67.0 69.0 69.0 69.0
25 | 1545.0 67.0 67.0 67.0 70.0 70.0 70.0
26 | 1560.0 67.0 67.0 67.0 70.0 70.0 70.0
27 | 1575.0 67.0 67.0 67.0 70.0 70.0 70.0
28 | 1590.0 67.0 67.0 67.0 71.0 71.0 71.0
29 | 1605.0 67.0 67.0 67.0 74.0 74.0 74.0
30 | 1620.0 67.0 67.0 67.0 75.0 75.0 75.0
31 | 1635.0 67.0 67.0 67.0 75.0 75.0 75.0
32 | 1650.0 67.0 67.0 67.0 77.0 77.0 77.0
33 | 1665.0 67.0 67.0 67.0 78.0 78.0 78.0
34 | 1680.0 67.0 67.0 67.0 80.0 80.0 80.0
35 | 1695.0 67.0 67.0 67.0 82.0 82.0 82.0
36 | 1710.0 67.0 67.0 67.0 84.0 84.0 84.0
37 | 1725.0 67.0 67.0 67.0 84.0 84.0 84.0
38 | 1740.0 67.0 67.0 67.0 84.0 84.0 84.0
39 | 1755.0 84.0 84.0 84.0 85.0 85.0 85.0
40 | 1770.0 84.0 84.0 84.0 86.0 86.0 86.0
41 | 1785.0 85.0 85.0 85.0 87.0 87.0 87.0
42 | 1800.0 86.0 86.0 86.0 89.0 89.0 89.0
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Ebb-and-Flow Protocols: A Resolution of the Availability-Finality Dilemma
2 |
3 | This repository contains the source code for the simulations of ebb-and-flow protocols presented in [Ebb-and-Flow].
4 | For the source code of the attack presented in [Ebb-and-Flow] on the Gasper consensus protocol, please see: [https://github.com/tse-group/gasper-attack](https://github.com/tse-group/gasper-attack)
5 |
6 |
7 | ## Simulation of Snap-and-Chat Protocol
8 |
9 | We simulate a snap-and-chat protocol constructed with Sleepy and Streamlet as constituent protocols, in the four scenarios described in [Ebb-and-Flow]:
10 |
11 | * Figure 2: Overview in the introduction. Code: `006-simulation-04-overview-01.jl`. Results: `sim-04.dat`, `sim-04-phases.dat`.
12 | * Figure 9: Dynamic participation. Code: `004-simulation-03-dynamic-participation-01.jl`. Results: `sim-03.dat`.
13 | * Figure 10: Intermittent network partitions. Code: `003-simulation-01-network-partitions-01.jl`. Results: `sim-01.dat`, `sim-01-phase*.dat`.
14 | * Figure 11: Convergence after network partition and/or low participation. Code: `005-simulation-02-convergence-01.jl`. Results: `sim-02.dat`, `sim-02-phases.dat`.
15 |
16 | The simulation is implemented in the [Julia programming language](https://julialang.org/).
17 | The simulation code is structured as follows:
18 |
19 | * The main `.jl` file corresponding to the respective scenario contains the parameters of the scenario as well as the overall logic simulating the communication between participants, network partitions, dynamic participation, etc.
20 | * `Basics.jl`: Contains some constants as well as generic operations on blocks and blockchains.
21 | * `ProtocolDA.jl`: Implementation of Sleepy.
22 | * `ProtocolP.jl`: Implementation of Streamlet.
23 | * `Validators.jl`: Composition of Sleepy and Streamlet, as well as adversarial validator behavior.
24 |
25 | To reproduce the Julia runtime environment (for Julia version 1.4.0), consult `Manifest.toml` and `Project.toml`.
26 |
27 |
28 | ## References
29 |
30 | * [Ebb-and-Flow]
31 | **Ebb-and-Flow Protocols: A Resolution of the Availability-Finality Dilemma**
32 | Joachim Neu, Ertem Nusret Tas, David Tse
33 | [arXiv:2009.04987](https://arxiv.org/abs/2009.04987)
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/sim-01-phase4.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_A l_Lp_B l_Lda l_Lda_A l_Lda_B
2 | 1800.0 86.0 86.0 86.0 89.0 89.0 89.0
3 | 1815.0 86.0 86.0 86.0 90.0 90.0 90.0
4 | 1830.0 86.0 86.0 86.0 90.0 90.0 90.0
5 | 1845.0 86.0 86.0 86.0 91.0 91.0 91.0
6 | 1860.0 86.0 86.0 86.0 91.0 91.0 91.0
7 | 1875.0 86.0 86.0 86.0 91.0 93.0 91.0
8 | 1890.0 86.0 86.0 86.0 91.0 94.0 91.0
9 | 1905.0 86.0 86.0 86.0 92.0 95.0 92.0
10 | 1920.0 86.0 86.0 86.0 94.0 95.0 94.0
11 | 1935.0 86.0 86.0 86.0 94.0 96.0 94.0
12 | 1950.0 86.0 86.0 86.0 94.0 96.0 94.0
13 | 1965.0 86.0 86.0 86.0 95.0 97.0 95.0
14 | 1980.0 86.0 86.0 86.0 95.0 99.0 95.0
15 | 1995.0 86.0 86.0 86.0 95.0 99.0 95.0
16 | 2010.0 86.0 86.0 86.0 95.0 100.0 95.0
17 | 2025.0 86.0 86.0 86.0 95.0 100.0 95.0
18 | 2040.0 86.0 86.0 86.0 95.0 101.0 95.0
19 | 2055.0 86.0 86.0 86.0 97.0 103.0 97.0
20 | 2070.0 86.0 86.0 86.0 97.0 103.0 97.0
21 | 2085.0 86.0 86.0 86.0 99.0 105.0 99.0
22 | 2100.0 86.0 86.0 86.0 99.0 105.0 99.0
23 | 2115.0 86.0 86.0 86.0 100.0 106.0 100.0
24 | 2130.0 86.0 86.0 86.0 100.0 106.0 100.0
25 | 2145.0 86.0 86.0 86.0 100.0 106.0 100.0
26 | 2160.0 86.0 86.0 86.0 100.0 107.0 100.0
27 | 2175.0 86.0 86.0 86.0 102.0 107.0 102.0
28 | 2190.0 86.0 86.0 86.0 103.0 108.0 103.0
29 | 2205.0 86.0 86.0 86.0 103.0 109.0 103.0
30 | 2220.0 86.0 86.0 86.0 104.0 111.0 104.0
31 | 2235.0 86.0 86.0 86.0 104.0 112.0 104.0
32 | 2250.0 86.0 86.0 86.0 104.0 112.0 104.0
33 | 2265.0 86.0 86.0 86.0 105.0 112.0 105.0
34 | 2280.0 86.0 86.0 86.0 105.0 112.0 105.0
35 | 2295.0 86.0 86.0 86.0 105.0 112.0 105.0
36 | 2310.0 86.0 86.0 86.0 105.0 114.0 105.0
37 | 2325.0 86.0 86.0 86.0 105.0 115.0 105.0
38 | 2340.0 86.0 86.0 86.0 105.0 115.0 105.0
39 | 2355.0 86.0 86.0 86.0 105.0 115.0 105.0
40 | 2370.0 86.0 86.0 86.0 105.0 115.0 105.0
41 | 2385.0 86.0 86.0 86.0 105.0 115.0 105.0
42 | 2400.0 86.0 86.0 86.0 105.0 115.0 105.0
43 | 2415.0 86.0 86.0 86.0 105.0 116.0 105.0
44 | 2430.0 86.0 86.0 86.0 105.0 117.0 105.0
45 | 2445.0 86.0 86.0 86.0 105.0 119.0 105.0
46 | 2460.0 86.0 86.0 86.0 105.0 119.0 105.0
47 | 2475.0 86.0 86.0 86.0 107.0 120.0 107.0
48 | 2490.0 86.0 86.0 86.0 107.0 120.0 107.0
49 | 2505.0 86.0 86.0 86.0 108.0 120.0 108.0
50 | 2520.0 86.0 86.0 86.0 109.0 121.0 109.0
51 | 2535.0 86.0 86.0 86.0 109.0 125.0 109.0
52 | 2550.0 86.0 86.0 86.0 110.0 125.0 110.0
53 | 2565.0 86.0 86.0 86.0 111.0 126.0 111.0
54 | 2580.0 86.0 86.0 86.0 111.0 128.0 111.0
55 | 2595.0 86.0 86.0 86.0 111.0 129.0 111.0
56 | 2610.0 86.0 86.0 86.0 111.0 130.0 111.0
57 | 2625.0 86.0 86.0 86.0 111.0 130.0 111.0
58 | 2640.0 86.0 86.0 86.0 111.0 130.0 111.0
59 | 2655.0 86.0 86.0 86.0 111.0 130.0 111.0
60 | 2670.0 86.0 86.0 86.0 111.0 132.0 111.0
61 | 2685.0 86.0 86.0 86.0 112.0 134.0 112.0
62 | 2700.0 86.0 86.0 86.0 135.0 135.0 135.0
--------------------------------------------------------------------------------
/ProtocolDA.jl:
--------------------------------------------------------------------------------
1 | # DA protocol: proof-of-stake longest-chain
2 |
3 | struct DABlock <: Block
4 | parent :: Union{DABlock, Nothing}
5 | payload :: Txs
6 | end
7 |
8 | DA_genesis = DABlock(nothing, "da-genesis")
9 | genesis(::Type{DABlock}) = DA_genesis
10 |
11 | struct DAClient
12 | id :: Int
13 | leafs :: Set{DABlock}
14 | rng_mining
15 | end
16 |
17 | function DAClient(id)
18 | return DAClient(
19 | id,
20 | Set{DABlock}([ genesis(DABlock) ]),
21 | MersenneTwister(RNG_SEED_POS_MINING + id),
22 | )
23 | end
24 |
25 | function tip(c :: DAClient)
26 | # prioritize adversarial over honest blocks
27 | leafs = sort(collect(c.leafs), by=b->(depth(b), startswith(b.payload, "adversarial")), rev=true)
28 | return leafs[1]
29 | end
30 |
31 | function confirmedtip(c :: DAClient)
32 | b = tip(c)
33 | for i in 1:k
34 | if b == genesis(DABlock)
35 | return b
36 | else
37 | b = b.parent
38 | end
39 | end
40 | return b
41 | end
42 |
43 | ledger(c :: DAClient) = ledger(confirmedtip(c))
44 |
45 | function allblocks(c :: DAClient)
46 | blks = Set{DABlock}()
47 | for l in c.leafs
48 | union!(blks, chain(l))
49 | end
50 | return blks
51 | end
52 |
53 | function graphviz(c :: DAClient)
54 | str = ""
55 | str *= "\tsubgraph cluster_G_da {\n"
56 | str *= "\t\tstyle=filled;\n"
57 | str *= "\t\tcolor=lightgrey;\n"
58 | str *= "\t\tlabel=\"da-protocol\";\n"
59 | str *= "\t\tnode [shape=box,style=filled,color=white];\n"
60 | str *= "\n"
61 | for b in allblocks(c)
62 | str *= "\t\tdablk_$(objectid(b)) [label=\"$(b.payload)\"];\n"
63 | end
64 | str *= "\n"
65 | for b in allblocks(c)
66 | if b !== genesis(DABlock)
67 | str *= "\t\tdablk_$(objectid(b)) -> dablk_$(objectid(b.parent));\n"
68 | end
69 | end
70 | str *= "\t}\n"
71 | return str
72 | end
73 |
74 | struct DAMsgNewBlock <: Msg
75 | t :: Int
76 | id :: Int
77 | block :: DABlock
78 | end
79 |
80 | function slot!(c :: DAClient, t, msgs_out, msgs_in; role=:honest)
81 | for m in msgs_in
82 | if m isa DAMsgNewBlock
83 | setdiff!(c.leafs, [m.block.parent])
84 | push!(c.leafs, m.block)
85 | end
86 | end
87 |
88 | if rand(c.rng_mining) <= prob_pos_mining_success_per_slot
89 | # @show t, "DAClient", c.id, "mining lottery success"
90 | if role == :honest
91 | new_dablock = DABlock(tip(c), "t=$(t),id=$(c.id)")
92 | else #if role == :adversarial
93 | new_dablock = DABlock(tip(c), "adversarial:t=$(t),id=$(c.id)")
94 | end
95 | push!(msgs_out, DAMsgNewBlock(t, c.id, new_dablock))
96 | # @show new_dablock
97 | end
98 | end
99 |
--------------------------------------------------------------------------------
/sim-01-phase5.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_A l_Lp_B l_Lda l_Lda_A l_Lda_B
2 | 2700.0 86.0 86.0 86.0 135.0 135.0 135.0
3 | 2715.0 86.0 86.0 86.0 135.0 135.0 135.0
4 | 2730.0 135.0 135.0 135.0 137.0 137.0 137.0
5 | 2745.0 136.0 136.0 136.0 137.0 137.0 137.0
6 | 2760.0 137.0 137.0 137.0 138.0 138.0 138.0
7 | 2775.0 137.0 137.0 137.0 140.0 140.0 140.0
8 | 2790.0 138.0 138.0 138.0 143.0 143.0 143.0
9 | 2805.0 138.0 138.0 138.0 144.0 144.0 144.0
10 | 2820.0 143.0 143.0 143.0 147.0 147.0 147.0
11 | 2835.0 144.0 144.0 144.0 147.0 147.0 147.0
12 | 2850.0 147.0 147.0 147.0 148.0 148.0 148.0
13 | 2865.0 147.0 147.0 147.0 149.0 149.0 149.0
14 | 2880.0 147.0 147.0 147.0 152.0 152.0 152.0
15 | 2895.0 147.0 147.0 147.0 152.0 152.0 152.0
16 | 2910.0 147.0 147.0 147.0 152.0 152.0 152.0
17 | 2925.0 152.0 152.0 152.0 153.0 153.0 153.0
18 | 2940.0 152.0 152.0 152.0 153.0 153.0 153.0
19 | 2955.0 152.0 152.0 152.0 154.0 154.0 154.0
20 | 2970.0 154.0 154.0 154.0 154.0 154.0 154.0
21 | 2985.0 154.0 154.0 154.0 155.0 155.0 155.0
22 | 3000.0 155.0 155.0 155.0 156.0 156.0 156.0
23 | 3015.0 155.0 155.0 155.0 157.0 157.0 157.0
24 | 3030.0 156.0 156.0 156.0 160.0 160.0 160.0
25 | 3045.0 156.0 156.0 156.0 162.0 162.0 162.0
26 | 3060.0 156.0 156.0 156.0 164.0 164.0 164.0
27 | 3075.0 156.0 156.0 156.0 165.0 165.0 165.0
28 | 3090.0 165.0 165.0 165.0 165.0 165.0 165.0
29 | 3105.0 165.0 165.0 165.0 167.0 167.0 167.0
30 | 3120.0 165.0 165.0 165.0 167.0 167.0 167.0
31 | 3135.0 167.0 167.0 167.0 169.0 169.0 169.0
32 | 3150.0 167.0 167.0 167.0 170.0 170.0 170.0
33 | 3165.0 167.0 167.0 167.0 171.0 171.0 171.0
34 | 3180.0 170.0 170.0 170.0 174.0 174.0 174.0
35 | 3195.0 172.0 172.0 172.0 175.0 175.0 175.0
36 | 3210.0 175.0 175.0 175.0 175.0 175.0 175.0
37 | 3225.0 175.0 175.0 175.0 176.0 176.0 176.0
38 | 3240.0 175.0 175.0 175.0 178.0 178.0 178.0
39 | 3255.0 177.0 177.0 177.0 179.0 179.0 179.0
40 | 3270.0 179.0 179.0 179.0 179.0 179.0 179.0
41 | 3285.0 179.0 179.0 179.0 184.0 184.0 184.0
42 | 3300.0 179.0 179.0 179.0 185.0 185.0 185.0
43 | 3315.0 179.0 179.0 179.0 187.0 187.0 187.0
44 | 3330.0 185.0 185.0 185.0 189.0 189.0 189.0
45 | 3345.0 185.0 185.0 185.0 190.0 190.0 190.0
46 | 3360.0 189.0 189.0 189.0 190.0 190.0 190.0
47 | 3375.0 190.0 190.0 190.0 190.0 190.0 190.0
48 | 3390.0 190.0 190.0 190.0 193.0 193.0 193.0
49 | 3405.0 190.0 190.0 190.0 194.0 194.0 194.0
50 | 3420.0 190.0 190.0 190.0 194.0 194.0 194.0
51 | 3435.0 190.0 190.0 190.0 196.0 196.0 196.0
52 | 3450.0 190.0 190.0 190.0 197.0 197.0 197.0
53 | 3465.0 190.0 190.0 190.0 198.0 198.0 198.0
54 | 3480.0 197.0 197.0 197.0 199.0 199.0 199.0
55 | 3495.0 197.0 197.0 197.0 200.0 200.0 200.0
56 | 3510.0 197.0 197.0 197.0 201.0 201.0 201.0
57 | 3525.0 197.0 197.0 197.0 201.0 201.0 201.0
58 | 3540.0 201.0 201.0 201.0 201.0 201.0 201.0
59 | 3555.0 201.0 201.0 201.0 202.0 202.0 202.0
60 | 3570.0 201.0 201.0 201.0 203.0 203.0 203.0
61 | 3585.0 202.0 202.0 202.0 204.0 204.0 204.0
62 |
--------------------------------------------------------------------------------
/004-simulation-03-dynamic-participation-01.jl:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env julia
2 |
3 | # JULIA ENVIRONMENT
4 |
5 | using Pkg
6 | Pkg.activate(".")
7 |
8 | using Random
9 | using DataStructures
10 |
11 |
12 | # PARAMETERS
13 |
14 | # network simulation
15 | second = 1
16 | minute = 60*second
17 | hour = 60*minute
18 |
19 | Δ = 1*second
20 | T_end = 60*minute
21 |
22 | # adversarial/honest validators
23 | n = 100
24 | f = 25
25 |
26 | # da protocol
27 | λ = 0.1
28 | k = 20
29 |
30 | # p protocol
31 | Δ_bft = 5 * Δ
32 |
33 |
34 | # IMPLEMENTATION
35 |
36 | include("Basics.jl")
37 | include("ProtocolDA.jl")
38 | include("ProtocolP.jl")
39 | include("Validators.jl")
40 |
41 |
42 | # DYNAMIC AVAILABILITY
43 |
44 | rng_da = MersenneTwister(RNG_SEED_DYNAMIC_PARTICIPATION)
45 |
46 | function da_tick!(vs_awake, vs_asleep)
47 | # for i in 1:3
48 | if length(vs_awake) == 2*f+1
49 | # can only wake one up
50 | dir = rand(rng_da, (:toawake, :nothing))
51 | elseif length(vs_awake) == n-f
52 | # can only put one to sleep
53 | dir = rand(rng_da, (:nothing, :toasleep))
54 | else
55 | # flip a coin
56 | dir = rand(rng_da, (:toawake, :toasleep))
57 | end
58 |
59 | if dir == :toawake
60 | shuffle!(rng_da, vs_asleep)
61 | push!(vs_awake, pop!(vs_asleep))
62 | elseif dir == :toasleep
63 | shuffle!(rng_da, vs_awake)
64 | push!(vs_asleep, pop!(vs_awake))
65 | else #if dir == :nothing
66 | # nop
67 | end
68 | # end
69 | end
70 |
71 |
72 | # MAIN LOOP
73 |
74 | validators = [ id <= (n-f) ? HonestValidator(id) : AdversarialValidator(id) for id in 1:n ]
75 | validators_awake = validators[1:((n-f)÷5*4)]
76 | validators_asleep = validators[((n-f)÷5*4+1):(n-f)]
77 |
78 | msgs_inflight = Dict{Int,Vector{Msg}}()
79 | msgs_missed = Dict( v => Vector{Msg}() for v in validators )
80 |
81 | println(join(["t", "l_Lp", "l_Lda", "l_awake", "l_asleep"], " "))
82 |
83 |
84 | for t in 0:T_end
85 | # @show t
86 |
87 | da_tick!(validators_awake, validators_asleep)
88 |
89 |
90 | # prepare msg queues
91 | msgs_inflight[t + Δ] = Vector{Msg}()
92 | msgs_out = msgs_inflight[t + Δ]
93 | msgs_in = get(msgs_inflight, t, Vector{Msg}())
94 |
95 |
96 | # compute awake validator actions for this slot
97 | # collect messages missed by asleep validators
98 | for v in validators
99 | if v in validators_awake
100 | slot!(v, t, msgs_out, vcat(msgs_missed[v], msgs_in))
101 | empty!(msgs_missed[v])
102 | else #if v in validators_asleep
103 | msgs_missed[v] = vcat(msgs_missed[v], msgs_in)
104 | end
105 | end
106 |
107 |
108 | if t % 15*second == 0
109 | # log ledger lengths
110 | l_Lp = minimum([ length(Lp(v))-1 for v in validators_awake ])
111 | l_Lda = minimum([ length(Lda(v))-1 for v in validators_awake ])
112 |
113 | println(join([t/second, l_Lp, l_Lda, length(validators_awake), length(validators_asleep)], " "))
114 | end
115 | end
116 |
117 |
118 | # # DUMP FINAL NETWORK VIEW
119 |
120 | # network = HonestValidator(0)
121 |
122 | # for t in sort(collect(keys(msgs_inflight)))
123 | # slot!(network, t, Set{Msg}(), msgs_inflight[t])
124 | # end
125 |
126 | # println(graphviz(network))
127 |
128 | # println(Lp(network))
129 | # println(Lda(network))
130 |
--------------------------------------------------------------------------------
/Validators.jl:
--------------------------------------------------------------------------------
1 | # validators
2 |
3 | abstract type Validator end
4 |
5 | struct HonestValidator <: Validator
6 | id :: Int
7 | client_da :: DAClient
8 | client_p :: PClient
9 | end
10 |
11 | function HonestValidator(id)
12 | client_da = DAClient(id)
13 | client_p = PClient(id, client_da)
14 | return HonestValidator(
15 | id,
16 | client_da,
17 | client_p,
18 | )
19 | end
20 |
21 | function slot!(v :: HonestValidator, t, msgs_out, msgs_in)
22 | slot!(v.client_da, t, msgs_out, msgs_in)
23 | slot!(v.client_p, t, msgs_out, msgs_in)
24 | end
25 |
26 | function graphviz(v :: HonestValidator)
27 | str = ""
28 | str *= "digraph G {\n"
29 | str *= "\trankdir=BT;\n"
30 | str *= "\n"
31 | str *= graphviz(v.client_da)
32 | str *= "\n"
33 | str *= graphviz(v.client_p)
34 | str *= "}"
35 | return str
36 | end
37 |
38 | function sanitize(lst :: Vector{String})
39 | out = Vector{String}()
40 | for l in lst
41 | if !(l in out)
42 | push!(out, l)
43 | end
44 | end
45 | return out
46 | end
47 |
48 | function Lp(v :: HonestValidator)
49 | return sanitize(vcat(ledger.(ledger(v.client_p))...))
50 | end
51 |
52 | function Lda(v :: HonestValidator)
53 | return sanitize(vcat(Lp(v), ledger(v.client_da)))
54 | end
55 |
56 |
57 | struct AdversarialValidator <: Validator
58 | id :: Int
59 | client_da :: DAClient
60 | end
61 |
62 | function AdversarialValidator(id)
63 | client_da = DAClient(id)
64 | return AdversarialValidator(
65 | id,
66 | client_da,
67 | )
68 | end
69 |
70 | function slot!(v :: AdversarialValidator, t, msgs_out, msgs_in)
71 | # adversary does not participate in simulations 1 and 3
72 | end
73 |
74 | function slot!(v :: AdversarialValidator, t, msgs_out_private_adversarial, msgs_out_rush_honest, msgs_in, msgs_in_rush_honest)
75 | # adversary produces a private competing longest chain in simulation 2
76 |
77 | slot!(v.client_da, t, msgs_out_private_adversarial, vcat(msgs_in, msgs_in_rush_honest); role=:adversarial)
78 |
79 |
80 | if v.id == n
81 | # the last adversarial validator is responsible for releasing pre-mined blocks
82 | # to displace honest blocks
83 |
84 | d = -1
85 |
86 | for m in msgs_in_rush_honest
87 | if m isa DAMsgNewBlock
88 | d = max(d, depth(m.block))
89 | end
90 | end
91 |
92 | if d > -1
93 | # a new honest block was produced in this slot
94 | # at depth d, we need to counter it with an adversarial block if possible
95 |
96 | blk = tip(v.client_da)
97 |
98 | if depth(blk) < d
99 | # no deeper adversarial pre-mined block available,
100 | # nothing the adversary can do to displace this block
101 |
102 | else
103 | # find the block of suitable depth to release
104 | while depth(blk) > d
105 | blk = blk.parent
106 | end
107 |
108 | # release block
109 | push!(msgs_out_rush_honest, DAMsgNewBlock(t, v.client_da.id, blk))
110 |
111 | end
112 | end
113 | end
114 | end
115 |
116 | function graphviz(v :: AdversarialValidator)
117 | str = ""
118 | str *= "digraph G {\n"
119 | str *= "\trankdir=BT;\n"
120 | str *= "\n"
121 | str *= graphviz(v.client_da)
122 | str *= "}"
123 | return str
124 | end
125 |
126 | function Lda(v :: AdversarialValidator)
127 | return sanitize(ledger(v.client_da))
128 | end
129 |
--------------------------------------------------------------------------------
/003-simulation-01-network-partitions-01.jl:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env julia
2 |
3 | # JULIA ENVIRONMENT
4 |
5 | using Pkg
6 | Pkg.activate(".")
7 |
8 | using Random
9 | using DataStructures
10 |
11 |
12 | # PARAMETERS
13 |
14 | # network simulation
15 | second = 1
16 | minute = 60*second
17 | hour = 60*minute
18 |
19 | Δ = 1*second
20 | T_end = 60*minute
21 | T_partitions = [(10*minute, 20*minute), (30*minute, 45*minute),]
22 |
23 | # adversarial/honest validators
24 | n = 100
25 | f = 25
26 |
27 | # da protocol
28 | λ = 0.1
29 | k = 20
30 |
31 | # p protocol
32 | Δ_bft = 5 * Δ
33 |
34 |
35 | # IMPLEMENTATION
36 |
37 | include("Basics.jl")
38 | include("ProtocolDA.jl")
39 | include("ProtocolP.jl")
40 | include("Validators.jl")
41 |
42 |
43 | # PARTITIONS
44 |
45 | function getpartition(t)
46 | for (idx, (T_part_start, T_part_end)) in enumerate(T_partitions)
47 | if T_part_start <= t < T_part_end
48 | return (true, idx)
49 | end
50 | end
51 | return (false, -1)
52 | end
53 |
54 | function ispartitioned(t)
55 | return getpartition(t)[1]
56 | end
57 |
58 |
59 | # MAIN LOOP
60 |
61 | validators = [ id <= (n-f) ? HonestValidator(id) : AdversarialValidator(id) for id in 1:n ]
62 |
63 | validators_hon = validators[1:(n-f)]
64 | validators_A = validators[1:((n-f)÷3*2)]
65 | validators_B = validators[((n-f)÷3*2+1):(n-f)]
66 |
67 | msgs_inflight_A = Dict{Int,Set{Msg}}()
68 | msgs_inflight_B = Dict{Int,Set{Msg}}()
69 |
70 | println(join(["t", "l_Lp", "l_Lp_A", "l_Lp_B", "l_Lda", "l_Lda_A", "l_Lda_B"], " "))
71 |
72 |
73 | for t in 0:(T_end - 1)
74 | # @show t
75 |
76 | for (idx, (T_part_start, T_part_end)) in enumerate(T_partitions)
77 | if t == T_part_start
78 | # @show t, "start of partition", idx
79 | println("# t=$(t): start of partition $(idx)")
80 | elseif t == T_part_end
81 | # @show t, "end of partition", idx
82 | println("# t=$(t): end of partition $(idx)")
83 | end
84 | end
85 |
86 | # prepare msg queues
87 | msgs_out_A = Set{Msg}()
88 | msgs_out_B = Set{Msg}()
89 | msgs_in_A = get(msgs_inflight_A, t, Set{Msg}())
90 | msgs_in_B = get(msgs_inflight_B, t, Set{Msg}())
91 |
92 |
93 | # compute validator actions for this slot
94 | for v in validators_A
95 | slot!(v, t, msgs_out_A, msgs_in_A)
96 | end
97 | for v in validators_B
98 | slot!(v, t, msgs_out_B, msgs_in_B)
99 | end
100 |
101 |
102 | # msg delivery, respecting periods of intermittent partitions
103 | if ispartitioned(t)
104 | T_part_end = T_partitions[getpartition(t)[2]][2]
105 | t_delivery_inter = max(t + Δ, T_part_end)
106 | t_delivery_intra = t + Δ
107 | else
108 | t_delivery_inter = t + Δ
109 | t_delivery_intra = t + Δ
110 | end
111 |
112 | msgs_inflight_A[t_delivery_inter] = get(msgs_inflight_A, t_delivery_inter, Set{Msg}())
113 | msgs_inflight_B[t_delivery_inter] = get(msgs_inflight_B, t_delivery_inter, Set{Msg}())
114 | msgs_inflight_A[t_delivery_intra] = get(msgs_inflight_A, t_delivery_intra, Set{Msg}())
115 | msgs_inflight_B[t_delivery_intra] = get(msgs_inflight_B, t_delivery_intra, Set{Msg}())
116 |
117 | union!(msgs_inflight_A[t_delivery_inter], msgs_out_B)
118 | union!(msgs_inflight_B[t_delivery_inter], msgs_out_A)
119 | union!(msgs_inflight_A[t_delivery_intra], msgs_out_A)
120 | union!(msgs_inflight_B[t_delivery_intra], msgs_out_B)
121 |
122 |
123 | if t % 15*second == 0
124 | # log ledger lengths
125 | l_Lp_A = minimum([ length(Lp(v))-1 for v in validators_A ])
126 | l_Lp_B = minimum([ length(Lp(v))-1 for v in validators_B ])
127 | l_Lda_A = minimum([ length(Lda(v))-1 for v in validators_A ])
128 | l_Lda_B = minimum([ length(Lda(v))-1 for v in validators_B ])
129 | l_Lp = min(l_Lp_A, l_Lp_B)
130 | l_Lda = min(l_Lda_A, l_Lda_B)
131 |
132 | println(join([t/second, l_Lp, l_Lp_A, l_Lp_B, l_Lda, l_Lda_A, l_Lda_B], " "))
133 | # @show t/second, l_Lp, l_Lp_A, l_Lp_B, l_Lda, l_Lda_A, l_Lda_B
134 | end
135 | end
136 |
137 |
138 | # DUMP FINAL NETWORK VIEW
139 |
140 | network = HonestValidator(0)
141 |
142 | for t in sort(collect(keys(msgs_inflight)))
143 | slot!(network, t, Set{Msg}(), msgs_inflight[t])
144 | end
145 |
146 | println(graphviz(network))
147 |
148 | println(Lp(network))
149 | println(Lda(network))
150 |
--------------------------------------------------------------------------------
/ProtocolP.jl:
--------------------------------------------------------------------------------
1 | # P protocol: partially synchronous Streamlet
2 |
3 | struct PBlock <: Block
4 | parent :: Union{PBlock, Nothing}
5 | epoch :: Int
6 | payload :: DABlock
7 | end
8 |
9 | P_genesis = PBlock(nothing, -1, genesis(DABlock))
10 | genesis(::Type{PBlock}) = P_genesis
11 |
12 | function epoch(t)
13 | return t ÷ (2*Δ_bft)
14 | end
15 |
16 | function leader(t)
17 | e = epoch(t)
18 | rng = MersenneTwister(RNG_SEED_BFT_LEADER + e)
19 | return rand(rng, 1:n)
20 | end
21 |
22 | mutable struct PClient
23 | id :: Int
24 | client_da :: DAClient
25 | leafs :: Set{PBlock}
26 | votes :: Dict{PBlock,Set{Int}}
27 | current_epoch_proposal :: Union{PBlock, Nothing}
28 | end
29 |
30 | function PClient(id, client_da)
31 | return PClient(
32 | id,
33 | client_da,
34 | Set{PBlock}([ genesis(PBlock) ]),
35 | Dict{PBlock,Set{Int}}(),
36 | nothing,
37 | )
38 | end
39 |
40 | function isnotarized(c :: PClient, blk)
41 | if blk == genesis(PBlock)
42 | return true
43 | end
44 |
45 | if length(c.votes[blk]) >= n*2/3
46 | return true
47 | end
48 |
49 | return false
50 | end
51 |
52 | function lastnotarized(c :: PClient, blk)
53 | while !isnotarized(c, blk)
54 | blk = blk.parent
55 | end
56 | return blk
57 | end
58 |
59 | function tip(c :: PClient)
60 | best_block = genesis(PBlock)
61 | best_depth = depth(best_block)
62 |
63 | for l in c.leafs
64 | l = lastnotarized(c, l)
65 | if depth(l) > best_depth
66 | best_block = l
67 | best_depth = depth(l)
68 | end
69 | end
70 |
71 | return best_block
72 | end
73 |
74 | function finalizedtip(c :: PClient)
75 | best_block = genesis(PBlock)
76 | best_depth = depth(best_block)
77 |
78 | # for l in c.leafs
79 | for l in sort(collect(c.leafs), by=l->depth(l), rev=true)
80 | while depth(l) > 3 && depth(l) > best_depth
81 | b0 = l.parent.parent
82 | b1 = l.parent
83 | b2 = l
84 |
85 | if isnotarized(c, b0) && isnotarized(c, b1) && isnotarized(c, b2) && (b0.epoch == b2.epoch - 2) && (b1.epoch == b2.epoch - 1) && depth(b1) > best_depth
86 | best_block = b1
87 | best_depth = depth(b1)
88 | break
89 | end
90 |
91 | l = l.parent
92 | end
93 | end
94 |
95 | return best_block
96 | end
97 |
98 | ledger(c :: PClient) = ledger(finalizedtip(c))
99 |
100 | function allblocks(c :: PClient)
101 | blks = Set{PBlock}()
102 | for l in c.leafs
103 | union!(blks, chain(l))
104 | end
105 | return blks
106 | end
107 |
108 | function graphviz(c :: PClient)
109 | str = ""
110 | str *= "\tsubgraph cluster_G_p {\n"
111 | str *= "\t\tstyle=filled;\n"
112 | str *= "\t\tcolor=lightgrey;\n"
113 | str *= "\t\tlabel=\"p-protocol\";\n"
114 | str *= "\t\tnode [shape=box,style=filled,color=white];\n"
115 | str *= "\n"
116 | for b in allblocks(c)
117 | if b !== genesis(PBlock)
118 | str *= "\t\tpblk_$(objectid(b)) [label=\"e=$(b.epoch),votes=$(length(c.votes[b]))\"];\n"
119 | else
120 | str *= "\t\tpblk_$(objectid(b)) [label=\"p-genesis\"];\n"
121 | end
122 | end
123 | str *= "\n"
124 | for b in allblocks(c)
125 | if b !== genesis(PBlock)
126 | str *= "\t\tpblk_$(objectid(b)) -> pblk_$(objectid(b.parent));\n"
127 | end
128 | end
129 | str *= "\n"
130 | for b in allblocks(c)
131 | str *= "\t\tpblk_$(objectid(b)) -> dablk_$(objectid(b.payload));\n"
132 | end
133 | str *= "\t}\n"
134 | return str
135 | end
136 |
137 | struct PMsgProposal <: Msg
138 | t :: Int
139 | id :: Int
140 | block :: PBlock
141 | end
142 |
143 | struct PMsgVote <: Msg
144 | t :: Int
145 | id :: Int
146 | block :: PBlock
147 | end
148 |
149 | function slot!(c :: PClient, t, msgs_out, msgs_in)
150 | for m in msgs_in
151 | if m isa PMsgProposal
152 | setdiff!(c.leafs, [m.block.parent])
153 | push!(c.leafs, m.block)
154 |
155 | c.votes[m.block] = Set{Int}()
156 |
157 | if m.block.epoch == epoch(t) && c.current_epoch_proposal === nothing
158 | c.current_epoch_proposal = m.block
159 | end
160 | end
161 | end
162 |
163 | for m in msgs_in
164 | if m isa PMsgVote
165 | push!(c.votes[m.block], m.id)
166 | end
167 | end
168 |
169 | if t % (2*Δ_bft) == 0
170 | c.current_epoch_proposal = nothing
171 |
172 | if leader(t) == c.id
173 | # @show t, "PClient", c.id, "leading epoch"
174 | new_pblock = PBlock(tip(c), epoch(t), confirmedtip(c.client_da))
175 | push!(msgs_out, PMsgProposal(t, c.id, new_pblock))
176 | # @show new_pblock
177 | end
178 |
179 | elseif t % (2*Δ_bft) == Δ_bft
180 | if c.current_epoch_proposal !== nothing
181 | push!(msgs_out, PMsgVote(t, c.id, c.current_epoch_proposal))
182 | end
183 |
184 | end
185 | end
186 |
--------------------------------------------------------------------------------
/005-simulation-02-convergence-01.jl:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env julia
2 |
3 | # JULIA ENVIRONMENT
4 |
5 | using Pkg
6 | Pkg.activate(".")
7 |
8 | using Random
9 | using DataStructures
10 |
11 |
12 | # PARAMETERS
13 |
14 | # network simulation
15 | second = 1
16 | minute = 60*second
17 | hour = 60*minute
18 |
19 | Δ = 1*second
20 | T_end = 60*minute
21 | T_part_start = 10*minute
22 | T_part_stop = 30*minute
23 |
24 | # adversarial/honest validators
25 | n = 100
26 | f = 25
27 |
28 | # da protocol
29 | λ = 0.1
30 | k = 20
31 |
32 | # p protocol
33 | Δ_bft = 5 * Δ
34 |
35 |
36 | # IMPLEMENTATION
37 |
38 | include("Basics.jl")
39 | include("ProtocolDA.jl")
40 | include("ProtocolP.jl")
41 | include("Validators.jl")
42 |
43 |
44 | # MAIN LOOP
45 |
46 | validators = [ id <= (n-f) ? HonestValidator(id) : AdversarialValidator(id) for id in 1:n ]
47 |
48 | validators_honest = validators[1:(n-f)]
49 | validators_adversarial = validators[(n-f+1):n]
50 |
51 | validators_awake = copy(validators_honest)
52 | validators_asleep = []
53 |
54 | validators_part1 = validators[1:15]
55 | validators_part2 = validators[16:(n-f)]
56 |
57 | msgs_inflight = Dict{Int,Dict{Validator,Vector{Msg}}}()
58 | msgs_missed = Dict( v => Vector{Msg}() for v in validators )
59 |
60 | println(join(["t", "l_Lp", "l_Lp_1", "l_Lp_2", "l_Lda", "l_Lda_1", "l_Lda_2", "l_awake", "l_asleep", "l_Lda_adv"], " "))
61 |
62 |
63 | for t in 0:T_end
64 | # @show t
65 |
66 | global validators_awake
67 | global validators_asleep
68 |
69 |
70 | # handle partition
71 | if t == T_part_start
72 | validators_awake = validators_honest[1:25]
73 | validators_asleep = validators_honest[26:(n-f)]
74 | elseif t == T_part_stop
75 | validators_awake = copy(validators_honest)
76 | validators_asleep = []
77 | end
78 |
79 |
80 | # prepare msg queues
81 | msgs_in_all = get(msgs_inflight, t, Dict{Validator,Vector{Msg}}())
82 | msgs_out_part1 = Vector{Msg}()
83 | msgs_out_part2 = Vector{Msg}()
84 |
85 |
86 | # compute awake honest validator actions for this slot
87 | # collect messages missed by asleep validators
88 | for v in validators_honest
89 | msgs_in = get(msgs_in_all, v, Vector{Msg}())
90 |
91 | if v in validators_awake
92 | if v in validators_part1
93 | msgs_out = msgs_out_part1
94 | else #if v in validators_part2
95 | msgs_out = msgs_out_part2
96 | end
97 |
98 | slot!(v, t, msgs_out, vcat(msgs_missed[v], msgs_in))
99 | empty!(msgs_missed[v])
100 |
101 | else #if v in validators_asleep
102 | append!(msgs_missed[v], msgs_in)
103 |
104 | end
105 | end
106 |
107 |
108 | # msg delivery, respecting the partition
109 | if T_part_start <= t < T_part_stop
110 | t_delivery_inter = max(t + Δ, T_part_stop)
111 | t_delivery_intra = t + Δ
112 | else
113 | t_delivery_inter = t + Δ
114 | t_delivery_intra = t + Δ
115 | end
116 |
117 | msgs_inflight[t_delivery_inter] = get(msgs_inflight, t_delivery_inter, Dict( v => Vector{Msg}() for v in validators ))
118 | msgs_inflight[t_delivery_intra] = get(msgs_inflight, t_delivery_intra, Dict( v => Vector{Msg}() for v in validators ))
119 |
120 | for v in validators_part1
121 | append!(msgs_inflight[t_delivery_inter][v], msgs_out_part2)
122 | append!(msgs_inflight[t_delivery_intra][v], msgs_out_part1)
123 | end
124 | for v in validators_part2
125 | append!(msgs_inflight[t_delivery_inter][v], msgs_out_part1)
126 | append!(msgs_inflight[t_delivery_intra][v], msgs_out_part2)
127 | end
128 |
129 |
130 | # compute adversarial validator actions for this slot
131 | msgs_honest = vcat(msgs_out_part1, msgs_out_part2)
132 | msgs_out_rush_honest = Vector{Msg}()
133 | msgs_out_private_adversarial = Vector{Msg}()
134 |
135 | for v in validators_adversarial
136 | msgs_in = get(msgs_in_all, v, Vector{Msg}())
137 | slot!(v, t, msgs_out_private_adversarial, msgs_out_rush_honest, vcat(msgs_in), msgs_honest)
138 | end
139 |
140 |
141 | # msg delivery for adversarial msgs
142 | msgs_inflight[t + 1] = get(msgs_inflight, t + 1, Dict( v => Vector{Msg}() for v in validators ))
143 |
144 | for v in validators_honest
145 | prepend!(msgs_inflight[t + 1][v], msgs_out_rush_honest)
146 | end
147 |
148 | for v in validators_adversarial
149 | append!(msgs_inflight[t + 1][v], msgs_out_private_adversarial)
150 | append!(msgs_inflight[t + 1][v], msgs_out_rush_honest)
151 | end
152 |
153 |
154 | # log ledger lengths
155 | if t % 15*second == 0
156 | l_Lp_1 = minimum([ length(Lp(v))-1 for v in intersect(validators_awake, validators_part1) ])
157 | l_Lp_2 = minimum([ length(Lp(v))-1 for v in intersect(validators_awake, validators_part2) ])
158 | l_Lda_1 = minimum([ length(Lda(v))-1 for v in intersect(validators_awake, validators_part1) ])
159 | l_Lda_2 = minimum([ length(Lda(v))-1 for v in intersect(validators_awake, validators_part2) ])
160 | l_Lp = min(l_Lp_1, l_Lp_2)
161 | l_Lda = min(l_Lda_1, l_Lda_2)
162 | l_Lda_adv = minimum([ length(Lda(v))-1 for v in intersect(validators_adversarial) ])
163 |
164 | println(join([t/second, l_Lp, l_Lp_1, l_Lp_2, l_Lda, l_Lda_1, l_Lda_2, length(validators_awake), length(validators_asleep), l_Lda_adv], " "))
165 | end
166 | end
167 |
168 |
169 | # DUMP Lp/Lda AS SEEN BY HONEST VALIDATOR IN PART1/PART2 AND ADVERSARY
170 |
171 | println("Lp:")
172 | println(Lp(validators_part1[1]))
173 | println(Lp(validators_part2[1]))
174 | # println(Lp(validators_adversarial[end]))
175 | println()
176 |
177 | println("Lda:")
178 | println(Lda(validators_part1[1]))
179 | println(Lda(validators_part2[1]))
180 | println(Lda(validators_adversarial[end]))
181 | println()
182 |
183 | println("Blocktrees:")
184 | println(graphviz(validators_part1[1]))
185 | println(graphviz(validators_part2[1]))
186 | println(graphviz(validators_adversarial[end]))
187 |
188 |
--------------------------------------------------------------------------------
/006-simulation-04-overview-01.jl:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env julia
2 |
3 | # JULIA ENVIRONMENT
4 |
5 | using Pkg
6 | Pkg.activate(".")
7 |
8 | using Random
9 | using DataStructures
10 |
11 |
12 | # PARAMETERS
13 |
14 | # network simulation
15 | second = 1
16 | minute = 60*second
17 | hour = 60*minute
18 |
19 | Δ = 1*second
20 | T_end = 60*minute
21 | T_part_start = 1400*second #10*minute
22 | T_part_stop = 2000*second #30*minute
23 |
24 | # adversarial/honest validators
25 | n = 100
26 | f = 25
27 |
28 | # da protocol
29 | λ = 0.1
30 | k = 20
31 |
32 | # p protocol
33 | Δ_bft = 5 * Δ
34 |
35 |
36 | # IMPLEMENTATION
37 |
38 | include("Basics.jl")
39 | include("ProtocolDA.jl")
40 | include("ProtocolP.jl")
41 | include("Validators.jl")
42 |
43 |
44 | # DYNAMIC AVAILABILITY
45 |
46 | rng_da = MersenneTwister(RNG_SEED_DYNAMIC_PARTICIPATION + 1)
47 |
48 | function da_tick!(vs_awake, vs_asleep)
49 | # for i in 1:3
50 | if length(vs_awake) == 60
51 | # can only wake one up
52 | dir = rand(rng_da, (:toawake, :nothing))
53 | elseif length(vs_awake) == n-f
54 | # can only put one to sleep
55 | dir = rand(rng_da, (:nothing, :toasleep))
56 | else
57 | # flip a coin
58 | dir = rand(rng_da, (:toawake, :toasleep))
59 | end
60 |
61 | if dir == :toawake
62 | shuffle!(rng_da, vs_asleep)
63 | push!(vs_awake, pop!(vs_asleep))
64 | elseif dir == :toasleep
65 | shuffle!(rng_da, vs_awake)
66 | push!(vs_asleep, pop!(vs_awake))
67 | else #if dir == :nothing
68 | # nop
69 | end
70 | # end
71 | end
72 |
73 |
74 | # MAIN LOOP
75 |
76 | validators = [ id <= (n-f) ? HonestValidator(id) : AdversarialValidator(id) for id in 1:n ]
77 |
78 | validators_honest = validators[1:(n-f)]
79 | validators_adversarial = validators[(n-f+1):n]
80 |
81 | validators_awake = copy(validators_honest)
82 | validators_asleep = []
83 |
84 | validators_part1 = validators[1:(n-f)÷2]
85 | validators_part2 = validators[((n-f)÷2+1):(n-f)]
86 |
87 | msgs_inflight = Dict{Int,Dict{Validator,Vector{Msg}}}()
88 | msgs_missed = Dict( v => Vector{Msg}() for v in validators )
89 |
90 | liveness_phases = Vector{Tuple{Int,Float64,Int}}()
91 | liveness_phase_start = nothing
92 |
93 | println(join(["t", "l_Lp", "l_Lp_1", "l_Lp_2", "l_Lda", "l_Lda_1", "l_Lda_2", "l_awake", "l_asleep", "l_Lda_adv"], " "))
94 |
95 |
96 | for t in 0:T_end
97 | # @show t
98 |
99 | da_tick!(validators_awake, validators_asleep)
100 |
101 |
102 | global liveness_phase_start
103 | if t % 15*second == 0
104 | if liveness_phase_start === nothing && length(validators_awake) >= 67
105 | liveness_phase_start = t
106 | elseif liveness_phase_start !== nothing && length(validators_awake) < 67 || t == T_end
107 | push!(liveness_phases, (liveness_phase_start, (liveness_phase_start + t)/2, t))
108 | liveness_phase_start = nothing
109 | end
110 | end
111 |
112 |
113 | # prepare msg queues
114 | msgs_in_all = get(msgs_inflight, t, Dict{Validator,Vector{Msg}}())
115 | msgs_out_part1 = Vector{Msg}()
116 | msgs_out_part2 = Vector{Msg}()
117 |
118 |
119 | # compute awake honest validator actions for this slot
120 | # collect messages missed by asleep validators
121 | for v in validators_honest
122 | msgs_in = get(msgs_in_all, v, Vector{Msg}())
123 |
124 | if v in validators_awake
125 | if v in validators_part1
126 | msgs_out = msgs_out_part1
127 | else #if v in validators_part2
128 | msgs_out = msgs_out_part2
129 | end
130 |
131 | slot!(v, t, msgs_out, vcat(msgs_missed[v], msgs_in))
132 | empty!(msgs_missed[v])
133 |
134 | else #if v in validators_asleep
135 | append!(msgs_missed[v], msgs_in)
136 |
137 | end
138 | end
139 |
140 |
141 | # msg delivery, respecting the partition
142 | if T_part_start <= t < T_part_stop
143 | t_delivery_inter = max(t + Δ, T_part_stop)
144 | t_delivery_intra = t + Δ
145 | else
146 | t_delivery_inter = t + Δ
147 | t_delivery_intra = t + Δ
148 | end
149 |
150 | msgs_inflight[t_delivery_inter] = get(msgs_inflight, t_delivery_inter, Dict( v => Vector{Msg}() for v in validators ))
151 | msgs_inflight[t_delivery_intra] = get(msgs_inflight, t_delivery_intra, Dict( v => Vector{Msg}() for v in validators ))
152 |
153 | for v in validators_part1
154 | append!(msgs_inflight[t_delivery_inter][v], msgs_out_part2)
155 | append!(msgs_inflight[t_delivery_intra][v], msgs_out_part1)
156 | end
157 | for v in validators_part2
158 | append!(msgs_inflight[t_delivery_inter][v], msgs_out_part1)
159 | append!(msgs_inflight[t_delivery_intra][v], msgs_out_part2)
160 | end
161 |
162 |
163 | # compute adversarial validator actions for this slot
164 | msgs_honest = vcat(msgs_out_part1, msgs_out_part2)
165 | msgs_out_rush_honest = Vector{Msg}()
166 | msgs_out_private_adversarial = Vector{Msg}()
167 |
168 | for v in validators_adversarial
169 | msgs_in = get(msgs_in_all, v, Vector{Msg}())
170 | slot!(v, t, msgs_out_private_adversarial, msgs_out_rush_honest, vcat(msgs_in), msgs_honest)
171 | end
172 |
173 |
174 | # msg delivery for adversarial msgs
175 | msgs_inflight[t + 1] = get(msgs_inflight, t + 1, Dict( v => Vector{Msg}() for v in validators ))
176 |
177 | for v in validators_honest
178 | prepend!(msgs_inflight[t + 1][v], msgs_out_rush_honest)
179 | end
180 |
181 | for v in validators_adversarial
182 | append!(msgs_inflight[t + 1][v], msgs_out_private_adversarial)
183 | append!(msgs_inflight[t + 1][v], msgs_out_rush_honest)
184 | end
185 |
186 |
187 | # log ledger lengths
188 | if t % 15*second == 0
189 | l_Lp_1 = minimum([ length(Lp(v))-1 for v in intersect(validators_awake, validators_part1) ])
190 | l_Lp_2 = minimum([ length(Lp(v))-1 for v in intersect(validators_awake, validators_part2) ])
191 | l_Lda_1 = minimum([ length(Lda(v))-1 for v in intersect(validators_awake, validators_part1) ])
192 | l_Lda_2 = minimum([ length(Lda(v))-1 for v in intersect(validators_awake, validators_part2) ])
193 | l_Lp = min(l_Lp_1, l_Lp_2)
194 | l_Lda = min(l_Lda_1, l_Lda_2)
195 | l_Lda_adv = minimum([ length(Lda(v))-1 for v in intersect(validators_adversarial) ])
196 |
197 | println(join([t/second, l_Lp, l_Lp_1, l_Lp_2, l_Lda, l_Lda_1, l_Lda_2, length(validators_awake), length(validators_asleep), l_Lda_adv], " "))
198 | end
199 | end
200 |
201 |
202 | println()
203 |
204 | # DUMP Lp/Lda AS SEEN BY HONEST VALIDATOR IN PART1/PART2 AND ADVERSARY
205 |
206 | println("Lp:")
207 | println(Lp(validators_part1[1]))
208 | println(Lp(validators_part2[1]))
209 | # println(Lp(validators_adversarial[end]))
210 | println()
211 |
212 | println("Lda:")
213 | println(Lda(validators_part1[1]))
214 | println(Lda(validators_part2[1]))
215 | println(Lda(validators_adversarial[end]))
216 | println()
217 |
218 | println("Blocktrees:")
219 | println(graphviz(validators_part1[1]))
220 | println(graphviz(validators_part2[1]))
221 | println(graphviz(validators_adversarial[end]))
222 |
223 | @show liveness_phases
224 | println(join([ join(phase, "/") for phase in liveness_phases ], ", "))
225 |
--------------------------------------------------------------------------------
/sim-03.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lda l_awake l_asleep
2 | 0.0 0.0 0.0 61.0 14.0
3 | 15.0 0.0 0.0 62.0 13.0
4 | 30.0 0.0 0.0 59.0 16.0
5 | 45.0 0.0 0.0 64.0 11.0
6 | 60.0 0.0 0.0 61.0 14.0
7 | 75.0 0.0 0.0 58.0 17.0
8 | 90.0 0.0 0.0 55.0 20.0
9 | 105.0 0.0 0.0 54.0 21.0
10 | 120.0 0.0 0.0 57.0 18.0
11 | 135.0 0.0 0.0 56.0 19.0
12 | 150.0 0.0 0.0 52.0 23.0
13 | 165.0 0.0 0.0 53.0 22.0
14 | 180.0 0.0 0.0 52.0 23.0
15 | 195.0 0.0 0.0 55.0 20.0
16 | 210.0 0.0 0.0 62.0 13.0
17 | 225.0 0.0 0.0 61.0 14.0
18 | 240.0 0.0 0.0 58.0 17.0
19 | 255.0 0.0 0.0 67.0 8.0
20 | 270.0 0.0 0.0 70.0 5.0
21 | 285.0 0.0 0.0 67.0 8.0
22 | 300.0 0.0 0.0 64.0 11.0
23 | 315.0 0.0 0.0 63.0 12.0
24 | 330.0 0.0 0.0 54.0 21.0
25 | 345.0 0.0 1.0 51.0 24.0
26 | 360.0 0.0 2.0 53.0 22.0
27 | 375.0 0.0 3.0 51.0 24.0
28 | 390.0 0.0 5.0 54.0 21.0
29 | 405.0 0.0 5.0 55.0 20.0
30 | 420.0 0.0 5.0 56.0 19.0
31 | 435.0 0.0 5.0 57.0 18.0
32 | 450.0 0.0 6.0 56.0 19.0
33 | 465.0 0.0 6.0 69.0 6.0
34 | 480.0 0.0 6.0 62.0 13.0
35 | 495.0 0.0 8.0 61.0 14.0
36 | 510.0 0.0 9.0 62.0 13.0
37 | 525.0 0.0 9.0 61.0 14.0
38 | 540.0 0.0 10.0 66.0 9.0
39 | 555.0 0.0 10.0 65.0 10.0
40 | 570.0 0.0 11.0 66.0 9.0
41 | 585.0 0.0 12.0 63.0 12.0
42 | 600.0 0.0 14.0 58.0 17.0
43 | 615.0 0.0 16.0 55.0 20.0
44 | 630.0 0.0 16.0 56.0 19.0
45 | 645.0 0.0 16.0 53.0 22.0
46 | 660.0 0.0 17.0 54.0 21.0
47 | 675.0 0.0 17.0 54.0 21.0
48 | 690.0 0.0 17.0 51.0 24.0
49 | 705.0 0.0 17.0 54.0 21.0
50 | 720.0 0.0 18.0 53.0 22.0
51 | 735.0 0.0 19.0 51.0 24.0
52 | 750.0 0.0 20.0 53.0 22.0
53 | 765.0 0.0 22.0 56.0 19.0
54 | 780.0 0.0 25.0 57.0 18.0
55 | 795.0 0.0 27.0 58.0 17.0
56 | 810.0 0.0 28.0 61.0 14.0
57 | 825.0 0.0 28.0 60.0 15.0
58 | 840.0 0.0 30.0 61.0 14.0
59 | 855.0 0.0 31.0 64.0 11.0
60 | 870.0 0.0 31.0 63.0 12.0
61 | 885.0 0.0 31.0 66.0 9.0
62 | 900.0 0.0 31.0 67.0 8.0
63 | 915.0 0.0 32.0 62.0 13.0
64 | 930.0 0.0 34.0 61.0 14.0
65 | 945.0 0.0 35.0 60.0 15.0
66 | 960.0 0.0 36.0 61.0 14.0
67 | 975.0 0.0 37.0 66.0 9.0
68 | 990.0 0.0 41.0 69.0 6.0
69 | 1005.0 0.0 43.0 66.0 9.0
70 | 1020.0 0.0 45.0 57.0 18.0
71 | 1035.0 0.0 45.0 54.0 21.0
72 | 1050.0 0.0 47.0 53.0 22.0
73 | 1065.0 0.0 48.0 54.0 21.0
74 | 1080.0 0.0 49.0 55.0 20.0
75 | 1095.0 0.0 49.0 54.0 21.0
76 | 1110.0 0.0 50.0 57.0 18.0
77 | 1125.0 0.0 51.0 52.0 23.0
78 | 1140.0 0.0 51.0 61.0 14.0
79 | 1155.0 0.0 54.0 60.0 15.0
80 | 1170.0 0.0 54.0 63.0 12.0
81 | 1185.0 0.0 55.0 68.0 7.0
82 | 1200.0 0.0 57.0 65.0 10.0
83 | 1215.0 0.0 58.0 72.0 3.0
84 | 1230.0 0.0 58.0 73.0 2.0
85 | 1245.0 0.0 58.0 72.0 3.0
86 | 1260.0 0.0 60.0 75.0 0.0
87 | 1275.0 0.0 60.0 75.0 0.0
88 | 1290.0 60.0 62.0 75.0 0.0
89 | 1305.0 60.0 62.0 75.0 0.0
90 | 1320.0 62.0 63.0 72.0 3.0
91 | 1335.0 63.0 63.0 73.0 2.0
92 | 1350.0 63.0 64.0 68.0 7.0
93 | 1365.0 63.0 64.0 71.0 4.0
94 | 1380.0 64.0 64.0 72.0 3.0
95 | 1395.0 64.0 67.0 75.0 0.0
96 | 1410.0 64.0 68.0 73.0 2.0
97 | 1425.0 64.0 70.0 66.0 9.0
98 | 1440.0 64.0 70.0 63.0 12.0
99 | 1455.0 64.0 72.0 58.0 17.0
100 | 1470.0 64.0 72.0 61.0 14.0
101 | 1485.0 64.0 72.0 56.0 19.0
102 | 1500.0 64.0 72.0 57.0 18.0
103 | 1515.0 64.0 74.0 58.0 17.0
104 | 1530.0 64.0 74.0 53.0 22.0
105 | 1545.0 64.0 74.0 52.0 23.0
106 | 1560.0 64.0 75.0 51.0 24.0
107 | 1575.0 64.0 75.0 52.0 23.0
108 | 1590.0 64.0 75.0 52.0 23.0
109 | 1605.0 64.0 75.0 52.0 23.0
110 | 1620.0 64.0 75.0 57.0 18.0
111 | 1635.0 64.0 77.0 54.0 21.0
112 | 1650.0 64.0 77.0 53.0 22.0
113 | 1665.0 64.0 77.0 58.0 17.0
114 | 1680.0 64.0 77.0 55.0 20.0
115 | 1695.0 64.0 77.0 60.0 15.0
116 | 1710.0 64.0 77.0 65.0 10.0
117 | 1725.0 64.0 79.0 68.0 7.0
118 | 1740.0 64.0 79.0 73.0 2.0
119 | 1755.0 64.0 82.0 74.0 1.0
120 | 1770.0 81.0 83.0 75.0 0.0
121 | 1785.0 82.0 85.0 67.0 8.0
122 | 1800.0 82.0 86.0 64.0 11.0
123 | 1815.0 83.0 88.0 61.0 14.0
124 | 1830.0 83.0 90.0 60.0 15.0
125 | 1845.0 83.0 90.0 61.0 14.0
126 | 1860.0 83.0 91.0 68.0 7.0
127 | 1875.0 83.0 92.0 69.0 6.0
128 | 1890.0 92.0 92.0 74.0 1.0
129 | 1905.0 92.0 94.0 70.0 5.0
130 | 1920.0 92.0 95.0 72.0 3.0
131 | 1935.0 94.0 97.0 72.0 3.0
132 | 1950.0 97.0 99.0 74.0 1.0
133 | 1965.0 97.0 99.0 73.0 2.0
134 | 1980.0 97.0 99.0 72.0 3.0
135 | 1995.0 97.0 100.0 71.0 4.0
136 | 2010.0 97.0 101.0 70.0 5.0
137 | 2025.0 97.0 101.0 69.0 6.0
138 | 2040.0 97.0 102.0 70.0 5.0
139 | 2055.0 101.0 103.0 71.0 4.0
140 | 2070.0 102.0 104.0 68.0 7.0
141 | 2085.0 102.0 104.0 73.0 2.0
142 | 2100.0 104.0 105.0 68.0 7.0
143 | 2115.0 104.0 107.0 65.0 10.0
144 | 2130.0 104.0 108.0 68.0 7.0
145 | 2145.0 104.0 109.0 69.0 6.0
146 | 2160.0 108.0 111.0 74.0 1.0
147 | 2175.0 108.0 112.0 72.0 3.0
148 | 2190.0 111.0 113.0 69.0 6.0
149 | 2205.0 112.0 113.0 68.0 7.0
150 | 2220.0 112.0 114.0 63.0 12.0
151 | 2235.0 112.0 115.0 58.0 17.0
152 | 2250.0 112.0 116.0 59.0 16.0
153 | 2265.0 112.0 116.0 60.0 15.0
154 | 2280.0 112.0 117.0 59.0 16.0
155 | 2295.0 112.0 118.0 60.0 15.0
156 | 2310.0 112.0 119.0 57.0 18.0
157 | 2325.0 112.0 119.0 58.0 17.0
158 | 2340.0 112.0 120.0 59.0 16.0
159 | 2355.0 112.0 120.0 60.0 15.0
160 | 2370.0 112.0 120.0 55.0 20.0
161 | 2385.0 112.0 122.0 52.0 23.0
162 | 2400.0 112.0 123.0 52.0 23.0
163 | 2415.0 112.0 123.0 51.0 24.0
164 | 2430.0 112.0 127.0 55.0 20.0
165 | 2445.0 112.0 128.0 56.0 19.0
166 | 2460.0 112.0 129.0 55.0 20.0
167 | 2475.0 112.0 130.0 52.0 23.0
168 | 2490.0 112.0 131.0 57.0 18.0
169 | 2505.0 112.0 131.0 58.0 17.0
170 | 2520.0 112.0 131.0 63.0 12.0
171 | 2535.0 112.0 131.0 54.0 21.0
172 | 2550.0 112.0 133.0 57.0 18.0
173 | 2565.0 112.0 133.0 56.0 19.0
174 | 2580.0 112.0 133.0 53.0 22.0
175 | 2595.0 112.0 135.0 51.0 24.0
176 | 2610.0 112.0 138.0 54.0 21.0
177 | 2625.0 112.0 138.0 51.0 24.0
178 | 2640.0 112.0 139.0 53.0 22.0
179 | 2655.0 112.0 140.0 52.0 23.0
180 | 2670.0 112.0 142.0 53.0 22.0
181 | 2685.0 112.0 143.0 56.0 19.0
182 | 2700.0 112.0 143.0 57.0 18.0
183 | 2715.0 112.0 143.0 68.0 7.0
184 | 2730.0 112.0 144.0 71.0 4.0
185 | 2745.0 112.0 145.0 70.0 5.0
186 | 2760.0 112.0 146.0 65.0 10.0
187 | 2775.0 112.0 147.0 64.0 11.0
188 | 2790.0 112.0 147.0 59.0 16.0
189 | 2805.0 112.0 148.0 62.0 13.0
190 | 2820.0 112.0 148.0 59.0 16.0
191 | 2835.0 112.0 148.0 56.0 19.0
192 | 2850.0 112.0 150.0 51.0 24.0
193 | 2865.0 112.0 150.0 52.0 23.0
194 | 2880.0 112.0 150.0 54.0 21.0
195 | 2895.0 112.0 151.0 52.0 23.0
196 | 2910.0 112.0 151.0 55.0 20.0
197 | 2925.0 112.0 152.0 52.0 23.0
198 | 2940.0 112.0 152.0 56.0 19.0
199 | 2955.0 112.0 155.0 53.0 22.0
200 | 2970.0 112.0 155.0 52.0 23.0
201 | 2985.0 112.0 157.0 53.0 22.0
202 | 3000.0 112.0 157.0 51.0 24.0
203 | 3015.0 112.0 158.0 53.0 22.0
204 | 3030.0 112.0 161.0 51.0 24.0
205 | 3045.0 112.0 162.0 53.0 22.0
206 | 3060.0 112.0 164.0 55.0 20.0
207 | 3075.0 112.0 165.0 54.0 21.0
208 | 3090.0 112.0 167.0 61.0 14.0
209 | 3105.0 112.0 167.0 68.0 7.0
210 | 3120.0 112.0 168.0 69.0 6.0
211 | 3135.0 112.0 169.0 74.0 1.0
212 | 3150.0 112.0 169.0 73.0 2.0
213 | 3165.0 112.0 170.0 72.0 3.0
214 | 3180.0 170.0 174.0 71.0 4.0
215 | 3195.0 171.0 175.0 72.0 3.0
216 | 3210.0 174.0 177.0 69.0 6.0
217 | 3225.0 174.0 177.0 62.0 13.0
218 | 3240.0 174.0 177.0 57.0 18.0
219 | 3255.0 174.0 177.0 62.0 13.0
220 | 3270.0 174.0 179.0 63.0 12.0
221 | 3285.0 174.0 179.0 64.0 11.0
222 | 3300.0 174.0 181.0 67.0 8.0
223 | 3315.0 174.0 181.0 70.0 5.0
224 | 3330.0 174.0 183.0 71.0 4.0
225 | 3345.0 174.0 183.0 72.0 3.0
226 | 3360.0 174.0 183.0 72.0 3.0
227 | 3375.0 174.0 184.0 73.0 2.0
228 | 3390.0 184.0 186.0 70.0 5.0
229 | 3405.0 184.0 187.0 69.0 6.0
230 | 3420.0 184.0 189.0 64.0 11.0
231 | 3435.0 184.0 189.0 67.0 8.0
232 | 3450.0 184.0 189.0 68.0 7.0
233 | 3465.0 184.0 189.0 67.0 8.0
234 | 3480.0 184.0 190.0 70.0 5.0
235 | 3495.0 184.0 191.0 65.0 10.0
236 | 3510.0 184.0 193.0 66.0 9.0
237 | 3525.0 184.0 195.0 73.0 2.0
238 | 3540.0 195.0 195.0 70.0 5.0
239 | 3555.0 195.0 195.0 74.0 1.0
240 | 3570.0 195.0 196.0 70.0 5.0
241 | 3585.0 195.0 198.0 67.0 8.0
242 | 3600.0 195.0 199.0 68.0 7.0
243 |
--------------------------------------------------------------------------------
/sim-01.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_A l_Lp_B l_Lda l_Lda_A l_Lda_B
2 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0
3 | 15.0 0.0 0.0 0.0 0.0 0.0 0.0
4 | 30.0 0.0 0.0 0.0 0.0 0.0 0.0
5 | 45.0 0.0 0.0 0.0 0.0 0.0 0.0
6 | 60.0 0.0 0.0 0.0 0.0 0.0 0.0
7 | 75.0 0.0 0.0 0.0 0.0 0.0 0.0
8 | 90.0 0.0 0.0 0.0 0.0 0.0 0.0
9 | 105.0 0.0 0.0 0.0 0.0 0.0 0.0
10 | 120.0 0.0 0.0 0.0 0.0 0.0 0.0
11 | 135.0 0.0 0.0 0.0 0.0 0.0 0.0
12 | 150.0 0.0 0.0 0.0 0.0 0.0 0.0
13 | 165.0 0.0 0.0 0.0 0.0 0.0 0.0
14 | 180.0 0.0 0.0 0.0 0.0 0.0 0.0
15 | 195.0 0.0 0.0 0.0 0.0 0.0 0.0
16 | 210.0 0.0 0.0 0.0 0.0 0.0 0.0
17 | 225.0 0.0 0.0 0.0 0.0 0.0 0.0
18 | 240.0 0.0 0.0 0.0 0.0 0.0 0.0
19 | 255.0 0.0 0.0 0.0 0.0 0.0 0.0
20 | 270.0 0.0 0.0 0.0 0.0 0.0 0.0
21 | 285.0 0.0 0.0 0.0 1.0 1.0 1.0
22 | 300.0 1.0 1.0 1.0 1.0 1.0 1.0
23 | 315.0 1.0 1.0 1.0 1.0 1.0 1.0
24 | 330.0 1.0 1.0 1.0 4.0 4.0 4.0
25 | 345.0 1.0 1.0 1.0 7.0 7.0 7.0
26 | 360.0 1.0 1.0 1.0 7.0 7.0 7.0
27 | 375.0 1.0 1.0 1.0 7.0 7.0 7.0
28 | 390.0 1.0 1.0 1.0 8.0 8.0 8.0
29 | 405.0 1.0 1.0 1.0 8.0 8.0 8.0
30 | 420.0 1.0 1.0 1.0 10.0 10.0 10.0
31 | 435.0 1.0 1.0 1.0 11.0 11.0 11.0
32 | 450.0 1.0 1.0 1.0 11.0 11.0 11.0
33 | 465.0 1.0 1.0 1.0 11.0 11.0 11.0
34 | 480.0 1.0 1.0 1.0 12.0 12.0 12.0
35 | 495.0 1.0 1.0 1.0 12.0 12.0 12.0
36 | 510.0 1.0 1.0 1.0 13.0 13.0 13.0
37 | 525.0 1.0 1.0 1.0 14.0 14.0 14.0
38 | 540.0 1.0 1.0 1.0 14.0 14.0 14.0
39 | 555.0 14.0 14.0 14.0 16.0 16.0 16.0
40 | 570.0 14.0 14.0 14.0 17.0 17.0 17.0
41 | 585.0 14.0 14.0 14.0 17.0 17.0 17.0
42 | # t=600: start of partition 1
43 | 600.0 17.0 17.0 17.0 20.0 20.0 20.0
44 | 615.0 17.0 17.0 17.0 20.0 22.0 20.0
45 | 630.0 17.0 17.0 17.0 21.0 22.0 21.0
46 | 645.0 17.0 17.0 17.0 21.0 22.0 21.0
47 | 660.0 17.0 17.0 17.0 22.0 24.0 22.0
48 | 675.0 17.0 17.0 17.0 22.0 24.0 22.0
49 | 690.0 17.0 17.0 17.0 22.0 24.0 22.0
50 | 705.0 17.0 17.0 17.0 22.0 26.0 22.0
51 | 720.0 17.0 17.0 17.0 24.0 26.0 24.0
52 | 735.0 17.0 17.0 17.0 25.0 27.0 25.0
53 | 750.0 17.0 17.0 17.0 25.0 28.0 25.0
54 | 765.0 17.0 17.0 17.0 26.0 30.0 26.0
55 | 780.0 17.0 17.0 17.0 26.0 31.0 26.0
56 | 795.0 17.0 17.0 17.0 28.0 32.0 28.0
57 | 810.0 17.0 17.0 17.0 28.0 32.0 28.0
58 | 825.0 17.0 17.0 17.0 28.0 33.0 28.0
59 | 840.0 17.0 17.0 17.0 29.0 34.0 29.0
60 | 855.0 17.0 17.0 17.0 29.0 35.0 29.0
61 | 870.0 17.0 17.0 17.0 29.0 37.0 29.0
62 | 885.0 17.0 17.0 17.0 30.0 37.0 30.0
63 | 900.0 17.0 17.0 17.0 31.0 38.0 31.0
64 | 915.0 17.0 17.0 17.0 31.0 39.0 31.0
65 | 930.0 17.0 17.0 17.0 31.0 41.0 31.0
66 | 945.0 17.0 17.0 17.0 33.0 42.0 33.0
67 | 960.0 17.0 17.0 17.0 33.0 42.0 33.0
68 | 975.0 17.0 17.0 17.0 33.0 42.0 33.0
69 | 990.0 17.0 17.0 17.0 34.0 43.0 34.0
70 | 1005.0 17.0 17.0 17.0 35.0 44.0 35.0
71 | 1020.0 17.0 17.0 17.0 35.0 44.0 35.0
72 | 1035.0 17.0 17.0 17.0 37.0 46.0 37.0
73 | 1050.0 17.0 17.0 17.0 37.0 46.0 37.0
74 | 1065.0 17.0 17.0 17.0 37.0 46.0 37.0
75 | 1080.0 17.0 17.0 17.0 37.0 46.0 37.0
76 | 1095.0 17.0 17.0 17.0 37.0 46.0 37.0
77 | 1110.0 17.0 17.0 17.0 37.0 47.0 37.0
78 | 1125.0 17.0 17.0 17.0 37.0 47.0 37.0
79 | 1140.0 17.0 17.0 17.0 38.0 47.0 38.0
80 | 1155.0 17.0 17.0 17.0 38.0 47.0 38.0
81 | 1170.0 17.0 17.0 17.0 38.0 47.0 38.0
82 | 1185.0 17.0 17.0 17.0 41.0 47.0 41.0
83 | # t=1200: end of partition 1
84 | 1200.0 17.0 17.0 17.0 48.0 48.0 48.0
85 | 1215.0 17.0 17.0 17.0 50.0 50.0 50.0
86 | 1230.0 17.0 17.0 17.0 51.0 51.0 51.0
87 | 1245.0 17.0 17.0 17.0 52.0 52.0 52.0
88 | 1260.0 17.0 17.0 17.0 53.0 53.0 53.0
89 | 1275.0 17.0 17.0 17.0 54.0 54.0 54.0
90 | 1290.0 54.0 54.0 54.0 55.0 55.0 55.0
91 | 1305.0 54.0 54.0 54.0 56.0 56.0 56.0
92 | 1320.0 55.0 55.0 55.0 56.0 56.0 56.0
93 | 1335.0 56.0 56.0 56.0 56.0 56.0 56.0
94 | 1350.0 56.0 56.0 56.0 56.0 56.0 56.0
95 | 1365.0 56.0 56.0 56.0 57.0 57.0 57.0
96 | 1380.0 57.0 57.0 57.0 58.0 58.0 58.0
97 | 1395.0 57.0 57.0 57.0 59.0 59.0 59.0
98 | 1410.0 57.0 57.0 57.0 61.0 61.0 61.0
99 | 1425.0 57.0 57.0 57.0 62.0 62.0 62.0
100 | 1440.0 57.0 57.0 57.0 63.0 63.0 63.0
101 | 1455.0 57.0 57.0 57.0 63.0 63.0 63.0
102 | 1470.0 57.0 57.0 57.0 65.0 65.0 65.0
103 | 1485.0 65.0 65.0 65.0 67.0 67.0 67.0
104 | 1500.0 67.0 67.0 67.0 68.0 68.0 68.0
105 | 1515.0 67.0 67.0 67.0 68.0 68.0 68.0
106 | 1530.0 67.0 67.0 67.0 69.0 69.0 69.0
107 | 1545.0 67.0 67.0 67.0 70.0 70.0 70.0
108 | 1560.0 67.0 67.0 67.0 70.0 70.0 70.0
109 | 1575.0 67.0 67.0 67.0 70.0 70.0 70.0
110 | 1590.0 67.0 67.0 67.0 71.0 71.0 71.0
111 | 1605.0 67.0 67.0 67.0 74.0 74.0 74.0
112 | 1620.0 67.0 67.0 67.0 75.0 75.0 75.0
113 | 1635.0 67.0 67.0 67.0 75.0 75.0 75.0
114 | 1650.0 67.0 67.0 67.0 77.0 77.0 77.0
115 | 1665.0 67.0 67.0 67.0 78.0 78.0 78.0
116 | 1680.0 67.0 67.0 67.0 80.0 80.0 80.0
117 | 1695.0 67.0 67.0 67.0 82.0 82.0 82.0
118 | 1710.0 67.0 67.0 67.0 84.0 84.0 84.0
119 | 1725.0 67.0 67.0 67.0 84.0 84.0 84.0
120 | 1740.0 67.0 67.0 67.0 84.0 84.0 84.0
121 | 1755.0 84.0 84.0 84.0 85.0 85.0 85.0
122 | 1770.0 84.0 84.0 84.0 86.0 86.0 86.0
123 | 1785.0 85.0 85.0 85.0 87.0 87.0 87.0
124 | # t=1800: start of partition 2
125 | 1800.0 86.0 86.0 86.0 89.0 89.0 89.0
126 | 1815.0 86.0 86.0 86.0 90.0 90.0 90.0
127 | 1830.0 86.0 86.0 86.0 90.0 90.0 90.0
128 | 1845.0 86.0 86.0 86.0 91.0 91.0 91.0
129 | 1860.0 86.0 86.0 86.0 91.0 91.0 91.0
130 | 1875.0 86.0 86.0 86.0 91.0 93.0 91.0
131 | 1890.0 86.0 86.0 86.0 91.0 94.0 91.0
132 | 1905.0 86.0 86.0 86.0 92.0 95.0 92.0
133 | 1920.0 86.0 86.0 86.0 94.0 95.0 94.0
134 | 1935.0 86.0 86.0 86.0 94.0 96.0 94.0
135 | 1950.0 86.0 86.0 86.0 94.0 96.0 94.0
136 | 1965.0 86.0 86.0 86.0 95.0 97.0 95.0
137 | 1980.0 86.0 86.0 86.0 95.0 99.0 95.0
138 | 1995.0 86.0 86.0 86.0 95.0 99.0 95.0
139 | 2010.0 86.0 86.0 86.0 95.0 100.0 95.0
140 | 2025.0 86.0 86.0 86.0 95.0 100.0 95.0
141 | 2040.0 86.0 86.0 86.0 95.0 101.0 95.0
142 | 2055.0 86.0 86.0 86.0 97.0 103.0 97.0
143 | 2070.0 86.0 86.0 86.0 97.0 103.0 97.0
144 | 2085.0 86.0 86.0 86.0 99.0 105.0 99.0
145 | 2100.0 86.0 86.0 86.0 99.0 105.0 99.0
146 | 2115.0 86.0 86.0 86.0 100.0 106.0 100.0
147 | 2130.0 86.0 86.0 86.0 100.0 106.0 100.0
148 | 2145.0 86.0 86.0 86.0 100.0 106.0 100.0
149 | 2160.0 86.0 86.0 86.0 100.0 107.0 100.0
150 | 2175.0 86.0 86.0 86.0 102.0 107.0 102.0
151 | 2190.0 86.0 86.0 86.0 103.0 108.0 103.0
152 | 2205.0 86.0 86.0 86.0 103.0 109.0 103.0
153 | 2220.0 86.0 86.0 86.0 104.0 111.0 104.0
154 | 2235.0 86.0 86.0 86.0 104.0 112.0 104.0
155 | 2250.0 86.0 86.0 86.0 104.0 112.0 104.0
156 | 2265.0 86.0 86.0 86.0 105.0 112.0 105.0
157 | 2280.0 86.0 86.0 86.0 105.0 112.0 105.0
158 | 2295.0 86.0 86.0 86.0 105.0 112.0 105.0
159 | 2310.0 86.0 86.0 86.0 105.0 114.0 105.0
160 | 2325.0 86.0 86.0 86.0 105.0 115.0 105.0
161 | 2340.0 86.0 86.0 86.0 105.0 115.0 105.0
162 | 2355.0 86.0 86.0 86.0 105.0 115.0 105.0
163 | 2370.0 86.0 86.0 86.0 105.0 115.0 105.0
164 | 2385.0 86.0 86.0 86.0 105.0 115.0 105.0
165 | 2400.0 86.0 86.0 86.0 105.0 115.0 105.0
166 | 2415.0 86.0 86.0 86.0 105.0 116.0 105.0
167 | 2430.0 86.0 86.0 86.0 105.0 117.0 105.0
168 | 2445.0 86.0 86.0 86.0 105.0 119.0 105.0
169 | 2460.0 86.0 86.0 86.0 105.0 119.0 105.0
170 | 2475.0 86.0 86.0 86.0 107.0 120.0 107.0
171 | 2490.0 86.0 86.0 86.0 107.0 120.0 107.0
172 | 2505.0 86.0 86.0 86.0 108.0 120.0 108.0
173 | 2520.0 86.0 86.0 86.0 109.0 121.0 109.0
174 | 2535.0 86.0 86.0 86.0 109.0 125.0 109.0
175 | 2550.0 86.0 86.0 86.0 110.0 125.0 110.0
176 | 2565.0 86.0 86.0 86.0 111.0 126.0 111.0
177 | 2580.0 86.0 86.0 86.0 111.0 128.0 111.0
178 | 2595.0 86.0 86.0 86.0 111.0 129.0 111.0
179 | 2610.0 86.0 86.0 86.0 111.0 130.0 111.0
180 | 2625.0 86.0 86.0 86.0 111.0 130.0 111.0
181 | 2640.0 86.0 86.0 86.0 111.0 130.0 111.0
182 | 2655.0 86.0 86.0 86.0 111.0 130.0 111.0
183 | 2670.0 86.0 86.0 86.0 111.0 132.0 111.0
184 | 2685.0 86.0 86.0 86.0 112.0 134.0 112.0
185 | # t=2700: end of partition 2
186 | 2700.0 86.0 86.0 86.0 135.0 135.0 135.0
187 | 2715.0 86.0 86.0 86.0 135.0 135.0 135.0
188 | 2730.0 135.0 135.0 135.0 137.0 137.0 137.0
189 | 2745.0 136.0 136.0 136.0 137.0 137.0 137.0
190 | 2760.0 137.0 137.0 137.0 138.0 138.0 138.0
191 | 2775.0 137.0 137.0 137.0 140.0 140.0 140.0
192 | 2790.0 138.0 138.0 138.0 143.0 143.0 143.0
193 | 2805.0 138.0 138.0 138.0 144.0 144.0 144.0
194 | 2820.0 143.0 143.0 143.0 147.0 147.0 147.0
195 | 2835.0 144.0 144.0 144.0 147.0 147.0 147.0
196 | 2850.0 147.0 147.0 147.0 148.0 148.0 148.0
197 | 2865.0 147.0 147.0 147.0 149.0 149.0 149.0
198 | 2880.0 147.0 147.0 147.0 152.0 152.0 152.0
199 | 2895.0 147.0 147.0 147.0 152.0 152.0 152.0
200 | 2910.0 147.0 147.0 147.0 152.0 152.0 152.0
201 | 2925.0 152.0 152.0 152.0 153.0 153.0 153.0
202 | 2940.0 152.0 152.0 152.0 153.0 153.0 153.0
203 | 2955.0 152.0 152.0 152.0 154.0 154.0 154.0
204 | 2970.0 154.0 154.0 154.0 154.0 154.0 154.0
205 | 2985.0 154.0 154.0 154.0 155.0 155.0 155.0
206 | 3000.0 155.0 155.0 155.0 156.0 156.0 156.0
207 | 3015.0 155.0 155.0 155.0 157.0 157.0 157.0
208 | 3030.0 156.0 156.0 156.0 160.0 160.0 160.0
209 | 3045.0 156.0 156.0 156.0 162.0 162.0 162.0
210 | 3060.0 156.0 156.0 156.0 164.0 164.0 164.0
211 | 3075.0 156.0 156.0 156.0 165.0 165.0 165.0
212 | 3090.0 165.0 165.0 165.0 165.0 165.0 165.0
213 | 3105.0 165.0 165.0 165.0 167.0 167.0 167.0
214 | 3120.0 165.0 165.0 165.0 167.0 167.0 167.0
215 | 3135.0 167.0 167.0 167.0 169.0 169.0 169.0
216 | 3150.0 167.0 167.0 167.0 170.0 170.0 170.0
217 | 3165.0 167.0 167.0 167.0 171.0 171.0 171.0
218 | 3180.0 170.0 170.0 170.0 174.0 174.0 174.0
219 | 3195.0 172.0 172.0 172.0 175.0 175.0 175.0
220 | 3210.0 175.0 175.0 175.0 175.0 175.0 175.0
221 | 3225.0 175.0 175.0 175.0 176.0 176.0 176.0
222 | 3240.0 175.0 175.0 175.0 178.0 178.0 178.0
223 | 3255.0 177.0 177.0 177.0 179.0 179.0 179.0
224 | 3270.0 179.0 179.0 179.0 179.0 179.0 179.0
225 | 3285.0 179.0 179.0 179.0 184.0 184.0 184.0
226 | 3300.0 179.0 179.0 179.0 185.0 185.0 185.0
227 | 3315.0 179.0 179.0 179.0 187.0 187.0 187.0
228 | 3330.0 185.0 185.0 185.0 189.0 189.0 189.0
229 | 3345.0 185.0 185.0 185.0 190.0 190.0 190.0
230 | 3360.0 189.0 189.0 189.0 190.0 190.0 190.0
231 | 3375.0 190.0 190.0 190.0 190.0 190.0 190.0
232 | 3390.0 190.0 190.0 190.0 193.0 193.0 193.0
233 | 3405.0 190.0 190.0 190.0 194.0 194.0 194.0
234 | 3420.0 190.0 190.0 190.0 194.0 194.0 194.0
235 | 3435.0 190.0 190.0 190.0 196.0 196.0 196.0
236 | 3450.0 190.0 190.0 190.0 197.0 197.0 197.0
237 | 3465.0 190.0 190.0 190.0 198.0 198.0 198.0
238 | 3480.0 197.0 197.0 197.0 199.0 199.0 199.0
239 | 3495.0 197.0 197.0 197.0 200.0 200.0 200.0
240 | 3510.0 197.0 197.0 197.0 201.0 201.0 201.0
241 | 3525.0 197.0 197.0 197.0 201.0 201.0 201.0
242 | 3540.0 201.0 201.0 201.0 201.0 201.0 201.0
243 | 3555.0 201.0 201.0 201.0 202.0 202.0 202.0
244 | 3570.0 201.0 201.0 201.0 203.0 203.0 203.0
245 | 3585.0 202.0 202.0 202.0 204.0 204.0 204.0
246 |
--------------------------------------------------------------------------------
/sim-02-phases.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_1 l_Lp_2 l_Lda l_Lda_1 l_Lda_2 l_awake l_asleep l_Lda_adv
2 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
3 | 15.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
4 | 30.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
5 | 45.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
6 | 60.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
7 | 75.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
8 | 90.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
9 | 105.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
10 | 120.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
11 | 135.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
12 | 150.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
13 | 165.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
14 | 180.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
15 | 195.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
16 | 210.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
17 | 225.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
18 | 240.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
19 | 255.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
20 | 270.0 0.0 0.0 0.0 0.0 0.0 0.0 75.0 0.0 0.0
21 | 285.0 0.0 0.0 0.0 1.0 1.0 1.0 75.0 0.0 1.0
22 | 300.0 1.0 1.0 1.0 1.0 1.0 1.0 75.0 0.0 1.0
23 | 315.0 1.0 1.0 1.0 1.0 1.0 1.0 75.0 0.0 3.0
24 | 330.0 1.0 1.0 1.0 4.0 4.0 4.0 75.0 0.0 4.0
25 | 345.0 1.0 1.0 1.0 7.0 7.0 7.0 75.0 0.0 9.0
26 | 360.0 1.0 1.0 1.0 7.0 7.0 7.0 75.0 0.0 9.0
27 | 375.0 1.0 1.0 1.0 7.0 7.0 7.0 75.0 0.0 10.0
28 | 390.0 1.0 1.0 1.0 8.0 8.0 8.0 75.0 0.0 12.0
29 | 405.0 1.0 1.0 1.0 8.0 8.0 8.0 75.0 0.0 13.0
30 | 420.0 1.0 1.0 1.0 10.0 10.0 10.0 75.0 0.0 14.0
31 | 435.0 1.0 1.0 1.0 11.0 11.0 11.0 75.0 0.0 14.0
32 | 450.0 1.0 1.0 1.0 11.0 11.0 11.0 75.0 0.0 14.0
33 | 465.0 1.0 1.0 1.0 11.0 11.0 11.0 75.0 0.0 15.0
34 | 480.0 1.0 1.0 1.0 12.0 12.0 12.0 75.0 0.0 15.0
35 | 495.0 1.0 1.0 1.0 12.0 12.0 12.0 75.0 0.0 15.0
36 | 510.0 1.0 1.0 1.0 13.0 13.0 13.0 75.0 0.0 15.0
37 | 525.0 1.0 1.0 1.0 14.0 14.0 14.0 75.0 0.0 15.0
38 | 540.0 1.0 1.0 1.0 14.0 14.0 14.0 75.0 0.0 15.0
39 | 555.0 14.0 14.0 14.0 16.0 16.0 16.0 75.0 0.0 16.0
40 | 570.0 14.0 14.0 14.0 17.0 17.0 17.0 75.0 0.0 17.0
41 | 585.0 14.0 14.0 14.0 17.0 17.0 17.0 75.0 0.0 18.0
42 | 600.0 17.0 17.0 17.0 20.0 20.0 20.0 25.0 50.0 21.0
43 | 615.0 17.0 17.0 17.0 21.0 21.0 21.0 25.0 50.0 22.0
44 | 630.0 17.0 17.0 17.0 21.0 21.0 21.0 25.0 50.0 23.0
45 | 645.0 17.0 17.0 17.0 21.0 21.0 21.0 25.0 50.0 23.0
46 | 660.0 17.0 17.0 17.0 22.0 22.0 22.0 25.0 50.0 23.0
47 | 675.0 17.0 17.0 17.0 22.0 22.0 22.0 25.0 50.0 24.0
48 | 690.0 17.0 17.0 17.0 22.0 22.0 22.0 25.0 50.0 24.0
49 | 705.0 17.0 17.0 17.0 24.0 24.0 24.0 25.0 50.0 24.0
50 | 720.0 17.0 17.0 17.0 24.0 24.0 24.0 25.0 50.0 24.0
51 | 735.0 17.0 17.0 17.0 24.0 24.0 24.0 25.0 50.0 26.0
52 | 750.0 17.0 17.0 17.0 25.0 25.0 25.0 25.0 50.0 27.0
53 | 765.0 17.0 17.0 17.0 25.0 25.0 25.0 25.0 50.0 27.0
54 | 780.0 17.0 17.0 17.0 26.0 26.0 26.0 25.0 50.0 27.0
55 | 795.0 17.0 17.0 17.0 27.0 27.0 27.0 25.0 50.0 28.0
56 | 810.0 17.0 17.0 17.0 27.0 27.0 27.0 25.0 50.0 28.0
57 | 825.0 17.0 17.0 17.0 28.0 28.0 28.0 25.0 50.0 28.0
58 | 840.0 17.0 17.0 17.0 29.0 29.0 29.0 25.0 50.0 29.0
59 | 855.0 17.0 17.0 17.0 29.0 29.0 29.0 25.0 50.0 29.0
60 | 870.0 17.0 17.0 17.0 30.0 30.0 30.0 25.0 50.0 31.0
61 | 885.0 17.0 17.0 17.0 30.0 30.0 30.0 25.0 50.0 31.0
62 | 900.0 17.0 17.0 17.0 30.0 30.0 30.0 25.0 50.0 32.0
63 | 915.0 17.0 17.0 17.0 31.0 31.0 31.0 25.0 50.0 32.0
64 | 930.0 17.0 17.0 17.0 32.0 32.0 32.0 25.0 50.0 33.0
65 | 945.0 17.0 17.0 17.0 33.0 33.0 33.0 25.0 50.0 33.0
66 | 960.0 17.0 17.0 17.0 33.0 33.0 33.0 25.0 50.0 33.0
67 | 975.0 17.0 17.0 17.0 33.0 33.0 33.0 25.0 50.0 33.0
68 | 990.0 17.0 17.0 17.0 33.0 33.0 33.0 25.0 50.0 34.0
69 | 1005.0 17.0 17.0 17.0 34.0 34.0 34.0 25.0 50.0 34.0
70 | 1020.0 17.0 17.0 17.0 34.0 34.0 34.0 25.0 50.0 34.0
71 | 1035.0 17.0 17.0 17.0 35.0 35.0 35.0 25.0 50.0 35.0
72 | 1050.0 17.0 17.0 17.0 35.0 35.0 35.0 25.0 50.0 35.0
73 | 1065.0 17.0 17.0 17.0 35.0 35.0 35.0 25.0 50.0 35.0
74 | 1080.0 17.0 17.0 17.0 35.0 35.0 35.0 25.0 50.0 35.0
75 | 1095.0 17.0 17.0 17.0 35.0 35.0 35.0 25.0 50.0 35.0
76 | 1110.0 17.0 17.0 17.0 36.0 36.0 36.0 25.0 50.0 36.0
77 | 1125.0 17.0 17.0 17.0 36.0 36.0 36.0 25.0 50.0 36.0
78 | 1140.0 17.0 17.0 17.0 36.0 36.0 36.0 25.0 50.0 37.0
79 | 1155.0 17.0 17.0 17.0 36.0 36.0 36.0 25.0 50.0 38.0
80 | 1170.0 17.0 17.0 17.0 36.0 36.0 36.0 25.0 50.0 38.0
81 | 1185.0 17.0 17.0 17.0 36.0 36.0 36.0 25.0 50.0 39.0
82 | 1200.0 17.0 17.0 17.0 37.0 37.0 37.0 25.0 50.0 40.0
83 | 1215.0 17.0 17.0 17.0 37.0 37.0 37.0 25.0 50.0 40.0
84 | 1230.0 17.0 17.0 17.0 37.0 37.0 37.0 25.0 50.0 40.0
85 | 1245.0 17.0 17.0 17.0 38.0 38.0 38.0 25.0 50.0 40.0
86 | 1260.0 17.0 17.0 17.0 38.0 38.0 38.0 25.0 50.0 40.0
87 | 1275.0 17.0 17.0 17.0 39.0 39.0 39.0 25.0 50.0 41.0
88 | 1290.0 17.0 17.0 17.0 39.0 39.0 39.0 25.0 50.0 41.0
89 | 1305.0 17.0 17.0 17.0 39.0 39.0 39.0 25.0 50.0 41.0
90 | 1320.0 17.0 17.0 17.0 39.0 39.0 39.0 25.0 50.0 43.0
91 | 1335.0 17.0 17.0 17.0 39.0 39.0 39.0 25.0 50.0 45.0
92 | 1350.0 17.0 17.0 17.0 39.0 39.0 39.0 25.0 50.0 45.0
93 | 1365.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 46.0
94 | 1380.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 46.0
95 | 1395.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 46.0
96 | 1410.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 46.0
97 | 1425.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 47.0
98 | 1440.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 47.0
99 | 1455.0 17.0 17.0 17.0 40.0 40.0 40.0 25.0 50.0 47.0
100 | 1470.0 17.0 17.0 17.0 41.0 41.0 41.0 25.0 50.0 47.0
101 | 1485.0 17.0 17.0 17.0 41.0 41.0 41.0 25.0 50.0 47.0
102 | 1500.0 17.0 17.0 17.0 41.0 41.0 41.0 25.0 50.0 47.0
103 | 1515.0 17.0 17.0 17.0 41.0 41.0 41.0 25.0 50.0 47.0
104 | 1530.0 17.0 17.0 17.0 42.0 42.0 42.0 25.0 50.0 48.0
105 | 1545.0 17.0 17.0 17.0 42.0 42.0 42.0 25.0 50.0 48.0
106 | 1560.0 17.0 17.0 17.0 42.0 42.0 42.0 25.0 50.0 49.0
107 | 1575.0 17.0 17.0 17.0 42.0 42.0 42.0 25.0 50.0 49.0
108 | 1590.0 17.0 17.0 17.0 42.0 42.0 42.0 25.0 50.0 49.0
109 | 1605.0 17.0 17.0 17.0 44.0 44.0 44.0 25.0 50.0 50.0
110 | 1620.0 17.0 17.0 17.0 44.0 44.0 44.0 25.0 50.0 50.0
111 | 1635.0 17.0 17.0 17.0 44.0 44.0 44.0 25.0 50.0 51.0
112 | 1650.0 17.0 17.0 17.0 44.0 44.0 44.0 25.0 50.0 52.0
113 | 1665.0 17.0 17.0 17.0 44.0 44.0 44.0 25.0 50.0 52.0
114 | 1680.0 17.0 17.0 17.0 44.0 44.0 44.0 25.0 50.0 53.0
115 | 1695.0 17.0 17.0 17.0 45.0 45.0 45.0 25.0 50.0 54.0
116 | 1710.0 17.0 17.0 17.0 46.0 46.0 46.0 25.0 50.0 55.0
117 | 1725.0 17.0 17.0 17.0 46.0 46.0 46.0 25.0 50.0 56.0
118 | 1740.0 17.0 17.0 17.0 46.0 46.0 46.0 25.0 50.0 58.0
119 | 1755.0 17.0 17.0 17.0 47.0 47.0 47.0 25.0 50.0 60.0
120 | 1770.0 17.0 17.0 17.0 47.0 47.0 47.0 25.0 50.0 61.0
121 | 1785.0 17.0 17.0 17.0 47.0 47.0 47.0 25.0 50.0 61.0
122 | 1800.0 17.0 17.0 17.0 47.0 47.0 47.0 75.0 0.0 61.0
123 | 1815.0 17.0 17.0 17.0 49.0 49.0 49.0 75.0 0.0 61.0
124 | 1830.0 17.0 17.0 17.0 50.0 50.0 50.0 75.0 0.0 62.0
125 | 1845.0 17.0 17.0 17.0 50.0 50.0 50.0 75.0 0.0 62.0
126 | 1860.0 50.0 50.0 50.0 52.0 52.0 52.0 75.0 0.0 63.0
127 | 1875.0 51.0 51.0 51.0 54.0 54.0 54.0 75.0 0.0 63.0
128 | 1890.0 53.0 53.0 53.0 55.0 55.0 55.0 75.0 0.0 63.0
129 | 1905.0 54.0 54.0 54.0 56.0 56.0 56.0 75.0 0.0 64.0
130 | 1920.0 55.0 55.0 55.0 58.0 58.0 58.0 75.0 0.0 66.0
131 | 1935.0 57.0 57.0 57.0 60.0 60.0 60.0 75.0 0.0 66.0
132 | 1950.0 60.0 60.0 60.0 60.0 60.0 60.0 75.0 0.0 66.0
133 | 1965.0 60.0 60.0 60.0 64.0 64.0 64.0 75.0 0.0 68.0
134 | 1980.0 60.0 60.0 60.0 64.0 64.0 64.0 75.0 0.0 68.0
135 | 1995.0 60.0 60.0 60.0 66.0 66.0 66.0 75.0 0.0 68.0
136 | 2010.0 60.0 60.0 60.0 67.0 67.0 67.0 75.0 0.0 68.0
137 | 2025.0 60.0 60.0 60.0 67.0 67.0 67.0 75.0 0.0 69.0
138 | 2040.0 60.0 60.0 60.0 69.0 69.0 69.0 75.0 0.0 71.0
139 | 2055.0 67.0 67.0 67.0 70.0 70.0 70.0 75.0 0.0 71.0
140 | 2070.0 69.0 69.0 69.0 71.0 71.0 71.0 75.0 0.0 71.0
141 | 2085.0 69.0 69.0 69.0 73.0 73.0 73.0 75.0 0.0 74.0
142 | 2100.0 72.0 72.0 72.0 75.0 75.0 75.0 75.0 0.0 75.0
143 | 2115.0 72.0 72.0 72.0 76.0 76.0 76.0 75.0 0.0 76.0
144 | 2130.0 72.0 72.0 72.0 77.0 77.0 77.0 75.0 0.0 78.0
145 | 2145.0 76.0 76.0 76.0 79.0 79.0 79.0 75.0 0.0 79.0
146 | 2160.0 77.0 77.0 77.0 79.0 79.0 79.0 75.0 0.0 79.0
147 | 2175.0 77.0 77.0 77.0 79.0 79.0 79.0 75.0 0.0 79.0
148 | 2190.0 79.0 79.0 79.0 81.0 81.0 81.0 75.0 0.0 81.0
149 | 2205.0 79.0 79.0 79.0 82.0 82.0 82.0 75.0 0.0 82.0
150 | 2220.0 79.0 79.0 79.0 84.0 84.0 84.0 75.0 0.0 84.0
151 | 2235.0 79.0 79.0 79.0 86.0 86.0 86.0 75.0 0.0 87.0
152 | 2250.0 79.0 79.0 79.0 86.0 86.0 86.0 75.0 0.0 88.0
153 | 2265.0 79.0 79.0 79.0 86.0 86.0 86.0 75.0 0.0 89.0
154 | 2280.0 79.0 79.0 79.0 86.0 86.0 86.0 75.0 0.0 89.0
155 | 2295.0 79.0 79.0 79.0 86.0 86.0 86.0 75.0 0.0 89.0
156 | 2310.0 86.0 86.0 86.0 86.0 86.0 86.0 75.0 0.0 89.0
157 | 2325.0 86.0 86.0 86.0 86.0 86.0 86.0 75.0 0.0 90.0
158 | 2340.0 86.0 86.0 86.0 87.0 87.0 87.0 75.0 0.0 90.0
159 | 2355.0 86.0 86.0 86.0 87.0 87.0 87.0 75.0 0.0 91.0
160 | 2370.0 87.0 87.0 87.0 87.0 87.0 87.0 75.0 0.0 92.0
161 | 2385.0 87.0 87.0 87.0 90.0 90.0 90.0 75.0 0.0 92.0
162 | 2400.0 88.0 88.0 88.0 91.0 91.0 91.0 75.0 0.0 93.0
163 | 2415.0 90.0 90.0 90.0 94.0 94.0 94.0 75.0 0.0 94.0
164 | 2430.0 90.0 90.0 90.0 96.0 96.0 96.0 75.0 0.0 97.0
165 | 2445.0 90.0 90.0 90.0 98.0 98.0 98.0 75.0 0.0 99.0
166 | 2460.0 90.0 90.0 90.0 99.0 99.0 99.0 75.0 0.0 99.0
167 | 2475.0 98.0 98.0 98.0 100.0 100.0 100.0 75.0 0.0 100.0
168 | 2490.0 100.0 100.0 100.0 101.0 101.0 101.0 75.0 0.0 101.0
169 | 2505.0 100.0 100.0 100.0 102.0 102.0 102.0 75.0 0.0 102.0
170 | 2520.0 101.0 101.0 101.0 103.0 103.0 103.0 75.0 0.0 104.0
171 | 2535.0 101.0 101.0 101.0 106.0 106.0 106.0 75.0 0.0 106.0
172 | 2550.0 101.0 101.0 101.0 106.0 106.0 106.0 75.0 0.0 107.0
173 | 2565.0 101.0 101.0 101.0 106.0 106.0 106.0 75.0 0.0 108.0
174 | 2580.0 106.0 106.0 106.0 107.0 107.0 107.0 75.0 0.0 108.0
175 | 2595.0 106.0 106.0 106.0 109.0 109.0 109.0 75.0 0.0 110.0
176 | 2610.0 106.0 106.0 106.0 111.0 111.0 111.0 75.0 0.0 111.0
177 | 2625.0 106.0 106.0 106.0 112.0 112.0 112.0 75.0 0.0 112.0
178 | 2640.0 106.0 106.0 106.0 113.0 113.0 113.0 75.0 0.0 113.0
179 | 2655.0 106.0 106.0 106.0 113.0 113.0 113.0 75.0 0.0 113.0
180 | 2670.0 113.0 113.0 113.0 114.0 114.0 114.0 75.0 0.0 114.0
181 | 2685.0 114.0 114.0 114.0 116.0 116.0 116.0 75.0 0.0 117.0
182 | 2700.0 116.0 116.0 116.0 118.0 118.0 118.0 75.0 0.0 118.0
183 | 2715.0 117.0 117.0 117.0 118.0 118.0 118.0 75.0 0.0 118.0
184 | 2730.0 118.0 118.0 118.0 119.0 119.0 119.0 75.0 0.0 120.0
185 | 2745.0 119.0 119.0 119.0 120.0 120.0 120.0 75.0 0.0 120.0
186 | 2760.0 120.0 120.0 120.0 120.0 120.0 120.0 75.0 0.0 120.0
187 | 2775.0 120.0 120.0 120.0 120.0 120.0 120.0 75.0 0.0 120.0
188 | 2790.0 120.0 120.0 120.0 122.0 122.0 122.0 75.0 0.0 122.0
189 | 2805.0 120.0 120.0 120.0 124.0 124.0 124.0 75.0 0.0 124.0
190 | 2820.0 123.0 123.0 123.0 126.0 126.0 126.0 75.0 0.0 126.0
191 | 2835.0 124.0 124.0 124.0 126.0 126.0 126.0 75.0 0.0 127.0
192 | 2850.0 126.0 126.0 126.0 128.0 128.0 128.0 75.0 0.0 129.0
193 | 2865.0 126.0 126.0 126.0 129.0 129.0 129.0 75.0 0.0 130.0
194 | 2880.0 126.0 126.0 126.0 132.0 132.0 132.0 75.0 0.0 132.0
195 | 2895.0 126.0 126.0 126.0 133.0 133.0 133.0 75.0 0.0 133.0
196 | 2910.0 126.0 126.0 126.0 134.0 134.0 134.0 75.0 0.0 134.0
197 | 2925.0 134.0 134.0 134.0 134.0 134.0 134.0 75.0 0.0 134.0
198 | 2940.0 134.0 134.0 134.0 134.0 134.0 134.0 75.0 0.0 134.0
199 | 2955.0 134.0 134.0 134.0 135.0 135.0 135.0 75.0 0.0 135.0
200 | 2970.0 135.0 135.0 135.0 136.0 136.0 136.0 75.0 0.0 136.0
201 | 2985.0 135.0 135.0 135.0 137.0 137.0 137.0 75.0 0.0 137.0
202 | 3000.0 136.0 136.0 136.0 139.0 139.0 139.0 75.0 0.0 139.0
203 | 3015.0 137.0 137.0 137.0 140.0 140.0 140.0 75.0 0.0 142.0
204 | 3030.0 139.0 139.0 139.0 140.0 140.0 140.0 75.0 0.0 142.0
205 | 3045.0 139.0 139.0 139.0 143.0 143.0 143.0 75.0 0.0 143.0
206 | 3060.0 139.0 139.0 139.0 143.0 143.0 143.0 75.0 0.0 144.0
207 | 3075.0 139.0 139.0 139.0 143.0 143.0 143.0 75.0 0.0 144.0
208 | 3090.0 143.0 143.0 143.0 143.0 143.0 143.0 75.0 0.0 144.0
209 | 3105.0 143.0 143.0 143.0 144.0 144.0 144.0 75.0 0.0 144.0
210 | 3120.0 143.0 143.0 143.0 146.0 146.0 146.0 75.0 0.0 147.0
211 | 3135.0 145.0 145.0 145.0 149.0 149.0 149.0 75.0 0.0 149.0
212 | 3150.0 145.0 145.0 145.0 149.0 149.0 149.0 75.0 0.0 149.0
213 | 3165.0 145.0 145.0 145.0 150.0 150.0 150.0 75.0 0.0 151.0
214 | 3180.0 149.0 149.0 149.0 153.0 153.0 153.0 75.0 0.0 153.0
215 | 3195.0 151.0 151.0 151.0 154.0 154.0 154.0 75.0 0.0 155.0
216 | 3210.0 154.0 154.0 154.0 154.0 154.0 154.0 75.0 0.0 156.0
217 | 3225.0 154.0 154.0 154.0 154.0 154.0 154.0 75.0 0.0 156.0
218 | 3240.0 154.0 154.0 154.0 154.0 154.0 154.0 75.0 0.0 157.0
219 | 3255.0 154.0 154.0 154.0 158.0 158.0 158.0 75.0 0.0 158.0
220 | 3270.0 157.0 157.0 157.0 158.0 158.0 158.0 75.0 0.0 158.0
221 | 3285.0 157.0 157.0 157.0 162.0 162.0 162.0 75.0 0.0 162.0
222 | 3300.0 157.0 157.0 157.0 162.0 162.0 162.0 75.0 0.0 162.0
223 | 3315.0 157.0 157.0 157.0 163.0 163.0 163.0 75.0 0.0 163.0
224 | 3330.0 162.0 162.0 162.0 163.0 163.0 163.0 75.0 0.0 163.0
225 | 3345.0 162.0 162.0 162.0 164.0 164.0 164.0 75.0 0.0 165.0
226 | 3360.0 163.0 163.0 163.0 165.0 165.0 165.0 75.0 0.0 165.0
227 | 3375.0 165.0 165.0 165.0 167.0 167.0 167.0 75.0 0.0 167.0
228 | 3390.0 166.0 166.0 166.0 169.0 169.0 169.0 75.0 0.0 170.0
229 | 3405.0 166.0 166.0 166.0 170.0 170.0 170.0 75.0 0.0 170.0
230 | 3420.0 166.0 166.0 166.0 171.0 171.0 171.0 75.0 0.0 171.0
231 | 3435.0 166.0 166.0 166.0 171.0 171.0 171.0 75.0 0.0 171.0
232 | 3450.0 166.0 166.0 166.0 172.0 172.0 172.0 75.0 0.0 173.0
233 | 3465.0 166.0 166.0 166.0 173.0 173.0 173.0 75.0 0.0 173.0
234 | 3480.0 172.0 172.0 172.0 173.0 173.0 173.0 75.0 0.0 174.0
235 | 3495.0 172.0 172.0 172.0 174.0 174.0 174.0 75.0 0.0 175.0
236 | 3510.0 172.0 172.0 172.0 176.0 176.0 176.0 75.0 0.0 176.0
237 | 3525.0 172.0 172.0 172.0 177.0 177.0 177.0 75.0 0.0 177.0
238 | 3540.0 176.0 176.0 176.0 177.0 177.0 177.0 75.0 0.0 177.0
239 | 3555.0 176.0 176.0 176.0 178.0 178.0 178.0 75.0 0.0 178.0
240 | 3570.0 176.0 176.0 176.0 179.0 179.0 179.0 75.0 0.0 179.0
241 | 3585.0 178.0 178.0 178.0 179.0 179.0 179.0 75.0 0.0 180.0
242 | 3600.0 179.0 179.0 179.0 179.0 179.0 179.0 75.0 0.0 180.0
243 |
--------------------------------------------------------------------------------
/sim-04-phases.dat:
--------------------------------------------------------------------------------
1 | t l_Lp l_Lp_1 l_Lp_2 l_Lda l_Lda_1 l_Lda_2 l_awake l_asleep l_Lda_adv
2 | 0.0 0.0 0.0 0.0 0.0 0.0 0.0 74.0 1.0 0.0
3 | 15.0 0.0 0.0 0.0 0.0 0.0 0.0 72.0 3.0 0.0
4 | 30.0 0.0 0.0 0.0 0.0 0.0 0.0 73.0 2.0 0.0
5 | 45.0 0.0 0.0 0.0 0.0 0.0 0.0 70.0 5.0 0.0
6 | 60.0 0.0 0.0 0.0 0.0 0.0 0.0 65.0 10.0 0.0
7 | 75.0 0.0 0.0 0.0 0.0 0.0 0.0 60.0 15.0 0.0
8 | 90.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 11.0 0.0
9 | 105.0 0.0 0.0 0.0 0.0 0.0 0.0 65.0 10.0 0.0
10 | 120.0 0.0 0.0 0.0 0.0 0.0 0.0 66.0 9.0 0.0
11 | 135.0 0.0 0.0 0.0 0.0 0.0 0.0 69.0 6.0 0.0
12 | 150.0 0.0 0.0 0.0 0.0 0.0 0.0 62.0 13.0 0.0
13 | 165.0 0.0 0.0 0.0 0.0 0.0 0.0 61.0 14.0 0.0
14 | 180.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 11.0 0.0
15 | 195.0 0.0 0.0 0.0 0.0 0.0 0.0 63.0 12.0 0.0
16 | 210.0 0.0 0.0 0.0 0.0 0.0 0.0 61.0 14.0 0.0
17 | 225.0 0.0 0.0 0.0 0.0 0.0 0.0 66.0 9.0 0.0
18 | 240.0 0.0 0.0 0.0 0.0 0.0 0.0 63.0 12.0 0.0
19 | 255.0 0.0 0.0 0.0 0.0 0.0 0.0 60.0 15.0 0.0
20 | 270.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 11.0 0.0
21 | 285.0 0.0 0.0 0.0 0.0 0.0 0.0 62.0 13.0 0.0
22 | 300.0 0.0 0.0 0.0 0.0 0.0 0.0 61.0 14.0 0.0
23 | 315.0 0.0 0.0 0.0 0.0 0.0 0.0 60.0 15.0 0.0
24 | 330.0 0.0 0.0 0.0 0.0 0.0 0.0 64.0 11.0 0.0
25 | 345.0 0.0 0.0 0.0 0.0 0.0 0.0 61.0 14.0 1.0
26 | 360.0 0.0 0.0 0.0 0.0 0.0 0.0 60.0 15.0 1.0
27 | 375.0 0.0 0.0 0.0 2.0 2.0 2.0 60.0 15.0 3.0
28 | 390.0 0.0 0.0 0.0 3.0 3.0 3.0 62.0 13.0 5.0
29 | 405.0 0.0 0.0 0.0 3.0 3.0 3.0 63.0 12.0 6.0
30 | 420.0 0.0 0.0 0.0 4.0 4.0 4.0 64.0 11.0 7.0
31 | 435.0 0.0 0.0 0.0 6.0 6.0 6.0 65.0 10.0 7.0
32 | 450.0 0.0 0.0 0.0 7.0 7.0 7.0 60.0 15.0 7.0
33 | 465.0 0.0 0.0 0.0 9.0 9.0 9.0 61.0 14.0 10.0
34 | 480.0 0.0 0.0 0.0 9.0 9.0 9.0 64.0 11.0 10.0
35 | 495.0 0.0 0.0 0.0 10.0 10.0 10.0 61.0 14.0 10.0
36 | 510.0 0.0 0.0 0.0 10.0 10.0 10.0 61.0 14.0 10.0
37 | 525.0 0.0 0.0 0.0 10.0 10.0 10.0 62.0 13.0 10.0
38 | 540.0 0.0 0.0 0.0 10.0 10.0 10.0 63.0 12.0 10.0
39 | 555.0 0.0 0.0 0.0 10.0 10.0 10.0 66.0 9.0 11.0
40 | 570.0 0.0 0.0 0.0 10.0 10.0 10.0 67.0 8.0 11.0
41 | 585.0 0.0 0.0 0.0 11.0 11.0 11.0 68.0 7.0 12.0
42 | 600.0 0.0 0.0 0.0 11.0 11.0 11.0 75.0 0.0 12.0
43 | 615.0 11.0 11.0 11.0 11.0 11.0 11.0 72.0 3.0 13.0
44 | 630.0 11.0 11.0 11.0 13.0 13.0 13.0 67.0 8.0 14.0
45 | 645.0 11.0 11.0 11.0 14.0 14.0 14.0 62.0 13.0 14.0
46 | 660.0 11.0 11.0 11.0 15.0 15.0 15.0 61.0 14.0 15.0
47 | 675.0 11.0 11.0 11.0 15.0 15.0 15.0 60.0 15.0 16.0
48 | 690.0 11.0 11.0 11.0 15.0 15.0 15.0 60.0 15.0 16.0
49 | 705.0 11.0 11.0 11.0 20.0 20.0 20.0 60.0 15.0 20.0
50 | 720.0 11.0 11.0 11.0 21.0 21.0 21.0 63.0 12.0 21.0
51 | 735.0 11.0 11.0 11.0 23.0 23.0 23.0 63.0 12.0 23.0
52 | 750.0 11.0 11.0 11.0 23.0 23.0 23.0 66.0 9.0 24.0
53 | 765.0 11.0 11.0 11.0 24.0 24.0 24.0 71.0 4.0 24.0
54 | 780.0 11.0 11.0 11.0 25.0 25.0 25.0 72.0 3.0 25.0
55 | 795.0 11.0 11.0 11.0 28.0 28.0 28.0 71.0 4.0 28.0
56 | 810.0 11.0 11.0 11.0 31.0 31.0 31.0 72.0 3.0 31.0
57 | 825.0 11.0 11.0 11.0 32.0 32.0 32.0 73.0 2.0 32.0
58 | 840.0 11.0 11.0 11.0 35.0 35.0 35.0 74.0 1.0 35.0
59 | 855.0 33.0 33.0 33.0 36.0 36.0 36.0 72.0 3.0 37.0
60 | 870.0 35.0 35.0 35.0 39.0 39.0 39.0 69.0 6.0 39.0
61 | 885.0 35.0 35.0 35.0 39.0 39.0 39.0 64.0 11.0 39.0
62 | 900.0 35.0 35.0 35.0 39.0 39.0 39.0 63.0 12.0 40.0
63 | 915.0 35.0 35.0 35.0 39.0 39.0 39.0 64.0 11.0 40.0
64 | 930.0 35.0 35.0 35.0 40.0 40.0 40.0 67.0 8.0 41.0
65 | 945.0 35.0 35.0 35.0 41.0 41.0 41.0 66.0 9.0 41.0
66 | 960.0 35.0 35.0 35.0 41.0 41.0 41.0 69.0 6.0 41.0
67 | 975.0 35.0 35.0 35.0 44.0 44.0 44.0 70.0 5.0 44.0
68 | 990.0 35.0 35.0 35.0 44.0 44.0 44.0 69.0 6.0 45.0
69 | 1005.0 35.0 35.0 35.0 47.0 47.0 47.0 68.0 7.0 47.0
70 | 1020.0 35.0 35.0 35.0 47.0 47.0 47.0 65.0 10.0 47.0
71 | 1035.0 35.0 35.0 35.0 49.0 49.0 49.0 66.0 9.0 49.0
72 | 1050.0 35.0 35.0 35.0 52.0 52.0 52.0 69.0 6.0 53.0
73 | 1065.0 35.0 35.0 35.0 53.0 53.0 53.0 72.0 3.0 53.0
74 | 1080.0 53.0 53.0 53.0 54.0 54.0 54.0 71.0 4.0 54.0
75 | 1095.0 53.0 53.0 53.0 55.0 55.0 55.0 75.0 0.0 55.0
76 | 1110.0 53.0 53.0 53.0 56.0 56.0 56.0 74.0 1.0 56.0
77 | 1125.0 55.0 55.0 55.0 57.0 57.0 57.0 75.0 0.0 57.0
78 | 1140.0 57.0 57.0 57.0 58.0 58.0 58.0 74.0 1.0 59.0
79 | 1155.0 57.0 57.0 57.0 59.0 59.0 59.0 69.0 6.0 60.0
80 | 1170.0 58.0 58.0 58.0 59.0 59.0 59.0 66.0 9.0 60.0
81 | 1185.0 58.0 58.0 58.0 60.0 60.0 60.0 69.0 6.0 61.0
82 | 1200.0 58.0 58.0 58.0 61.0 61.0 61.0 72.0 3.0 62.0
83 | 1215.0 58.0 58.0 58.0 63.0 63.0 63.0 67.0 8.0 63.0
84 | 1230.0 58.0 58.0 58.0 64.0 64.0 64.0 66.0 9.0 65.0
85 | 1245.0 58.0 58.0 58.0 65.0 65.0 65.0 65.0 10.0 65.0
86 | 1260.0 58.0 58.0 58.0 65.0 65.0 65.0 64.0 11.0 65.0
87 | 1275.0 58.0 58.0 58.0 65.0 65.0 65.0 67.0 8.0 66.0
88 | 1290.0 58.0 58.0 58.0 66.0 66.0 66.0 60.0 15.0 66.0
89 | 1305.0 58.0 58.0 58.0 66.0 66.0 66.0 66.0 9.0 66.0
90 | 1320.0 58.0 58.0 58.0 67.0 67.0 67.0 67.0 8.0 68.0
91 | 1335.0 58.0 58.0 58.0 69.0 69.0 69.0 66.0 9.0 70.0
92 | 1350.0 58.0 58.0 58.0 72.0 72.0 72.0 67.0 8.0 72.0
93 | 1365.0 58.0 58.0 58.0 72.0 72.0 72.0 64.0 11.0 73.0
94 | 1380.0 58.0 58.0 58.0 75.0 75.0 75.0 65.0 10.0 75.0
95 | 1395.0 58.0 58.0 58.0 75.0 75.0 75.0 62.0 13.0 75.0
96 | 1410.0 58.0 58.0 58.0 75.0 75.0 75.0 67.0 8.0 76.0
97 | 1425.0 58.0 58.0 58.0 77.0 77.0 77.0 70.0 5.0 78.0
98 | 1440.0 58.0 58.0 58.0 77.0 77.0 77.0 71.0 4.0 78.0
99 | 1455.0 58.0 58.0 58.0 77.0 77.0 77.0 68.0 7.0 78.0
100 | 1470.0 58.0 58.0 58.0 77.0 77.0 77.0 71.0 4.0 78.0
101 | 1485.0 58.0 58.0 58.0 79.0 79.0 79.0 72.0 3.0 79.0
102 | 1500.0 58.0 58.0 58.0 79.0 79.0 79.0 75.0 0.0 79.0
103 | 1515.0 58.0 58.0 58.0 79.0 79.0 79.0 70.0 5.0 79.0
104 | 1530.0 58.0 58.0 58.0 79.0 79.0 79.0 67.0 8.0 80.0
105 | 1545.0 58.0 58.0 58.0 80.0 80.0 80.0 72.0 3.0 80.0
106 | 1560.0 58.0 58.0 58.0 81.0 81.0 81.0 74.0 1.0 81.0
107 | 1575.0 58.0 58.0 58.0 81.0 81.0 81.0 73.0 2.0 81.0
108 | 1590.0 58.0 58.0 58.0 83.0 83.0 83.0 74.0 1.0 83.0
109 | 1605.0 58.0 58.0 58.0 83.0 83.0 83.0 75.0 0.0 84.0
110 | 1620.0 58.0 58.0 58.0 85.0 85.0 85.0 73.0 2.0 85.0
111 | 1635.0 58.0 58.0 58.0 87.0 87.0 87.0 73.0 2.0 88.0
112 | 1650.0 58.0 58.0 58.0 87.0 87.0 87.0 75.0 0.0 89.0
113 | 1665.0 58.0 58.0 58.0 89.0 89.0 89.0 66.0 9.0 89.0
114 | 1680.0 58.0 58.0 58.0 89.0 89.0 89.0 63.0 12.0 90.0
115 | 1695.0 58.0 58.0 58.0 90.0 90.0 90.0 66.0 9.0 91.0
116 | 1710.0 58.0 58.0 58.0 90.0 90.0 90.0 65.0 10.0 92.0
117 | 1725.0 58.0 58.0 58.0 92.0 92.0 92.0 61.0 14.0 93.0
118 | 1740.0 58.0 58.0 58.0 93.0 93.0 93.0 64.0 11.0 95.0
119 | 1755.0 58.0 58.0 58.0 93.0 93.0 93.0 61.0 14.0 97.0
120 | 1770.0 58.0 58.0 58.0 93.0 93.0 93.0 63.0 12.0 98.0
121 | 1785.0 58.0 58.0 58.0 93.0 93.0 93.0 62.0 13.0 98.0
122 | 1800.0 58.0 58.0 58.0 95.0 95.0 95.0 60.0 15.0 98.0
123 | 1815.0 58.0 58.0 58.0 96.0 96.0 96.0 62.0 13.0 98.0
124 | 1830.0 58.0 58.0 58.0 96.0 96.0 96.0 60.0 15.0 99.0
125 | 1845.0 58.0 58.0 58.0 97.0 97.0 97.0 62.0 13.0 99.0
126 | 1860.0 58.0 58.0 58.0 97.0 97.0 97.0 60.0 15.0 100.0
127 | 1875.0 58.0 58.0 58.0 100.0 100.0 100.0 66.0 9.0 100.0
128 | 1890.0 58.0 58.0 58.0 100.0 100.0 100.0 62.0 13.0 100.0
129 | 1905.0 58.0 58.0 58.0 100.0 100.0 100.0 67.0 8.0 101.0
130 | 1920.0 58.0 58.0 58.0 101.0 101.0 101.0 72.0 3.0 103.0
131 | 1935.0 58.0 58.0 58.0 101.0 101.0 101.0 73.0 2.0 103.0
132 | 1950.0 58.0 58.0 58.0 104.0 104.0 104.0 72.0 3.0 104.0
133 | 1965.0 58.0 58.0 58.0 107.0 107.0 107.0 73.0 2.0 108.0
134 | 1980.0 58.0 58.0 58.0 108.0 108.0 108.0 75.0 0.0 108.0
135 | 1995.0 58.0 58.0 58.0 108.0 108.0 108.0 73.0 2.0 108.0
136 | 2010.0 58.0 58.0 58.0 108.0 108.0 108.0 75.0 0.0 108.0
137 | 2025.0 58.0 58.0 58.0 109.0 109.0 109.0 75.0 0.0 109.0
138 | 2040.0 58.0 58.0 58.0 109.0 109.0 109.0 72.0 3.0 111.0
139 | 2055.0 109.0 109.0 109.0 111.0 111.0 111.0 74.0 1.0 111.0
140 | 2070.0 109.0 109.0 109.0 111.0 111.0 111.0 73.0 2.0 112.0
141 | 2085.0 109.0 109.0 109.0 114.0 114.0 114.0 68.0 7.0 115.0
142 | 2100.0 109.0 109.0 109.0 117.0 117.0 117.0 67.0 8.0 117.0
143 | 2115.0 109.0 109.0 109.0 119.0 119.0 119.0 64.0 11.0 119.0
144 | 2130.0 109.0 109.0 109.0 121.0 121.0 121.0 62.0 13.0 121.0
145 | 2145.0 109.0 109.0 109.0 122.0 122.0 122.0 61.0 14.0 122.0
146 | 2160.0 109.0 109.0 109.0 124.0 124.0 124.0 66.0 9.0 124.0
147 | 2175.0 109.0 109.0 109.0 126.0 126.0 126.0 75.0 0.0 126.0
148 | 2190.0 126.0 126.0 126.0 126.0 126.0 126.0 71.0 4.0 126.0
149 | 2205.0 126.0 126.0 126.0 128.0 128.0 128.0 68.0 7.0 129.0
150 | 2220.0 126.0 126.0 126.0 129.0 129.0 129.0 75.0 0.0 129.0
151 | 2235.0 126.0 126.0 126.0 129.0 129.0 129.0 73.0 2.0 130.0
152 | 2250.0 126.0 126.0 126.0 131.0 131.0 131.0 74.0 1.0 131.0
153 | 2265.0 126.0 126.0 126.0 131.0 131.0 131.0 67.0 8.0 132.0
154 | 2280.0 126.0 126.0 126.0 132.0 132.0 132.0 70.0 5.0 132.0
155 | 2295.0 126.0 126.0 126.0 134.0 134.0 134.0 73.0 2.0 134.0
156 | 2310.0 132.0 132.0 132.0 135.0 135.0 135.0 72.0 3.0 135.0
157 | 2325.0 132.0 132.0 132.0 137.0 137.0 137.0 67.0 8.0 138.0
158 | 2340.0 132.0 132.0 132.0 138.0 138.0 138.0 68.0 7.0 138.0
159 | 2355.0 132.0 132.0 132.0 139.0 139.0 139.0 69.0 6.0 139.0
160 | 2370.0 139.0 139.0 139.0 141.0 141.0 141.0 72.0 3.0 141.0
161 | 2385.0 140.0 140.0 140.0 142.0 142.0 142.0 71.0 4.0 142.0
162 | 2400.0 142.0 142.0 142.0 145.0 145.0 145.0 72.0 3.0 146.0
163 | 2415.0 143.0 143.0 143.0 145.0 145.0 145.0 72.0 3.0 147.0
164 | 2430.0 143.0 143.0 143.0 145.0 145.0 145.0 69.0 6.0 148.0
165 | 2445.0 143.0 143.0 143.0 146.0 146.0 146.0 72.0 3.0 149.0
166 | 2460.0 143.0 143.0 143.0 146.0 146.0 146.0 70.0 5.0 149.0
167 | 2475.0 146.0 146.0 146.0 150.0 150.0 150.0 63.0 12.0 150.0
168 | 2490.0 146.0 146.0 146.0 151.0 151.0 151.0 68.0 7.0 151.0
169 | 2505.0 146.0 146.0 146.0 151.0 151.0 151.0 65.0 10.0 151.0
170 | 2520.0 146.0 146.0 146.0 152.0 152.0 152.0 62.0 13.0 152.0
171 | 2535.0 146.0 146.0 146.0 152.0 152.0 152.0 60.0 15.0 152.0
172 | 2550.0 146.0 146.0 146.0 152.0 152.0 152.0 61.0 14.0 153.0
173 | 2565.0 146.0 146.0 146.0 153.0 153.0 153.0 61.0 14.0 154.0
174 | 2580.0 146.0 146.0 146.0 153.0 153.0 153.0 64.0 11.0 154.0
175 | 2595.0 146.0 146.0 146.0 154.0 154.0 154.0 61.0 14.0 154.0
176 | 2610.0 146.0 146.0 146.0 155.0 155.0 155.0 68.0 7.0 155.0
177 | 2625.0 146.0 146.0 146.0 156.0 156.0 156.0 75.0 0.0 156.0
178 | 2640.0 146.0 146.0 146.0 156.0 156.0 156.0 74.0 1.0 156.0
179 | 2655.0 146.0 146.0 146.0 156.0 156.0 156.0 73.0 2.0 156.0
180 | 2670.0 156.0 156.0 156.0 156.0 156.0 156.0 70.0 5.0 156.0
181 | 2685.0 156.0 156.0 156.0 156.0 156.0 156.0 69.0 6.0 156.0
182 | 2700.0 156.0 156.0 156.0 158.0 158.0 158.0 68.0 7.0 158.0
183 | 2715.0 156.0 156.0 156.0 158.0 158.0 158.0 71.0 4.0 158.0
184 | 2730.0 156.0 156.0 156.0 160.0 160.0 160.0 74.0 1.0 160.0
185 | 2745.0 158.0 158.0 158.0 160.0 160.0 160.0 74.0 1.0 160.0
186 | 2760.0 160.0 160.0 160.0 160.0 160.0 160.0 69.0 6.0 160.0
187 | 2775.0 160.0 160.0 160.0 162.0 162.0 162.0 68.0 7.0 162.0
188 | 2790.0 160.0 160.0 160.0 162.0 162.0 162.0 67.0 8.0 163.0
189 | 2805.0 160.0 160.0 160.0 165.0 165.0 165.0 68.0 7.0 165.0
190 | 2820.0 160.0 160.0 160.0 166.0 166.0 166.0 61.0 14.0 166.0
191 | 2835.0 160.0 160.0 160.0 166.0 166.0 166.0 61.0 14.0 166.0
192 | 2850.0 160.0 160.0 160.0 168.0 168.0 168.0 60.0 15.0 168.0
193 | 2865.0 160.0 160.0 160.0 168.0 168.0 168.0 63.0 12.0 168.0
194 | 2880.0 160.0 160.0 160.0 168.0 168.0 168.0 61.0 14.0 169.0
195 | 2895.0 160.0 160.0 160.0 169.0 169.0 169.0 62.0 13.0 169.0
196 | 2910.0 160.0 160.0 160.0 170.0 170.0 170.0 64.0 11.0 170.0
197 | 2925.0 160.0 160.0 160.0 171.0 171.0 171.0 61.0 14.0 171.0
198 | 2940.0 160.0 160.0 160.0 172.0 172.0 172.0 68.0 7.0 172.0
199 | 2955.0 160.0 160.0 160.0 172.0 172.0 172.0 67.0 8.0 172.0
200 | 2970.0 160.0 160.0 160.0 176.0 176.0 176.0 66.0 9.0 176.0
201 | 2985.0 160.0 160.0 160.0 179.0 179.0 179.0 69.0 6.0 179.0
202 | 3000.0 160.0 160.0 160.0 179.0 179.0 179.0 70.0 5.0 179.0
203 | 3015.0 160.0 160.0 160.0 179.0 179.0 179.0 69.0 6.0 181.0
204 | 3030.0 160.0 160.0 160.0 179.0 179.0 179.0 72.0 3.0 181.0
205 | 3045.0 160.0 160.0 160.0 180.0 180.0 180.0 75.0 0.0 182.0
206 | 3060.0 160.0 160.0 160.0 181.0 181.0 181.0 75.0 0.0 183.0
207 | 3075.0 160.0 160.0 160.0 183.0 183.0 183.0 74.0 1.0 183.0
208 | 3090.0 183.0 183.0 183.0 186.0 186.0 186.0 65.0 10.0 186.0
209 | 3105.0 183.0 183.0 183.0 187.0 187.0 187.0 62.0 13.0 187.0
210 | 3120.0 183.0 183.0 183.0 188.0 188.0 188.0 65.0 10.0 188.0
211 | 3135.0 183.0 183.0 183.0 189.0 189.0 189.0 62.0 13.0 189.0
212 | 3150.0 183.0 183.0 183.0 190.0 190.0 190.0 69.0 6.0 190.0
213 | 3165.0 183.0 183.0 183.0 191.0 191.0 191.0 66.0 9.0 191.0
214 | 3180.0 183.0 183.0 183.0 191.0 191.0 191.0 67.0 8.0 191.0
215 | 3195.0 183.0 183.0 183.0 194.0 194.0 194.0 66.0 9.0 194.0
216 | 3210.0 183.0 183.0 183.0 195.0 195.0 195.0 67.0 8.0 196.0
217 | 3225.0 183.0 183.0 183.0 195.0 195.0 195.0 68.0 7.0 196.0
218 | 3240.0 183.0 183.0 183.0 197.0 197.0 197.0 67.0 8.0 197.0
219 | 3255.0 183.0 183.0 183.0 197.0 197.0 197.0 62.0 13.0 198.0
220 | 3270.0 183.0 183.0 183.0 197.0 197.0 197.0 63.0 12.0 198.0
221 | 3285.0 183.0 183.0 183.0 198.0 198.0 198.0 60.0 15.0 198.0
222 | 3300.0 183.0 183.0 183.0 199.0 199.0 199.0 61.0 14.0 199.0
223 | 3315.0 183.0 183.0 183.0 199.0 199.0 199.0 65.0 10.0 200.0
224 | 3330.0 183.0 183.0 183.0 200.0 200.0 200.0 70.0 5.0 200.0
225 | 3345.0 183.0 183.0 183.0 201.0 201.0 201.0 71.0 4.0 202.0
226 | 3360.0 200.0 200.0 200.0 201.0 201.0 201.0 73.0 2.0 202.0
227 | 3375.0 201.0 201.0 201.0 203.0 203.0 203.0 72.0 3.0 203.0
228 | 3390.0 202.0 202.0 202.0 203.0 203.0 203.0 67.0 8.0 204.0
229 | 3405.0 202.0 202.0 202.0 204.0 204.0 204.0 70.0 5.0 204.0
230 | 3420.0 202.0 202.0 202.0 206.0 206.0 206.0 65.0 10.0 206.0
231 | 3435.0 202.0 202.0 202.0 207.0 207.0 207.0 60.0 15.0 207.0
232 | 3450.0 202.0 202.0 202.0 208.0 208.0 208.0 61.0 14.0 208.0
233 | 3465.0 202.0 202.0 202.0 210.0 210.0 210.0 64.0 11.0 210.0
234 | 3480.0 202.0 202.0 202.0 210.0 210.0 210.0 63.0 12.0 210.0
235 | 3495.0 202.0 202.0 202.0 212.0 212.0 212.0 64.0 11.0 212.0
236 | 3510.0 202.0 202.0 202.0 213.0 213.0 213.0 67.0 8.0 213.0
237 | 3525.0 202.0 202.0 202.0 215.0 215.0 215.0 64.0 11.0 215.0
238 | 3540.0 202.0 202.0 202.0 215.0 215.0 215.0 65.0 10.0 215.0
239 | 3555.0 202.0 202.0 202.0 215.0 215.0 215.0 70.0 5.0 216.0
240 | 3570.0 202.0 202.0 202.0 217.0 217.0 217.0 71.0 4.0 217.0
241 | 3585.0 217.0 217.0 217.0 218.0 218.0 218.0 74.0 1.0 219.0
242 | 3600.0 217.0 217.0 217.0 222.0 222.0 222.0 71.0 4.0 222.0
243 |
--------------------------------------------------------------------------------
/Manifest.toml:
--------------------------------------------------------------------------------
1 | # This file is machine-generated - editing it directly is not advised
2 |
3 | [[Adapt]]
4 | deps = ["LinearAlgebra"]
5 | git-tree-sha1 = "0fac443759fa829ed8066db6cf1077d888bb6573"
6 | uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
7 | version = "2.0.2"
8 |
9 | [[Base64]]
10 | uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
11 |
12 | [[Bzip2_jll]]
13 | deps = ["Libdl", "Pkg"]
14 | git-tree-sha1 = "5ccb0770e3d1c185a52e6d36e3ffb830639ed3d2"
15 | uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
16 | version = "1.0.6+3"
17 |
18 | [[ColorSchemes]]
19 | deps = ["ColorTypes", "Colors", "FixedPointNumbers", "Random", "StaticArrays"]
20 | git-tree-sha1 = "7a15e3690529fd1042f0ab954dff7445b1efc8a5"
21 | uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
22 | version = "3.9.0"
23 |
24 | [[ColorTypes]]
25 | deps = ["FixedPointNumbers", "Random"]
26 | git-tree-sha1 = "607c0ea16cb32af49ea2976f90c0c5acbca37d21"
27 | uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
28 | version = "0.10.8"
29 |
30 | [[Colors]]
31 | deps = ["ColorTypes", "FixedPointNumbers", "InteractiveUtils", "Reexport"]
32 | git-tree-sha1 = "008d6bc68dea6beb6303fdc37188cb557391ebf2"
33 | uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
34 | version = "0.12.4"
35 |
36 | [[Compat]]
37 | deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "SHA", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
38 | git-tree-sha1 = "083e7e5ec3ef443e9dcb6dd3fbcb815879823bfa"
39 | uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
40 | version = "3.14.0"
41 |
42 | [[Conda]]
43 | deps = ["JSON", "VersionParsing"]
44 | git-tree-sha1 = "7a58bb32ce5d85f8bf7559aa7c2842f9aecf52fc"
45 | uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d"
46 | version = "1.4.1"
47 |
48 | [[Contour]]
49 | deps = ["StaticArrays"]
50 | git-tree-sha1 = "81685fee51fc5168898e3cbd8b0f01506cd9148e"
51 | uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
52 | version = "0.5.4"
53 |
54 | [[DataAPI]]
55 | git-tree-sha1 = "176e23402d80e7743fc26c19c681bfb11246af32"
56 | uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
57 | version = "1.3.0"
58 |
59 | [[DataStructures]]
60 | deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
61 | git-tree-sha1 = "88a93640bb3345436284ff089b383c34427f4117"
62 | uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
63 | version = "0.18.2"
64 |
65 | [[DataValueInterfaces]]
66 | git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
67 | uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
68 | version = "1.0.0"
69 |
70 | [[Dates]]
71 | deps = ["Printf"]
72 | uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
73 |
74 | [[DelimitedFiles]]
75 | deps = ["Mmap"]
76 | uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
77 |
78 | [[Distributed]]
79 | deps = ["Random", "Serialization", "Sockets"]
80 | uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
81 |
82 | [[FFMPEG]]
83 | deps = ["FFMPEG_jll", "x264_jll"]
84 | git-tree-sha1 = "9a73ffdc375be61b0e4516d83d880b265366fe1f"
85 | uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a"
86 | version = "0.4.0"
87 |
88 | [[FFMPEG_jll]]
89 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "LAME_jll", "LibVPX_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "Pkg", "Zlib_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
90 | git-tree-sha1 = "13a934b9e74a8722bf1786c989de346a9602e695"
91 | uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
92 | version = "4.3.1+2"
93 |
94 | [[FileWatching]]
95 | uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
96 |
97 | [[FixedPointNumbers]]
98 | deps = ["Statistics"]
99 | git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc"
100 | uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
101 | version = "0.8.4"
102 |
103 | [[FreeType2_jll]]
104 | deps = ["Bzip2_jll", "Libdl", "Pkg", "Zlib_jll"]
105 | git-tree-sha1 = "158698cb8b27eccc7a0de16b73ca7912e164d88b"
106 | uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
107 | version = "2.10.1+3"
108 |
109 | [[FriBidi_jll]]
110 | deps = ["Libdl", "Pkg"]
111 | git-tree-sha1 = "94e98e5597e745d9fb3094d89c7b0b754204c9dd"
112 | uuid = "559328eb-81f9-559d-9380-de523a88c83c"
113 | version = "1.0.5+4"
114 |
115 | [[GR]]
116 | deps = ["Base64", "DelimitedFiles", "HTTP", "JSON", "LinearAlgebra", "Printf", "Random", "Serialization", "Sockets", "Test", "UUIDs"]
117 | git-tree-sha1 = "e26c513329675092535de20cc4bb9c579c8f85a0"
118 | uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71"
119 | version = "0.51.0"
120 |
121 | [[GeometryBasics]]
122 | deps = ["IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"]
123 | git-tree-sha1 = "119f32f9c2b497b49cd3f7f513b358b82660294c"
124 | uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
125 | version = "0.2.15"
126 |
127 | [[GeometryTypes]]
128 | deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "StaticArrays"]
129 | git-tree-sha1 = "34bfa994967e893ab2f17b864eec221b3521ba4d"
130 | uuid = "4d00f742-c7ba-57c2-abde-4428a4b178cb"
131 | version = "0.8.3"
132 |
133 | [[HTTP]]
134 | deps = ["Base64", "Dates", "IniFile", "MbedTLS", "Sockets"]
135 | git-tree-sha1 = "2ac03263ce44be4222342bca1c51c36ce7566161"
136 | uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
137 | version = "0.8.17"
138 |
139 | [[IJulia]]
140 | deps = ["Base64", "Conda", "Dates", "InteractiveUtils", "JSON", "Markdown", "MbedTLS", "Pkg", "Printf", "REPL", "Random", "SoftGlobalScope", "Test", "UUIDs", "ZMQ"]
141 | git-tree-sha1 = "d639acdd0c4c3409ec8996d2af405645b69410f0"
142 | uuid = "7073ff75-c697-5162-941a-fcdaad2a7d2a"
143 | version = "1.21.3"
144 |
145 | [[IniFile]]
146 | deps = ["Test"]
147 | git-tree-sha1 = "098e4d2c533924c921f9f9847274f2ad89e018b8"
148 | uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f"
149 | version = "0.5.0"
150 |
151 | [[InteractiveUtils]]
152 | deps = ["Markdown"]
153 | uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
154 |
155 | [[IterTools]]
156 | git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18"
157 | uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
158 | version = "1.3.0"
159 |
160 | [[IteratorInterfaceExtensions]]
161 | git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
162 | uuid = "82899510-4779-5014-852e-03e436cf321d"
163 | version = "1.0.0"
164 |
165 | [[JSON]]
166 | deps = ["Dates", "Mmap", "Parsers", "Unicode"]
167 | git-tree-sha1 = "b34d7cef7b337321e97d22242c3c2b91f476748e"
168 | uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
169 | version = "0.21.0"
170 |
171 | [[LAME_jll]]
172 | deps = ["Libdl", "Pkg"]
173 | git-tree-sha1 = "a7999edc634307964d5651265ebf7c2e14b4ef91"
174 | uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
175 | version = "3.100.0+2"
176 |
177 | [[LaTeXStrings]]
178 | git-tree-sha1 = "de44b395389b84fd681394d4e8d39ef14e3a2ea8"
179 | uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
180 | version = "1.1.0"
181 |
182 | [[LibGit2]]
183 | deps = ["Printf"]
184 | uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
185 |
186 | [[LibVPX_jll]]
187 | deps = ["Libdl", "Pkg"]
188 | git-tree-sha1 = "e02378f5707d0f94af22b99e4aba798e20368f6e"
189 | uuid = "dd192d2f-8180-539f-9fb4-cc70b1dcf69a"
190 | version = "1.9.0+0"
191 |
192 | [[Libdl]]
193 | uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
194 |
195 | [[LinearAlgebra]]
196 | deps = ["Libdl"]
197 | uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
198 |
199 | [[Logging]]
200 | uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
201 |
202 | [[MacroTools]]
203 | deps = ["Markdown", "Random"]
204 | git-tree-sha1 = "f7d2e3f654af75f01ec49be82c231c382214223a"
205 | uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
206 | version = "0.5.5"
207 |
208 | [[Markdown]]
209 | deps = ["Base64"]
210 | uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
211 |
212 | [[MbedTLS]]
213 | deps = ["Dates", "MbedTLS_jll", "Random", "Sockets"]
214 | git-tree-sha1 = "426a6978b03a97ceb7ead77775a1da066343ec6e"
215 | uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
216 | version = "1.0.2"
217 |
218 | [[MbedTLS_jll]]
219 | deps = ["Libdl", "Pkg"]
220 | git-tree-sha1 = "a0cb0d489819fa7ea5f9fa84c7e7eba19d8073af"
221 | uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
222 | version = "2.16.6+1"
223 |
224 | [[Measures]]
225 | git-tree-sha1 = "e498ddeee6f9fdb4551ce855a46f54dbd900245f"
226 | uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e"
227 | version = "0.3.1"
228 |
229 | [[Missings]]
230 | deps = ["DataAPI"]
231 | git-tree-sha1 = "de0a5ce9e5289f27df672ffabef4d1e5861247d5"
232 | uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
233 | version = "0.4.3"
234 |
235 | [[Mmap]]
236 | uuid = "a63ad114-7e13-5084-954f-fe012c677804"
237 |
238 | [[NaNMath]]
239 | git-tree-sha1 = "c84c576296d0e2fbb3fc134d3e09086b3ea617cd"
240 | uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
241 | version = "0.3.4"
242 |
243 | [[Ogg_jll]]
244 | deps = ["Libdl", "Pkg"]
245 | git-tree-sha1 = "4c3275cda1ba99d1244d0b82a9d0ca871c3cf66b"
246 | uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
247 | version = "1.3.4+1"
248 |
249 | [[OpenSSL_jll]]
250 | deps = ["Libdl", "Pkg"]
251 | git-tree-sha1 = "997359379418d233767f926ea0c43f0e731735c0"
252 | uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
253 | version = "1.1.1+5"
254 |
255 | [[Opus_jll]]
256 | deps = ["Libdl", "Pkg"]
257 | git-tree-sha1 = "cc90a125aa70dbb069adbda2b913b02cf2c5f6fe"
258 | uuid = "91d4177d-7536-5919-b921-800302f37372"
259 | version = "1.3.1+2"
260 |
261 | [[OrderedCollections]]
262 | git-tree-sha1 = "293b70ac1780f9584c89268a6e2a560d938a7065"
263 | uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
264 | version = "1.3.0"
265 |
266 | [[Parsers]]
267 | deps = ["Dates", "Test"]
268 | git-tree-sha1 = "8077624b3c450b15c087944363606a6ba12f925e"
269 | uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
270 | version = "1.0.10"
271 |
272 | [[Pkg]]
273 | deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"]
274 | uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
275 |
276 | [[PlotThemes]]
277 | deps = ["PlotUtils", "Requires", "Statistics"]
278 | git-tree-sha1 = "c6f5ea535551b3b16835134697f0c65d06c94b91"
279 | uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a"
280 | version = "2.0.0"
281 |
282 | [[PlotUtils]]
283 | deps = ["ColorSchemes", "Colors", "Dates", "Printf", "Random", "Reexport", "Statistics"]
284 | git-tree-sha1 = "e18e0e51ff07bf92bb7e06dcb9c082a4e125e20c"
285 | uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
286 | version = "1.0.5"
287 |
288 | [[Plots]]
289 | deps = ["Base64", "Contour", "Dates", "FFMPEG", "FixedPointNumbers", "GR", "GeometryBasics", "GeometryTypes", "JSON", "LinearAlgebra", "Measures", "NaNMath", "PlotThemes", "PlotUtils", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "Requires", "Showoff", "SparseArrays", "Statistics", "StatsBase", "UUIDs"]
290 | git-tree-sha1 = "8c22b5e0b625bda0e784d60805a4cabea8cbf128"
291 | uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
292 | version = "1.6.0"
293 |
294 | [[Printf]]
295 | deps = ["Unicode"]
296 | uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
297 |
298 | [[PyCall]]
299 | deps = ["Conda", "Dates", "Libdl", "LinearAlgebra", "MacroTools", "Serialization", "VersionParsing"]
300 | git-tree-sha1 = "3a3fdb9000d35958c9ba2323ca7c4958901f115d"
301 | uuid = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
302 | version = "1.91.4"
303 |
304 | [[PyPlot]]
305 | deps = ["Colors", "LaTeXStrings", "PyCall", "Sockets", "Test", "VersionParsing"]
306 | git-tree-sha1 = "67dde2482fe1a72ef62ed93f8c239f947638e5a2"
307 | uuid = "d330b81b-6aea-500a-939a-2ce795aea3ee"
308 | version = "2.9.0"
309 |
310 | [[REPL]]
311 | deps = ["InteractiveUtils", "Markdown", "Sockets"]
312 | uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
313 |
314 | [[Random]]
315 | deps = ["Serialization"]
316 | uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
317 |
318 | [[RecipesBase]]
319 | git-tree-sha1 = "58de8f7e33b7fda6ee39eff65169cd1e19d0c107"
320 | uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
321 | version = "1.0.2"
322 |
323 | [[RecipesPipeline]]
324 | deps = ["Dates", "NaNMath", "PlotUtils", "RecipesBase"]
325 | git-tree-sha1 = "84ff6ab4187fb812522e7e3e6447107110171e62"
326 | uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c"
327 | version = "0.1.12"
328 |
329 | [[Reexport]]
330 | deps = ["Pkg"]
331 | git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0"
332 | uuid = "189a3867-3050-52da-a836-e630ba90ab69"
333 | version = "0.2.0"
334 |
335 | [[Requires]]
336 | deps = ["UUIDs"]
337 | git-tree-sha1 = "d37400976e98018ee840e0ca4f9d20baa231dc6b"
338 | uuid = "ae029012-a4dd-5104-9daa-d747884805df"
339 | version = "1.0.1"
340 |
341 | [[SHA]]
342 | uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
343 |
344 | [[Serialization]]
345 | uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
346 |
347 | [[SharedArrays]]
348 | deps = ["Distributed", "Mmap", "Random", "Serialization"]
349 | uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
350 |
351 | [[Showoff]]
352 | deps = ["Dates"]
353 | git-tree-sha1 = "e032c9df551fb23c9f98ae1064de074111b7bc39"
354 | uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
355 | version = "0.3.1"
356 |
357 | [[Sockets]]
358 | uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
359 |
360 | [[SoftGlobalScope]]
361 | deps = ["REPL"]
362 | git-tree-sha1 = "986ec2b6162ccb95de5892ed17832f95badf770c"
363 | uuid = "b85f4697-e234-5449-a836-ec8e2f98b302"
364 | version = "1.1.0"
365 |
366 | [[SortingAlgorithms]]
367 | deps = ["DataStructures", "Random", "Test"]
368 | git-tree-sha1 = "03f5898c9959f8115e30bc7226ada7d0df554ddd"
369 | uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
370 | version = "0.3.1"
371 |
372 | [[SparseArrays]]
373 | deps = ["LinearAlgebra", "Random"]
374 | uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
375 |
376 | [[StaticArrays]]
377 | deps = ["LinearAlgebra", "Random", "Statistics"]
378 | git-tree-sha1 = "016d1e1a00fabc556473b07161da3d39726ded35"
379 | uuid = "90137ffa-7385-5640-81b9-e52037218182"
380 | version = "0.12.4"
381 |
382 | [[Statistics]]
383 | deps = ["LinearAlgebra", "SparseArrays"]
384 | uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
385 |
386 | [[StatsBase]]
387 | deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics"]
388 | git-tree-sha1 = "c53e809e63fe5cf5de13632090bc3520649c9950"
389 | uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
390 | version = "0.32.0"
391 |
392 | [[StructArrays]]
393 | deps = ["Adapt", "DataAPI", "Tables"]
394 | git-tree-sha1 = "8099ed9fb90b6e754d6ba8c6ed8670f010eadca0"
395 | uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
396 | version = "0.4.4"
397 |
398 | [[TableTraits]]
399 | deps = ["IteratorInterfaceExtensions"]
400 | git-tree-sha1 = "b1ad568ba658d8cbb3b892ed5380a6f3e781a81e"
401 | uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
402 | version = "1.0.0"
403 |
404 | [[Tables]]
405 | deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "TableTraits", "Test"]
406 | git-tree-sha1 = "b7f762e9820b7fab47544c36f26f54ac59cf8abf"
407 | uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
408 | version = "1.0.5"
409 |
410 | [[Test]]
411 | deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
412 | uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
413 |
414 | [[UUIDs]]
415 | deps = ["Random", "SHA"]
416 | uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
417 |
418 | [[Unicode]]
419 | uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
420 |
421 | [[VersionParsing]]
422 | git-tree-sha1 = "80229be1f670524750d905f8fc8148e5a8c4537f"
423 | uuid = "81def892-9a0e-5fdd-b105-ffc91e053289"
424 | version = "1.2.0"
425 |
426 | [[ZMQ]]
427 | deps = ["FileWatching", "Sockets", "ZeroMQ_jll"]
428 | git-tree-sha1 = "fc68e8a3719166950a0f3e390a14c7302c48f8de"
429 | uuid = "c2297ded-f4af-51ae-bb23-16f91089e4e1"
430 | version = "1.2.1"
431 |
432 | [[ZeroMQ_jll]]
433 | deps = ["Libdl", "Pkg"]
434 | git-tree-sha1 = "733352667c60ce39dfd3017db9b798b288c87417"
435 | uuid = "8f1865be-045e-5c20-9c9f-bfbfb0764568"
436 | version = "4.3.2+4"
437 |
438 | [[Zlib_jll]]
439 | deps = ["Libdl", "Pkg"]
440 | git-tree-sha1 = "d5bba6485811931e4b8958e2d7ca3738273ac468"
441 | uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
442 | version = "1.2.11+15"
443 |
444 | [[libass_jll]]
445 | deps = ["Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "Libdl", "Pkg", "Zlib_jll"]
446 | git-tree-sha1 = "f02d0db58888592e98c5f4953cef620ce9274eee"
447 | uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
448 | version = "0.14.0+3"
449 |
450 | [[libfdk_aac_jll]]
451 | deps = ["Libdl", "Pkg"]
452 | git-tree-sha1 = "e17b4513993b4413d31cffd1b36a63625ebbc3d3"
453 | uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
454 | version = "0.1.6+3"
455 |
456 | [[libvorbis_jll]]
457 | deps = ["Libdl", "Ogg_jll", "Pkg"]
458 | git-tree-sha1 = "8014e1c1033009edcfe820ec25877a9f1862ba4c"
459 | uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
460 | version = "1.3.6+5"
461 |
462 | [[x264_jll]]
463 | deps = ["Libdl", "Pkg"]
464 | git-tree-sha1 = "e496625b900df1b02ab0e02fad316b77446616ef"
465 | uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
466 | version = "2020.7.14+1"
467 |
468 | [[x265_jll]]
469 | deps = ["Libdl", "Pkg"]
470 | git-tree-sha1 = "ac7d44fa1639a780d0ae79ca1a5a7f4181131825"
471 | uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
472 | version = "3.0.0+2"
473 |
--------------------------------------------------------------------------------