├── 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 | --------------------------------------------------------------------------------