diff --git a/bench/cardano-profile/data/all-profiles-coay.json b/bench/cardano-profile/data/all-profiles-coay.json
index fdf9bc2fa62..e1205799bda 100644
--- a/bench/cardano-profile/data/all-profiles-coay.json
+++ b/bench/cardano-profile/data/all-profiles-coay.json
@@ -15,10 +15,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -120,7 +120,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -330,7 +330,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -353,7 +353,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -383,7 +383,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -405,10 +404,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -510,7 +509,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -720,7 +719,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -743,7 +742,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -773,7 +772,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -797,10 +795,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -905,7 +903,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -1115,7 +1113,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -1138,7 +1136,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -1168,7 +1166,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -1193,10 +1190,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -1298,7 +1295,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -1943,7 +1940,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -1966,7 +1963,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -1996,7 +1993,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -2021,10 +2017,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -2126,7 +2122,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -2771,7 +2767,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -2794,7 +2790,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -2824,7 +2820,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -2849,10 +2844,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -2954,7 +2949,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -3599,7 +3594,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -3622,7 +3617,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -3655,7 +3650,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -3680,10 +3674,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -3785,7 +3779,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -4430,7 +4424,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -4453,7 +4447,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -4483,7 +4477,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": true,
"timeseries": true,
"withresources": false
},
@@ -4508,10 +4501,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -4613,7 +4606,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -5258,7 +5251,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -5281,7 +5274,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -5311,7 +5304,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -5336,10 +5328,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -5441,7 +5433,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -6086,7 +6078,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -6109,7 +6101,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -6142,7 +6134,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -6167,10 +6158,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -6272,7 +6263,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -6917,7 +6908,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -6940,7 +6931,7 @@
"major": 9,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -6973,7 +6964,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -6987,10 +6977,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "performance"
},
"chaindb": {
@@ -7103,7 +7093,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -7313,7 +7303,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 432000,
"protocolParams": {
"a0": 0.3,
@@ -7336,7 +7326,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 2160,
@@ -7367,7 +7357,6 @@
"scenario": "chainsync",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -7381,10 +7370,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "performance"
},
"chaindb": {
@@ -7497,7 +7486,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -7707,7 +7696,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 432000,
"protocolParams": {
"a0": 0.3,
@@ -7730,7 +7719,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 2160,
@@ -7761,7 +7750,6 @@
"scenario": "chainsync",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -7775,10 +7763,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "performance"
},
"chaindb": {
@@ -7891,7 +7879,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -8101,7 +8089,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 432000,
"protocolParams": {
"a0": 0.3,
@@ -8124,7 +8112,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 2160,
@@ -8155,7 +8143,6 @@
"scenario": "chainsync",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -8169,10 +8156,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "performance"
},
"chaindb": {
@@ -8285,7 +8272,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -8495,7 +8482,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 432000,
"protocolParams": {
"a0": 0.3,
@@ -8518,7 +8505,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 2160,
@@ -8549,7 +8536,6 @@
"scenario": "chainsync",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -8571,10 +8557,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -8676,7 +8662,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -8886,7 +8872,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -8909,7 +8895,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -8939,7 +8925,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -8961,10 +8946,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -9066,7 +9051,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -9276,7 +9261,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -9299,7 +9284,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -9329,7 +9314,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -9351,10 +9335,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -9456,7 +9440,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -9666,7 +9650,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -9689,7 +9673,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -9719,7 +9703,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -9741,10 +9724,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -9846,7 +9829,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -10056,7 +10039,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -10079,7 +10062,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -10109,7 +10092,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -10131,10 +10113,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -10270,7 +10252,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -10480,7 +10462,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -10503,7 +10485,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -10533,7 +10515,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -10555,10 +10536,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -10660,7 +10641,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -10870,7 +10851,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -10893,7 +10874,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -10923,7 +10904,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -10947,10 +10927,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -11055,7 +11035,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -11444,7 +11424,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -11467,7 +11447,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -11497,7 +11477,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -11521,10 +11500,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -11643,7 +11622,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -12032,7 +12011,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -12055,7 +12034,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -12085,7 +12064,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -12109,10 +12087,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -12231,7 +12209,7 @@
"tx_fee": 1004000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -12620,7 +12598,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -12643,7 +12621,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -12673,7 +12651,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -12697,10 +12674,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -12805,7 +12782,7 @@
"tx_fee": 1412000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -13194,7 +13171,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -13217,7 +13194,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -13247,7 +13224,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -13271,10 +13247,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -13400,7 +13376,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -14041,7 +14017,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -14064,7 +14040,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -14094,7 +14070,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -14118,10 +14093,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -14234,7 +14209,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -14875,7 +14850,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -14898,7 +14873,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -14928,7 +14903,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -14952,10 +14926,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -15068,7 +15042,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -15711,7 +15685,7 @@
"budget/block/steps/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -15734,7 +15708,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -15764,397 +15738,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
- "timeseries": false,
- "withresources": false
- },
- "workloads": []
- },
- "ci-bench-rtview": {
- "analysis": {
- "cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 240,
- "filter_exprs": [
- {
- "contents": {
- "contents": 1,
- "tag": "BMinimumAdoptions"
- },
- "tag": "CBlock"
- }
- ],
- "filters": [],
- "finish_patience": 21,
- "last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
- "silence_since_last_block_s": 120,
- "start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
- "type": "standard"
- },
- "cli_args": {
- "createStakedArgs": [
- "--testnet-magic",
- 42,
- "--supply",
- "10000000000000",
- "--gen-utxo-keys",
- 1,
- "--gen-genesis-keys",
- 0,
- "--supply-delegated",
- "2000000000000000",
- "--gen-pools",
- 2,
- "--gen-stake-delegs",
- 100000,
- "--num-stuffed-utxo",
- "500000"
- ],
- "createTestnetDataArgs": [
- "--testnet-magic",
- 42,
- "--total-supply",
- "2010000000000000",
- "--utxo-keys",
- 1,
- "--genesis-keys",
- 0,
- "--delegated-supply",
- "2000000000000000",
- "--pools",
- 2,
- "--stake-delegators",
- 100000,
- "--drep-keys",
- 0,
- "--stuffed-utxo",
- "500000"
- ],
- "pools": [
- "--argjson",
- "initialPoolCoin",
- "1000000000000000"
- ]
- },
- "composition": {
- "dense_pool_density": 1,
- "locations": [
- "loopback"
- ],
- "n_bft_hosts": 0,
- "n_dense_hosts": 0,
- "n_dense_pools": 0,
- "n_hosts": 2,
- "n_pool_hosts": 2,
- "n_pools": 2,
- "n_singular_hosts": 2,
- "n_singular_pools": 2,
- "topology": "uni-circle",
- "with_explorer": false,
- "with_proxy": false
- },
- "derived": {
- "dataset_induced_startup_delay_conservative": 240,
- "dataset_induced_startup_delay_optimistic": 12,
- "dataset_measure": 600000,
- "default_value_tx_per_block_estimate": 172,
- "default_value_tx_size_estimate": 381,
- "delegators_effective": 100000,
- "effective_epochs": 1,
- "epoch_duration": 600,
- "generator_blocks_lower_bound": 61,
- "generator_duration": 600,
- "generator_tx_count": 9000,
- "genesis_future_offset": 12,
- "shutdown_time": null,
- "supply_delegated": 2000000000000000,
- "supply_total": 2010000000000000,
- "utxo_delegated": 100000,
- "utxo_generated": 18000,
- "utxo_stuffed": 500000
- },
- "desc": "Miniature dataset, CI-friendly duration, bench scale",
- "era": "conway",
- "generator": {
- "add_tx_size": 100,
- "epochs": 3,
- "init_cooldown": 5,
- "inputs_per_tx": 2,
- "outputs_per_tx": 2,
- "plutus": {
- "script": null,
- "type": null
- },
- "tps": 15,
- "tx_count": 9000,
- "tx_fee": 1000000
- },
- "genesis": {
- "active_slots_coeff": 5.0e-2,
- "alonzo": {
- "collateralPercentage": 150,
- "costModels": {
- "PlutusV1": {
- "addInteger-cpu-arguments-intercept": 197209,
- "addInteger-cpu-arguments-slope": 0,
- "addInteger-memory-arguments-intercept": 1,
- "addInteger-memory-arguments-slope": 1,
- "appendByteString-cpu-arguments-intercept": 396231,
- "appendByteString-cpu-arguments-slope": 621,
- "appendByteString-memory-arguments-intercept": 0,
- "appendByteString-memory-arguments-slope": 1,
- "appendString-cpu-arguments-intercept": 150000,
- "appendString-cpu-arguments-slope": 1000,
- "appendString-memory-arguments-intercept": 0,
- "appendString-memory-arguments-slope": 1,
- "bData-cpu-arguments": 150000,
- "bData-memory-arguments": 32,
- "blake2b-cpu-arguments-intercept": 2477736,
- "blake2b-cpu-arguments-slope": 29175,
- "blake2b-memory-arguments": 4,
- "cekApplyCost-exBudgetCPU": 29773,
- "cekApplyCost-exBudgetMemory": 100,
- "cekBuiltinCost-exBudgetCPU": 29773,
- "cekBuiltinCost-exBudgetMemory": 100,
- "cekConstCost-exBudgetCPU": 29773,
- "cekConstCost-exBudgetMemory": 100,
- "cekDelayCost-exBudgetCPU": 29773,
- "cekDelayCost-exBudgetMemory": 100,
- "cekForceCost-exBudgetCPU": 29773,
- "cekForceCost-exBudgetMemory": 100,
- "cekLamCost-exBudgetCPU": 29773,
- "cekLamCost-exBudgetMemory": 100,
- "cekStartupCost-exBudgetCPU": 100,
- "cekStartupCost-exBudgetMemory": 100,
- "cekVarCost-exBudgetCPU": 29773,
- "cekVarCost-exBudgetMemory": 100,
- "chooseData-cpu-arguments": 150000,
- "chooseData-memory-arguments": 32,
- "chooseList-cpu-arguments": 150000,
- "chooseList-memory-arguments": 32,
- "chooseUnit-cpu-arguments": 150000,
- "chooseUnit-memory-arguments": 32,
- "consByteString-cpu-arguments-intercept": 150000,
- "consByteString-cpu-arguments-slope": 1000,
- "consByteString-memory-arguments-intercept": 0,
- "consByteString-memory-arguments-slope": 1,
- "constrData-cpu-arguments": 150000,
- "constrData-memory-arguments": 32,
- "decodeUtf8-cpu-arguments-intercept": 150000,
- "decodeUtf8-cpu-arguments-slope": 1000,
- "decodeUtf8-memory-arguments-intercept": 0,
- "decodeUtf8-memory-arguments-slope": 8,
- "divideInteger-cpu-arguments-constant": 148000,
- "divideInteger-cpu-arguments-model-arguments-intercept": 425507,
- "divideInteger-cpu-arguments-model-arguments-slope": 118,
- "divideInteger-memory-arguments-intercept": 0,
- "divideInteger-memory-arguments-minimum": 1,
- "divideInteger-memory-arguments-slope": 1,
- "encodeUtf8-cpu-arguments-intercept": 150000,
- "encodeUtf8-cpu-arguments-slope": 1000,
- "encodeUtf8-memory-arguments-intercept": 0,
- "encodeUtf8-memory-arguments-slope": 8,
- "equalsByteString-cpu-arguments-constant": 150000,
- "equalsByteString-cpu-arguments-intercept": 112536,
- "equalsByteString-cpu-arguments-slope": 247,
- "equalsByteString-memory-arguments": 1,
- "equalsData-cpu-arguments-intercept": 150000,
- "equalsData-cpu-arguments-slope": 10000,
- "equalsData-memory-arguments": 1,
- "equalsInteger-cpu-arguments-intercept": 136542,
- "equalsInteger-cpu-arguments-slope": 1326,
- "equalsInteger-memory-arguments": 1,
- "equalsString-cpu-arguments-constant": 1000,
- "equalsString-cpu-arguments-intercept": 150000,
- "equalsString-cpu-arguments-slope": 1000,
- "equalsString-memory-arguments": 1,
- "fstPair-cpu-arguments": 150000,
- "fstPair-memory-arguments": 32,
- "headList-cpu-arguments": 150000,
- "headList-memory-arguments": 32,
- "iData-cpu-arguments": 150000,
- "iData-memory-arguments": 32,
- "ifThenElse-cpu-arguments": 1,
- "ifThenElse-memory-arguments": 1,
- "indexByteString-cpu-arguments": 150000,
- "indexByteString-memory-arguments": 1,
- "lengthOfByteString-cpu-arguments": 150000,
- "lengthOfByteString-memory-arguments": 4,
- "lessThanByteString-cpu-arguments-intercept": 103599,
- "lessThanByteString-cpu-arguments-slope": 248,
- "lessThanByteString-memory-arguments": 1,
- "lessThanEqualsByteString-cpu-arguments-intercept": 103599,
- "lessThanEqualsByteString-cpu-arguments-slope": 248,
- "lessThanEqualsByteString-memory-arguments": 1,
- "lessThanEqualsInteger-cpu-arguments-intercept": 145276,
- "lessThanEqualsInteger-cpu-arguments-slope": 1366,
- "lessThanEqualsInteger-memory-arguments": 1,
- "lessThanInteger-cpu-arguments-intercept": 179690,
- "lessThanInteger-cpu-arguments-slope": 497,
- "lessThanInteger-memory-arguments": 1,
- "listData-cpu-arguments": 150000,
- "listData-memory-arguments": 32,
- "mapData-cpu-arguments": 150000,
- "mapData-memory-arguments": 32,
- "mkCons-cpu-arguments": 150000,
- "mkCons-memory-arguments": 32,
- "mkNilData-cpu-arguments": 150000,
- "mkNilData-memory-arguments": 32,
- "mkNilPairData-cpu-arguments": 150000,
- "mkNilPairData-memory-arguments": 32,
- "mkPairData-cpu-arguments": 150000,
- "mkPairData-memory-arguments": 32,
- "modInteger-cpu-arguments-constant": 148000,
- "modInteger-cpu-arguments-model-arguments-intercept": 425507,
- "modInteger-cpu-arguments-model-arguments-slope": 118,
- "modInteger-memory-arguments-intercept": 0,
- "modInteger-memory-arguments-minimum": 1,
- "modInteger-memory-arguments-slope": 1,
- "multiplyInteger-cpu-arguments-intercept": 61516,
- "multiplyInteger-cpu-arguments-slope": 11218,
- "multiplyInteger-memory-arguments-intercept": 0,
- "multiplyInteger-memory-arguments-slope": 1,
- "nullList-cpu-arguments": 150000,
- "nullList-memory-arguments": 32,
- "quotientInteger-cpu-arguments-constant": 148000,
- "quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
- "quotientInteger-cpu-arguments-model-arguments-slope": 118,
- "quotientInteger-memory-arguments-intercept": 0,
- "quotientInteger-memory-arguments-minimum": 1,
- "quotientInteger-memory-arguments-slope": 1,
- "remainderInteger-cpu-arguments-constant": 148000,
- "remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
- "remainderInteger-cpu-arguments-model-arguments-slope": 118,
- "remainderInteger-memory-arguments-intercept": 0,
- "remainderInteger-memory-arguments-minimum": 1,
- "remainderInteger-memory-arguments-slope": 1,
- "sha2_256-cpu-arguments-intercept": 2477736,
- "sha2_256-cpu-arguments-slope": 29175,
- "sha2_256-memory-arguments": 4,
- "sha3_256-cpu-arguments-intercept": 0,
- "sha3_256-cpu-arguments-slope": 82363,
- "sha3_256-memory-arguments": 4,
- "sliceByteString-cpu-arguments-intercept": 150000,
- "sliceByteString-cpu-arguments-slope": 5000,
- "sliceByteString-memory-arguments-intercept": 0,
- "sliceByteString-memory-arguments-slope": 1,
- "sndPair-cpu-arguments": 150000,
- "sndPair-memory-arguments": 32,
- "subtractInteger-cpu-arguments-intercept": 197209,
- "subtractInteger-cpu-arguments-slope": 0,
- "subtractInteger-memory-arguments-intercept": 1,
- "subtractInteger-memory-arguments-slope": 1,
- "tailList-cpu-arguments": 150000,
- "tailList-memory-arguments": 32,
- "trace-cpu-arguments": 150000,
- "trace-memory-arguments": 32,
- "unBData-cpu-arguments": 150000,
- "unBData-memory-arguments": 32,
- "unConstrData-cpu-arguments": 150000,
- "unConstrData-memory-arguments": 32,
- "unIData-cpu-arguments": 150000,
- "unIData-memory-arguments": 32,
- "unListData-cpu-arguments": 150000,
- "unListData-memory-arguments": 32,
- "unMapData-cpu-arguments": 150000,
- "unMapData-memory-arguments": 32,
- "verifySignature-cpu-arguments-intercept": 3345831,
- "verifySignature-cpu-arguments-slope": 1,
- "verifySignature-memory-arguments": 1
- }
- },
- "executionPrices": {
- "prMem": {
- "denominator": 10000,
- "numerator": 577
- },
- "prSteps": {
- "denominator": 10000000,
- "numerator": 721
- }
- },
- "lovelacePerUTxOWord": 34482,
- "maxBlockExUnits": {
- "exUnitsMem": 50000000,
- "exUnitsSteps": 40000000000
- },
- "maxCollateralInputs": 3,
- "maxTxExUnits": {
- "exUnitsMem": 10000000,
- "exUnitsSteps": 10000000000
- },
- "maxValueSize": 5000
- },
- "conway": null,
- "delegator_coin": 1000000000000000,
- "delegators": 100000,
- "dreps": 0,
- "epoch_length": 600,
- "extra_future_offset": 0,
- "funds_balance": 10000000000000,
- "max_block_size": null,
- "network_magic": 42,
- "parameter_k": 3,
- "per_pool_balance": 1000000000000000,
- "pool_coin": 1000000000000000,
- "pparamsEpoch": 300,
- "pparamsOverlays": [],
- "shelley": {
- "activeSlotsCoeff": 5.0e-2,
- "epochLength": 600,
- "protocolParams": {
- "a0": 0.3,
- "decentralisationParam": 0,
- "eMax": 18,
- "extraEntropy": {
- "tag": "NeutralNonce"
- },
- "keyDeposit": 2000000,
- "maxBlockBodySize": 65536,
- "maxBlockHeaderSize": 1100,
- "maxTxSize": 16384,
- "minFeeA": 44,
- "minFeeB": 155381,
- "minPoolCost": 340000000,
- "minUTxOValue": 0,
- "nOpt": 500,
- "poolDeposit": 500000000,
- "protocolVersion": {
- "major": 6,
- "minor": 0
- },
- "rho": 3.0e-3,
- "tau": 0.2
- },
- "securityParam": 3,
- "slotLength": 1
- },
- "single_shot": true,
- "slot_duration": 1,
- "utxo": 500000,
- "utxo_keys": 1
- },
- "name": "ci-bench-rtview",
- "node": {
- "heap_limit": null,
- "rts_flags_override": [],
- "shutdown_on_block_synced": 15,
- "shutdown_on_slot_synced": null,
- "ssd_directory": null,
- "tracer": true,
- "tracing_backend": "trace-dispatcher",
- "utxo_lmdb": false,
- "utxo_lsmt": false,
- "verbatim": {
- "EnableP2P": true
- }
- },
- "overlay": {},
- "scenario": "fixed-loaded",
- "tracer": {
- "ekg": false,
- "rtview": true,
"timeseries": false,
"withresources": false
},
@@ -16176,10 +15759,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -16281,7 +15864,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -16491,7 +16074,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -16514,7 +16097,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -16544,7 +16127,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -16566,10 +16148,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -16675,7 +16257,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -16885,7 +16467,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -16908,7 +16490,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -16938,7 +16520,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -16962,10 +16543,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -17070,7 +16651,7 @@
"tx_fee": 1380000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -17460,7 +17041,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -17483,7 +17064,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -17513,7 +17094,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -17535,10 +17115,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -17674,7 +17254,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -17884,7 +17464,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -17907,7 +17487,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -17937,7 +17517,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -17959,10 +17538,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -18064,7 +17643,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -18274,7 +17853,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -18297,7 +17876,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -18327,7 +17906,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -18351,10 +17929,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -18459,7 +18037,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -18669,7 +18247,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -18692,7 +18270,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -18722,32 +18300,33 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "ci-test-rtview": {
+ "default": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 40,
"filter_exprs": [
{
"contents": {
- "contents": 1,
+ "contents": 5,
"tag": "BMinimumAdoptions"
},
"tag": "CBlock"
}
],
- "filters": [],
+ "filters": [
+ "unitary"
+ ],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -18761,11 +18340,11 @@
"--gen-genesis-keys",
0,
"--supply-delegated",
- "2000000000000000",
+ "6000000000000000",
"--gen-pools",
- 2,
+ 6,
"--gen-stake-delegs",
- 2,
+ 6,
"--num-stuffed-utxo",
"000000"
],
@@ -18773,17 +18352,17 @@
"--testnet-magic",
42,
"--total-supply",
- "2010000000000000",
+ "6010000000000000",
"--utxo-keys",
1,
"--genesis-keys",
0,
"--delegated-supply",
- "2000000000000000",
+ "6000000000000000",
"--pools",
- 2,
+ 6,
"--stake-delegators",
- 2,
+ 6,
"--drep-keys",
0,
"--stuffed-utxo",
@@ -18803,11 +18382,11 @@
"n_bft_hosts": 0,
"n_dense_hosts": 0,
"n_dense_pools": 0,
- "n_hosts": 2,
- "n_pool_hosts": 2,
- "n_pools": 2,
- "n_singular_hosts": 2,
- "n_singular_pools": 2,
+ "n_hosts": 6,
+ "n_pool_hosts": 6,
+ "n_pools": 6,
+ "n_singular_hosts": 6,
+ "n_singular_pools": 6,
"topology": "uni-circle",
"with_explorer": false,
"with_proxy": false
@@ -18818,25 +18397,24 @@
"dataset_measure": 0,
"default_value_tx_per_block_estimate": 172,
"default_value_tx_size_estimate": 381,
- "delegators_effective": 2,
- "effective_epochs": 1,
+ "delegators_effective": 6,
+ "effective_epochs": 3,
"epoch_duration": 600,
- "generator_blocks_lower_bound": 61,
- "generator_duration": 600,
- "generator_tx_count": 9000,
+ "generator_blocks_lower_bound": 145,
+ "generator_duration": 1800,
+ "generator_tx_count": 21600,
"genesis_future_offset": 40,
"shutdown_time": null,
- "supply_delegated": 2000000000000000,
- "supply_total": 2010000000000000,
- "utxo_delegated": 0,
- "utxo_generated": 18000,
+ "supply_delegated": 6000000000000000,
+ "supply_total": 6010000000000000,
+ "utxo_delegated": 6,
+ "utxo_generated": 43200,
"utxo_stuffed": 0
},
- "desc": "Miniature dataset, CI-friendly duration (2-3min), test scale",
"era": "conway",
"generator": {
"add_tx_size": 100,
- "epochs": 2,
+ "epochs": 3,
"init_cooldown": 5,
"inputs_per_tx": 2,
"outputs_per_tx": 2,
@@ -18844,12 +18422,12 @@
"script": null,
"type": null
},
- "tps": 15,
- "tx_count": 9000,
+ "tps": 12,
+ "tx_count": 21600,
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -19045,8 +18623,8 @@
"maxValueSize": 5000
},
"conway": null,
- "delegator_coin": 0,
- "delegators": 0,
+ "delegator_coin": 1000000000000000,
+ "delegators": 6,
"dreps": 0,
"epoch_length": 600,
"extra_future_offset": 0,
@@ -19059,7 +18637,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -19082,7 +18660,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -19093,11 +18671,11 @@
"utxo": 0,
"utxo_keys": 1
},
- "name": "ci-test-rtview",
+ "name": "default",
"node": {
"heap_limit": null,
"rts_flags_override": [],
- "shutdown_on_block_synced": 8,
+ "shutdown_on_block_synced": null,
"shutdown_on_slot_synced": null,
"ssd_directory": null,
"tracer": true,
@@ -19112,13 +18690,12 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": true,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "default": {
+ "default-nomadperf": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 40,
@@ -19136,10 +18713,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -19187,10 +18764,44 @@
"1000000000000000"
]
},
+ "cluster": {
+ "aws": {
+ "instance_type": {
+ "explorer": "m5.4xlarge",
+ "producer": "c5d.2xlarge"
+ },
+ "use_public_routing": true
+ },
+ "keep_running": true,
+ "minimun_storage": {
+ "explorer": 14155776,
+ "producer": 12582912
+ },
+ "nomad": {
+ "class": "perf",
+ "fetch_logs_ssh": true,
+ "host_volumes": null,
+ "namespace": "perf",
+ "resources": {
+ "explorer": {
+ "cores": 16,
+ "memory": 32000,
+ "memory_max": 64000
+ },
+ "producer": {
+ "cores": 8,
+ "memory": 15400,
+ "memory_max": 16000
+ }
+ }
+ }
+ },
"composition": {
"dense_pool_density": 1,
"locations": [
- "loopback"
+ "eu-central-1",
+ "us-east-1",
+ "ap-southeast-2"
],
"n_bft_hosts": 0,
"n_dense_hosts": 0,
@@ -19200,8 +18811,8 @@
"n_pools": 6,
"n_singular_hosts": 6,
"n_singular_pools": 6,
- "topology": "uni-circle",
- "with_explorer": false,
+ "topology": "torus",
+ "with_explorer": true,
"with_proxy": false
},
"derived": {
@@ -19240,7 +18851,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -19450,7 +19061,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -19473,7 +19084,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -19484,7 +19095,7 @@
"utxo": 0,
"utxo_keys": 1
},
- "name": "default",
+ "name": "default-nomadperf",
"node": {
"heap_limit": null,
"rts_flags_override": [],
@@ -19503,13 +19114,12 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "default-nomadperf": {
+ "devops": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 40,
@@ -19527,11 +19137,11 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.05,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
- "type": "standard"
+ "tx_loss_ratio": 0.02,
+ "type": null
},
"cli_args": {
"createStakedArgs": [
@@ -19578,44 +19188,10 @@
"1000000000000000"
]
},
- "cluster": {
- "aws": {
- "instance_type": {
- "explorer": "m5.4xlarge",
- "producer": "c5d.2xlarge"
- },
- "use_public_routing": true
- },
- "keep_running": true,
- "minimun_storage": {
- "explorer": 14155776,
- "producer": 12582912
- },
- "nomad": {
- "class": "perf",
- "fetch_logs_ssh": true,
- "host_volumes": null,
- "namespace": "perf",
- "resources": {
- "explorer": {
- "cores": 16,
- "memory": 32000,
- "memory_max": 64000
- },
- "producer": {
- "cores": 8,
- "memory": 15400,
- "memory_max": 16000
- }
- }
- }
- },
"composition": {
"dense_pool_density": 1,
"locations": [
- "eu-central-1",
- "us-east-1",
- "ap-southeast-2"
+ "loopback"
],
"n_bft_hosts": 0,
"n_dense_hosts": 0,
@@ -19625,8 +19201,8 @@
"n_pools": 6,
"n_singular_hosts": 6,
"n_singular_pools": 6,
- "topology": "torus",
- "with_explorer": true,
+ "topology": "uni-circle",
+ "with_explorer": false,
"with_proxy": false
},
"derived": {
@@ -19637,16 +19213,16 @@
"default_value_tx_size_estimate": 381,
"delegators_effective": 6,
"effective_epochs": 3,
- "epoch_duration": 600,
- "generator_blocks_lower_bound": 145,
- "generator_duration": 1800,
- "generator_tx_count": 21600,
- "genesis_future_offset": 40,
+ "epoch_duration": 200,
+ "generator_blocks_lower_bound": 49,
+ "generator_duration": 600,
+ "generator_tx_count": 7200,
+ "genesis_future_offset": 50,
"shutdown_time": null,
"supply_delegated": 6000000000000000,
"supply_total": 6010000000000000,
"utxo_delegated": 6,
- "utxo_generated": 43200,
+ "utxo_generated": 14400,
"utxo_stuffed": 0
},
"era": "conway",
@@ -19661,11 +19237,11 @@
"type": null
},
"tps": 12,
- "tx_count": 21600,
+ "tx_count": 7200,
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.1,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -19864,19 +19440,19 @@
"delegator_coin": 1000000000000000,
"delegators": 6,
"dreps": 0,
- "epoch_length": 600,
- "extra_future_offset": 0,
+ "epoch_length": 1000,
+ "extra_future_offset": 10,
"funds_balance": 10000000000000,
"max_block_size": null,
"network_magic": 42,
- "parameter_k": 3,
+ "parameter_k": 10,
"per_pool_balance": 1000000000000000,
"pool_coin": 1000000000000000,
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
- "epochLength": 600,
+ "activeSlotsCoeff": 0.1,
+ "epochLength": 1000,
"protocolParams": {
"a0": 0.3,
"decentralisationParam": 0,
@@ -19898,18 +19474,19 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
- "securityParam": 3,
- "slotLength": 1
+ "securityParam": 10,
+ "slotLength": 0.2,
+ "updateQuorum": 1
},
"single_shot": true,
- "slot_duration": 1,
+ "slot_duration": 0.2,
"utxo": 0,
"utxo_keys": 1
},
- "name": "default-nomadperf",
+ "name": "devops",
"node": {
"heap_limit": null,
"rts_flags_override": [],
@@ -19925,23 +19502,22 @@
}
},
"overlay": {},
- "scenario": "fixed-loaded",
+ "scenario": "idle",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "devops": {
+ "dish": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 40,
+ "cluster_startup_overhead_s": 12000,
"filter_exprs": [
{
"contents": {
- "contents": 5,
+ "contents": 2,
"tag": "BMinimumAdoptions"
},
"tag": "CBlock"
@@ -19952,11 +19528,11 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 5.0e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
- "type": null
+ "tx_loss_ratio": 0.02,
+ "type": "standard"
},
"cli_args": {
"createStakedArgs": [
@@ -19969,33 +19545,33 @@
"--gen-genesis-keys",
0,
"--supply-delegated",
- "6000000000000000",
+ "3000000000000000",
"--gen-pools",
- 6,
+ 3,
"--gen-stake-delegs",
- 6,
+ 3,
"--num-stuffed-utxo",
- "000000"
+ "30000000"
],
"createTestnetDataArgs": [
"--testnet-magic",
42,
"--total-supply",
- "6010000000000000",
+ "3010000000000000",
"--utxo-keys",
1,
"--genesis-keys",
0,
"--delegated-supply",
- "6000000000000000",
+ "3000000000000000",
"--pools",
- 6,
+ 3,
"--stake-delegators",
- 6,
+ 3,
"--drep-keys",
0,
"--stuffed-utxo",
- "000000"
+ "30000000"
],
"pools": [
"--argjson",
@@ -20011,34 +19587,34 @@
"n_bft_hosts": 0,
"n_dense_hosts": 0,
"n_dense_pools": 0,
- "n_hosts": 6,
- "n_pool_hosts": 6,
- "n_pools": 6,
- "n_singular_hosts": 6,
- "n_singular_pools": 6,
+ "n_hosts": 3,
+ "n_pool_hosts": 3,
+ "n_pools": 3,
+ "n_singular_hosts": 3,
+ "n_singular_pools": 3,
"topology": "uni-circle",
"with_explorer": false,
"with_proxy": false
},
"derived": {
- "dataset_induced_startup_delay_conservative": 40,
- "dataset_induced_startup_delay_optimistic": 40,
- "dataset_measure": 0,
+ "dataset_induced_startup_delay_conservative": 12000,
+ "dataset_induced_startup_delay_optimistic": 600,
+ "dataset_measure": 30000000,
"default_value_tx_per_block_estimate": 172,
"default_value_tx_size_estimate": 381,
- "delegators_effective": 6,
- "effective_epochs": 3,
- "epoch_duration": 200,
- "generator_blocks_lower_bound": 49,
- "generator_duration": 600,
- "generator_tx_count": 7200,
- "genesis_future_offset": 50,
- "shutdown_time": null,
- "supply_delegated": 6000000000000000,
- "supply_total": 6010000000000000,
- "utxo_delegated": 6,
- "utxo_generated": 14400,
- "utxo_stuffed": 0
+ "delegators_effective": 3,
+ "effective_epochs": 4,
+ "epoch_duration": 600,
+ "generator_blocks_lower_bound": 2229,
+ "generator_duration": 2400,
+ "generator_tx_count": 333334,
+ "genesis_future_offset": 600,
+ "shutdown_time": 2400,
+ "supply_delegated": 3000000000000000,
+ "supply_total": 3010000000000000,
+ "utxo_delegated": 0,
+ "utxo_generated": 666668,
+ "utxo_stuffed": 30000000
},
"era": "conway",
"generator": {
@@ -20051,12 +19627,12 @@
"script": null,
"type": null
},
- "tps": 12,
- "tx_count": 7200,
+ "tps": 138.88888888888889,
+ "tx_count": 333334,
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 0.1,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -20252,22 +19828,22 @@
"maxValueSize": 5000
},
"conway": null,
- "delegator_coin": 1000000000000000,
- "delegators": 6,
+ "delegator_coin": 0,
+ "delegators": 0,
"dreps": 0,
- "epoch_length": 1000,
- "extra_future_offset": 10,
+ "epoch_length": 600,
+ "extra_future_offset": 0,
"funds_balance": 10000000000000,
"max_block_size": null,
"network_magic": 42,
- "parameter_k": 10,
+ "parameter_k": 3,
"per_pool_balance": 1000000000000000,
"pool_coin": 1000000000000000,
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 0.1,
- "epochLength": 1000,
+ "activeSlotsCoeff": 0.05,
+ "epochLength": 600,
"protocolParams": {
"a0": 0.3,
"decentralisationParam": 0,
@@ -20289,24 +19865,23 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
- "securityParam": 10,
- "slotLength": 0.2,
- "updateQuorum": 1
+ "securityParam": 3,
+ "slotLength": 1
},
"single_shot": true,
- "slot_duration": 0.2,
- "utxo": 0,
+ "slot_duration": 1,
+ "utxo": 30000000,
"utxo_keys": 1
},
- "name": "devops",
+ "name": "dish",
"node": {
"heap_limit": null,
"rts_flags_override": [],
"shutdown_on_block_synced": null,
- "shutdown_on_slot_synced": null,
+ "shutdown_on_slot_synced": 2400,
"ssd_directory": null,
"tracer": true,
"tracing_backend": "trace-dispatcher",
@@ -20317,19 +19892,18 @@
}
},
"overlay": {},
- "scenario": "idle",
+ "scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "dish": {
+ "dish-10M": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 12000,
+ "cluster_startup_overhead_s": 4000,
"filter_exprs": [
{
"contents": {
@@ -20344,10 +19918,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -20367,7 +19941,7 @@
"--gen-stake-delegs",
3,
"--num-stuffed-utxo",
- "30000000"
+ "10000000"
],
"createTestnetDataArgs": [
"--testnet-magic",
@@ -20387,7 +19961,7 @@
"--drep-keys",
0,
"--stuffed-utxo",
- "30000000"
+ "10000000"
],
"pools": [
"--argjson",
@@ -20413,9 +19987,9 @@
"with_proxy": false
},
"derived": {
- "dataset_induced_startup_delay_conservative": 12000,
- "dataset_induced_startup_delay_optimistic": 600,
- "dataset_measure": 30000000,
+ "dataset_induced_startup_delay_conservative": 4000,
+ "dataset_induced_startup_delay_optimistic": 200,
+ "dataset_measure": 10000000,
"default_value_tx_per_block_estimate": 172,
"default_value_tx_size_estimate": 381,
"delegators_effective": 3,
@@ -20424,13 +19998,13 @@
"generator_blocks_lower_bound": 2229,
"generator_duration": 2400,
"generator_tx_count": 333334,
- "genesis_future_offset": 600,
+ "genesis_future_offset": 200,
"shutdown_time": 2400,
"supply_delegated": 3000000000000000,
"supply_total": 3010000000000000,
"utxo_delegated": 0,
"utxo_generated": 666668,
- "utxo_stuffed": 30000000
+ "utxo_stuffed": 10000000
},
"era": "conway",
"generator": {
@@ -20448,7 +20022,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -20658,7 +20232,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -20681,7 +20255,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -20689,10 +20263,10 @@
},
"single_shot": true,
"slot_duration": 1,
- "utxo": 30000000,
+ "utxo": 10000000,
"utxo_keys": 1
},
- "name": "dish",
+ "name": "dish-10M",
"node": {
"heap_limit": null,
"rts_flags_override": [],
@@ -20711,13 +20285,12 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "dish-10M": {
+ "dish-10M-plutus": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 4000,
@@ -20731,14 +20304,14 @@
}
],
"filters": [
- "unitary"
+ "size-small"
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -20812,15 +20385,15 @@
"delegators_effective": 3,
"effective_epochs": 4,
"epoch_duration": 600,
- "generator_blocks_lower_bound": 2229,
+ "generator_blocks_lower_bound": 4,
"generator_duration": 2400,
- "generator_tx_count": 333334,
+ "generator_tx_count": 480,
"genesis_future_offset": 200,
"shutdown_time": 2400,
"supply_delegated": 3000000000000000,
"supply_total": 3010000000000000,
"utxo_delegated": 0,
- "utxo_generated": 666668,
+ "utxo_generated": 480,
"utxo_stuffed": 10000000
},
"era": "conway",
@@ -20828,18 +20401,21 @@
"add_tx_size": 100,
"epochs": 3,
"init_cooldown": 5,
- "inputs_per_tx": 2,
- "outputs_per_tx": 2,
+ "inputs_per_tx": 1,
+ "outputs_per_tx": 1,
"plutus": {
- "script": null,
- "type": null
+ "redeemer": {
+ "int": 1000000
+ },
+ "script": "Loop",
+ "type": "LimitSaturationLoop"
},
- "tps": 138.88888888888889,
- "tx_count": 333334,
- "tx_fee": 1000000
+ "tps": 0.2,
+ "tx_count": 480,
+ "tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -21049,7 +20625,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -21072,7 +20648,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -21083,7 +20659,7 @@
"utxo": 10000000,
"utxo_keys": 1
},
- "name": "dish-10M",
+ "name": "dish-10M-plutus",
"node": {
"heap_limit": null,
"rts_flags_override": [],
@@ -21102,16 +20678,15 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "dish-10M-plutus": {
+ "dish-plutus": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 4000,
+ "cluster_startup_overhead_s": 12000,
"filter_exprs": [
{
"contents": {
@@ -21126,10 +20701,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -21149,7 +20724,7 @@
"--gen-stake-delegs",
3,
"--num-stuffed-utxo",
- "10000000"
+ "30000000"
],
"createTestnetDataArgs": [
"--testnet-magic",
@@ -21169,7 +20744,7 @@
"--drep-keys",
0,
"--stuffed-utxo",
- "10000000"
+ "30000000"
],
"pools": [
"--argjson",
@@ -21195,9 +20770,9 @@
"with_proxy": false
},
"derived": {
- "dataset_induced_startup_delay_conservative": 4000,
- "dataset_induced_startup_delay_optimistic": 200,
- "dataset_measure": 10000000,
+ "dataset_induced_startup_delay_conservative": 12000,
+ "dataset_induced_startup_delay_optimistic": 600,
+ "dataset_measure": 30000000,
"default_value_tx_per_block_estimate": 172,
"default_value_tx_size_estimate": 381,
"delegators_effective": 3,
@@ -21206,13 +20781,13 @@
"generator_blocks_lower_bound": 4,
"generator_duration": 2400,
"generator_tx_count": 480,
- "genesis_future_offset": 200,
+ "genesis_future_offset": 600,
"shutdown_time": 2400,
"supply_delegated": 3000000000000000,
"supply_total": 3010000000000000,
"utxo_delegated": 0,
"utxo_generated": 480,
- "utxo_stuffed": 10000000
+ "utxo_stuffed": 30000000
},
"era": "conway",
"generator": {
@@ -21233,7 +20808,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -21443,7 +21018,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -21466,7 +21041,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -21474,10 +21049,10 @@
},
"single_shot": true,
"slot_duration": 1,
- "utxo": 10000000,
+ "utxo": 30000000,
"utxo_keys": 1
},
- "name": "dish-10M-plutus",
+ "name": "dish-plutus",
"node": {
"heap_limit": null,
"rts_flags_override": [],
@@ -21496,34 +21071,31 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "dish-plutus": {
+ "epoch-transition": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 12000,
+ "cluster_startup_overhead_s": 40,
"filter_exprs": [
{
"contents": {
- "contents": 2,
+ "contents": 1,
"tag": "BMinimumAdoptions"
},
"tag": "CBlock"
}
],
- "filters": [
- "size-small"
- ],
+ "filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -21537,33 +21109,33 @@
"--gen-genesis-keys",
0,
"--supply-delegated",
- "3000000000000000",
+ "2000000000000000",
"--gen-pools",
- 3,
+ 2,
"--gen-stake-delegs",
- 3,
+ 2,
"--num-stuffed-utxo",
- "30000000"
+ "000000"
],
"createTestnetDataArgs": [
"--testnet-magic",
42,
"--total-supply",
- "3010000000000000",
+ "2010000000000000",
"--utxo-keys",
1,
"--genesis-keys",
0,
"--delegated-supply",
- "3000000000000000",
+ "2000000000000000",
"--pools",
- 3,
+ 2,
"--stake-delegators",
- 3,
+ 2,
"--drep-keys",
0,
"--stuffed-utxo",
- "30000000"
+ "000000"
],
"pools": [
"--argjson",
@@ -21579,55 +21151,53 @@
"n_bft_hosts": 0,
"n_dense_hosts": 0,
"n_dense_pools": 0,
- "n_hosts": 3,
- "n_pool_hosts": 3,
- "n_pools": 3,
- "n_singular_hosts": 3,
- "n_singular_pools": 3,
+ "n_hosts": 2,
+ "n_pool_hosts": 2,
+ "n_pools": 2,
+ "n_singular_hosts": 2,
+ "n_singular_pools": 2,
"topology": "uni-circle",
"with_explorer": false,
"with_proxy": false
},
"derived": {
- "dataset_induced_startup_delay_conservative": 12000,
- "dataset_induced_startup_delay_optimistic": 600,
- "dataset_measure": 30000000,
+ "dataset_induced_startup_delay_conservative": 40,
+ "dataset_induced_startup_delay_optimistic": 40,
+ "dataset_measure": 0,
"default_value_tx_per_block_estimate": 172,
"default_value_tx_size_estimate": 381,
- "delegators_effective": 3,
- "effective_epochs": 4,
+ "delegators_effective": 2,
+ "effective_epochs": 2,
"epoch_duration": 600,
- "generator_blocks_lower_bound": 4,
- "generator_duration": 2400,
- "generator_tx_count": 480,
- "genesis_future_offset": 600,
- "shutdown_time": 2400,
- "supply_delegated": 3000000000000000,
- "supply_total": 3010000000000000,
+ "generator_blocks_lower_bound": 91,
+ "generator_duration": 900,
+ "generator_tx_count": 13500,
+ "genesis_future_offset": 40,
+ "shutdown_time": 900,
+ "supply_delegated": 2000000000000000,
+ "supply_total": 2010000000000000,
"utxo_delegated": 0,
- "utxo_generated": 480,
- "utxo_stuffed": 30000000
+ "utxo_generated": 27000,
+ "utxo_stuffed": 0
},
+ "desc": "2 low-footprint nodes, 15 minutes runtime",
"era": "conway",
"generator": {
"add_tx_size": 100,
"epochs": 3,
"init_cooldown": 5,
- "inputs_per_tx": 1,
- "outputs_per_tx": 1,
+ "inputs_per_tx": 2,
+ "outputs_per_tx": 2,
"plutus": {
- "redeemer": {
- "int": 1000000
- },
- "script": "Loop",
- "type": "LimitSaturationLoop"
+ "script": null,
+ "type": null
},
- "tps": 0.2,
- "tx_count": 480,
- "tx_fee": 1360000
+ "tps": 15,
+ "tx_count": 13500,
+ "tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -21837,7 +21407,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -21860,7 +21430,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -21868,15 +21438,15 @@
},
"single_shot": true,
"slot_duration": 1,
- "utxo": 30000000,
+ "utxo": 0,
"utxo_keys": 1
},
- "name": "dish-plutus",
+ "name": "epoch-transition",
"node": {
"heap_limit": null,
"rts_flags_override": [],
"shutdown_on_block_synced": null,
- "shutdown_on_slot_synced": 2400,
+ "shutdown_on_slot_synced": 900,
"ssd_directory": null,
"tracer": true,
"tracing_backend": "trace-dispatcher",
@@ -21890,13 +21460,12 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "epoch-transition": {
+ "fast": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 40,
@@ -21912,10 +21481,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -21987,20 +21556,20 @@
"default_value_tx_per_block_estimate": 172,
"default_value_tx_size_estimate": 381,
"delegators_effective": 2,
- "effective_epochs": 2,
+ "effective_epochs": 1,
"epoch_duration": 600,
- "generator_blocks_lower_bound": 91,
- "generator_duration": 900,
- "generator_tx_count": 13500,
+ "generator_blocks_lower_bound": 61,
+ "generator_duration": 600,
+ "generator_tx_count": 9000,
"genesis_future_offset": 40,
- "shutdown_time": 900,
+ "shutdown_time": null,
"supply_delegated": 2000000000000000,
"supply_total": 2010000000000000,
"utxo_delegated": 0,
- "utxo_generated": 27000,
+ "utxo_generated": 18000,
"utxo_stuffed": 0
},
- "desc": "2 low-footprint nodes, 15 minutes runtime",
+ "desc": "Stop as soon as we've seen a single block",
"era": "conway",
"generator": {
"add_tx_size": 100,
@@ -22013,11 +21582,11 @@
"type": null
},
"tps": 15,
- "tx_count": 13500,
+ "tx_count": 9000,
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -22227,7 +21796,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -22250,7 +21819,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -22261,12 +21830,12 @@
"utxo": 0,
"utxo_keys": 1
},
- "name": "epoch-transition",
+ "name": "fast",
"node": {
"heap_limit": null,
"rts_flags_override": [],
- "shutdown_on_block_synced": null,
- "shutdown_on_slot_synced": 900,
+ "shutdown_on_block_synced": 1,
+ "shutdown_on_slot_synced": null,
"ssd_directory": null,
"tracer": true,
"tracing_backend": "trace-dispatcher",
@@ -22280,20 +21849,19 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
"workloads": []
},
- "fast": {
+ "fast-nomadperf": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 40,
"filter_exprs": [
{
"contents": {
- "contents": 1,
+ "contents": 51,
"tag": "BMinimumAdoptions"
},
"tag": "CBlock"
@@ -22302,10 +21870,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -22319,11 +21887,11 @@
"--gen-genesis-keys",
0,
"--supply-delegated",
- "2000000000000000",
+ "52000000000000000",
"--gen-pools",
- 2,
+ 52,
"--gen-stake-delegs",
- 2,
+ 52,
"--num-stuffed-utxo",
"000000"
],
@@ -22331,17 +21899,17 @@
"--testnet-magic",
42,
"--total-supply",
- "2010000000000000",
+ "52010000000000000",
"--utxo-keys",
1,
"--genesis-keys",
0,
"--delegated-supply",
- "2000000000000000",
+ "52000000000000000",
"--pools",
- 2,
+ 52,
"--stake-delegators",
- 2,
+ 52,
"--drep-keys",
0,
"--stuffed-utxo",
@@ -22353,39 +21921,73 @@
"1000000000000000"
]
},
+ "cluster": {
+ "aws": {
+ "instance_type": {
+ "explorer": "m5.4xlarge",
+ "producer": "c5d.2xlarge"
+ },
+ "use_public_routing": true
+ },
+ "keep_running": true,
+ "minimun_storage": {
+ "explorer": 14155776,
+ "producer": 12582912
+ },
+ "nomad": {
+ "class": "perf",
+ "fetch_logs_ssh": true,
+ "host_volumes": null,
+ "namespace": "perf",
+ "resources": {
+ "explorer": {
+ "cores": 16,
+ "memory": 32000,
+ "memory_max": 64000
+ },
+ "producer": {
+ "cores": 8,
+ "memory": 15400,
+ "memory_max": 16000
+ }
+ }
+ }
+ },
"composition": {
"dense_pool_density": 1,
"locations": [
- "loopback"
+ "eu-central-1",
+ "us-east-1",
+ "ap-southeast-2"
],
"n_bft_hosts": 0,
"n_dense_hosts": 0,
"n_dense_pools": 0,
- "n_hosts": 2,
- "n_pool_hosts": 2,
- "n_pools": 2,
- "n_singular_hosts": 2,
- "n_singular_pools": 2,
- "topology": "uni-circle",
- "with_explorer": false,
+ "n_hosts": 52,
+ "n_pool_hosts": 52,
+ "n_pools": 52,
+ "n_singular_hosts": 52,
+ "n_singular_pools": 52,
+ "topology": "torus-dense",
+ "with_explorer": true,
"with_proxy": false
},
"derived": {
"dataset_induced_startup_delay_conservative": 40,
"dataset_induced_startup_delay_optimistic": 40,
"dataset_measure": 0,
- "default_value_tx_per_block_estimate": 172,
+ "default_value_tx_per_block_estimate": 236,
"default_value_tx_size_estimate": 381,
- "delegators_effective": 2,
+ "delegators_effective": 52,
"effective_epochs": 1,
"epoch_duration": 600,
- "generator_blocks_lower_bound": 61,
+ "generator_blocks_lower_bound": 44,
"generator_duration": 600,
"generator_tx_count": 9000,
"genesis_future_offset": 40,
"shutdown_time": null,
- "supply_delegated": 2000000000000000,
- "supply_total": 2010000000000000,
+ "supply_delegated": 52000000000000000,
+ "supply_total": 52010000000000000,
"utxo_delegated": 0,
"utxo_generated": 18000,
"utxo_stuffed": 0
@@ -22407,431 +22009,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
- "alonzo": {
- "collateralPercentage": 150,
- "costModels": {
- "PlutusV1": {
- "addInteger-cpu-arguments-intercept": 197209,
- "addInteger-cpu-arguments-slope": 0,
- "addInteger-memory-arguments-intercept": 1,
- "addInteger-memory-arguments-slope": 1,
- "appendByteString-cpu-arguments-intercept": 396231,
- "appendByteString-cpu-arguments-slope": 621,
- "appendByteString-memory-arguments-intercept": 0,
- "appendByteString-memory-arguments-slope": 1,
- "appendString-cpu-arguments-intercept": 150000,
- "appendString-cpu-arguments-slope": 1000,
- "appendString-memory-arguments-intercept": 0,
- "appendString-memory-arguments-slope": 1,
- "bData-cpu-arguments": 150000,
- "bData-memory-arguments": 32,
- "blake2b-cpu-arguments-intercept": 2477736,
- "blake2b-cpu-arguments-slope": 29175,
- "blake2b-memory-arguments": 4,
- "cekApplyCost-exBudgetCPU": 29773,
- "cekApplyCost-exBudgetMemory": 100,
- "cekBuiltinCost-exBudgetCPU": 29773,
- "cekBuiltinCost-exBudgetMemory": 100,
- "cekConstCost-exBudgetCPU": 29773,
- "cekConstCost-exBudgetMemory": 100,
- "cekDelayCost-exBudgetCPU": 29773,
- "cekDelayCost-exBudgetMemory": 100,
- "cekForceCost-exBudgetCPU": 29773,
- "cekForceCost-exBudgetMemory": 100,
- "cekLamCost-exBudgetCPU": 29773,
- "cekLamCost-exBudgetMemory": 100,
- "cekStartupCost-exBudgetCPU": 100,
- "cekStartupCost-exBudgetMemory": 100,
- "cekVarCost-exBudgetCPU": 29773,
- "cekVarCost-exBudgetMemory": 100,
- "chooseData-cpu-arguments": 150000,
- "chooseData-memory-arguments": 32,
- "chooseList-cpu-arguments": 150000,
- "chooseList-memory-arguments": 32,
- "chooseUnit-cpu-arguments": 150000,
- "chooseUnit-memory-arguments": 32,
- "consByteString-cpu-arguments-intercept": 150000,
- "consByteString-cpu-arguments-slope": 1000,
- "consByteString-memory-arguments-intercept": 0,
- "consByteString-memory-arguments-slope": 1,
- "constrData-cpu-arguments": 150000,
- "constrData-memory-arguments": 32,
- "decodeUtf8-cpu-arguments-intercept": 150000,
- "decodeUtf8-cpu-arguments-slope": 1000,
- "decodeUtf8-memory-arguments-intercept": 0,
- "decodeUtf8-memory-arguments-slope": 8,
- "divideInteger-cpu-arguments-constant": 148000,
- "divideInteger-cpu-arguments-model-arguments-intercept": 425507,
- "divideInteger-cpu-arguments-model-arguments-slope": 118,
- "divideInteger-memory-arguments-intercept": 0,
- "divideInteger-memory-arguments-minimum": 1,
- "divideInteger-memory-arguments-slope": 1,
- "encodeUtf8-cpu-arguments-intercept": 150000,
- "encodeUtf8-cpu-arguments-slope": 1000,
- "encodeUtf8-memory-arguments-intercept": 0,
- "encodeUtf8-memory-arguments-slope": 8,
- "equalsByteString-cpu-arguments-constant": 150000,
- "equalsByteString-cpu-arguments-intercept": 112536,
- "equalsByteString-cpu-arguments-slope": 247,
- "equalsByteString-memory-arguments": 1,
- "equalsData-cpu-arguments-intercept": 150000,
- "equalsData-cpu-arguments-slope": 10000,
- "equalsData-memory-arguments": 1,
- "equalsInteger-cpu-arguments-intercept": 136542,
- "equalsInteger-cpu-arguments-slope": 1326,
- "equalsInteger-memory-arguments": 1,
- "equalsString-cpu-arguments-constant": 1000,
- "equalsString-cpu-arguments-intercept": 150000,
- "equalsString-cpu-arguments-slope": 1000,
- "equalsString-memory-arguments": 1,
- "fstPair-cpu-arguments": 150000,
- "fstPair-memory-arguments": 32,
- "headList-cpu-arguments": 150000,
- "headList-memory-arguments": 32,
- "iData-cpu-arguments": 150000,
- "iData-memory-arguments": 32,
- "ifThenElse-cpu-arguments": 1,
- "ifThenElse-memory-arguments": 1,
- "indexByteString-cpu-arguments": 150000,
- "indexByteString-memory-arguments": 1,
- "lengthOfByteString-cpu-arguments": 150000,
- "lengthOfByteString-memory-arguments": 4,
- "lessThanByteString-cpu-arguments-intercept": 103599,
- "lessThanByteString-cpu-arguments-slope": 248,
- "lessThanByteString-memory-arguments": 1,
- "lessThanEqualsByteString-cpu-arguments-intercept": 103599,
- "lessThanEqualsByteString-cpu-arguments-slope": 248,
- "lessThanEqualsByteString-memory-arguments": 1,
- "lessThanEqualsInteger-cpu-arguments-intercept": 145276,
- "lessThanEqualsInteger-cpu-arguments-slope": 1366,
- "lessThanEqualsInteger-memory-arguments": 1,
- "lessThanInteger-cpu-arguments-intercept": 179690,
- "lessThanInteger-cpu-arguments-slope": 497,
- "lessThanInteger-memory-arguments": 1,
- "listData-cpu-arguments": 150000,
- "listData-memory-arguments": 32,
- "mapData-cpu-arguments": 150000,
- "mapData-memory-arguments": 32,
- "mkCons-cpu-arguments": 150000,
- "mkCons-memory-arguments": 32,
- "mkNilData-cpu-arguments": 150000,
- "mkNilData-memory-arguments": 32,
- "mkNilPairData-cpu-arguments": 150000,
- "mkNilPairData-memory-arguments": 32,
- "mkPairData-cpu-arguments": 150000,
- "mkPairData-memory-arguments": 32,
- "modInteger-cpu-arguments-constant": 148000,
- "modInteger-cpu-arguments-model-arguments-intercept": 425507,
- "modInteger-cpu-arguments-model-arguments-slope": 118,
- "modInteger-memory-arguments-intercept": 0,
- "modInteger-memory-arguments-minimum": 1,
- "modInteger-memory-arguments-slope": 1,
- "multiplyInteger-cpu-arguments-intercept": 61516,
- "multiplyInteger-cpu-arguments-slope": 11218,
- "multiplyInteger-memory-arguments-intercept": 0,
- "multiplyInteger-memory-arguments-slope": 1,
- "nullList-cpu-arguments": 150000,
- "nullList-memory-arguments": 32,
- "quotientInteger-cpu-arguments-constant": 148000,
- "quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
- "quotientInteger-cpu-arguments-model-arguments-slope": 118,
- "quotientInteger-memory-arguments-intercept": 0,
- "quotientInteger-memory-arguments-minimum": 1,
- "quotientInteger-memory-arguments-slope": 1,
- "remainderInteger-cpu-arguments-constant": 148000,
- "remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
- "remainderInteger-cpu-arguments-model-arguments-slope": 118,
- "remainderInteger-memory-arguments-intercept": 0,
- "remainderInteger-memory-arguments-minimum": 1,
- "remainderInteger-memory-arguments-slope": 1,
- "sha2_256-cpu-arguments-intercept": 2477736,
- "sha2_256-cpu-arguments-slope": 29175,
- "sha2_256-memory-arguments": 4,
- "sha3_256-cpu-arguments-intercept": 0,
- "sha3_256-cpu-arguments-slope": 82363,
- "sha3_256-memory-arguments": 4,
- "sliceByteString-cpu-arguments-intercept": 150000,
- "sliceByteString-cpu-arguments-slope": 5000,
- "sliceByteString-memory-arguments-intercept": 0,
- "sliceByteString-memory-arguments-slope": 1,
- "sndPair-cpu-arguments": 150000,
- "sndPair-memory-arguments": 32,
- "subtractInteger-cpu-arguments-intercept": 197209,
- "subtractInteger-cpu-arguments-slope": 0,
- "subtractInteger-memory-arguments-intercept": 1,
- "subtractInteger-memory-arguments-slope": 1,
- "tailList-cpu-arguments": 150000,
- "tailList-memory-arguments": 32,
- "trace-cpu-arguments": 150000,
- "trace-memory-arguments": 32,
- "unBData-cpu-arguments": 150000,
- "unBData-memory-arguments": 32,
- "unConstrData-cpu-arguments": 150000,
- "unConstrData-memory-arguments": 32,
- "unIData-cpu-arguments": 150000,
- "unIData-memory-arguments": 32,
- "unListData-cpu-arguments": 150000,
- "unListData-memory-arguments": 32,
- "unMapData-cpu-arguments": 150000,
- "unMapData-memory-arguments": 32,
- "verifySignature-cpu-arguments-intercept": 3345831,
- "verifySignature-cpu-arguments-slope": 1,
- "verifySignature-memory-arguments": 1
- }
- },
- "executionPrices": {
- "prMem": {
- "denominator": 10000,
- "numerator": 577
- },
- "prSteps": {
- "denominator": 10000000,
- "numerator": 721
- }
- },
- "lovelacePerUTxOWord": 34482,
- "maxBlockExUnits": {
- "exUnitsMem": 50000000,
- "exUnitsSteps": 40000000000
- },
- "maxCollateralInputs": 3,
- "maxTxExUnits": {
- "exUnitsMem": 10000000,
- "exUnitsSteps": 10000000000
- },
- "maxValueSize": 5000
- },
- "conway": null,
- "delegator_coin": 0,
- "delegators": 0,
- "dreps": 0,
- "epoch_length": 600,
- "extra_future_offset": 0,
- "funds_balance": 10000000000000,
- "max_block_size": null,
- "network_magic": 42,
- "parameter_k": 3,
- "per_pool_balance": 1000000000000000,
- "pool_coin": 1000000000000000,
- "pparamsEpoch": 300,
- "pparamsOverlays": [],
- "shelley": {
- "activeSlotsCoeff": 5.0e-2,
- "epochLength": 600,
- "protocolParams": {
- "a0": 0.3,
- "decentralisationParam": 0,
- "eMax": 18,
- "extraEntropy": {
- "tag": "NeutralNonce"
- },
- "keyDeposit": 2000000,
- "maxBlockBodySize": 65536,
- "maxBlockHeaderSize": 1100,
- "maxTxSize": 16384,
- "minFeeA": 44,
- "minFeeB": 155381,
- "minPoolCost": 340000000,
- "minUTxOValue": 0,
- "nOpt": 500,
- "poolDeposit": 500000000,
- "protocolVersion": {
- "major": 6,
- "minor": 0
- },
- "rho": 3.0e-3,
- "tau": 0.2
- },
- "securityParam": 3,
- "slotLength": 1
- },
- "single_shot": true,
- "slot_duration": 1,
- "utxo": 0,
- "utxo_keys": 1
- },
- "name": "fast",
- "node": {
- "heap_limit": null,
- "rts_flags_override": [],
- "shutdown_on_block_synced": 1,
- "shutdown_on_slot_synced": null,
- "ssd_directory": null,
- "tracer": true,
- "tracing_backend": "trace-dispatcher",
- "utxo_lmdb": false,
- "utxo_lsmt": false,
- "verbatim": {
- "EnableP2P": true
- }
- },
- "overlay": {},
- "scenario": "fixed-loaded",
- "tracer": {
- "ekg": false,
- "rtview": false,
- "timeseries": false,
- "withresources": false
- },
- "workloads": []
- },
- "fast-nomadperf": {
- "analysis": {
- "cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 40,
- "filter_exprs": [
- {
- "contents": {
- "contents": 51,
- "tag": "BMinimumAdoptions"
- },
- "tag": "CBlock"
- }
- ],
- "filters": [],
- "finish_patience": 21,
- "last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
- "silence_since_last_block_s": 120,
- "start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
- "type": "standard"
- },
- "cli_args": {
- "createStakedArgs": [
- "--testnet-magic",
- 42,
- "--supply",
- "10000000000000",
- "--gen-utxo-keys",
- 1,
- "--gen-genesis-keys",
- 0,
- "--supply-delegated",
- "52000000000000000",
- "--gen-pools",
- 52,
- "--gen-stake-delegs",
- 52,
- "--num-stuffed-utxo",
- "000000"
- ],
- "createTestnetDataArgs": [
- "--testnet-magic",
- 42,
- "--total-supply",
- "52010000000000000",
- "--utxo-keys",
- 1,
- "--genesis-keys",
- 0,
- "--delegated-supply",
- "52000000000000000",
- "--pools",
- 52,
- "--stake-delegators",
- 52,
- "--drep-keys",
- 0,
- "--stuffed-utxo",
- "000000"
- ],
- "pools": [
- "--argjson",
- "initialPoolCoin",
- "1000000000000000"
- ]
- },
- "cluster": {
- "aws": {
- "instance_type": {
- "explorer": "m5.4xlarge",
- "producer": "c5d.2xlarge"
- },
- "use_public_routing": true
- },
- "keep_running": true,
- "minimun_storage": {
- "explorer": 14155776,
- "producer": 12582912
- },
- "nomad": {
- "class": "perf",
- "fetch_logs_ssh": true,
- "host_volumes": null,
- "namespace": "perf",
- "resources": {
- "explorer": {
- "cores": 16,
- "memory": 32000,
- "memory_max": 64000
- },
- "producer": {
- "cores": 8,
- "memory": 15400,
- "memory_max": 16000
- }
- }
- }
- },
- "composition": {
- "dense_pool_density": 1,
- "locations": [
- "eu-central-1",
- "us-east-1",
- "ap-southeast-2"
- ],
- "n_bft_hosts": 0,
- "n_dense_hosts": 0,
- "n_dense_pools": 0,
- "n_hosts": 52,
- "n_pool_hosts": 52,
- "n_pools": 52,
- "n_singular_hosts": 52,
- "n_singular_pools": 52,
- "topology": "torus-dense",
- "with_explorer": true,
- "with_proxy": false
- },
- "derived": {
- "dataset_induced_startup_delay_conservative": 40,
- "dataset_induced_startup_delay_optimistic": 40,
- "dataset_measure": 0,
- "default_value_tx_per_block_estimate": 236,
- "default_value_tx_size_estimate": 381,
- "delegators_effective": 52,
- "effective_epochs": 1,
- "epoch_duration": 600,
- "generator_blocks_lower_bound": 44,
- "generator_duration": 600,
- "generator_tx_count": 9000,
- "genesis_future_offset": 40,
- "shutdown_time": null,
- "supply_delegated": 52000000000000000,
- "supply_total": 52010000000000000,
- "utxo_delegated": 0,
- "utxo_generated": 18000,
- "utxo_stuffed": 0
- },
- "desc": "Stop as soon as we've seen a single block",
- "era": "conway",
- "generator": {
- "add_tx_size": 100,
- "epochs": 3,
- "init_cooldown": 5,
- "inputs_per_tx": 2,
- "outputs_per_tx": 2,
- "plutus": {
- "script": null,
- "type": null
- },
- "tps": 15,
- "tx_count": 9000,
- "tx_fee": 1000000
- },
- "genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -23220,7 +22398,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -23243,7 +22421,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -23273,7 +22451,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -23295,10 +22472,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -23456,7 +22633,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -23845,7 +23022,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -23868,7 +23045,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -23898,7 +23075,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -23920,10 +23096,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -24025,7 +23201,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -24235,7 +23411,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -24258,7 +23434,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -24288,7 +23464,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -24312,10 +23487,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -24420,7 +23595,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -24630,7 +23805,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -24653,7 +23828,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -24683,7 +23858,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -24705,10 +23879,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -24810,7 +23984,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -25020,7 +24194,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -25043,7 +24217,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -25073,7 +24247,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -25095,10 +24268,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -25200,7 +24373,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -25410,7 +24583,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -25433,7 +24606,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -25463,7 +24636,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -25487,10 +24659,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -25591,7 +24763,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -25801,7 +24973,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -25824,7 +24996,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -25854,7 +25026,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -25878,10 +25049,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -25982,7 +25153,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -26625,7 +25796,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -26648,7 +25819,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -26678,7 +25849,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -26702,10 +25872,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -26806,7 +25976,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -27016,7 +26186,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -27039,7 +26209,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -27069,7 +26239,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -27093,10 +26262,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -27200,7 +26369,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -27410,7 +26579,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -27433,7 +26602,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -27463,7 +26632,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -27487,10 +26655,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -27594,7 +26762,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -27983,7 +27151,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -28006,7 +27174,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -28036,7 +27204,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -28060,10 +27227,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -28164,7 +27331,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -28374,7 +27541,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -28397,7 +27564,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -28427,7 +27594,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -28451,10 +27617,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -28555,7 +27721,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -29198,7 +28364,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -29221,7 +28387,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -29251,7 +28417,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -29275,10 +28440,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -29379,7 +28544,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -30022,7 +29187,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -30045,7 +29210,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -30077,7 +29242,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -30101,10 +29265,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -30205,7 +29369,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -30848,7 +30012,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -30871,7 +30035,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -30903,7 +30067,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -30927,10 +30090,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -31031,7 +30194,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -31674,7 +30837,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -31697,7 +30860,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -31730,7 +30893,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -31754,10 +30916,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -31858,7 +31020,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -32501,7 +31663,7 @@
"blocksize64k"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -32524,7 +31686,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -32558,7 +31720,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -32582,10 +31743,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -32686,7 +31847,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -32896,7 +32057,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -32919,7 +32080,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -32949,7 +32110,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -32973,10 +32133,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -33080,7 +32240,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -33290,7 +32450,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -33313,7 +32473,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -33343,7 +32503,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -33367,10 +32526,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -33471,7 +32630,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -33681,7 +32840,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -33704,7 +32863,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -33736,7 +32895,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -33760,10 +32918,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -33864,7 +33022,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -34074,7 +33232,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -34097,7 +33255,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -34130,7 +33288,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -34154,10 +33311,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -34258,7 +33415,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -34468,7 +33625,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -34491,7 +33648,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -34523,7 +33680,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -34547,10 +33703,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -34651,7 +33807,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -34861,7 +34017,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -34884,7 +34040,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -34917,7 +34073,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -34941,10 +34096,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -35045,7 +34200,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -35255,7 +34410,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -35278,7 +34433,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -35310,7 +34465,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -35334,10 +34488,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -35438,7 +34592,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -35648,7 +34802,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -35671,7 +34825,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -35703,7 +34857,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -35727,10 +34880,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -35831,7 +34984,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -36220,7 +35373,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -36243,7 +35396,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -36273,7 +35426,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -36297,10 +35449,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -36401,7 +35553,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -36790,7 +35942,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -36813,7 +35965,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -36843,7 +35995,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -36867,10 +36018,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -36971,7 +36122,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -37360,7 +36511,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -37383,7 +36534,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -37413,7 +36564,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -37437,10 +36587,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -37541,7 +36691,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -37930,7 +37080,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -37953,7 +37103,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -37983,7 +37133,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -38007,10 +37156,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -38111,7 +37260,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -38500,7 +37649,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -38523,7 +37672,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -38553,7 +37702,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -38577,10 +37725,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -38682,7 +37830,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -38892,7 +38040,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -38915,7 +38063,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -38945,7 +38093,6 @@
"scenario": "idle",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -38969,10 +38116,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -39073,7 +38220,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -39283,7 +38430,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -39306,7 +38453,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -39336,7 +38483,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -39360,10 +38506,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -39464,7 +38610,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -39674,7 +38820,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -39697,7 +38843,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -39727,7 +38873,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -39751,10 +38896,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -39855,7 +39000,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -40065,7 +39210,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -40088,7 +39233,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -40118,7 +39263,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -40140,10 +39284,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -40279,7 +39423,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -40668,7 +39812,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -40691,7 +39835,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -40721,7 +39865,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -40754,10 +39897,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -40915,7 +40058,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -41304,7 +40447,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -41327,7 +40470,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -41357,7 +40500,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -41393,10 +40535,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -41515,7 +40657,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -42156,7 +41298,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -42179,7 +41321,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -42209,7 +41351,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -42234,10 +41375,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -42356,7 +41497,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -42999,7 +42140,7 @@
"budget/block/steps/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -43022,7 +42163,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -43052,7 +42193,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -43077,10 +42217,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -43182,7 +42322,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -43823,7 +42963,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -43846,7 +42986,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -43876,7 +43016,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -43901,10 +43040,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -44006,7 +43145,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -44647,7 +43786,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -44670,7 +43809,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -44700,7 +43839,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -44724,10 +43862,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -44831,7 +43969,7 @@
"tx_fee": 1380000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -45220,7 +44358,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -45243,7 +44381,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -45273,7 +44411,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -45298,10 +44435,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -45440,7 +44577,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -45829,7 +44966,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -45852,7 +44989,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -45882,7 +45019,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -45907,10 +45043,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -46049,7 +45185,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -46438,7 +45574,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -46461,7 +45597,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -46491,7 +45627,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -46516,10 +45651,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -46658,7 +45793,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -47047,7 +46182,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -47070,7 +46205,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -47100,7 +46235,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -47125,10 +46259,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -47267,7 +46401,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -47656,7 +46790,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -47679,7 +46813,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -47709,7 +46843,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -47733,10 +46866,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -47854,7 +46987,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -48243,7 +47376,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -48266,7 +47399,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -48296,7 +47429,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -48321,10 +47453,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -48477,7 +47609,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -48866,7 +47998,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -48889,7 +48021,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -48919,7 +48051,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -48943,10 +48074,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -49064,7 +48195,7 @@
"tx_fee": 1004000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -49453,7 +48584,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -49476,7 +48607,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -49506,7 +48637,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -49531,10 +48661,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -49687,7 +48817,7 @@
"tx_fee": 1004000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -50076,7 +49206,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -50099,7 +49229,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -50129,7 +49259,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -50154,10 +49283,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -50305,7 +49434,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -50946,7 +50075,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -50969,7 +50098,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -50999,7 +50128,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -51024,10 +50152,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -51175,7 +50303,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -51816,7 +50944,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -51839,7 +50967,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -51869,7 +50997,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -51894,10 +51021,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -52036,7 +51163,7 @@
"tx_fee": 1892175
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -52679,7 +51806,7 @@
"budget/block/memory/oneandahalf"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -52702,7 +51829,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -52746,7 +51873,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -52771,10 +51897,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -52913,7 +52039,7 @@
"tx_fee": 2463246
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -53556,7 +52682,7 @@
"budget/block/memory/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -53579,7 +52705,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -53623,7 +52749,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -53648,10 +52773,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -53790,7 +52915,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -54431,7 +53556,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -54454,7 +53579,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -54484,7 +53609,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -54509,10 +53633,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -54651,7 +53775,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -55292,7 +54416,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -55315,7 +54439,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -55348,7 +54472,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -55373,10 +54496,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -55515,7 +54638,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -56181,7 +55304,7 @@
"voting"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -56204,7 +55327,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -56234,7 +55357,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -56274,10 +55396,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -56416,7 +55538,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -57082,7 +56204,7 @@
"voting"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -57105,7 +56227,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -57135,7 +56257,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -57174,10 +56295,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -57316,7 +56437,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -57982,7 +57103,7 @@
"voting"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -58005,7 +57126,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -58035,7 +57156,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -58075,10 +57195,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -58217,7 +57337,7 @@
"tx_fee": 1412000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -58606,7 +57726,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -58629,7 +57749,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -58659,7 +57779,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -58684,10 +57803,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -58792,7 +57911,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -59433,7 +58552,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -59456,7 +58575,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -59486,7 +58605,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -59511,10 +58629,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -59619,7 +58737,7 @@
"tx_fee": 2463246
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -60262,7 +59380,7 @@
"budget/block/memory/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -60285,7 +59403,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -60329,7 +59447,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -60354,10 +59471,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -60476,7 +59593,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -61117,7 +60234,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -61140,7 +60257,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -61170,7 +60287,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -61195,10 +60311,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -61317,7 +60433,7 @@
"tx_fee": 1008000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -61960,7 +61076,7 @@
"budget/block/steps/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -61983,7 +61099,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -62013,7 +61129,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -62038,10 +61153,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -62160,7 +61275,7 @@
"tx_fee": 1004000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -62801,7 +61916,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -62824,7 +61939,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -62854,7 +61969,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -62879,10 +61993,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -63001,7 +62115,7 @@
"tx_fee": 1004000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -63644,7 +62758,7 @@
"budget/block/steps/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -63667,7 +62781,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -63697,7 +62811,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -63721,10 +62834,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -63850,7 +62963,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -64491,7 +63604,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -64514,7 +63627,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -64544,7 +63657,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -64568,10 +63680,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -64676,7 +63788,7 @@
"tx_fee": 1360000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -65317,7 +64429,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -65340,7 +64452,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -65370,7 +64482,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -65394,10 +64505,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -65510,7 +64621,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -66151,7 +65262,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -66174,7 +65285,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -66204,7 +65315,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -66229,10 +65339,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -66392,7 +65502,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -67033,7 +66143,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -67056,7 +66166,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -67086,7 +66196,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -67111,10 +66220,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -67274,7 +66383,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -67917,7 +67026,7 @@
"budget/block/steps/oneandahalf"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -67940,7 +67049,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -67970,7 +67079,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -67995,10 +67103,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -68158,7 +67266,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -68801,7 +67909,7 @@
"budget/block/steps/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -68824,7 +67932,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -68854,7 +67962,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -68879,10 +67986,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -69029,7 +68136,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -69670,7 +68777,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -69693,7 +68800,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -69723,7 +68830,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -69748,10 +68854,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -69898,7 +69004,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -70541,7 +69647,7 @@
"budget/block/steps/oneandahalf"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -70564,7 +69670,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -70594,7 +69700,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -70619,10 +69724,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -70769,7 +69874,7 @@
"tx_fee": 940000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -71412,7 +70517,7 @@
"budget/block/steps/double"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -71435,7 +70540,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -71465,7 +70570,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -71490,10 +70594,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -71632,7 +70736,7 @@
"tx_fee": 1412000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -72273,7 +71377,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -72296,7 +71400,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -72326,7 +71430,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -72348,400 +71451,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
- "silence_since_last_block_s": 120,
- "start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
- "type": "standard"
- },
- "cli_args": {
- "createStakedArgs": [
- "--testnet-magic",
- 42,
- "--supply",
- "10000000000000",
- "--gen-utxo-keys",
- 1,
- "--gen-genesis-keys",
- 0,
- "--supply-delegated",
- "6000000000000000",
- "--gen-pools",
- 6,
- "--gen-stake-delegs",
- 6,
- "--num-stuffed-utxo",
- "000000"
- ],
- "createTestnetDataArgs": [
- "--testnet-magic",
- 42,
- "--total-supply",
- "6010000000000000",
- "--utxo-keys",
- 1,
- "--genesis-keys",
- 0,
- "--delegated-supply",
- "6000000000000000",
- "--pools",
- 6,
- "--stake-delegators",
- 6,
- "--drep-keys",
- 0,
- "--stuffed-utxo",
- "000000"
- ],
- "pools": [
- "--argjson",
- "initialPoolCoin",
- "1000000000000000"
- ]
- },
- "composition": {
- "dense_pool_density": 1,
- "locations": [
- "loopback"
- ],
- "n_bft_hosts": 0,
- "n_dense_hosts": 0,
- "n_dense_pools": 0,
- "n_hosts": 6,
- "n_pool_hosts": 6,
- "n_pools": 6,
- "n_singular_hosts": 6,
- "n_singular_pools": 6,
- "topology": "torus",
- "with_explorer": false,
- "with_proxy": false
- },
- "derived": {
- "dataset_induced_startup_delay_conservative": 40,
- "dataset_induced_startup_delay_optimistic": 40,
- "dataset_measure": 0,
- "default_value_tx_per_block_estimate": 172,
- "default_value_tx_size_estimate": 381,
- "delegators_effective": 6,
- "effective_epochs": 1,
- "epoch_duration": 600,
- "generator_blocks_lower_bound": 61,
- "generator_duration": 600,
- "generator_tx_count": 9000,
- "genesis_future_offset": 40,
- "shutdown_time": null,
- "supply_delegated": 6000000000000000,
- "supply_total": 6010000000000000,
- "utxo_delegated": 0,
- "utxo_generated": 18000,
- "utxo_stuffed": 0
- },
- "desc": "6 low-footprint nodes in a torus topology, 5 minutes runtime",
- "era": "conway",
- "generator": {
- "add_tx_size": 100,
- "epochs": 3,
- "init_cooldown": 5,
- "inputs_per_tx": 2,
- "outputs_per_tx": 2,
- "plutus": {
- "script": null,
- "type": null
- },
- "tps": 15,
- "tx_count": 9000,
- "tx_fee": 1000000
- },
- "genesis": {
- "active_slots_coeff": 5.0e-2,
- "alonzo": {
- "collateralPercentage": 150,
- "costModels": {
- "PlutusV1": {
- "addInteger-cpu-arguments-intercept": 197209,
- "addInteger-cpu-arguments-slope": 0,
- "addInteger-memory-arguments-intercept": 1,
- "addInteger-memory-arguments-slope": 1,
- "appendByteString-cpu-arguments-intercept": 396231,
- "appendByteString-cpu-arguments-slope": 621,
- "appendByteString-memory-arguments-intercept": 0,
- "appendByteString-memory-arguments-slope": 1,
- "appendString-cpu-arguments-intercept": 150000,
- "appendString-cpu-arguments-slope": 1000,
- "appendString-memory-arguments-intercept": 0,
- "appendString-memory-arguments-slope": 1,
- "bData-cpu-arguments": 150000,
- "bData-memory-arguments": 32,
- "blake2b-cpu-arguments-intercept": 2477736,
- "blake2b-cpu-arguments-slope": 29175,
- "blake2b-memory-arguments": 4,
- "cekApplyCost-exBudgetCPU": 29773,
- "cekApplyCost-exBudgetMemory": 100,
- "cekBuiltinCost-exBudgetCPU": 29773,
- "cekBuiltinCost-exBudgetMemory": 100,
- "cekConstCost-exBudgetCPU": 29773,
- "cekConstCost-exBudgetMemory": 100,
- "cekDelayCost-exBudgetCPU": 29773,
- "cekDelayCost-exBudgetMemory": 100,
- "cekForceCost-exBudgetCPU": 29773,
- "cekForceCost-exBudgetMemory": 100,
- "cekLamCost-exBudgetCPU": 29773,
- "cekLamCost-exBudgetMemory": 100,
- "cekStartupCost-exBudgetCPU": 100,
- "cekStartupCost-exBudgetMemory": 100,
- "cekVarCost-exBudgetCPU": 29773,
- "cekVarCost-exBudgetMemory": 100,
- "chooseData-cpu-arguments": 150000,
- "chooseData-memory-arguments": 32,
- "chooseList-cpu-arguments": 150000,
- "chooseList-memory-arguments": 32,
- "chooseUnit-cpu-arguments": 150000,
- "chooseUnit-memory-arguments": 32,
- "consByteString-cpu-arguments-intercept": 150000,
- "consByteString-cpu-arguments-slope": 1000,
- "consByteString-memory-arguments-intercept": 0,
- "consByteString-memory-arguments-slope": 1,
- "constrData-cpu-arguments": 150000,
- "constrData-memory-arguments": 32,
- "decodeUtf8-cpu-arguments-intercept": 150000,
- "decodeUtf8-cpu-arguments-slope": 1000,
- "decodeUtf8-memory-arguments-intercept": 0,
- "decodeUtf8-memory-arguments-slope": 8,
- "divideInteger-cpu-arguments-constant": 148000,
- "divideInteger-cpu-arguments-model-arguments-intercept": 425507,
- "divideInteger-cpu-arguments-model-arguments-slope": 118,
- "divideInteger-memory-arguments-intercept": 0,
- "divideInteger-memory-arguments-minimum": 1,
- "divideInteger-memory-arguments-slope": 1,
- "encodeUtf8-cpu-arguments-intercept": 150000,
- "encodeUtf8-cpu-arguments-slope": 1000,
- "encodeUtf8-memory-arguments-intercept": 0,
- "encodeUtf8-memory-arguments-slope": 8,
- "equalsByteString-cpu-arguments-constant": 150000,
- "equalsByteString-cpu-arguments-intercept": 112536,
- "equalsByteString-cpu-arguments-slope": 247,
- "equalsByteString-memory-arguments": 1,
- "equalsData-cpu-arguments-intercept": 150000,
- "equalsData-cpu-arguments-slope": 10000,
- "equalsData-memory-arguments": 1,
- "equalsInteger-cpu-arguments-intercept": 136542,
- "equalsInteger-cpu-arguments-slope": 1326,
- "equalsInteger-memory-arguments": 1,
- "equalsString-cpu-arguments-constant": 1000,
- "equalsString-cpu-arguments-intercept": 150000,
- "equalsString-cpu-arguments-slope": 1000,
- "equalsString-memory-arguments": 1,
- "fstPair-cpu-arguments": 150000,
- "fstPair-memory-arguments": 32,
- "headList-cpu-arguments": 150000,
- "headList-memory-arguments": 32,
- "iData-cpu-arguments": 150000,
- "iData-memory-arguments": 32,
- "ifThenElse-cpu-arguments": 1,
- "ifThenElse-memory-arguments": 1,
- "indexByteString-cpu-arguments": 150000,
- "indexByteString-memory-arguments": 1,
- "lengthOfByteString-cpu-arguments": 150000,
- "lengthOfByteString-memory-arguments": 4,
- "lessThanByteString-cpu-arguments-intercept": 103599,
- "lessThanByteString-cpu-arguments-slope": 248,
- "lessThanByteString-memory-arguments": 1,
- "lessThanEqualsByteString-cpu-arguments-intercept": 103599,
- "lessThanEqualsByteString-cpu-arguments-slope": 248,
- "lessThanEqualsByteString-memory-arguments": 1,
- "lessThanEqualsInteger-cpu-arguments-intercept": 145276,
- "lessThanEqualsInteger-cpu-arguments-slope": 1366,
- "lessThanEqualsInteger-memory-arguments": 1,
- "lessThanInteger-cpu-arguments-intercept": 179690,
- "lessThanInteger-cpu-arguments-slope": 497,
- "lessThanInteger-memory-arguments": 1,
- "listData-cpu-arguments": 150000,
- "listData-memory-arguments": 32,
- "mapData-cpu-arguments": 150000,
- "mapData-memory-arguments": 32,
- "mkCons-cpu-arguments": 150000,
- "mkCons-memory-arguments": 32,
- "mkNilData-cpu-arguments": 150000,
- "mkNilData-memory-arguments": 32,
- "mkNilPairData-cpu-arguments": 150000,
- "mkNilPairData-memory-arguments": 32,
- "mkPairData-cpu-arguments": 150000,
- "mkPairData-memory-arguments": 32,
- "modInteger-cpu-arguments-constant": 148000,
- "modInteger-cpu-arguments-model-arguments-intercept": 425507,
- "modInteger-cpu-arguments-model-arguments-slope": 118,
- "modInteger-memory-arguments-intercept": 0,
- "modInteger-memory-arguments-minimum": 1,
- "modInteger-memory-arguments-slope": 1,
- "multiplyInteger-cpu-arguments-intercept": 61516,
- "multiplyInteger-cpu-arguments-slope": 11218,
- "multiplyInteger-memory-arguments-intercept": 0,
- "multiplyInteger-memory-arguments-slope": 1,
- "nullList-cpu-arguments": 150000,
- "nullList-memory-arguments": 32,
- "quotientInteger-cpu-arguments-constant": 148000,
- "quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
- "quotientInteger-cpu-arguments-model-arguments-slope": 118,
- "quotientInteger-memory-arguments-intercept": 0,
- "quotientInteger-memory-arguments-minimum": 1,
- "quotientInteger-memory-arguments-slope": 1,
- "remainderInteger-cpu-arguments-constant": 148000,
- "remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
- "remainderInteger-cpu-arguments-model-arguments-slope": 118,
- "remainderInteger-memory-arguments-intercept": 0,
- "remainderInteger-memory-arguments-minimum": 1,
- "remainderInteger-memory-arguments-slope": 1,
- "sha2_256-cpu-arguments-intercept": 2477736,
- "sha2_256-cpu-arguments-slope": 29175,
- "sha2_256-memory-arguments": 4,
- "sha3_256-cpu-arguments-intercept": 0,
- "sha3_256-cpu-arguments-slope": 82363,
- "sha3_256-memory-arguments": 4,
- "sliceByteString-cpu-arguments-intercept": 150000,
- "sliceByteString-cpu-arguments-slope": 5000,
- "sliceByteString-memory-arguments-intercept": 0,
- "sliceByteString-memory-arguments-slope": 1,
- "sndPair-cpu-arguments": 150000,
- "sndPair-memory-arguments": 32,
- "subtractInteger-cpu-arguments-intercept": 197209,
- "subtractInteger-cpu-arguments-slope": 0,
- "subtractInteger-memory-arguments-intercept": 1,
- "subtractInteger-memory-arguments-slope": 1,
- "tailList-cpu-arguments": 150000,
- "tailList-memory-arguments": 32,
- "trace-cpu-arguments": 150000,
- "trace-memory-arguments": 32,
- "unBData-cpu-arguments": 150000,
- "unBData-memory-arguments": 32,
- "unConstrData-cpu-arguments": 150000,
- "unConstrData-memory-arguments": 32,
- "unIData-cpu-arguments": 150000,
- "unIData-memory-arguments": 32,
- "unListData-cpu-arguments": 150000,
- "unListData-memory-arguments": 32,
- "unMapData-cpu-arguments": 150000,
- "unMapData-memory-arguments": 32,
- "verifySignature-cpu-arguments-intercept": 3345831,
- "verifySignature-cpu-arguments-slope": 1,
- "verifySignature-memory-arguments": 1
- }
- },
- "executionPrices": {
- "prMem": {
- "denominator": 10000,
- "numerator": 577
- },
- "prSteps": {
- "denominator": 10000000,
- "numerator": 721
- }
- },
- "lovelacePerUTxOWord": 34482,
- "maxBlockExUnits": {
- "exUnitsMem": 50000000,
- "exUnitsSteps": 40000000000
- },
- "maxCollateralInputs": 3,
- "maxTxExUnits": {
- "exUnitsMem": 10000000,
- "exUnitsSteps": 10000000000
- },
- "maxValueSize": 5000
- },
- "conway": null,
- "delegator_coin": 0,
- "delegators": 0,
- "dreps": 0,
- "epoch_length": 600,
- "extra_future_offset": 0,
- "funds_balance": 10000000000000,
- "max_block_size": null,
- "network_magic": 42,
- "parameter_k": 3,
- "per_pool_balance": 1000000000000000,
- "pool_coin": 1000000000000000,
- "pparamsEpoch": 300,
- "pparamsOverlays": [],
- "shelley": {
- "activeSlotsCoeff": 5.0e-2,
- "epochLength": 600,
- "protocolParams": {
- "a0": 0.3,
- "decentralisationParam": 0,
- "eMax": 18,
- "extraEntropy": {
- "tag": "NeutralNonce"
- },
- "keyDeposit": 2000000,
- "maxBlockBodySize": 65536,
- "maxBlockHeaderSize": 1100,
- "maxTxSize": 16384,
- "minFeeA": 44,
- "minFeeB": 155381,
- "minPoolCost": 340000000,
- "minUTxOValue": 0,
- "nOpt": 500,
- "poolDeposit": 500000000,
- "protocolVersion": {
- "major": 6,
- "minor": 0
- },
- "rho": 3.0e-3,
- "tau": 0.2
- },
- "securityParam": 3,
- "slotLength": 1
- },
- "single_shot": true,
- "slot_duration": 1,
- "utxo": 0,
- "utxo_keys": 1
- },
- "name": "trace-bench",
- "node": {
- "heap_limit": null,
- "rts_flags_override": [],
- "shutdown_on_block_synced": 15,
- "shutdown_on_slot_synced": null,
- "ssd_directory": null,
- "tracer": true,
- "tracing_backend": "trace-dispatcher",
- "utxo_lmdb": false,
- "utxo_lsmt": false,
- "verbatim": {
- "EnableP2P": true
- }
- },
- "overlay": {},
- "scenario": "fixed-loaded",
- "tracer": {
- "ekg": false,
- "rtview": false,
- "timeseries": false,
- "withresources": true
- },
- "workloads": []
- },
- "trace-bench-notracer": {
- "analysis": {
- "cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 40,
- "filter_exprs": [
- {
- "contents": {
- "contents": 5,
- "tag": "BMinimumAdoptions"
- },
- "tag": "CBlock"
- }
- ],
- "filters": [],
- "finish_patience": 21,
- "last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -72843,7 +71556,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -73053,7 +71766,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -73076,7 +71789,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -73087,14 +71800,14 @@
"utxo": 0,
"utxo_keys": 1
},
- "name": "trace-bench-notracer",
+ "name": "trace-bench",
"node": {
"heap_limit": null,
"rts_flags_override": [],
"shutdown_on_block_synced": 15,
"shutdown_on_slot_synced": null,
"ssd_directory": null,
- "tracer": false,
+ "tracer": true,
"tracing_backend": "trace-dispatcher",
"utxo_lmdb": false,
"utxo_lsmt": false,
@@ -73106,13 +71819,12 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": true
},
"workloads": []
},
- "trace-bench-rtview": {
+ "trace-bench-notracer": {
"analysis": {
"cluster_base_startup_overhead_s": 40,
"cluster_startup_overhead_s": 40,
@@ -73128,10 +71840,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -73233,7 +71945,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -73443,7 +72155,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -73466,7 +72178,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -73477,14 +72189,14 @@
"utxo": 0,
"utxo_keys": 1
},
- "name": "trace-bench-rtview",
+ "name": "trace-bench-notracer",
"node": {
"heap_limit": null,
"rts_flags_override": [],
"shutdown_on_block_synced": 15,
"shutdown_on_slot_synced": null,
"ssd_directory": null,
- "tracer": true,
+ "tracer": false,
"tracing_backend": "trace-dispatcher",
"utxo_lmdb": false,
"utxo_lsmt": false,
@@ -73496,7 +72208,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": true,
"timeseries": false,
"withresources": true
},
@@ -73518,10 +72229,10 @@
"filters": [],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -73623,7 +72334,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -73833,7 +72544,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -73856,7 +72567,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -73886,397 +72597,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
- "timeseries": false,
- "withresources": true
- },
- "workloads": []
- },
- "trace-full-rtview": {
- "analysis": {
- "cluster_base_startup_overhead_s": 40,
- "cluster_startup_overhead_s": 40,
- "filter_exprs": [
- {
- "contents": {
- "contents": 5,
- "tag": "BMinimumAdoptions"
- },
- "tag": "CBlock"
- }
- ],
- "filters": [],
- "finish_patience": 21,
- "last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
- "silence_since_last_block_s": 120,
- "start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
- "type": "standard"
- },
- "cli_args": {
- "createStakedArgs": [
- "--testnet-magic",
- 42,
- "--supply",
- "10000000000000",
- "--gen-utxo-keys",
- 1,
- "--gen-genesis-keys",
- 0,
- "--supply-delegated",
- "6000000000000000",
- "--gen-pools",
- 6,
- "--gen-stake-delegs",
- 6,
- "--num-stuffed-utxo",
- "000000"
- ],
- "createTestnetDataArgs": [
- "--testnet-magic",
- 42,
- "--total-supply",
- "6010000000000000",
- "--utxo-keys",
- 1,
- "--genesis-keys",
- 0,
- "--delegated-supply",
- "6000000000000000",
- "--pools",
- 6,
- "--stake-delegators",
- 6,
- "--drep-keys",
- 0,
- "--stuffed-utxo",
- "000000"
- ],
- "pools": [
- "--argjson",
- "initialPoolCoin",
- "1000000000000000"
- ]
- },
- "composition": {
- "dense_pool_density": 1,
- "locations": [
- "loopback"
- ],
- "n_bft_hosts": 0,
- "n_dense_hosts": 0,
- "n_dense_pools": 0,
- "n_hosts": 6,
- "n_pool_hosts": 6,
- "n_pools": 6,
- "n_singular_hosts": 6,
- "n_singular_pools": 6,
- "topology": "torus",
- "with_explorer": false,
- "with_proxy": false
- },
- "derived": {
- "dataset_induced_startup_delay_conservative": 40,
- "dataset_induced_startup_delay_optimistic": 40,
- "dataset_measure": 0,
- "default_value_tx_per_block_estimate": 172,
- "default_value_tx_size_estimate": 381,
- "delegators_effective": 6,
- "effective_epochs": 2,
- "epoch_duration": 600,
- "generator_blocks_lower_bound": 121,
- "generator_duration": 1200,
- "generator_tx_count": 18000,
- "genesis_future_offset": 40,
- "shutdown_time": 1200,
- "supply_delegated": 6000000000000000,
- "supply_total": 6010000000000000,
- "utxo_delegated": 0,
- "utxo_generated": 36000,
- "utxo_stuffed": 0
- },
- "desc": "6 low-footprint nodes in a torus topology, 20 minutes runtime",
- "era": "conway",
- "generator": {
- "add_tx_size": 100,
- "epochs": 3,
- "init_cooldown": 5,
- "inputs_per_tx": 2,
- "outputs_per_tx": 2,
- "plutus": {
- "script": null,
- "type": null
- },
- "tps": 15,
- "tx_count": 18000,
- "tx_fee": 1000000
- },
- "genesis": {
- "active_slots_coeff": 5.0e-2,
- "alonzo": {
- "collateralPercentage": 150,
- "costModels": {
- "PlutusV1": {
- "addInteger-cpu-arguments-intercept": 197209,
- "addInteger-cpu-arguments-slope": 0,
- "addInteger-memory-arguments-intercept": 1,
- "addInteger-memory-arguments-slope": 1,
- "appendByteString-cpu-arguments-intercept": 396231,
- "appendByteString-cpu-arguments-slope": 621,
- "appendByteString-memory-arguments-intercept": 0,
- "appendByteString-memory-arguments-slope": 1,
- "appendString-cpu-arguments-intercept": 150000,
- "appendString-cpu-arguments-slope": 1000,
- "appendString-memory-arguments-intercept": 0,
- "appendString-memory-arguments-slope": 1,
- "bData-cpu-arguments": 150000,
- "bData-memory-arguments": 32,
- "blake2b-cpu-arguments-intercept": 2477736,
- "blake2b-cpu-arguments-slope": 29175,
- "blake2b-memory-arguments": 4,
- "cekApplyCost-exBudgetCPU": 29773,
- "cekApplyCost-exBudgetMemory": 100,
- "cekBuiltinCost-exBudgetCPU": 29773,
- "cekBuiltinCost-exBudgetMemory": 100,
- "cekConstCost-exBudgetCPU": 29773,
- "cekConstCost-exBudgetMemory": 100,
- "cekDelayCost-exBudgetCPU": 29773,
- "cekDelayCost-exBudgetMemory": 100,
- "cekForceCost-exBudgetCPU": 29773,
- "cekForceCost-exBudgetMemory": 100,
- "cekLamCost-exBudgetCPU": 29773,
- "cekLamCost-exBudgetMemory": 100,
- "cekStartupCost-exBudgetCPU": 100,
- "cekStartupCost-exBudgetMemory": 100,
- "cekVarCost-exBudgetCPU": 29773,
- "cekVarCost-exBudgetMemory": 100,
- "chooseData-cpu-arguments": 150000,
- "chooseData-memory-arguments": 32,
- "chooseList-cpu-arguments": 150000,
- "chooseList-memory-arguments": 32,
- "chooseUnit-cpu-arguments": 150000,
- "chooseUnit-memory-arguments": 32,
- "consByteString-cpu-arguments-intercept": 150000,
- "consByteString-cpu-arguments-slope": 1000,
- "consByteString-memory-arguments-intercept": 0,
- "consByteString-memory-arguments-slope": 1,
- "constrData-cpu-arguments": 150000,
- "constrData-memory-arguments": 32,
- "decodeUtf8-cpu-arguments-intercept": 150000,
- "decodeUtf8-cpu-arguments-slope": 1000,
- "decodeUtf8-memory-arguments-intercept": 0,
- "decodeUtf8-memory-arguments-slope": 8,
- "divideInteger-cpu-arguments-constant": 148000,
- "divideInteger-cpu-arguments-model-arguments-intercept": 425507,
- "divideInteger-cpu-arguments-model-arguments-slope": 118,
- "divideInteger-memory-arguments-intercept": 0,
- "divideInteger-memory-arguments-minimum": 1,
- "divideInteger-memory-arguments-slope": 1,
- "encodeUtf8-cpu-arguments-intercept": 150000,
- "encodeUtf8-cpu-arguments-slope": 1000,
- "encodeUtf8-memory-arguments-intercept": 0,
- "encodeUtf8-memory-arguments-slope": 8,
- "equalsByteString-cpu-arguments-constant": 150000,
- "equalsByteString-cpu-arguments-intercept": 112536,
- "equalsByteString-cpu-arguments-slope": 247,
- "equalsByteString-memory-arguments": 1,
- "equalsData-cpu-arguments-intercept": 150000,
- "equalsData-cpu-arguments-slope": 10000,
- "equalsData-memory-arguments": 1,
- "equalsInteger-cpu-arguments-intercept": 136542,
- "equalsInteger-cpu-arguments-slope": 1326,
- "equalsInteger-memory-arguments": 1,
- "equalsString-cpu-arguments-constant": 1000,
- "equalsString-cpu-arguments-intercept": 150000,
- "equalsString-cpu-arguments-slope": 1000,
- "equalsString-memory-arguments": 1,
- "fstPair-cpu-arguments": 150000,
- "fstPair-memory-arguments": 32,
- "headList-cpu-arguments": 150000,
- "headList-memory-arguments": 32,
- "iData-cpu-arguments": 150000,
- "iData-memory-arguments": 32,
- "ifThenElse-cpu-arguments": 1,
- "ifThenElse-memory-arguments": 1,
- "indexByteString-cpu-arguments": 150000,
- "indexByteString-memory-arguments": 1,
- "lengthOfByteString-cpu-arguments": 150000,
- "lengthOfByteString-memory-arguments": 4,
- "lessThanByteString-cpu-arguments-intercept": 103599,
- "lessThanByteString-cpu-arguments-slope": 248,
- "lessThanByteString-memory-arguments": 1,
- "lessThanEqualsByteString-cpu-arguments-intercept": 103599,
- "lessThanEqualsByteString-cpu-arguments-slope": 248,
- "lessThanEqualsByteString-memory-arguments": 1,
- "lessThanEqualsInteger-cpu-arguments-intercept": 145276,
- "lessThanEqualsInteger-cpu-arguments-slope": 1366,
- "lessThanEqualsInteger-memory-arguments": 1,
- "lessThanInteger-cpu-arguments-intercept": 179690,
- "lessThanInteger-cpu-arguments-slope": 497,
- "lessThanInteger-memory-arguments": 1,
- "listData-cpu-arguments": 150000,
- "listData-memory-arguments": 32,
- "mapData-cpu-arguments": 150000,
- "mapData-memory-arguments": 32,
- "mkCons-cpu-arguments": 150000,
- "mkCons-memory-arguments": 32,
- "mkNilData-cpu-arguments": 150000,
- "mkNilData-memory-arguments": 32,
- "mkNilPairData-cpu-arguments": 150000,
- "mkNilPairData-memory-arguments": 32,
- "mkPairData-cpu-arguments": 150000,
- "mkPairData-memory-arguments": 32,
- "modInteger-cpu-arguments-constant": 148000,
- "modInteger-cpu-arguments-model-arguments-intercept": 425507,
- "modInteger-cpu-arguments-model-arguments-slope": 118,
- "modInteger-memory-arguments-intercept": 0,
- "modInteger-memory-arguments-minimum": 1,
- "modInteger-memory-arguments-slope": 1,
- "multiplyInteger-cpu-arguments-intercept": 61516,
- "multiplyInteger-cpu-arguments-slope": 11218,
- "multiplyInteger-memory-arguments-intercept": 0,
- "multiplyInteger-memory-arguments-slope": 1,
- "nullList-cpu-arguments": 150000,
- "nullList-memory-arguments": 32,
- "quotientInteger-cpu-arguments-constant": 148000,
- "quotientInteger-cpu-arguments-model-arguments-intercept": 425507,
- "quotientInteger-cpu-arguments-model-arguments-slope": 118,
- "quotientInteger-memory-arguments-intercept": 0,
- "quotientInteger-memory-arguments-minimum": 1,
- "quotientInteger-memory-arguments-slope": 1,
- "remainderInteger-cpu-arguments-constant": 148000,
- "remainderInteger-cpu-arguments-model-arguments-intercept": 425507,
- "remainderInteger-cpu-arguments-model-arguments-slope": 118,
- "remainderInteger-memory-arguments-intercept": 0,
- "remainderInteger-memory-arguments-minimum": 1,
- "remainderInteger-memory-arguments-slope": 1,
- "sha2_256-cpu-arguments-intercept": 2477736,
- "sha2_256-cpu-arguments-slope": 29175,
- "sha2_256-memory-arguments": 4,
- "sha3_256-cpu-arguments-intercept": 0,
- "sha3_256-cpu-arguments-slope": 82363,
- "sha3_256-memory-arguments": 4,
- "sliceByteString-cpu-arguments-intercept": 150000,
- "sliceByteString-cpu-arguments-slope": 5000,
- "sliceByteString-memory-arguments-intercept": 0,
- "sliceByteString-memory-arguments-slope": 1,
- "sndPair-cpu-arguments": 150000,
- "sndPair-memory-arguments": 32,
- "subtractInteger-cpu-arguments-intercept": 197209,
- "subtractInteger-cpu-arguments-slope": 0,
- "subtractInteger-memory-arguments-intercept": 1,
- "subtractInteger-memory-arguments-slope": 1,
- "tailList-cpu-arguments": 150000,
- "tailList-memory-arguments": 32,
- "trace-cpu-arguments": 150000,
- "trace-memory-arguments": 32,
- "unBData-cpu-arguments": 150000,
- "unBData-memory-arguments": 32,
- "unConstrData-cpu-arguments": 150000,
- "unConstrData-memory-arguments": 32,
- "unIData-cpu-arguments": 150000,
- "unIData-memory-arguments": 32,
- "unListData-cpu-arguments": 150000,
- "unListData-memory-arguments": 32,
- "unMapData-cpu-arguments": 150000,
- "unMapData-memory-arguments": 32,
- "verifySignature-cpu-arguments-intercept": 3345831,
- "verifySignature-cpu-arguments-slope": 1,
- "verifySignature-memory-arguments": 1
- }
- },
- "executionPrices": {
- "prMem": {
- "denominator": 10000,
- "numerator": 577
- },
- "prSteps": {
- "denominator": 10000000,
- "numerator": 721
- }
- },
- "lovelacePerUTxOWord": 34482,
- "maxBlockExUnits": {
- "exUnitsMem": 50000000,
- "exUnitsSteps": 40000000000
- },
- "maxCollateralInputs": 3,
- "maxTxExUnits": {
- "exUnitsMem": 10000000,
- "exUnitsSteps": 10000000000
- },
- "maxValueSize": 5000
- },
- "conway": null,
- "delegator_coin": 0,
- "delegators": 0,
- "dreps": 0,
- "epoch_length": 600,
- "extra_future_offset": 0,
- "funds_balance": 10000000000000,
- "max_block_size": null,
- "network_magic": 42,
- "parameter_k": 3,
- "per_pool_balance": 1000000000000000,
- "pool_coin": 1000000000000000,
- "pparamsEpoch": 300,
- "pparamsOverlays": [],
- "shelley": {
- "activeSlotsCoeff": 5.0e-2,
- "epochLength": 600,
- "protocolParams": {
- "a0": 0.3,
- "decentralisationParam": 0,
- "eMax": 18,
- "extraEntropy": {
- "tag": "NeutralNonce"
- },
- "keyDeposit": 2000000,
- "maxBlockBodySize": 65536,
- "maxBlockHeaderSize": 1100,
- "maxTxSize": 16384,
- "minFeeA": 44,
- "minFeeB": 155381,
- "minPoolCost": 340000000,
- "minUTxOValue": 0,
- "nOpt": 500,
- "poolDeposit": 500000000,
- "protocolVersion": {
- "major": 6,
- "minor": 0
- },
- "rho": 3.0e-3,
- "tau": 0.2
- },
- "securityParam": 3,
- "slotLength": 1
- },
- "single_shot": true,
- "slot_duration": 1,
- "utxo": 0,
- "utxo_keys": 1
- },
- "name": "trace-full-rtview",
- "node": {
- "heap_limit": null,
- "rts_flags_override": [],
- "shutdown_on_block_synced": null,
- "shutdown_on_slot_synced": 1200,
- "ssd_directory": null,
- "tracer": true,
- "tracing_backend": "trace-dispatcher",
- "utxo_lmdb": false,
- "utxo_lsmt": false,
- "verbatim": {
- "EnableP2P": true
- }
- },
- "overlay": {},
- "scenario": "fixed-loaded",
- "tracer": {
- "ekg": false,
- "rtview": true,
"timeseries": false,
"withresources": true
},
@@ -74300,10 +72620,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -74405,7 +72725,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -74615,7 +72935,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -74638,7 +72958,7 @@
"major": 6,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -74668,7 +72988,6 @@
"scenario": "tracer-only",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -74693,10 +73012,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -74851,7 +73170,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -75240,7 +73559,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 1200,
"protocolParams": {
"a0": 0.3,
@@ -75263,7 +73582,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 6,
@@ -75295,7 +73614,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -75320,10 +73638,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -75478,7 +73796,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -75867,7 +74185,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 1200,
"protocolParams": {
"a0": 0.3,
@@ -75890,7 +74208,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 6,
@@ -75920,7 +74238,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -75945,10 +74262,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -76103,7 +74420,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -76492,7 +74809,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 1200,
"protocolParams": {
"a0": 0.3,
@@ -76515,7 +74832,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 6,
@@ -76545,7 +74862,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -76570,10 +74886,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -76709,7 +75025,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -77098,7 +75414,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -77121,7 +75437,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -77151,7 +75467,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -77176,10 +75491,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -77315,7 +75630,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -77704,7 +76019,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -77727,7 +76042,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -77757,7 +76072,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -77782,10 +76096,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -77921,7 +76235,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -78310,7 +76624,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -78333,7 +76647,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -78363,7 +76677,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -78388,10 +76701,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -78527,7 +76840,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -78916,7 +77229,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -78939,7 +77252,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -78969,7 +77282,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -78994,10 +77306,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -79154,7 +77466,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -79543,7 +77855,7 @@
"v8-preview"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -79566,7 +77878,7 @@
"major": 8,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -79596,7 +77908,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -79621,10 +77932,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -79769,7 +78080,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -80410,7 +78721,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -80433,7 +78744,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -80463,7 +78774,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -80499,10 +78809,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -80652,7 +78962,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -81293,7 +79603,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -81316,7 +79626,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -81346,7 +79656,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -81382,10 +79691,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -81530,7 +79839,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -82171,7 +80480,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -82194,7 +80503,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -82224,7 +80533,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -82249,10 +80557,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -82397,7 +80705,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -83038,7 +81346,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -83061,7 +81369,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -83091,7 +81399,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -83116,10 +81423,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -83255,7 +81562,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -83896,7 +82203,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -83919,7 +82226,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -83949,7 +82256,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -83974,10 +82280,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -84113,7 +82419,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -84754,7 +83060,7 @@
"pparamsEpoch": 537,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -84777,7 +83083,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -84810,7 +83116,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -84835,10 +83140,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -84974,7 +83279,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -85640,7 +83945,7 @@
"voting"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -85663,7 +83968,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -85693,7 +83998,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -85733,10 +84037,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -85872,7 +84176,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -86538,7 +84842,7 @@
"voting"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -86561,7 +84865,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -86591,7 +84895,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -86630,10 +84933,10 @@
],
"finish_patience": 21,
"last_log_spread_s": 120,
- "minimum_chain_density": 2.5e-2,
+ "minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 2.0e-2,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -86769,7 +85072,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 5.0e-2,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -87435,7 +85738,7 @@
"voting"
],
"shelley": {
- "activeSlotsCoeff": 5.0e-2,
+ "activeSlotsCoeff": 0.05,
"epochLength": 8000,
"protocolParams": {
"a0": 0.3,
@@ -87458,7 +85761,7 @@
"major": 10,
"minor": 0
},
- "rho": 3.0e-3,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 40,
@@ -87488,7 +85791,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"timeseries": false,
"withresources": false
},
@@ -87510,4 +85812,3 @@
]
}
}
-
diff --git a/bench/cardano-profile/data/test/chainsync-early-alonzo-coay/profile.json b/bench/cardano-profile/data/test/chainsync-early-alonzo-coay/profile.json
index 5d68e12934e..80abf34855c 100644
--- a/bench/cardano-profile/data/test/chainsync-early-alonzo-coay/profile.json
+++ b/bench/cardano-profile/data/test/chainsync-early-alonzo-coay/profile.json
@@ -306,7 +306,6 @@
"cluster_startup_overhead_s": 40
},
"tracer": {
- "rtview": false,
"ekg": false,
"withresources": false,
"timeseries": false
diff --git a/bench/cardano-profile/data/test/chainsync-early-byron-coay/profile.json b/bench/cardano-profile/data/test/chainsync-early-byron-coay/profile.json
index 247d56251dc..68632405706 100644
--- a/bench/cardano-profile/data/test/chainsync-early-byron-coay/profile.json
+++ b/bench/cardano-profile/data/test/chainsync-early-byron-coay/profile.json
@@ -306,7 +306,6 @@
"cluster_startup_overhead_s": 40
},
"tracer": {
- "rtview": false,
"ekg": false,
"withresources": false,
"timeseries": false
diff --git a/bench/cardano-profile/data/test/ci-test-bage.json b/bench/cardano-profile/data/test/ci-test-bage.json
index e00d00c667c..eec37a286c4 100644
--- a/bench/cardano-profile/data/test/ci-test-bage.json
+++ b/bench/cardano-profile/data/test/ci-test-bage.json
@@ -17,7 +17,7 @@
"minimum_chain_density": 0.025,
"silence_since_last_block_s": 120,
"start_log_spread_s": 120,
- "tx_loss_ratio": 0.020,
+ "tx_loss_ratio": 0.02,
"type": "standard"
},
"cli_args": {
@@ -119,7 +119,7 @@
"tx_fee": 1000000
},
"genesis": {
- "active_slots_coeff": 0.050,
+ "active_slots_coeff": 0.05,
"alonzo": {
"collateralPercentage": 150,
"costModels": {
@@ -329,7 +329,7 @@
"pparamsEpoch": 300,
"pparamsOverlays": [],
"shelley": {
- "activeSlotsCoeff": 0.050,
+ "activeSlotsCoeff": 0.05,
"epochLength": 600,
"protocolParams": {
"a0": 0.3,
@@ -352,7 +352,7 @@
"major": 6,
"minor": 0
},
- "rho": 0.0030,
+ "rho": 0.003,
"tau": 0.2
},
"securityParam": 3,
@@ -382,7 +382,6 @@
"scenario": "fixed-loaded",
"tracer": {
"ekg": false,
- "rtview": false,
"withresources": false,
"timeseries": false
},
diff --git a/bench/cardano-profile/data/test/ci-test-coay/profile.json b/bench/cardano-profile/data/test/ci-test-coay/profile.json
index 000a88a3462..5755f87e21d 100644
--- a/bench/cardano-profile/data/test/ci-test-coay/profile.json
+++ b/bench/cardano-profile/data/test/ci-test-coay/profile.json
@@ -313,7 +313,6 @@
"cluster_startup_overhead_s": 40
},
"tracer": {
- "rtview": false,
"ekg": false,
"withresources": false,
"timeseries": false
diff --git a/bench/cardano-profile/data/test/ci-test-dense10-coay/profile.json b/bench/cardano-profile/data/test/ci-test-dense10-coay/profile.json
index 4d51dfa0977..ae1e5dca236 100644
--- a/bench/cardano-profile/data/test/ci-test-dense10-coay/profile.json
+++ b/bench/cardano-profile/data/test/ci-test-dense10-coay/profile.json
@@ -313,7 +313,6 @@
"cluster_startup_overhead_s": 40
},
"tracer": {
- "rtview": false,
"ekg": false,
"withresources": false,
"timeseries": false
@@ -323,7 +322,7 @@
"name": "ci-test-dense10-coay",
"overlay": {},
"derived": {
- "supply_delegated": 1E+16,
+ "supply_delegated": 1e+16,
"supply_total": 10010000000000000,
"utxo_delegated": 0,
"utxo_generated": 18000,
diff --git a/bench/cardano-profile/data/test/default-coay/profile.json b/bench/cardano-profile/data/test/default-coay/profile.json
index f630cf1c734..6db5b36b0e0 100644
--- a/bench/cardano-profile/data/test/default-coay/profile.json
+++ b/bench/cardano-profile/data/test/default-coay/profile.json
@@ -315,7 +315,6 @@
]
},
"tracer": {
- "rtview": false,
"ekg": false,
"withresources": false,
"timeseries": false
diff --git a/bench/cardano-profile/data/test/fast-nomadperf-coay/profile.json b/bench/cardano-profile/data/test/fast-nomadperf-coay/profile.json
index f1d4e28437b..259ff047baf 100644
--- a/bench/cardano-profile/data/test/fast-nomadperf-coay/profile.json
+++ b/bench/cardano-profile/data/test/fast-nomadperf-coay/profile.json
@@ -508,7 +508,6 @@
"cluster_startup_overhead_s": 40
},
"tracer": {
- "rtview": false,
"ekg": false,
"withresources": false,
"timeseries": false
diff --git a/bench/cardano-profile/src/Cardano/Benchmarking/Profile.hs b/bench/cardano-profile/src/Cardano/Benchmarking/Profile.hs
index 59f2c7b2ceb..d4f406ce61a 100644
--- a/bench/cardano-profile/src/Cardano/Benchmarking/Profile.hs
+++ b/bench/cardano-profile/src/Cardano/Benchmarking/Profile.hs
@@ -73,7 +73,7 @@ When defining profiles try keeping the same order as in the `Profile` type:
- Cluster
- Analysis
-And common modifiers `P.traceForwardingOn . P.newTracing . P.tracerRtview`
+And common modifiers `P.traceForwardingOn . P.newTracing`
next to the name.
-}
diff --git a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Empty.hs b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Empty.hs
index 67d48c5f73a..3a7f7de054a 100644
--- a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Empty.hs
+++ b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Empty.hs
@@ -133,7 +133,6 @@ profilesNoEraEmpty = map baseNoDataset
in [
-- Local
ciTest & P.name "ci-test" . V.valueLocal . P.traceForwardingOn
- , ciTest & P.name "ci-test-rtview" . V.valueLocal . P.traceForwardingOn . P.tracerRtview
, ciTest & P.name "ci-test-notracer" . V.valueLocal . P.traceForwardingOff
, ciTest & P.name "ci-test-plutus" . V.plutusLoop . P.traceForwardingOn . P.analysisSizeSmall
]
@@ -163,11 +162,9 @@ profilesNoEraEmpty = map baseNoDataset
in [
-- "--shutdown-on-block-synced 15"
bench & P.name "trace-bench" . V.valueLocal . P.traceForwardingOn
- , bench & P.name "trace-bench-rtview" . V.valueLocal . P.traceForwardingOn . P.tracerRtview
, bench & P.name "trace-bench-notracer" . V.valueLocal . P.traceForwardingOff
-- "--shutdown-on-slot-synced 1200"
, full & P.name "trace-full" . V.valueLocal . P.traceForwardingOn
- , full & P.name "trace-full-rtview" . V.valueLocal . P.traceForwardingOn . P.tracerRtview
]
++
------------------------------------------------------------------------------
diff --git a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Miniature.hs b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Miniature.hs
index 921bb569390..17645db6408 100644
--- a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Miniature.hs
+++ b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Builtin/Miniature.hs
@@ -86,7 +86,6 @@ profilesNoEraMiniature =
ciBench02Value & P.name "ci-bench" . V.valueLocal . P.dreps 0 . P.traceForwardingOn
, ciBench02Value & P.name "ci-bench-lmdb" . V.valueLocal . P.dreps 0 . P.traceForwardingOn . P.lmdb . P.ssdDirectory "/tmp"
, ciBench02Value & P.name "ci-bench-lsmt" . V.valueLocal . P.dreps 0 . P.traceForwardingOn . P.lsmt . P.ssdDirectory "/tmp"
- , ciBench02Value & P.name "ci-bench-rtview" . V.valueLocal . P.dreps 0 . P.traceForwardingOn . P.tracerRtview
, ciBench02Value & P.name "ci-bench-notracer" . V.valueLocal . P.dreps 0 . P.traceForwardingOff
, ciBench02Value & P.name "ci-bench-drep" . V.valueLocal . P.dreps 10 . P.traceForwardingOn
, ciBench02Plutus & P.name "ci-bench-plutus" . loop . P.dreps 0 . P.traceForwardingOn
@@ -118,7 +117,7 @@ profilesNoEraMiniature =
, dense & P.name "6-dense-rtsprof" . V.valueCloud . duration30 . P.traceForwardingOn . P.rtsHeapProf . P.rtsEventlogged
, dense & P.name "6-dense-1h" . V.valueCloud . duration60 . P.traceForwardingOn
, dense & P.name "6-dense-1h-rtsprof" . V.valueCloud . duration60 . P.traceForwardingOn . P.rtsHeapProf . P.rtsEventlogged
- , dense & P.name "6-dense-1h-timeseries" . V.valueCloud . duration60 . P.traceForwardingOn . P.tracerRtview . P.tracerTimeseries
+ , dense & P.name "6-dense-1h-timeseries" . V.valueCloud . duration60 . P.traceForwardingOn . P.tracerTimeseries
, dense & P.name "6-dense-4h" . V.valueCloud . duration240 . P.traceForwardingOn
, dense & P.name "6-dense-4h-rtsprof" . V.valueCloud . duration240 . P.traceForwardingOn . P.rtsHeapProf . P.rtsEventlogged
]
diff --git a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Primitives.hs b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Primitives.hs
index 865821d71fb..ea28d7578e0 100644
--- a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Primitives.hs
+++ b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Primitives.hs
@@ -91,7 +91,7 @@ module Cardano.Benchmarking.Profile.Primitives (
, workloadAppend
-- Tracer's params.
- , tracerRtview, tracerWithresources, tracerTimeseries
+ , tracerWithresources, tracerTimeseries
-- Cluster params.
, clusterMinimunStorage, ssdDirectory, clusterKeepRunningOn
@@ -200,8 +200,7 @@ empty = Types.Profile {
}
, Types.workloads = []
, Types.tracer = Types.Tracer {
- Types.rtview = False
- , Types.ekg = False
+ Types.ekg = False
, Types.withresources = False
, Types.timeseries = False
}
@@ -783,9 +782,6 @@ workloadAppend w p = p {Types.workloads = Types.workloads p ++ [w]}
tracer :: (Types.Tracer -> Types.Tracer) -> Types.Profile -> Types.Profile
tracer f p = p {Types.tracer = f (Types.tracer p)}
-tracerRtview :: Types.Profile -> Types.Profile
-tracerRtview = tracer (\t -> t {Types.rtview = True})
-
tracerWithresources :: Types.Profile -> Types.Profile
tracerWithresources = tracer (\t -> t {Types.withresources = True})
diff --git a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Types.hs b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Types.hs
index 9eb7acabc3d..97e1546bad0 100644
--- a/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Types.hs
+++ b/bench/cardano-profile/src/Cardano/Benchmarking/Profile/Types.hs
@@ -597,8 +597,7 @@ instance Aeson.FromJSON Entrypoints where
--------------------------------------------------------------------------------
data Tracer = Tracer
- { rtview :: Bool
- , ekg :: Bool
+ { ekg :: Bool
, withresources :: Bool
, timeseries :: Bool
}
diff --git a/bench/cardano-profile/test/Main.hs b/bench/cardano-profile/test/Main.hs
index 6c0bf05cc3c..7c333faf22d 100644
--- a/bench/cardano-profile/test/Main.hs
+++ b/bench/cardano-profile/test/Main.hs
@@ -372,8 +372,7 @@ ciTestBage = Types.Profile {
}
, Types.workloads = []
, Types.tracer = Types.Tracer {
- Types.rtview = False
- , Types.ekg = False
+ Types.ekg = False
, Types.withresources = False
, Types.timeseries = False
}
diff --git a/bench/grafana-datasource/dashboards/rtview-port.json b/bench/grafana-datasource/dashboards/node-metrics.json
similarity index 99%
rename from bench/grafana-datasource/dashboards/rtview-port.json
rename to bench/grafana-datasource/dashboards/node-metrics.json
index 97b513c621d..fda3d7b529f 100644
--- a/bench/grafana-datasource/dashboards/rtview-port.json
+++ b/bench/grafana-datasource/dashboards/node-metrics.json
@@ -1,5 +1,5 @@
{
- "title": "Cardano Node (RTView port)",
+ "title": "Cardano Node",
"uid": "cardano-node-rtview-port",
"schemaVersion": 38,
"version": 1,
@@ -933,4 +933,4 @@
}
]
}
-}
\ No newline at end of file
+}
diff --git a/cardano-tracer/CHANGELOG.md b/cardano-tracer/CHANGELOG.md
index 95200ef200c..957f2a6f422 100644
--- a/cardano-tracer/CHANGELOG.md
+++ b/cardano-tracer/CHANGELOG.md
@@ -2,6 +2,12 @@
## NEXT
+## 0.6.0 (June 2026)
+* Remove RTView: the experimental opt-in browser dashboard (`flag rtview`) has been
+ removed entirely. The `hasRTView` field is removed from `TracerConfig`. The
+ `threepenny-gui`, `cassava`, `string-qq`, `cardano-git-rev`, and `utf8-string`
+ dependencies that were RTView-only are no longer required.
+
## 0.5.0 (June 2026)
* Timeseries query endpoint: `POST /timeseries/query` now expects an
`application/x-www-form-urlencoded` body (Prometheus wire format).
@@ -14,7 +20,7 @@
- `GET /timeseries/node/{id}/info` — node info (name, protocol, version,
commit, start time, system start time) plus `uptimeSeconds`.
- `GET /timeseries/node/{id}/startup` — node startup info.
- - `GET /timeseries/node/{id}/state` — sync progress (RTView build only).
+ - `GET /timeseries/node/{id}/state` — sync progress.
* Metric names stored in the timeseries are sanitised: `.`, `-`, and spaces
are replaced with `_`; all other non-alphanumeric, non-underscore characters
are stripped. This aligns stored names with Prometheus label conventions.
diff --git a/cardano-tracer/README.md b/cardano-tracer/README.md
index c27871e2703..0f212ac85c7 100644
--- a/cardano-tracer/README.md
+++ b/cardano-tracer/README.md
@@ -8,22 +8,10 @@
For more details please [read the documentation](https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-tracer.md).
-## RTView
-
-> Attention: RTView is hidden behind a build flag. Enable with this cabal flag: `-f +rtview`.
-
-RTView is a real-time monitoring tool for Cardano nodes (RTView is an abbreviation for "Real Time View"), it is a part of `cardano-tracer` service. RTView provides an interactive web page where you can see different kinds of information about connected nodes (something like Grafana).
-
-For more details please [read its documentation](https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-rtview.md).
-
-RTView is not feature complete and is thus disabled by default. Being
-an experimental/optional component of `cardano-tracer` we will still
-guarantee it remains buildable and usable in its current state.
-
## Developers
Performance and Tracing team is responsible for this service. The primary developer is [Baldur Blöndal](https://github.com/Icelandjack).
## Feedback
-Your bug reports and/or Feature Requests are welcome! Feel free to open a ticket in [this repository](https://github.com/intersectmbo/cardano-node/issues) with labels `RTView` and `tracing`.
+Your bug reports and/or Feature Requests are welcome! Feel free to open a ticket in [this repository](https://github.com/intersectmbo/cardano-node/issues) with label `tracing`.
diff --git a/cardano-tracer/app/cardano-tracer.hs b/cardano-tracer/app/cardano-tracer.hs
index 63ba7678dae..161b0467a78 100644
--- a/cardano-tracer/app/cardano-tracer.hs
+++ b/cardano-tracer/app/cardano-tracer.hs
@@ -13,11 +13,7 @@ main =
tracerInfo :: ParserInfo TracerParams
tracerInfo = info
(parseTracerParams <**> helper <**> versionOption)
-#if RTVIEW
- (fullDesc <> header "cardano-tracer/with RTView - the logging and monitoring service for Cardano nodes.")
-#else
- (fullDesc <> header "cardano-tracer/without RTView - the logging and monitoring service for Cardano nodes.")
-#endif
+ (fullDesc <> header "cardano-tracer - the logging and monitoring service for Cardano nodes.")
versionOption :: Parser (a -> a)
versionOption = infoOption
diff --git a/cardano-tracer/bench/cardano-tracer-bench.hs b/cardano-tracer/bench/cardano-tracer-bench.hs
index 9a8415e94ed..388db5dfd03 100644
--- a/cardano-tracer/bench/cardano-tracer-bench.hs
+++ b/cardano-tracer/bench/cardano-tracer-bench.hs
@@ -7,19 +7,12 @@ import qualified Cardano.Logging.Types as Net
import Cardano.Tracer.Configuration
import Cardano.Tracer.Environment
import Cardano.Tracer.Handlers.Logs.TraceObjects
-#if RTVIEW
-import Cardano.Tracer.Handlers.RTView.Run
-import Cardano.Tracer.Handlers.RTView.State.Historical
-#endif
import Cardano.Tracer.MetaTrace
import Cardano.Tracer.Types
import Cardano.Tracer.Utils
import Control.Concurrent.Extra (newLock)
-#if RTVIEW
-import Control.Concurrent.STM.TVar (newTVarIO)
-#endif
import Control.DeepSeq
import qualified Data.List.NonEmpty as NE
import Data.Time.Clock (UTCTime, getCurrentTime)
@@ -43,24 +36,12 @@ main = do
connectedNodes <- initConnectedNodes
connectedNodesNames <- initConnectedNodesNames
acceptedMetrics <- initAcceptedMetrics
-#if RTVIEW
- savedTO <- initSavedTraceObjects
-
- chainHistory <- initBlockchainHistory
- resourcesHistory <- initResourcesHistory
- txHistory <- initTransactionsHistory
-#endif
protocolsBrake <- initProtocolsBrake
dpRequestors <- initDataPointRequestors
currentLogLock <- newLock
currentDPLock <- newLock
-#if RTVIEW
- eventsQueues <- initEventsQueues mempty Nothing connectedNodesNames dpRequestors currentDPLock
-
- rtViewPageOpened <- newTVarIO False
-#endif
tracer <- mkTraceBundle $ SeverityF $ Just Warning
@@ -82,18 +63,6 @@ main = do
, teTimeseriesHandle = Nothing
}
- tracerEnvRTView :: TracerEnvRTView
- tracerEnvRTView = TracerEnvRTView
-#if RTVIEW
- { teSavedTO = savedTO
- , teBlockchainHistory = chainHistory
- , teResourcesHistory = resourcesHistory
- , teTxHistory = txHistory
- , teEventsQueues = eventsQueues
- , teRTViewPageOpened = rtViewPageOpened
- }
-#endif
-
removePathForcibly root
let -- Handles cleanup between runs, closes handles before
@@ -111,7 +80,7 @@ main = do
benchmark :: TracerEnv -> IO ()
benchmark trEnv = do
beforeProgramStops do
- traceObjectsHandler trEnv tracerEnvRTView nId traceObjects
+ traceObjectsHandler trEnv nId traceObjects
in
perRunEnvWithCleanup @TracerEnv initialise cleanup benchmark
@@ -148,7 +117,6 @@ main = do
, ekgRequestFreq = Nothing
, hasEKG = Nothing
, hasPrometheus = Nothing
- , hasRTView = Nothing
, hasTimeseries = Nothing
, tlsCertificate = Nothing
, logging = NE.fromList [LoggingParams root FileMode format]
diff --git a/cardano-tracer/cardano-tracer.cabal b/cardano-tracer/cardano-tracer.cabal
index 26a6324fcc9..f448906410b 100644
--- a/cardano-tracer/cardano-tracer.cabal
+++ b/cardano-tracer/cardano-tracer.cabal
@@ -1,7 +1,7 @@
cabal-version: 3.0
name: cardano-tracer
-version: 0.5.0
+version: 0.6.0
synopsis: A service for logging and monitoring over Cardano nodes
description: A service for logging and monitoring over Cardano nodes.
category: Cardano,
@@ -16,11 +16,6 @@ build-type: Simple
extra-doc-files: README.md
CHANGELOG.md
-flag rtview
- description: Enable RTView. False by default. Enable with `-f +rtview`.
- default: False
- manual: True
-
flag systemd
description: Enable systemd support.
default: True
@@ -43,9 +38,6 @@ common project-config
if flag(systemd) && os(linux)
cpp-options: -DSYSTEMD
- if flag(rtview)
- CPP-Options: -DRTVIEW=1
-
ghc-options: -Wall
-Wcompat
-Wincomplete-record-updates
@@ -65,50 +57,6 @@ library
hs-source-dirs: src
- if flag(rtview)
- exposed-modules: Cardano.Tracer.Handlers.RTView.Run
- Cardano.Tracer.Handlers.RTView.Utils
-
- Cardano.Tracer.Handlers.RTView.State.Displayed
- Cardano.Tracer.Handlers.RTView.State.EraSettings
- Cardano.Tracer.Handlers.RTView.State.Historical
- Cardano.Tracer.Handlers.RTView.State.Last
-
- Cardano.Tracer.Handlers.RTView.UI.CSS.Bulma
- Cardano.Tracer.Handlers.RTView.UI.CSS.Own
- Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Column
- Cardano.Tracer.Handlers.RTView.UI.HTML.Node.EKG
- Cardano.Tracer.Handlers.RTView.UI.HTML.About
- Cardano.Tracer.Handlers.RTView.UI.HTML.Body
- Cardano.Tracer.Handlers.RTView.UI.HTML.Logs
- Cardano.Tracer.Handlers.RTView.UI.HTML.Main
- Cardano.Tracer.Handlers.RTView.UI.HTML.NoNodes
- Cardano.Tracer.Handlers.RTView.UI.HTML.Notifications
- Cardano.Tracer.Handlers.RTView.UI.JS.ChartJS
- Cardano.Tracer.Handlers.RTView.UI.JS.Charts
- Cardano.Tracer.Handlers.RTView.UI.JS.Utils
- Cardano.Tracer.Handlers.RTView.UI.Img.Icons
- Cardano.Tracer.Handlers.RTView.UI.Charts
- Cardano.Tracer.Handlers.RTView.UI.Logs
- Cardano.Tracer.Handlers.RTView.UI.Notifications
- Cardano.Tracer.Handlers.RTView.UI.Theme
- Cardano.Tracer.Handlers.RTView.UI.Types
- Cardano.Tracer.Handlers.RTView.UI.Utils
-
- Cardano.Tracer.Handlers.RTView.Update.Chain
- Cardano.Tracer.Handlers.RTView.Update.EKG
- Cardano.Tracer.Handlers.RTView.Update.EraSettings
- Cardano.Tracer.Handlers.RTView.Update.Historical
- Cardano.Tracer.Handlers.RTView.Update.KES
- Cardano.Tracer.Handlers.RTView.Update.Leadership
- Cardano.Tracer.Handlers.RTView.Update.Logs
- Cardano.Tracer.Handlers.RTView.Update.NodeInfo
- Cardano.Tracer.Handlers.RTView.Update.NodeState
- Cardano.Tracer.Handlers.RTView.Update.Nodes
- Cardano.Tracer.Handlers.RTView.Update.Reload
- Cardano.Tracer.Handlers.RTView.Update.Resources
- Cardano.Tracer.Handlers.RTView.Update.Transactions
-
exposed-modules: Cardano.Tracer.Acceptors.Client
Cardano.Tracer.Acceptors.Run
Cardano.Tracer.Acceptors.Server
@@ -154,19 +102,11 @@ library
autogen-modules: Paths_cardano_tracer
- if flag(rtview)
- build-depends:
- cardano-git-rev ^>=0.2.2
- , cassava
- , string-qq
- , threepenny-gui
- , utf8-string
-
if flag(systemd) && os(linux)
build-depends: libsystemd-journal >= 1.4.4
other-modules: Cardano.Tracer.Handlers.Logs.Journal.Systemd
- if (flag(systemd) && os(linux)) || flag(rtview)
+ if flag(systemd) && os(linux)
build-depends: unordered-containers
build-depends: aeson >= 2.1.0.0
@@ -448,8 +388,6 @@ benchmark cardano-tracer-bench
main-is: cardano-tracer-bench.hs
- if flag(rtview)
- build-depends: stm <2.5.2 || >=2.5.3
build-depends: cardano-tracer
, criterion
, directory
diff --git a/cardano-tracer/configuration/complete-example.json b/cardano-tracer/configuration/complete-example.json
index eea7606ab44..26d27c76e95 100644
--- a/cardano-tracer/configuration/complete-example.json
+++ b/cardano-tracer/configuration/complete-example.json
@@ -14,10 +14,6 @@
"epHost": "127.0.0.1",
"epPort": 3000
},
- "hasRTView": {
- "epHost": "127.0.0.1",
- "epPort": 3300
- },
"logging": [
{
"logRoot": "/tmp/cardano-tracer-h-logs",
diff --git a/cardano-tracer/configuration/complete-example.yaml b/cardano-tracer/configuration/complete-example.yaml
index a4004864762..e1bd92955c0 100644
--- a/cardano-tracer/configuration/complete-example.yaml
+++ b/cardano-tracer/configuration/complete-example.yaml
@@ -12,9 +12,6 @@ hasEKG:
hasPrometheus:
epHost: 127.0.0.1
epPort: 3000
-hasRTView:
- epHost: 127.0.0.1
- epPort: 3300
logging:
- logRoot: "/tmp/cardano-tracer-h-logs"
logMode: FileMode
diff --git a/cardano-tracer/configuration/minimal-example-rtview.json b/cardano-tracer/configuration/minimal-example-rtview.json
deleted file mode 100644
index 859582a854b..00000000000
--- a/cardano-tracer/configuration/minimal-example-rtview.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "networkMagic": 764824073,
- "network": {
- "tag": "AcceptAt",
- "contents": "/tmp/forwarder.sock"
- },
- "hasRTView": {
- "epHost": "127.0.0.1",
- "epPort": 3300
- },
- "logging": [
- {
- "logRoot": "/tmp/cardano-tracer-logs",
- "logMode": "FileMode",
- "logFormat": "ForMachine"
- }
- ]
-}
diff --git a/cardano-tracer/configuration/minimal-example-rtview.yaml b/cardano-tracer/configuration/minimal-example-rtview.yaml
deleted file mode 100644
index 7e21e077ed0..00000000000
--- a/cardano-tracer/configuration/minimal-example-rtview.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-networkMagic: 764824073
-network:
- tag: AcceptAt
- contents: "/tmp/forwarder.sock"
-hasRTView:
- epHost: 127.0.0.1
- epPort: 3300
-logging:
-- logRoot: "/tmp/cardano-tracer-logs"
- logMode: FileMode
- logFormat: ForMachine
diff --git a/cardano-tracer/docs/cardano-rtview.md b/cardano-tracer/docs/cardano-rtview.md
deleted file mode 100644
index 173cf3d9d18..00000000000
--- a/cardano-tracer/docs/cardano-rtview.md
+++ /dev/null
@@ -1,195 +0,0 @@
-# Cardano RTView
-
-> Attention: RTView is hidden behind a build flag. Enable with this cabal flag: `-f +rtview`.
-
-RTView is an optional part of `cardano-tracer` [service](https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-tracer.md). It is a real-time monitoring tool for Cardano nodes (RTView is an abbreviation for "Real Time View"). It provides an interactive web page where you can see different kinds of information about connected nodes.
-
-RTView is not feature complete and is thus disabled by default. Being
-an experimental/optional component of `cardano-tracer` we will still
-guarantee it remains buildable and usable in its current state.
-
-# Contents
-
-1. [Introduction](#introduction)
- 1. [Motivation](#motivation)
- 2. [Overview](#overview)
-2. [TL;DR: Quick Start](#tldr-quick-start)
-3. [Configuration](#configuration)
-4. [Notifications](#notifications)
- 1. [SMTP settings](#smtp-settings)
- 2. [Note for Gmail users](#note-for-gmail-users)
- 3. [Events](#events)
- 4. [Notify period](#notify-period)
-5. [UI](#ui)
- 1. [Security Alert](#security-alert)
- 2. [Missing Metrics](#missing-metrics)
- 3. [Producer or Relay?](#producer-or-relay)
-
-# Introduction
-
-## Motivation
-
-For a long time, Stake Pool Operators used third-party tools for monitoring their Cardano nodes, such as [Grafana](https://grafana.com/grafana/dashboards/12469)-based installations. These third-party solutions work, but they have two main problems:
-
-1. Complex setup, especially for a non-technical person.
-2. Limited kinds of displayed information. For example, metrics can be shown, but error messages cannot.
-
-RTView solves both of them:
-
-1. Its setup is as simple as possible: if you have `cardano-tracer` installed, you already have RTView.
-2. Because of using special network protocols integrated into the node, RTView can display any information that the node can provide.
-
-## Overview
-
-You can think of RTView as a SPA (Single Page Application) that can be opened in any modern browser. All the information on it changes dynamically, so you shouldn't refresh it.
-
-When you open it for the first time, you'll see a help message about required configuration.
-
-After your node connects to `cardano-tracer`, you'll see a column with different information, such as the node's name, version, protocol, era, sync percentage, KES values, blockchain info, etc. There is a separate column for each connected node, so you can see and compare their data.
-
-Also, there are dynamic charts for different metrics, such as system metrics, blockchain metrics, transaction metrics, etc.
-
-# TL;DR: Quick Start
-
-If you just want to see what is RTView in action - all you need is following simple steps. For simplicity, it is assumed that `cardano-tracer` and your node will run on the same machine with Unix-like OS (for example, Linux).
-
-## Tracer's Side
-
-First of all, take configuration file `minimal-example-rtview.json` from `cardano-tracer/configuration` directory.
-
-Next, run `cardano-tracer` with this configuration file like this:
-
-```
-$ ./cardano-tracer -c minimal-example-rtview.json
-```
-
-## Node's Side
-
-Now, open your node's configuration file (if you took it from the [Cardano World Repository](https://book.world.dev.cardano.org/environments.html), it's `config.json`) and add the following lines in it:
-
-```
-"UseTraceDispatcher": true,
-"TraceOptions": {
- "": {
- "severity": "Notice",
- "detail": "DNormal",
- "backends": [
- "Stdout MachineFormat",
- "EKGBackend",
- "Forwarder"
- ]
- }
-},
-"TraceOptionResourceFrequency": 5000,
-"TurnOnLogMetrics": false,
-"TraceOptionNodeName": "relay-1"
-```
-
-Please make sure you specified the _real name_ of your node in `TraceOptionNodeName` field.
-
-Finally, run the node with this configuration file and add tracer's CLI-parameter like this:
-
-```
-$ ./cardano-node run --tracer-socket-path-connect /tmp/forwarder.sock
-```
-
-That's it. Now you can open [https://127.0.0.1:3300](https://127.0.0.1:3300/) in your browser.
-
-### Important
-
-Please note that the node has another CLI-parameter for the socket:
-
-```
---socket-path FILEPATH Path to a cardano-node socket
-```
-
-But `--socket-path` is **not** for working with `cardano-tracer`. The only CLI-parameters you need to specify the path to the socket for working with `cardano-tracer` are `--tracer-socket-path-connect` (if your node should _initiate_ connection) or `--tracer-socket-path-accept` (if your node should _accept_ connection). They are **not** related to `--socket-path`, so you can use these CLI-parameters independently from each other.
-
-# Configuration
-
-Since RTView is a part of `cardano-tracer`, the only thing you need to do is to enable RTView (because it's disabled by default). To do it, please add the following lines to `cardano-tracer`'s configuration file.
-
-If you use `json`-configuration:
-
-```
-"hasRTView": {
- "epHost": "127.0.0.1",
- "epPort": 3300
-}
-```
-
-Or, if you use `yaml`-configuration:
-
-```
-hasRTView:
- epHost: 127.0.0.1
- epPort: 3300
-```
-
-Here `epHost` and `epPort` specify the host and the port for RTView web page. Also, you can find examples of configuration files in [configuration directory](https://github.com/intersectmbo/cardano-node/tree/master/cardano-tracer/configuration).
-
-That's it. Now run `cardano-tracer` and open [127.0.0.1:3300](https://127.0.0.1:3300) in your browser.
-
-# Notifications
-
-RTView can send notifications about specified events (for example, warnings or errors). Click on the bell icon on the top bar to see the corresponding settings.
-
-## SMTP settings
-
-Technically, RTView contains an email client that sends emails using SMTP. That's why you need the SMTP settings of your email provider. Please fill in all the inputs marked with an asterisk in `Settings` window.
-
-You can use `Send test email` button to check if your email settings are correct.
-
-## Note for Gmail users
-
-If you want to set up email notifications using your Gmail account, please make sure that `2-Step Verification` is enabled. You can check it in `Google Account` -> `Security`. After you enabled `2-Step Verification`, please generate the new app password (if you don't have one already) in `Security` -> `App passwords`. You'll need this app password for RTView settings.
-
-Now you can set up RTView notifications:
-
-1. `SMTP host`: `smtp.gmail.com`
-
-2. `SMTP port`: `587`
-
-3. `Username`: most likely, it's your email address
-
-4. `Password`: app password you've generated
-
-5. `SSL`: `STARTTLS`
-
-## Events
-
-When you click on the bell icon on the top bar, you can open `Events` window. Here you can specify events you want to be notified about.
-
-For example, let's have a look at `Warnings` (i.e. all the messages from the node with `Warning` severity level). By default, the corresponding switch is disabled, which means that you won't be notified about warnings at all. But if you enable that switch, you will periodically receive a notification about warnings, if any.
-
-You can use a switch `All events` in the bottom of the window to enable/disable all the events at once. Please note that if you disable all the events, the bell icon on the top bar becomes "slashed".
-
-## Notify period
-
-You can specify how frequently you want to receive notifications for a specific event. To do it, select a value from the dropdown list at the right of the event switch. There are values from `Immediately` to `Every 12 hours`.
-
-If you selected `Immediately`, the new email with the associated event(s) will be sent right away. It can be used for critical events: most likely, you want to know about such events as soon as possible.
-
-If you selected `Every 12 hours`, the new email with associated event(s) will be sent only two times a day. It can be used for non-critical events, like `Warnings`.
-
-# UI
-
-## Security Alert
-
-When you open the web page for the first time, you'll see a warning from your browser, something like "Potential Security Risk Ahead" or "Your connection is not private". This is because `https`-connection between your browser and RTView is using [self-signed certificate](https://en.wikipedia.org/wiki/Self-signed_certificate) generated by [openssl](https://www.openssl.org/) program. So click to `Advanced` button and open the page. Technically, there is no risk at all - your connection **is** private.
-
-## Missing Metrics
-
-When the node connects to `cardano-tracer` and RTView's page displays the first data from it, you may see that some other data is missing: there is `—` instead of particular value. There are following possible reasons for it:
-
-1. The node didn't provide corresponding metrics _yet_, because some information (for example, sync percent) can be displayed only after a few minutes after node's start.
-2. The node _cannot_ provide corresponding metrics. For example, forging-related metrics make sense only for producer node, not for relay node.
-3. The node doesn't provide corresponding metrics because of node's configuration. For example, it can specify severity filter for particular metric, so it just filtered out.
-4. The node is incompatible with `cardano-tracer` (they were built from different branches of `cardano-node` repository). For example, particular metric may be renamed in the node, but `cardano-tracer` is still using outdated name.
-
-## Producer or Relay?
-
-If the node is configured as a _producer_ - i.e. it can forge the new blocks - you will see a hammer icon near the node's name. So, there are two possible reasons if you don't see this hammer icon:
-
-1. The node is configured as a relay, not as a producer.
-2. The node has not reported its "producer status" yet.
diff --git a/cardano-tracer/docs/cardano-tracer.md b/cardano-tracer/docs/cardano-tracer.md
index 8e3c54abee4..f96c85426b9 100644
--- a/cardano-tracer/docs/cardano-tracer.md
+++ b/cardano-tracer/docs/cardano-tracer.md
@@ -22,7 +22,6 @@
- [Prometheus HTTP service discovery](#prometheus-http-service-discovery)
- [EKG Monitoring](#ekg-monitoring)
- [Verbosity](#verbosity)
- - [RTView](#rtview)
# Introduction
@@ -559,6 +558,4 @@ The optional field `verbosity` specifies the verbosity level for the `cardano-tr
Please note that if you skip this field, `ErrorsOnly` verbosity will be used by default.
-## RTView
-It is a real-time monitoring tool for Cardano nodes (RTView is an abbreviation for "Real Time View"). It provides an interactive web page where you can see different kinds of information about connected nodes. Please read its documentation [here](https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-rtview.md).
diff --git a/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs b/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs
index 997fb031b57..5762e669497 100644
--- a/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Acceptors/Client.hs
@@ -52,14 +52,13 @@ import Trace.Forward.Utils.Version (ForwardingVersion (..), Forwarding
runAcceptorsClient
:: TracerEnv
- -> TracerEnvRTView
-> Net.HowToConnect
-> ( EKGF.AcceptorConfiguration
, TF.AcceptorConfiguration TraceObject
, DPF.AcceptorConfiguration
)
-> IO ()
-runAcceptorsClient tracerEnv tracerEnvRTView howToConnect (ekgConfig, tfConfig, dpfConfig) = withIOManager \iocp -> do
+runAcceptorsClient tracerEnv howToConnect (ekgConfig, tfConfig, dpfConfig) = withIOManager \iocp -> do
traceWith (teTracer tracerEnv) $ TracerSockConnecting
(case howToConnect of
Net.LocalPipe p -> p
@@ -75,7 +74,7 @@ runAcceptorsClient tracerEnv tracerEnvRTView howToConnect (ekgConfig, tfConfig,
-- there is no mechanism to disable some of them.
appInitiator
[ (runEKGAcceptorInit tracerEnv ekgConfig errorHandler, 1)
- , (runTraceObjectsAcceptorInit tracerEnv tracerEnvRTView tfConfig errorHandler, 2)
+ , (runTraceObjectsAcceptorInit tracerEnv tfConfig errorHandler, 2)
, (runDataPointsAcceptorInit tracerEnv dpfConfig errorHandler, 3)
]
Net.RemoteSocket host port -> do
@@ -89,7 +88,7 @@ runAcceptorsClient tracerEnv tracerEnvRTView howToConnect (ekgConfig, tfConfig,
-- there is no mechanism to disable some of them.
appInitiator
[ (runEKGAcceptorInit tracerEnv ekgConfig errorHandler, 1)
- , (runTraceObjectsAcceptorInit tracerEnv tracerEnvRTView tfConfig errorHandler, 2)
+ , (runTraceObjectsAcceptorInit tracerEnv tfConfig errorHandler, 2)
, (runDataPointsAcceptorInit tracerEnv dpfConfig errorHandler, 3)
]
@@ -108,9 +107,6 @@ runAcceptorsClient tracerEnv tracerEnvRTView howToConnect (ekgConfig, tfConfig,
errorHandler connId = do
deregisterNodeId tracerEnv (connIdToNodeId connId)
removeDisconnectedNode tracerEnv connId
-#if RTVIEW
- notifyAboutNodeDisconnected tracerEnvRTView connId
-#endif
doConnectToForwarderLocal
:: Snocket IO LocalSocket LocalAddress
@@ -201,17 +197,16 @@ runEKGAcceptorInit tracerEnv ekgConfig errorHandler =
runTraceObjectsAcceptorInit
:: Show addr
=> TracerEnv
- -> TracerEnvRTView
-> TF.AcceptorConfiguration TraceObject
-> (ConnectionId addr -> IO ())
-> RunMiniProtocol 'Mux.InitiatorMode
(MinimalInitiatorContext addr)
responderCtx
LBS.ByteString IO () Void
-runTraceObjectsAcceptorInit tracerEnv tracerEnvRTView tfConfig errorHandler =
+runTraceObjectsAcceptorInit tracerEnv tfConfig errorHandler =
acceptTraceObjectsInit
tfConfig
- (traceObjectsHandler tracerEnv tracerEnvRTView . connIdToNodeId . micConnectionId)
+ (traceObjectsHandler tracerEnv . connIdToNodeId . micConnectionId)
(errorHandler . micConnectionId)
runDataPointsAcceptorInit
diff --git a/cardano-tracer/src/Cardano/Tracer/Acceptors/Run.hs b/cardano-tracer/src/Cardano/Tracer/Acceptors/Run.hs
index 028b6833f88..1af4537f5a3 100644
--- a/cardano-tracer/src/Cardano/Tracer/Acceptors/Run.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Acceptors/Run.hs
@@ -32,20 +32,20 @@ import qualified Trace.Forward.Protocol.TraceObject.Type as TOF
-- There are two "network modes" for acceptors:
-- 1. Server mode, when the tracer accepts connections from any number of nodes.
-- 2. Client mode, when the tracer initiates connections to specified number of nodes.
-runAcceptors :: TracerEnv -> TracerEnvRTView -> IO ()
-runAcceptors tracerEnv@TracerEnv{teTracer} tracerEnvRTView = do
+runAcceptors :: TracerEnv -> IO ()
+runAcceptors tracerEnv@TracerEnv{teTracer} = do
traceWith teTracer $ TracerStartedAcceptors network
case network of
AcceptAt howToConnect ->
-- Run one server that accepts connections from the nodes.
runInLoop
- (runAcceptorsServer tracerEnv tracerEnvRTView howToConnect $ acceptorsConfigs (show howToConnect))
+ (runAcceptorsServer tracerEnv howToConnect $ acceptorsConfigs (show howToConnect))
(handleOnInterruption howToConnect) initialPauseInSec 10
ConnectTo localSocks ->
-- Run N clients that initiate connections to the nodes.
forConcurrently_ (NE.nub localSocks) \howToConnect ->
runInLoop
- (runAcceptorsClient tracerEnv tracerEnvRTView howToConnect $ acceptorsConfigs (show howToConnect))
+ (runAcceptorsClient tracerEnv howToConnect $ acceptorsConfigs (show howToConnect))
(handleOnInterruption howToConnect) initialPauseInSec 30
where
handleOnInterruption howToConnect (SomeException e)
diff --git a/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs b/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs
index 18b2b373835..fa75a6170dd 100644
--- a/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Acceptors/Server.hs
@@ -53,14 +53,13 @@ import Trace.Forward.Utils.Version (ForwardingVersion (..), Forwarding
runAcceptorsServer
:: TracerEnv
- -> TracerEnvRTView
-> Net.HowToConnect
-> ( EKGF.AcceptorConfiguration
, TF.AcceptorConfiguration TraceObject
, DPF.AcceptorConfiguration
)
-> IO ()
-runAcceptorsServer tracerEnv tracerEnvRTView howToConnect ( ekgConfig, tfConfig, dpfConfig) =
+runAcceptorsServer tracerEnv howToConnect (ekgConfig, tfConfig, dpfConfig) =
withIOManager \iocp -> do
traceWith (teTracer tracerEnv) $ TracerSockListen (show howToConnect)
case howToConnect of
@@ -74,7 +73,7 @@ runAcceptorsServer tracerEnv tracerEnvRTView howToConnect ( ekgConfig, tfConfig,
-- there is no mechanism to disable some of them.
appResponder
[ (runEKGAcceptor tracerEnv ekgConfig errorHandler, 1)
- , (runTraceObjectsAcceptor tracerEnv tracerEnvRTView tfConfig errorHandler, 2)
+ , (runTraceObjectsAcceptor tracerEnv tfConfig errorHandler, 2)
, (runDataPointsAcceptor tracerEnv dpfConfig errorHandler, 3)
]
@@ -89,7 +88,7 @@ runAcceptorsServer tracerEnv tracerEnvRTView howToConnect ( ekgConfig, tfConfig,
-- there is no mechanism to disable some of them.
appResponder
[ (runEKGAcceptor tracerEnv ekgConfig errorHandler, 1)
- , (runTraceObjectsAcceptor tracerEnv tracerEnvRTView tfConfig errorHandler, 2)
+ , (runTraceObjectsAcceptor tracerEnv tfConfig errorHandler, 2)
, (runDataPointsAcceptor tracerEnv dpfConfig errorHandler, 3)
]
where
@@ -107,9 +106,6 @@ runAcceptorsServer tracerEnv tracerEnvRTView howToConnect ( ekgConfig, tfConfig,
errorHandler connId = do
deregisterNodeId tracerEnv (connIdToNodeId connId)
removeDisconnectedNode tracerEnv connId
-#if RTVIEW
- notifyAboutNodeDisconnected tracerEnvRTView connId
-#endif
doListenToForwarderLocal
:: Snocket IO LocalSocket LocalAddress
@@ -191,19 +187,16 @@ runEKGAcceptor tracerEnv ekgConfig errorHandler =
runTraceObjectsAcceptor
:: Show addr
=> TracerEnv
- -> TracerEnvRTView
-> TF.AcceptorConfiguration TraceObject
-> (ConnectionId addr -> IO ())
-> RunMiniProtocol 'Mux.ResponderMode
initiatorCtx
(ResponderContext addr)
LBS.ByteString IO Void ()
-runTraceObjectsAcceptor tracerEnv
- tracerEnvRTView
- tfConfig errorHandler =
+runTraceObjectsAcceptor tracerEnv tfConfig errorHandler =
acceptTraceObjectsResp
tfConfig
- (traceObjectsHandler tracerEnv tracerEnvRTView . connIdToNodeId . rcConnectionId)
+ (traceObjectsHandler tracerEnv . connIdToNodeId . rcConnectionId)
(errorHandler . rcConnectionId)
runDataPointsAcceptor
diff --git a/cardano-tracer/src/Cardano/Tracer/Acceptors/Utils.hs b/cardano-tracer/src/Cardano/Tracer/Acceptors/Utils.hs
index cfb3d71f53a..2ab746f8917 100644
--- a/cardano-tracer/src/Cardano/Tracer/Acceptors/Utils.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Acceptors/Utils.hs
@@ -9,20 +9,12 @@ module Cardano.Tracer.Acceptors.Utils
( prepareDataPointRequestor
, prepareMetricsStores
, removeDisconnectedNode
- , notifyAboutNodeDisconnected
, store
) where
-#if RTVIEW
-import Cardano.Logging (SeverityS (..))
-#endif
import qualified Cardano.Timeseries.Component as Timeseries
import Cardano.Timeseries.Domain.Types (MetricIdentifier)
import Cardano.Tracer.Environment
-#if RTVIEW
-import Cardano.Tracer.Handlers.Notifications.Types
-import Cardano.Tracer.Handlers.Notifications.Utils
-#endif
import Cardano.Tracer.Time (getTimeMs)
import Cardano.Tracer.Types
import Cardano.Tracer.Utils
@@ -35,9 +27,6 @@ import Data.Foldable
import qualified Data.Map.Strict as M
import Data.Maybe (mapMaybe)
import qualified Data.Set as S
-#if RTVIEW
-import Data.Time.Clock.System (getSystemTime, systemToUTCTime)
-#endif
import qualified System.Metrics as EKG
import System.Metrics.ReqResp
import System.Metrics.Store.Acceptor (MetricsLocalStore, emptyMetricsLocalStore,
@@ -105,22 +94,6 @@ removeDisconnectedNode tracerEnv connId =
TracerEnv{teConnectedNodes, teConnectedNodesNames, teAcceptedMetrics, teDPRequestors} = tracerEnv
nodeId = connIdToNodeId connId
-notifyAboutNodeDisconnected
- :: Show addr
- => TracerEnvRTView
- -> ConnectionId addr
- -> IO ()
-#if RTVIEW
-notifyAboutNodeDisconnected TracerEnvRTView{teEventsQueues} connId = do
- now <- systemToUTCTime <$> getSystemTime
- addNewEvent teEventsQueues EventNodeDisconnected $ Event nodeId now Warning msg
- where
- nodeId = connIdToNodeId connId
- msg = "Node is disconnected"
-#else
-notifyAboutNodeDisconnected _ _ = pure ()
-#endif
-
store :: TracerEnv -> NodeId -> (EKG.Store, TVar MetricsLocalStore) -> Response -> IO ()
store tracerEnv (NodeId nodeId) (ekgStore, localStore) resp@(ResponseMetrics ms) = do
storeMetrics resp ekgStore localStore
diff --git a/cardano-tracer/src/Cardano/Tracer/CLI.hs b/cardano-tracer/src/Cardano/Tracer/CLI.hs
index 0cbac8fb7c7..fbb369c9f9b 100644
--- a/cardano-tracer/src/Cardano/Tracer/CLI.hs
+++ b/cardano-tracer/src/Cardano/Tracer/CLI.hs
@@ -30,7 +30,7 @@ parseTracerParams = TracerParams
strOption
( long "state-dir"
<> metavar "FILEPATH"
- <> help "If specified, RTView saves its state in this directory"
+ <> help "If specified, cardano-tracer saves its state in this directory"
<> completer (bashCompleter "file")
)
)
diff --git a/cardano-tracer/src/Cardano/Tracer/Configuration.hs b/cardano-tracer/src/Cardano/Tracer/Configuration.hs
index daee2dbc080..1803bc00968 100644
--- a/cardano-tracer/src/Cardano/Tracer/Configuration.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Configuration.hs
@@ -163,7 +163,6 @@ data TracerConfig = TracerConfig
, ekgRequestFreq :: !(Maybe Pico) -- ^ How often to request for EKG-metrics, in seconds.
, hasEKG :: !(Maybe Endpoint) -- ^ Endpoint for EKG web-page.
, hasPrometheus :: !(Maybe Endpoint) -- ^ Endpoint for Prometheus web-page.
- , hasRTView :: !(Maybe Endpoint) -- ^ Endpoint for RTView web-page.
, hasTimeseries :: !(Maybe Endpoint)
, tlsCertificate :: !(Maybe Certificate)
-- | Socket for tracer's to reforward on. Second member of the triplet is the list of prefixes to reforward.
@@ -207,7 +206,6 @@ wellFormed TracerConfig
, hasEKG
, hasPrometheus
, logging
- , hasRTView
} =
if null problems
then Right ()
@@ -222,11 +220,10 @@ wellFormed TracerConfig
, check "duplicate ports in config" $ hasDuplicates ports
, check "no host(s) in hasEKG" . nullEndpoint =<< hasEKG
, check "no host in hasPrometheus" . nullEndpoint =<< hasPrometheus
- , check "no host in hasRTView" . nullEndpoint =<< hasRTView
]
ports :: [Port]
- ports = epPort <$> catMaybes [hasEKG, hasPrometheus, hasRTView]
+ ports = epPort <$> catMaybes [hasEKG, hasPrometheus]
check :: String -> Bool -> Maybe String
check msg True = Just msg
diff --git a/cardano-tracer/src/Cardano/Tracer/Environment.hs b/cardano-tracer/src/Cardano/Tracer/Environment.hs
index d5cbcce3d8e..5ea9ef3fecb 100644
--- a/cardano-tracer/src/Cardano/Tracer/Environment.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Environment.hs
@@ -1,19 +1,10 @@
-{-# LANGUAGE CPP #-}
-
module Cardano.Tracer.Environment
( TracerEnv (..)
- , TracerEnvRTView (..)
) where
import Cardano.Logging.Types
import Cardano.Timeseries.Component (TimeseriesHandle)
import Cardano.Tracer.Configuration
-#if RTVIEW
-import Cardano.Tracer.Handlers.Notifications.Types
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.UI.Types
-import Cardano.Tracer.Handlers.State.TraceObjects
-#endif
import Cardano.Tracer.MetaTrace
import Cardano.Tracer.Types
@@ -39,17 +30,3 @@ data TracerEnv = TracerEnv
, teMetricsHelp :: ![(Text, Builder)]
, teTimeseriesHandle :: !(Maybe TimeseriesHandle)
}
-
-#if RTVIEW
--- | Environment for all functions.
-data TracerEnvRTView = TracerEnvRTView
- { teSavedTO :: !SavedTraceObjects
- , teBlockchainHistory :: !BlockchainHistory
- , teResourcesHistory :: !ResourcesHistory
- , teTxHistory :: !TransactionsHistory
- , teEventsQueues :: !EventsQueues
- , teRTViewPageOpened :: !WebPageStatus
- }
-#else
-data TracerEnvRTView = TracerEnvRTView
-#endif
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/Logs/TraceObjects.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/Logs/TraceObjects.hs
index dcf439b9c56..003c938e6b8 100644
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/Logs/TraceObjects.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Handlers/Logs/TraceObjects.hs
@@ -1,7 +1,6 @@
{-# OPTIONS_GHC -fno-warn-unused-local-binds #-}
{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE CPP #-}
module Cardano.Tracer.Handlers.Logs.TraceObjects
( traceObjectsHandler
@@ -13,16 +12,10 @@ import Cardano.Tracer.Configuration
import Cardano.Tracer.Environment
import Cardano.Tracer.Handlers.Logs.File
import Cardano.Tracer.Handlers.Logs.Journal
-#if RTVIEW
-import Cardano.Tracer.Handlers.RTView.Run
-#endif
import Cardano.Tracer.Types
import Cardano.Tracer.Utils
import Control.Concurrent.Async (forConcurrently_)
-#if RTVIEW
-import Control.Monad.Extra (whenJust)
-#endif
import qualified Data.Map as Map
import System.IO (Handle, hClose)
@@ -30,12 +23,11 @@ import System.IO (Handle, hClose)
-- from 'trace-forward' library.
traceObjectsHandler
:: TracerEnv -- ^ Tracer environment.
- -> TracerEnvRTView -- ^ Tracer environment, for RTView.
-> NodeId -- ^ An id of the node 'TraceObject's were received from.
-> [TraceObject] -- ^ The list of received 'TraceObject's (may be empty).
-> IO ()
-traceObjectsHandler _ _ _ [] = return ()
-traceObjectsHandler tracerEnv _tracerEnvRTView nodeId traceObjects = do
+traceObjectsHandler _ _ [] = return ()
+traceObjectsHandler tracerEnv nodeId traceObjects = do
nodeName <- askNodeName tracerEnv nodeId
forConcurrently_ logging \loggingParams@LoggingParams{logMode, logFormat} -> do
showProblemIfAny verbosity teTracer do
@@ -45,14 +37,9 @@ traceObjectsHandler tracerEnv _tracerEnvRTView nodeId traceObjects = do
loggingParams nodeName teCurrentLogLock traceObjects
JournalMode ->
writeTraceObjectsToJournal logFormat nodeName traceObjects
-#if RTVIEW
- whenJust hasRTView \_ -> let
- TracerEnvRTView { teSavedTO } = _tracerEnvRTView
- in saveTraceObjects teSavedTO nodeId traceObjects
-#endif
teReforwardTraceObjects traceObjects where
TracerEnv
- { teConfig = TracerConfig{ logging, verbosity, hasRTView }
+ { teConfig = TracerConfig{ logging, verbosity }
, teCurrentLogLock
, teReforwardTraceObjects
, teRegistry
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Email.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Email.hs
index 8487bb06fcb..1713178ba97 100644
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Email.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Email.hs
@@ -30,7 +30,7 @@ createAndSendEmail settings@EmailSettings {esEmailTo, esEmailFrom, esSubject} bo
sendEmail settings $ simpleMail' to from esSubject body
where
to = Address Nothing esEmailTo
- from = Address (Just "Cardano RTView") esEmailFrom
+ from = Address (Just "cardano-tracer") esEmailFrom
body = LT.fromStrict bodyMessage
createAndSendTestEmail
@@ -38,7 +38,7 @@ createAndSendTestEmail
-> IO StatusMessage
createAndSendTestEmail settings = createAndSendEmail settings body
where
- body = "This is a test notification from Cardano RTView. Congrats: your email settings are correct!"
+ body = "This is a test notification from cardano-tracer. Congrats: your email settings are correct!"
sendEmail
:: EmailSettings
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Send.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Send.hs
index 9e5a918858c..9e14b2e040c 100644
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Send.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Handlers/Notifications/Send.hs
@@ -58,7 +58,7 @@ sendNotification emailSettings newEvents nodeIdsWithNames =
body = preface <> events
preface = T.intercalate nl
- [ "This is a notification from Cardano RTView service."
+ [ "This is a notification from cardano-tracer."
, ""
, "The following " <> (if onlyOne then "event" else "events") <> " occurred:"
, ""
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Run.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Run.hs
deleted file mode 100644
index c5e119b5e80..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Run.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE NamedFieldPuns #-}
-
-module Cardano.Tracer.Handlers.RTView.Run
- ( runRTView
- , module Cardano.Tracer.Handlers.Notifications.Utils
- , module Cardano.Tracer.Handlers.State.TraceObjects
- ) where
-
-import Cardano.Tracer.Configuration
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.Notifications.Utils
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.State.EraSettings
-import Cardano.Tracer.Handlers.RTView.State.Last
-import Cardano.Tracer.Handlers.RTView.UI.HTML.Main
-import Cardano.Tracer.Handlers.RTView.Update.EraSettings
-import Cardano.Tracer.Handlers.RTView.Update.Historical
-import Cardano.Tracer.Handlers.State.TraceObjects
-import Cardano.Tracer.MetaTrace
-import Cardano.Tracer.Utils (sequenceConcurrently_)
-
-import Control.Monad.Extra (whenJust)
-import Data.ByteString.UTF8 (fromString)
-import System.Time.Extra (sleep)
-
-import qualified Graphics.UI.Threepenny as UI
-
--- | RTView is a part of 'cardano-tracer' that provides an ability
--- to monitor Cardano nodes in a real-time. The core idea is simple:
--- RTView periodically receives some informations from the connected
--- node(s) and displays that information on a web-page.
---
--- The web-page is built using 'threepenny-gui' library. Please note
--- Gitub-version of this library is used, not Hackage-version!
-
-runRTView :: TracerEnv -> TracerEnvRTView -> IO ()
-runRTView tracerEnv@TracerEnv{teTracer} tracerEnvRTView =
- whenJust hasRTView \endpoint -> do
- traceWith teTracer TracerStartedRTView
- -- Pause to prevent collision between "Listening"-notifications from servers.
- sleep 0.3
- -- Initialize displayed stuff outside of main page renderer,
- -- to be able to update corresponding elements after page reloading.
- displayedElements <- initDisplayedElements
- reloadFlag <- initPageReloadFlag
- -- We have to collect different information from the node and save it
- -- independently from RTView web-server. As a result, we'll be able to
- -- show charts with historical data (where X axis is the time) for the
- -- period when RTView web-page wasn't opened.
- lastResources <- initLastResources
- eraSettings <- initErasSettings
-
- sequenceConcurrently_
- [ UI.startGUI (config endpoint) $
- mkMainPage
- tracerEnv
- tracerEnvRTView
- displayedElements
- eraSettings
- reloadFlag
- logging
- network
- , runHistoricalUpdater tracerEnv tracerEnvRTView lastResources
- , runHistoricalBackup tracerEnv tracerEnvRTView
- , runEraSettingsUpdater tracerEnv eraSettings
- ]
- where
- TracerConfig{network, logging, hasRTView} = teConfig tracerEnv
-
- -- RTView's web page is available via 'https://' url only.
- config :: Endpoint -> UI.Config
- config (Endpoint host port _) =
- UI.defaultConfig
- { UI.jsAddr = Just (fromString host)
- , UI.jsPort = Just port
- , UI.jsLog = const $ return () -- To hide 'threepenny-gui' internal messages.
- , UI.jsWindowReloadOnDisconnect = False
- , UI.jsUseSSL = Nothing
- }
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Displayed.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Displayed.hs
deleted file mode 100644
index 73ef4a3e4a2..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Displayed.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-module Cardano.Tracer.Handlers.RTView.State.Displayed
- ( DisplayedElements
- , PageReloadedFlag
- , cleanupDisplayedValues
- , getDisplayedValue
- , getDisplayedValuePure
- , initDisplayedElements
- , initPageReloadFlag
- , pageWasReload
- , pageWasNotReload
- , saveDisplayedValue
- , updateDisplayedElements
- ) where
-
-import Cardano.Tracer.Types (NodeId)
-
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO, readTVarIO)
-import Data.List ((\\))
-import Data.Map.Strict (Map)
-import qualified Data.Map.Strict as M
-import Data.Set (Set)
-import qualified Data.Set as S
-import Data.Text (Text)
-
-type ElementId = Text
-type ElementValue = Text
-
--- | We store all currently displayed values for all elements in each node panel.
---
--- There are 2 reasons for it:
---
--- 1. If received 'TraceObject' contains the data with the same value again, we
--- won't update corresponding element, to keep web-traffic.
--- 2. If the user reloaded the page, all previously displayed elements will be
--- updated in the same state again.
---
-type DisplayedForNode = Map ElementId ElementValue
-type DisplayedElements = TVar (Map NodeId DisplayedForNode)
-
-initDisplayedElements :: IO DisplayedElements
-initDisplayedElements = newTVarIO M.empty
-
-cleanupDisplayedValues
- :: DisplayedElements
- -> IO ()
-cleanupDisplayedValues displayedElements = atomically $
- modifyTVar' displayedElements $ M.map (const M.empty)
-
-getDisplayedValue
- :: DisplayedElements
- -> NodeId
- -> ElementId
- -> IO (Maybe ElementValue)
-getDisplayedValue displayedElements nodeId elId =
- maybe Nothing (M.lookup elId) . M.lookup nodeId <$> readTVarIO displayedElements
-
-getDisplayedValuePure
- :: Map NodeId DisplayedForNode
- -> NodeId
- -> ElementId
- -> Maybe ElementValue
-getDisplayedValuePure displayed nodeId elId =
- maybe Nothing (M.lookup elId) . M.lookup nodeId $ displayed
-
-saveDisplayedValue
- :: DisplayedElements
- -> NodeId
- -> ElementId
- -> ElementValue
- -> IO ()
-saveDisplayedValue displayedElements nodeId elId elValue = atomically $
- modifyTVar' displayedElements $ \currentDisplayedEls ->
- case M.lookup nodeId currentDisplayedEls of
- Nothing -> M.insert nodeId (M.singleton elId elValue) currentDisplayedEls
- Just elsForNode ->
- let elsForNode' =
- case M.lookup elId elsForNode of
- Nothing -> M.insert elId elValue elsForNode
- Just _ -> M.adjust (const elValue) elId elsForNode
- in M.adjust (const elsForNode') nodeId currentDisplayedEls
-
--- | Makes 'displayedElements' up-to-date with 'connected'. There are 3 cases:
---
--- 1. 'displayedElements' contains all node ids from 'connected'
--- - just keep it.
--- 2. 'displayedElements' contains some node ids that is not presented in 'connected'
--- - remove them, these ids correspond to disconnected nodes.
--- 3. 'displayedElements' doesn't contain some node ids that presented in 'connected'
--- - add them, these ids correspond to newly connected nodes.
---
--- 2-nd and 3-d cases can coexist.
---
-updateDisplayedElements
- :: DisplayedElements
- -> Set NodeId
- -> IO ()
-updateDisplayedElements displayedElements connected = atomically $
- modifyTVar' displayedElements $ \currentDisplayedEls ->
- let connectedIds = S.toList connected
- displayedIds = M.keys currentDisplayedEls
- in if displayedIds == connectedIds
- then currentDisplayedEls -- 1-st case.
- else
- let disconnectedIds = displayedIds \\ connectedIds -- In 'displayedIds' but not in 'connectedIds'.
- newlyConnectedIds = connectedIds \\ displayedIds -- In 'connectedIds' but not in 'displayedIds'.
- withoutDisconnected = deleteDisconnected disconnectedIds currentDisplayedEls
- in addNewlyConnected newlyConnectedIds withoutDisconnected
- where
- deleteDisconnected = go
- where
- go [] els = els
- go (anId:ids) els = go ids $! M.delete anId els
-
- addNewlyConnected = go
- where
- go [] els = els
- go (anId:ids) els = go ids $! M.insert anId M.empty els
-
--- | If the user reloaded the web-page, after DOM re-rendering, we have to restore
--- displayed state of all elements that they have _before_ page's reload.
-type PageReloadedFlag = TVar Bool
-
-initPageReloadFlag :: IO PageReloadedFlag
-initPageReloadFlag = newTVarIO True
-
-pageWasReload, pageWasNotReload :: PageReloadedFlag -> IO ()
-pageWasReload = setFlag True
-pageWasNotReload = setFlag False
-
-setFlag :: Bool -> PageReloadedFlag -> IO ()
-setFlag state flag = atomically . modifyTVar' flag . const $ state
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/EraSettings.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/EraSettings.hs
deleted file mode 100644
index ccf437ba446..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/EraSettings.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-module Cardano.Tracer.Handlers.RTView.State.EraSettings
- ( EraSettings (..)
- , ErasSettings
- , addEraSettings
- , initErasSettings
- ) where
-
-import Cardano.Tracer.Types (NodeId)
-
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO)
-import Data.Map.Strict (Map)
-import qualified Data.Map.Strict as M
-import Data.Text (Text)
-
-data EraSettings = EraSettings
- { esEra :: !Text
- , esSlotLengthInS :: !Int
- , esEpochLength :: !Int
- , esKESPeriodLength :: !Int
- } deriving (Eq, Show)
-
-type ErasSettings = TVar (Map NodeId EraSettings)
-
-initErasSettings :: IO ErasSettings
-initErasSettings = newTVarIO M.empty
-
-addEraSettings
- :: ErasSettings
- -> NodeId
- -> EraSettings
- -> IO ()
-addEraSettings nodesSettings nodeId settingsForIt = atomically $
- modifyTVar' nodesSettings $ \currentSettings ->
- case M.lookup nodeId currentSettings of
- Nothing ->
- M.insert nodeId settingsForIt currentSettings
- Just savedSettings ->
- -- The settings for the same era shouldn't be changed.
- if esEra savedSettings == esEra settingsForIt
- then currentSettings
- else M.adjust (const settingsForIt) nodeId currentSettings
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Historical.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Historical.hs
deleted file mode 100644
index a3e345cfd33..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Historical.hs
+++ /dev/null
@@ -1,224 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module Cardano.Tracer.Handlers.RTView.State.Historical
- ( BlockchainHistory (..)
- , DataName (..)
- , History
- , HistoricalData
- , HistoricalPoint
- , HistoricalPoints
- , POSIXTime
- , ResourcesHistory (..)
- , TransactionsHistory (..)
- , ValueH (..)
- , addHistoricalData
- , getHistoricalData
- , initBlockchainHistory
- , initResourcesHistory
- , initTransactionsHistory
- , readValueI
- , readValueD
- ) where
-
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Types (NodeId)
-
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO, readTVarIO)
-import Control.Monad (mzero)
-import qualified Data.ByteString.Char8 as BSC
-import Data.Csv (FromField (..), ToField (..))
-import Data.Map.Strict (Map)
-import qualified Data.Map.Strict as M
-import Data.Set (Set)
-import qualified Data.Set as S
-import Data.Text (Text, isInfixOf)
-import Data.Text.Encoding (decodeUtf8)
-import Data.Text.Read (decimal, double)
-import Data.Time.Clock (UTCTime)
-import Data.Word (Word64)
-import Text.Printf (printf)
-
--- | A lot of information received from the node is useful as historical data.
--- It means that such an information should be displayed on time charts,
--- where X axis is a time in UTC. An example: resource metrics, chain information,
--- tx information, etc.
-type POSIXTime = Word64
-
-data ValueH
- = ValueD Double
- | ValueI Int
- deriving (Eq, Ord)
-
-instance Show ValueH where
- show (ValueD d) = show d
- show (ValueI i) = show i
-
-instance Num ValueH where
- (+) (ValueI i1) (ValueI i2) = ValueI (i1 + i2)
- (+) (ValueD d1) (ValueD d2) = ValueD (d1 + d2)
- (+) (ValueI i1) (ValueD d1) = ValueD (fromIntegral i1 + d1)
- (+) (ValueD d1) (ValueI i1) = ValueD (fromIntegral i1 + d1)
-
- (-) (ValueI i1) (ValueI i2) = ValueI (i1 - i2)
- (-) (ValueD d1) (ValueD d2) = ValueD (d1 - d2)
- (-) (ValueI i1) (ValueD d1) = ValueD (fromIntegral i1 - d1)
- (-) (ValueD d1) (ValueI i1) = ValueD (fromIntegral i1 - d1)
-
- (*) (ValueI i1) (ValueI i2) = ValueI (i1 * i2)
- (*) (ValueD d1) (ValueD d2) = ValueD (d1 * d2)
- (*) (ValueI i1) (ValueD d1) = ValueD (fromIntegral i1 * d1)
- (*) (ValueD d1) (ValueI i1) = ValueD (fromIntegral i1 * d1)
-
- abs (ValueI i) = ValueI (abs i)
- abs (ValueD d) = ValueD (abs d)
-
- signum (ValueI i) = ValueI (signum i)
- signum (ValueD d) = ValueD (signum d)
-
- fromInteger i = ValueI (fromInteger i)
-
-type HistoricalPoint = (POSIXTime, ValueH)
-
-instance FromField ValueH where
- parseField s =
- let t = decodeUtf8 s in
- if "." `isInfixOf` t
- then either (const mzero) (return . ValueD . fst) $ double t
- else either (const mzero) (return . ValueI . fst) $ decimal t
-
-instance ToField ValueH where
- toField (ValueI i) = toField i
- toField (ValueD d) = BSC.pack $ printf "%.3f" d
-
-type HistoricalPoints = Set HistoricalPoint
-
--- | Historical points for particular data.
-data DataName
- = CPUData
- | MemoryData
- | GCMajorNumData
- | GCMinorNumData
- | GCLiveMemoryData
- | CPUTimeGCData
- | CPUTimeAppData
- | ThreadsNumData
- -- Chain
- | ChainDensityData
- | SlotNumData
- | BlockNumData
- | SlotInEpochData
- | EpochData
- | NodeCannotForgeData
- | ForgedSlotLastData
- | NodeIsLeaderData
- | NodeIsNotLeaderData
- | ForgedInvalidSlotLastData
- | AdoptedSlotLastData
- | NotAdoptedSlotLastData
- | AboutToLeadSlotLastData
- | CouldNotForgeSlotLastData
- -- TX
- | TxsProcessedNumData
- | MempoolBytesData
- | TxsInMempoolData
- deriving (Eq, Ord, Read, Show)
-
-type HistoricalData = Map DataName HistoricalPoints
-type History = TVar (Map NodeId HistoricalData)
-
-newtype BlockchainHistory = ChainHistory History
-newtype ResourcesHistory = ResHistory History
-newtype TransactionsHistory = TXHistory History
-
-initBlockchainHistory :: IO BlockchainHistory
-initBlockchainHistory = ChainHistory <$> newTVarIO M.empty
-
-initResourcesHistory :: IO ResourcesHistory
-initResourcesHistory = ResHistory <$> newTVarIO M.empty
-
-initTransactionsHistory :: IO TransactionsHistory
-initTransactionsHistory = TXHistory <$> newTVarIO M.empty
-
-addHistoricalData
- :: History
- -> NodeId
- -> UTCTime
- -> DataName
- -> ValueH
- -> IO ()
-addHistoricalData history nodeId now dataName valueH = atomically $
- modifyTVar' history $ \currentHistory ->
- case M.lookup nodeId currentHistory of
- Nothing ->
- -- There is no historical data for this node yet.
- let firstPoint = S.singleton (utc2s now, valueH)
- newDataForNode = M.singleton dataName firstPoint
- in M.insert nodeId newDataForNode currentHistory
- Just dataForNode ->
- let newDataForNode =
- case M.lookup dataName dataForNode of
- Nothing ->
- -- There is no historical points for this dataName yet.
- let firstPoint = S.singleton (utc2s now, valueH)
- in M.insert dataName firstPoint dataForNode
- Just points ->
- let pointsWeKeep = S.fromList . deleteOutdated . S.toAscList $ points
- newPoints = S.insert (utc2s now, valueH) pointsWeKeep
- in M.adjust (const newPoints) dataName dataForNode
- in M.adjust (const newDataForNode) nodeId currentHistory
- where
- -- All points that older than 'minAge' should be deleted.
- deleteOutdated = go
- where
- go [] = []
- go (point@(tsInSec, _):otherPoints) =
- if tsInSec < minAge
- then
- -- This point is too old, do not keep it anymore.
- go otherPoints
- else
- -- This point should be kept.
- -- Since the points were converted to asc list, all the next points
- -- are definitely newer (have bigger 'tsInSec'), so there is no need
- -- to check them.
- point : otherPoints
-
- !minAge = utc2s now - pointsAgeInSec
- pointsAgeInSec = 12 * 60 * 60
-
-getHistoricalData
- :: History
- -> NodeId
- -> DataName
- -> IO [(POSIXTime, ValueH)]
-getHistoricalData history nodeId dataName = do
- history' <- readTVarIO history
- case M.lookup nodeId history' of
- Nothing -> return []
- Just dataForNode ->
- case M.lookup dataName dataForNode of
- Nothing -> return []
- Just points -> return $ S.toAscList points
-
-readValueI
- :: Monad m
- => Text
- -> (ValueH -> m ())
- -> m ()
-readValueI t f =
- case decimal t of
- Left _ -> return ()
- Right (i, _) -> f (ValueI i)
-
-readValueD
- :: Monad m
- => Text
- -> (ValueH -> m ())
- -> m ()
-readValueD t f =
- case double t of
- Left _ -> return ()
- Right (d, _) -> f (ValueD d)
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Last.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Last.hs
deleted file mode 100644
index 5a162f6c1ac..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/State/Last.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-module Cardano.Tracer.Handlers.RTView.State.Last
- ( LastResourcesForNode (..)
- , LastResources
- , addNullResources
- , initLastResources
- , updateLastResources
- ) where
-
-import Cardano.Tracer.Types (NodeId)
-
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TVar (TVar, modifyTVar', newTVarIO)
-import Data.Map.Strict (Map)
-import qualified Data.Map.Strict as M
-import Data.Word (Word64)
-
--- | We have to store last received metric to be able to calculate
--- the value based on next received metric. For example, calculate
--- "CPU usage percent" based on received CPU ticks.
--- That value will be stored in corresponding 'HistoricalData' for
--- rendering on the corresponding chart.
-
-data LastResourcesForNode = LastResourcesForNode
- { cpuLastTicks :: !Int
- , cpuLastNS :: !Word64
- , cpuGCLastTicks :: !Int
- , cpuGCLastNS :: !Word64
- , cpuAppLastTicks :: !Int
- , cpuAppLastNS :: !Word64
- }
-
-type LastResources = TVar (Map NodeId LastResourcesForNode)
-
-initLastResources :: IO LastResources
-initLastResources = newTVarIO M.empty
-
--- | For the first update only.
-addNullResources
- :: LastResources
- -> NodeId
- -> IO ()
-addNullResources lastResources nodeId = atomically $
- modifyTVar' lastResources $ M.insert nodeId nulls
- where
- nulls =
- LastResourcesForNode
- { cpuLastTicks = 0
- , cpuLastNS = 0
- , cpuGCLastTicks = 0
- , cpuGCLastNS = 0
- , cpuAppLastTicks = 0
- , cpuAppLastNS = 0
- }
-
-updateLastResources
- :: LastResources
- -> NodeId
- -> (LastResourcesForNode -> LastResourcesForNode)
- -> IO ()
-updateLastResources lastResources nodeId updateIt = atomically $
- modifyTVar' lastResources $ M.adjust updateIt nodeId
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Bulma.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Bulma.hs
deleted file mode 100644
index db2f1d29d44..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Bulma.hs
+++ /dev/null
@@ -1,46 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.CSS.Bulma
- ( bulmaCSS
- , bulmaCheckboxCSS
- , bulmaDividerCSS
- , bulmaPageloaderCSS
- , bulmaSwitchCSS
- , bulmaTooltipCSS
- ) where
-
-import Data.String.QQ
-
--- | To avoid run-time dependency from the static content, embed Bulma in the page's header.
-bulmaCSS :: String
-bulmaCSS = [s|
-/*! bulma.io v0.9.3 | MIT License | github.com/jgthms/bulma */.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}.breadcrumb,.button,.file,.is-unselectable,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#485fc7;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #485fc7}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #485fc7}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#485fc7;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:0 0;border-color:transparent;color:#485fc7;text-decoration:none}.button.is-ghost.is-hovered,.button.is-ghost:hover{color:#485fc7;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#485fc7;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#3e56c4;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#3a51bb;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#485fc7;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#485fc7}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#485fc7}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#485fc7;color:#485fc7}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#485fc7;border-color:#485fc7;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #485fc7 #485fc7!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#485fc7;box-shadow:none;color:#485fc7}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#485fc7}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #485fc7 #485fc7!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff1fa;color:#3850b7}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e6e9f7;border-color:transparent;color:#3850b7}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#dce0f4;border-color:transparent;color:#3850b7}.button.is-info{background-color:#3e8ed0;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#3488ce;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(62,142,208,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#3082c5;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3e8ed0;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3e8ed0}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3e8ed0}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3e8ed0;color:#3e8ed0}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3e8ed0;border-color:#3e8ed0;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3e8ed0 #3e8ed0!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3e8ed0;box-shadow:none;color:#3e8ed0}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3e8ed0}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3e8ed0 #3e8ed0!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eff5fb;color:#296fa8}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e4eff9;border-color:transparent;color:#296fa8}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#dae9f6;border-color:transparent;color:#296fa8}.button.is-success{background-color:#48c78e;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec487;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,142,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb81;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c78e;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c78e}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c78e}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c78e;color:#48c78e}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c78e;border-color:#48c78e;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c78e #48c78e!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c78e;box-shadow:none;color:#48c78e}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c78e}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c78e #48c78e!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf5;color:#257953}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ef;border-color:transparent;color:#257953}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e9;border-color:transparent;color:#257953}.button.is-warning{background-color:#ffe08a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdc7d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,224,138,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd970;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffe08a;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffe08a}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffe08a}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffe08a;color:#ffe08a}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffe08a;border-color:#ffe08a;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffe08a #ffe08a!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffe08a;box-shadow:none;color:#ffe08a}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffe08a}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffe08a #ffe08a!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffaeb;color:#946c00}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff6de;border-color:transparent;color:#946c00}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff3d1;border-color:transparent;color:#946c00}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{font-size:.75rem}.button.is-small:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * .5));top:calc(50% - (1em * .5));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:9999px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:9999px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{right:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#485fc7;color:#fff}.notification.is-link.is-light{background-color:#eff1fa;color:#3850b7}.notification.is-info{background-color:#3e8ed0;color:#fff}.notification.is-info.is-light{background-color:#eff5fb;color:#296fa8}.notification.is-success{background-color:#48c78e;color:#fff}.notification.is-success.is-light{background-color:#effaf5;color:#257953}.notification.is-warning{background-color:#ffe08a;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffaeb;color:#946c00}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#485fc7}.progress.is-link::-moz-progress-bar{background-color:#485fc7}.progress.is-link::-ms-fill{background-color:#485fc7}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#485fc7 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3e8ed0}.progress.is-info::-moz-progress-bar{background-color:#3e8ed0}.progress.is-info::-ms-fill{background-color:#3e8ed0}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3e8ed0 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c78e}.progress.is-success::-moz-progress-bar{background-color:#48c78e}.progress.is-success::-ms-fill{background-color:#48c78e}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c78e 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffe08a}.progress.is-warning::-moz-progress-bar{background-color:#ffe08a}.progress.is-warning::-ms-fill{background-color:#ffe08a}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffe08a 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#485fc7;border-color:#485fc7;color:#fff}.table td.is-info,.table th.is-info{background-color:#3e8ed0;border-color:#3e8ed0;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c78e;border-color:#48c78e;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffe08a;border-color:#ffe08a;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#485fc7;color:#fff}.tag:not(body).is-link.is-light{background-color:#eff1fa;color:#3850b7}.tag:not(body).is-info{background-color:#3e8ed0;color:#fff}.tag:not(body).is-info.is-light{background-color:#eff5fb;color:#296fa8}.tag:not(body).is-success{background-color:#48c78e;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf5;color:#257953}.tag:not(body).is-warning{background-color:#ffe08a;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffaeb;color:#946c00}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:9999px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#485fc7;box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#485fc7}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.is-info.input,.is-info.textarea{border-color:#3e8ed0}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(62,142,208,.25)}.is-success.input,.is-success.textarea{border-color:#48c78e}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,142,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffe08a}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,224,138,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:9999px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox input[disabled],.checkbox[disabled],.radio input[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#485fc7;right:1.125em;z-index:4}.select.is-rounded select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#485fc7}.select.is-link select{border-color:#485fc7}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#3a51bb}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(72,95,199,.25)}.select.is-info:not(:hover)::after{border-color:#3e8ed0}.select.is-info select{border-color:#3e8ed0}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#3082c5}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(62,142,208,.25)}.select.is-success:not(:hover)::after{border-color:#48c78e}.select.is-success select{border-color:#48c78e}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb81}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,142,.25)}.select.is-warning:not(:hover)::after{border-color:#ffe08a}.select.is-warning select{border-color:#ffe08a}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd970}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,224,138,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#485fc7;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#3e56c4;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,95,199,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#3a51bb;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3e8ed0;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#3488ce;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(62,142,208,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#3082c5;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c78e;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec487;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,142,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb81;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffe08a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdc7d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,224,138,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd970;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#485fc7}.help.is-info{color:#3e8ed0}.help.is-success{color:#48c78e}.help.is-warning{color:#ffe08a}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#485fc7;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;position:relative}.card-content:first-child,.card-footer:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-content:last-child,.card-footer:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#485fc7;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#485fc7;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eff1fa}.message.is-link .message-header{background-color:#485fc7;color:#fff}.message.is-link .message-body{border-color:#485fc7;color:#3850b7}.message.is-info{background-color:#eff5fb}.message.is-info .message-header{background-color:#3e8ed0;color:#fff}.message.is-info .message-body{border-color:#3e8ed0;color:#296fa8}.message.is-success{background-color:#effaf5}.message.is-success .message-header{background-color:#48c78e;color:#fff}.message.is-success .message-body{border-color:#48c78e;color:#257953}.message.is-warning{background-color:#fffaeb}.message.is-warning .message-header{background-color:#ffe08a;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffe08a;color:#946c00}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#485fc7;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#3a51bb;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#3a51bb;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#3a51bb;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#485fc7;color:#fff}}.navbar.is-info{background-color:#3e8ed0;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#3082c5;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#3082c5;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#3082c5;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3e8ed0;color:#fff}}.navbar.is-success{background-color:#48c78e;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb81;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb81;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb81;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c78e;color:#fff}}.navbar.is-warning{background-color:#ffe08a;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd970;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd970;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd970;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffe08a;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#485fc7}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#485fc7}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#485fc7;border-bottom-style:solid;border-bottom-width:3px;color:#485fc7;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#485fc7;margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#485fc7}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#485fc7}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#485fc7}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#485fc7;border-color:#485fc7;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#485fc7;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#485fc7}.panel.is-link .panel-block.is-active .panel-icon{color:#485fc7}.panel.is-info .panel-heading{background-color:#3e8ed0;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3e8ed0}.panel.is-info .panel-block.is-active .panel-icon{color:#3e8ed0}.panel.is-success .panel-heading{background-color:#48c78e;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c78e}.panel.is-success .panel-block.is-active .panel-icon{color:#48c78e}.panel.is-warning .panel-heading{background-color:#ffe08a;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffe08a}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffe08a}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#485fc7}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#485fc7;color:#363636}.panel-block.is-active .panel-icon{color:#485fc7}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#485fc7;color:#485fc7}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#485fc7;border-color:#485fc7;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#485fc7!important}a.has-text-link:focus,a.has-text-link:hover{color:#3449a8!important}.has-background-link{background-color:#485fc7!important}.has-text-link-light{color:#eff1fa!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c8cfee!important}.has-background-link-light{background-color:#eff1fa!important}.has-text-link-dark{color:#3850b7!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#576dcb!important}.has-background-link-dark{background-color:#3850b7!important}.has-text-info{color:#3e8ed0!important}a.has-text-info:focus,a.has-text-info:hover{color:#2b74b1!important}.has-background-info{background-color:#3e8ed0!important}.has-text-info-light{color:#eff5fb!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c6ddf1!important}.has-background-info-light{background-color:#eff5fb!important}.has-text-info-dark{color:#296fa8!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#368ace!important}.has-background-info-dark{background-color:#296fa8!important}.has-text-success{color:#48c78e!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a873!important}.has-background-success{background-color:#48c78e!important}.has-text-success-light{color:#effaf5!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eedd!important}.has-background-success-light{background-color:#effaf5!important}.has-text-success-dark{color:#257953!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a06e!important}.has-background-success-dark{background-color:#257953!important}.has-text-warning{color:#ffe08a!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd257!important}.has-background-warning{background-color:#ffe08a!important}.has-text-warning-light{color:#fffaeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#ffecb8!important}.has-background-warning-light{background-color:#fffaeb!important}.has-text-warning-dark{color:#946c00!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79200!important}.has-background-warning-dark{background-color:#946c00!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important;pointer-events:all!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.m-auto{margin:auto!important}.mt-auto{margin-top:auto!important}.mr-auto{margin-right:auto!important}.mb-auto{margin-bottom:auto!important}.ml-auto{margin-left:auto!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.p-auto{padding:auto!important}.pt-auto{padding-top:auto!important}.pr-auto{padding-right:auto!important}.pb-auto{padding-bottom:auto!important}.pl-auto{padding-left:auto!important}.px-auto{padding-left:auto!important;padding-right:auto!important}.py-auto{padding-top:auto!important;padding-bottom:auto!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.is-underlined{text-decoration:underline!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff!important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a!important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5!important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{color:#363636!important;opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{color:#00d1b2!important;opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#485fc7;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#485fc7}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#3a51bb;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#485fc7!important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#485fc7}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#2959b3 0,#485fc7 71%,#5658d2 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#2959b3 0,#485fc7 71%,#5658d2 100%)}}.hero.is-info{background-color:#3e8ed0;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3e8ed0}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#3082c5;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#3e8ed0!important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3e8ed0}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#208fbc 0,#3e8ed0 71%,#4d83db 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#208fbc 0,#3e8ed0 71%,#4d83db 100%)}}.hero.is-success{background-color:#48c78e;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c78e}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb81;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#48c78e!important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c78e}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b35e 0,#48c78e 71%,#56d2af 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b35e 0,#48c78e 71%,#56d2af 100%)}}.hero.is-warning{background-color:#ffe08a;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffe08a}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd970;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffe08a!important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffe08a}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffb657 0,#ffe08a 71%,#fff6a3 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffb657 0,#ffe08a 71%,#fff6a3 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#f14668!important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width:769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}
-|]
-
--- | To avoid run-time dependency from the static content, embed Bulma Tooltip extension in the page's header.
-bulmaTooltipCSS :: String
-bulmaTooltipCSS = [s|
-/*! @creativebulma/bulma-tooltip v1.2.0 | (c) 2020 Gaetan | MIT License | https://github.com/CreativeBulma/bulma-tooltip */
-[data-tooltip]:not(.is-disabled),[data-tooltip]:not(.is-loading),[data-tooltip]:not([disabled]){cursor:pointer;overflow:visible;position:relative}[data-tooltip]:not(.is-disabled):before,[data-tooltip]:not(.is-loading):before,[data-tooltip]:not([disabled]):before{background:rgba(74,74,74,.9);border-radius:2px;content:attr(data-tooltip);padding:.5rem 1rem;text-overflow:ellipsis;white-space:pre-line;right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}[data-tooltip]:not(.is-disabled).has-tooltip-arrow:after,[data-tooltip]:not(.is-disabled):before,[data-tooltip]:not(.is-loading).has-tooltip-arrow:after,[data-tooltip]:not(.is-loading):before,[data-tooltip]:not([disabled]).has-tooltip-arrow:after,[data-tooltip]:not([disabled]):before{box-sizing:border-box;color:#fff;display:inline-block;font-family:BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:.75rem;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;opacity:0;overflow:hidden;pointer-events:none;position:absolute;visibility:hidden;z-index:1}[data-tooltip]:not(.is-disabled).has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-arrow:after{content:"";border-style:solid;border-width:6px;border-color:rgba(74,74,74,.9) transparent transparent;margin-bottom:-5px}[data-tooltip]:not(.is-disabled).has-tooltip-arrow.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-arrow.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-arrow.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-bottom.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom:before,[data-tooltip]:not([disabled]).has-tooltip-bottom:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}[data-tooltip]:not(.is-disabled).has-tooltip-left.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left:before,[data-tooltip]:not(.is-loading).has-tooltip-left:before,[data-tooltip]:not([disabled]).has-tooltip-left:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}[data-tooltip]:not(.is-disabled).has-tooltip-right.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right:before,[data-tooltip]:not(.is-loading).has-tooltip-right:before,[data-tooltip]:not([disabled]).has-tooltip-right:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}[data-tooltip]:not(.is-disabled).has-tooltip-multiline:before,[data-tooltip]:not(.is-loading).has-tooltip-multiline:before,[data-tooltip]:not([disabled]).has-tooltip-multiline:before{height:auto;width:15rem;max-width:15rem;text-overflow:clip;white-space:normal;word-break:keep-all}[data-tooltip]:not(.is-disabled).has-tooltip-text-left:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left:before,[data-tooltip]:not([disabled]).has-tooltip-text-left:before{text-align:left}[data-tooltip]:not(.is-disabled).has-tooltip-text-centered:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered:before{text-align:center}[data-tooltip]:not(.is-disabled).has-tooltip-text-right:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right:before,[data-tooltip]:not([disabled]).has-tooltip-text-right:before{text-align:right}[data-tooltip]:not(.is-disabled).has-tooltip-white:after,[data-tooltip]:not(.is-loading).has-tooltip-white:after,[data-tooltip]:not([disabled]).has-tooltip-white:after{border-color:hsla(0,0%,100%,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-white.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-white.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-white.has-tooltip-bottom:after{border-color:transparent transparent hsla(0,0%,100%,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-white.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-white.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-white.has-tooltip-left:after{border-color:transparent transparent transparent hsla(0,0%,100%,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-white.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-white.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-white.has-tooltip-right:after{border-color:transparent hsla(0,0%,100%,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-white:before,[data-tooltip]:not(.is-loading).has-tooltip-white:before,[data-tooltip]:not([disabled]).has-tooltip-white:before{background-color:hsla(0,0%,100%,.9);color:#0a0a0a}[data-tooltip]:not(.is-disabled).has-tooltip-black:after,[data-tooltip]:not(.is-loading).has-tooltip-black:after,[data-tooltip]:not([disabled]).has-tooltip-black:after{border-color:hsla(0,0%,4%,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-black.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-black.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-black.has-tooltip-bottom:after{border-color:transparent transparent hsla(0,0%,4%,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-black.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-black.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-black.has-tooltip-left:after{border-color:transparent transparent transparent hsla(0,0%,4%,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-black.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-black.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-black.has-tooltip-right:after{border-color:transparent hsla(0,0%,4%,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-black:before,[data-tooltip]:not(.is-loading).has-tooltip-black:before,[data-tooltip]:not([disabled]).has-tooltip-black:before{background-color:hsla(0,0%,4%,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-light:after,[data-tooltip]:not(.is-loading).has-tooltip-light:after,[data-tooltip]:not([disabled]).has-tooltip-light:after{border-color:hsla(0,0%,96%,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-light.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-light.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-light.has-tooltip-bottom:after{border-color:transparent transparent hsla(0,0%,96%,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-light.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-light.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-light.has-tooltip-left:after{border-color:transparent transparent transparent hsla(0,0%,96%,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-light.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-light.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-light.has-tooltip-right:after{border-color:transparent hsla(0,0%,96%,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-light:before,[data-tooltip]:not(.is-loading).has-tooltip-light:before,[data-tooltip]:not([disabled]).has-tooltip-light:before{background-color:hsla(0,0%,96%,.9);color:rgba(0,0,0,.7)}[data-tooltip]:not(.is-disabled).has-tooltip-dark:after,[data-tooltip]:not(.is-loading).has-tooltip-dark:after,[data-tooltip]:not([disabled]).has-tooltip-dark:after{border-color:rgba(54,54,54,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-dark.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-dark.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-dark.has-tooltip-bottom:after{border-color:transparent transparent rgba(54,54,54,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-dark.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-dark.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-dark.has-tooltip-left:after{border-color:transparent transparent transparent rgba(54,54,54,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-dark.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-dark.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-dark.has-tooltip-right:after{border-color:transparent rgba(54,54,54,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-dark:before,[data-tooltip]:not(.is-loading).has-tooltip-dark:before,[data-tooltip]:not([disabled]).has-tooltip-dark:before{background-color:rgba(54,54,54,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-primary:after,[data-tooltip]:not(.is-loading).has-tooltip-primary:after,[data-tooltip]:not([disabled]).has-tooltip-primary:after{border-color:rgba(0,209,178,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-primary.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-primary.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-primary.has-tooltip-bottom:after{border-color:transparent transparent rgba(0,209,178,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-primary.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-primary.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-primary.has-tooltip-left:after{border-color:transparent transparent transparent rgba(0,209,178,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-primary.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-primary.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-primary.has-tooltip-right:after{border-color:transparent rgba(0,209,178,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-primary:before,[data-tooltip]:not(.is-loading).has-tooltip-primary:before,[data-tooltip]:not([disabled]).has-tooltip-primary:before{background-color:rgba(0,209,178,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-link:after,[data-tooltip]:not(.is-loading).has-tooltip-link:after,[data-tooltip]:not([disabled]).has-tooltip-link:after{border-color:rgba(50,115,220,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-link.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-link.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-link.has-tooltip-bottom:after{border-color:transparent transparent rgba(50,115,220,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-link.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-link.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-link.has-tooltip-left:after{border-color:transparent transparent transparent rgba(50,115,220,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-link.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-link.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-link.has-tooltip-right:after{border-color:transparent rgba(50,115,220,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-link:before,[data-tooltip]:not(.is-loading).has-tooltip-link:before,[data-tooltip]:not([disabled]).has-tooltip-link:before{background-color:rgba(50,115,220,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-info:after,[data-tooltip]:not(.is-loading).has-tooltip-info:after,[data-tooltip]:not([disabled]).has-tooltip-info:after{border-color:rgba(50,152,220,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-info.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-info.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-info.has-tooltip-bottom:after{border-color:transparent transparent rgba(50,152,220,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-info.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-info.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-info.has-tooltip-left:after{border-color:transparent transparent transparent rgba(50,152,220,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-info.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-info.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-info.has-tooltip-right:after{border-color:transparent rgba(50,152,220,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-info:before,[data-tooltip]:not(.is-loading).has-tooltip-info:before,[data-tooltip]:not([disabled]).has-tooltip-info:before{background-color:rgba(50,152,220,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-success:after,[data-tooltip]:not(.is-loading).has-tooltip-success:after,[data-tooltip]:not([disabled]).has-tooltip-success:after{border-color:rgba(72,199,116,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-success.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-success.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-success.has-tooltip-bottom:after{border-color:transparent transparent rgba(72,199,116,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-success.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-success.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-success.has-tooltip-left:after{border-color:transparent transparent transparent rgba(72,199,116,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-success.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-success.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-success.has-tooltip-right:after{border-color:transparent rgba(72,199,116,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-success:before,[data-tooltip]:not(.is-loading).has-tooltip-success:before,[data-tooltip]:not([disabled]).has-tooltip-success:before{background-color:rgba(72,199,116,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-warning:after,[data-tooltip]:not(.is-loading).has-tooltip-warning:after,[data-tooltip]:not([disabled]).has-tooltip-warning:after{border-color:rgba(255,221,87,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-warning.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-warning.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-warning.has-tooltip-bottom:after{border-color:transparent transparent rgba(255,221,87,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-warning.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-warning.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-warning.has-tooltip-left:after{border-color:transparent transparent transparent rgba(255,221,87,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-warning.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-warning.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-warning.has-tooltip-right:after{border-color:transparent rgba(255,221,87,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-warning:before,[data-tooltip]:not(.is-loading).has-tooltip-warning:before,[data-tooltip]:not([disabled]).has-tooltip-warning:before{background-color:rgba(255,221,87,.9);color:rgba(0,0,0,.7)}[data-tooltip]:not(.is-disabled).has-tooltip-danger:after,[data-tooltip]:not(.is-loading).has-tooltip-danger:after,[data-tooltip]:not([disabled]).has-tooltip-danger:after{border-color:rgba(241,70,104,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-danger.has-tooltip-bottom:after,[data-tooltip]:not(.is-loading).has-tooltip-danger.has-tooltip-bottom:after,[data-tooltip]:not([disabled]).has-tooltip-danger.has-tooltip-bottom:after{border-color:transparent transparent rgba(241,70,104,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-danger.has-tooltip-left:after,[data-tooltip]:not(.is-loading).has-tooltip-danger.has-tooltip-left:after,[data-tooltip]:not([disabled]).has-tooltip-danger.has-tooltip-left:after{border-color:transparent transparent transparent rgba(241,70,104,.9)!important}[data-tooltip]:not(.is-disabled).has-tooltip-danger.has-tooltip-right:after,[data-tooltip]:not(.is-loading).has-tooltip-danger.has-tooltip-right:after,[data-tooltip]:not([disabled]).has-tooltip-danger.has-tooltip-right:after{border-color:transparent rgba(241,70,104,.9) transparent transparent!important}[data-tooltip]:not(.is-disabled).has-tooltip-danger:before,[data-tooltip]:not(.is-loading).has-tooltip-danger:before,[data-tooltip]:not([disabled]).has-tooltip-danger:before{background-color:rgba(241,70,104,.9);color:#fff}[data-tooltip]:not(.is-disabled).has-tooltip-active:after,[data-tooltip]:not(.is-disabled).has-tooltip-active:before,[data-tooltip]:not(.is-disabled):hover:after,[data-tooltip]:not(.is-disabled):hover:before,[data-tooltip]:not(.is-loading).has-tooltip-active:after,[data-tooltip]:not(.is-loading).has-tooltip-active:before,[data-tooltip]:not(.is-loading):hover:after,[data-tooltip]:not(.is-loading):hover:before,[data-tooltip]:not([disabled]).has-tooltip-active:after,[data-tooltip]:not([disabled]).has-tooltip-active:before,[data-tooltip]:not([disabled]):hover:after,[data-tooltip]:not([disabled]):hover:before{opacity:1;visibility:visible}[data-tooltip]:not(.is-disabled).has-tooltip-fade:after,[data-tooltip]:not(.is-disabled).has-tooltip-fade:before,[data-tooltip]:not(.is-loading).has-tooltip-fade:after,[data-tooltip]:not(.is-loading).has-tooltip-fade:before,[data-tooltip]:not([disabled]).has-tooltip-fade:after,[data-tooltip]:not([disabled]).has-tooltip-fade:before{transition:opacity .3s linear,visibility .3s linear}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-top-mobile.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-mobile.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-mobile.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-top-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-top-mobile:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-top-tablet.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-tablet.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-tablet.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-top-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-top-tablet:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-top-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-tablet-only.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-top-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-top-tablet-only:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-top-touch.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-touch.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-touch.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-top-touch:before,[data-tooltip]:not([disabled]).has-tooltip-top-touch:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-top-desktop.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-desktop.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-desktop.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-top-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-top-desktop:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-top-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-desktop-only.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-top-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-top-desktop-only:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-top-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-until-widescreen.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-top-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-top-until-widescreen:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-top-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-widescreen.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-top-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-top-widescreen:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-top-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-widescreen-only.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-top-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-top-widescreen-only:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-top-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-until-fullhd.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-top-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-top-until-fullhd:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-top-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-top-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-top-fullhd.has-tooltip-arrow:after{top:0;right:auto;bottom:auto;left:50%;margin:-5px auto auto -5px;border-color:rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-top-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-top-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-top-fullhd:before{right:auto;bottom:auto;left:50%;top:0;margin-top:-5px;margin-bottom:auto;transform:translate(-50%,-100%)}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-right-mobile.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-mobile.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-mobile.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-right-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-right-mobile:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-right-tablet.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-tablet.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-tablet.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-right-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-right-tablet:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-right-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-tablet-only.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-right-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-right-tablet-only:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-right-touch.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-touch.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-touch.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-right-touch:before,[data-tooltip]:not([disabled]).has-tooltip-right-touch:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-right-desktop.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-desktop.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-desktop.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-right-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-right-desktop:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-right-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-desktop-only.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-right-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-right-desktop-only:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-right-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-until-widescreen.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-right-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-right-until-widescreen:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-right-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-widescreen.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-right-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-right-widescreen:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-right-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-widescreen-only.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-right-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-right-widescreen-only:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-right-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-until-fullhd.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-right-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-right-until-fullhd:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-right-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-right-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-right-fullhd.has-tooltip-arrow:after{top:auto;right:0;bottom:50%;left:auto;margin:auto -6px -6px auto;border-color:transparent rgba(74,74,74,.9) transparent transparent}[data-tooltip]:not(.is-disabled).has-tooltip-right-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-right-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-right-fullhd:before{top:auto;right:-5px;bottom:50%;left:auto;margin-top:auto;transform:translate(100%,50%)}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-mobile.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-mobile.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-mobile.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-mobile:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-tablet.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-tablet.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-tablet.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-tablet:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-tablet-only.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-tablet-only:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-touch.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-touch.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-touch.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-touch:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-touch:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-desktop.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-desktop.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-desktop.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-desktop:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-desktop-only.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-desktop-only:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-until-widescreen.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-until-widescreen:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-widescreen.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-widescreen:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-widescreen-only.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-widescreen-only:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-until-fullhd.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-until-fullhd:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-bottom-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-bottom-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-bottom-fullhd.has-tooltip-arrow:after{top:auto;right:auto;bottom:-1px;left:50%;margin:auto auto -5px -5px;border-color:transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-bottom-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-bottom-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-bottom-fullhd:before{top:auto;right:auto;bottom:0;left:50%;margin-top:auto;margin-bottom:-5px;transform:translate(-50%,100%)}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-left-mobile.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-mobile.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-mobile.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-left-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-left-mobile:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-left-tablet.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-tablet.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-tablet.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-left-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-left-tablet:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-left-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-tablet-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-tablet-only.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-left-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-left-tablet-only:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-left-touch.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-touch.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-touch.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-left-touch:before,[data-tooltip]:not([disabled]).has-tooltip-left-touch:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-left-desktop.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-desktop.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-desktop.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-left-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-left-desktop:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-left-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-desktop-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-desktop-only.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-left-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-left-desktop-only:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-left-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-until-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-until-widescreen.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-left-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-left-until-widescreen:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-left-widescreen.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-widescreen.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-widescreen.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-left-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-left-widescreen:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-left-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-widescreen-only.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-widescreen-only.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-left-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-left-widescreen-only:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-left-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-until-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-until-fullhd.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-left-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-left-until-fullhd:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-left-fullhd.has-tooltip-arrow:after,[data-tooltip]:not(.is-loading).has-tooltip-left-fullhd.has-tooltip-arrow:after,[data-tooltip]:not([disabled]).has-tooltip-left-fullhd.has-tooltip-arrow:after{top:auto;right:auto;bottom:50%;left:0;margin:auto auto -6px -5px;border-color:transparent transparent transparent rgba(74,74,74,.9)}[data-tooltip]:not(.is-disabled).has-tooltip-left-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-left-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-left-fullhd:before{top:auto;right:auto;bottom:50%;left:-5px;transform:translate(-100%,50%)}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-mobile:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-mobile:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-mobile:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-mobile:before{opacity:0!important;display:none!important}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-tablet:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-tablet:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-tablet:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-tablet:before{opacity:0!important;display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-tablet-only:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-tablet-only:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-tablet-only:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-tablet-only:before{opacity:0!important;display:none!important}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-touch:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-touch:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-touch:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-touch:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-touch:before{opacity:0!important;display:none!important}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-desktop:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-desktop:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-desktop:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-desktop:before{opacity:0!important;display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-desktop-only:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-desktop-only:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-desktop-only:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-desktop-only:before{opacity:0!important;display:none!important}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-until-widescreen:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-until-widescreen:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-until-widescreen:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-until-widescreen:before{opacity:0!important;display:none!important}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-widescreen:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-widescreen:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-widescreen:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-widescreen:before{opacity:0!important;display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-widescreen-only:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-widescreen-only:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-widescreen-only:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-widescreen-only:before{opacity:0!important;display:none!important}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-until-fullhd:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-until-fullhd:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-until-fullhd:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-until-fullhd:before{opacity:0!important;display:none!important}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-hidden-fullhd:after,[data-tooltip]:not(.is-disabled).has-tooltip-hidden-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-hidden-fullhd:after,[data-tooltip]:not(.is-loading).has-tooltip-hidden-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-hidden-fullhd:after,[data-tooltip]:not([disabled]).has-tooltip-hidden-fullhd:before{opacity:0!important;display:none!important}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-mobile:before{text-align:left}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-tablet:before{text-align:left}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-tablet-only:before{text-align:left}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-touch:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-touch:before{text-align:left}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-desktop:before{text-align:left}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-desktop-only:before{text-align:left}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-until-widescreen:before{text-align:left}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-widescreen:before{text-align:left}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-widescreen-only:before{text-align:left}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-until-fullhd:before{text-align:left}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-text-left-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-text-left-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-text-left-fullhd:before{text-align:left}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-mobile:before{text-align:center}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-tablet:before{text-align:center}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-tablet-only:before{text-align:center}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-touch:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-touch:before{text-align:center}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-desktop:before{text-align:center}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-desktop-only:before{text-align:center}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-until-widescreen:before{text-align:center}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-widescreen:before{text-align:center}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-widescreen-only:before{text-align:center}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-until-fullhd:before{text-align:center}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-text-centered-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-text-centered-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-text-centered-fullhd:before{text-align:center}}@media screen and (max-width:768px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-mobile:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-mobile:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-mobile:before{text-align:right}}@media print,screen and (min-width:769px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-tablet:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-tablet:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-tablet:before{text-align:right}}@media screen and (min-width:769px) and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-tablet-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-tablet-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-tablet-only:before{text-align:right}}@media screen and (max-width:1023px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-touch:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-touch:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-touch:before{text-align:right}}@media screen and (min-width:1024px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-desktop:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-desktop:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-desktop:before{text-align:right}}@media screen and (min-width:1024px) and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-desktop-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-desktop-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-desktop-only:before{text-align:right}}@media screen and (max-width:1215px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-until-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-until-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-until-widescreen:before{text-align:right}}@media screen and (min-width:1216px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-widescreen:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-widescreen:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-widescreen:before{text-align:right}}@media screen and (min-width:1216px) and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-widescreen-only:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-widescreen-only:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-widescreen-only:before{text-align:right}}@media screen and (max-width:1407px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-until-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-until-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-until-fullhd:before{text-align:right}}@media screen and (min-width:1408px){[data-tooltip]:not(.is-disabled).has-tooltip-text-right-fullhd:before,[data-tooltip]:not(.is-loading).has-tooltip-text-right-fullhd:before,[data-tooltip]:not([disabled]).has-tooltip-text-right-fullhd:before{text-align:right}}span[data-tooltip]{border-bottom:1px dashed #dbdbdb}span[data-tooltip].has-tooltip-white{border-bottom-color:#fff}span[data-tooltip].has-tooltip-black{border-bottom-color:#171717}span[data-tooltip].has-tooltip-light{border-bottom-color:#fff}span[data-tooltip].has-tooltip-dark{border-bottom-color:#424242}span[data-tooltip].has-tooltip-primary{border-bottom-color:#00ebc7}span[data-tooltip].has-tooltip-link{border-bottom-color:#4882e0}span[data-tooltip].has-tooltip-info{border-bottom-color:#48a3e0}span[data-tooltip].has-tooltip-success{border-bottom-color:#5bcd83}span[data-tooltip].has-tooltip-warning{border-bottom-color:#ffe270}span[data-tooltip].has-tooltip-danger{border-bottom-color:#f35e7c}.control span[data-tooltip]{border-bottom:none}
-|]
-
-bulmaPageloaderCSS :: String
-bulmaPageloaderCSS = [s|
-@-webkit-keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.pageloader{bottom:0;left:0;position:absolute;right:0;top:0}.pageloader{position:fixed;padding-top:2em;background:#00d1b2;background:#00d1b2;z-index:999998;transition:transform .35s ease-out,-webkit-transform .35s ease-out;will-change:transform}.pageloader.is-white{background-color:#fff;background:#fff}.pageloader.is-white::after{border-color:#0a0a0a;-webkit-animation:loader-figure-white 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-white 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-white .title{color:#0a0a0a}.pageloader.is-black{background-color:#0a0a0a;background:#0a0a0a}.pageloader.is-black::after{border-color:#fff;-webkit-animation:loader-figure-black 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-black 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-black .title{color:#fff}.pageloader.is-light{background-color:#f5f5f5;background:#f5f5f5}.pageloader.is-light::after{border-color:#363636;-webkit-animation:loader-figure-light 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-light 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-light .title{color:#363636}.pageloader.is-dark{background-color:#363636;background:#363636}.pageloader.is-dark::after{border-color:#f5f5f5;-webkit-animation:loader-figure-dark 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-dark 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-dark .title{color:#f5f5f5}.pageloader.is-primary{background-color:#00d1b2;background:#00d1b2}.pageloader.is-primary::after{border-color:#fff;-webkit-animation:loader-figure-primary 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-primary 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-primary .title{color:#fff}.pageloader.is-link{background-color:#3273dc;background:#3273dc}.pageloader.is-link::after{border-color:#fff;-webkit-animation:loader-figure-link 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-link 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-link .title{color:#fff}.pageloader.is-info{background-color:#209cee;background:#209cee}.pageloader.is-info::after{border-color:#fff;-webkit-animation:loader-figure-info 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-info 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-info .title{color:#fff}.pageloader.is-success{background-color:#23d160;background:#23d160}.pageloader.is-success::after{border-color:#fff;-webkit-animation:loader-figure-success 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-success 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-success .title{color:#fff}.pageloader.is-warning{background-color:#ffdd57;background:#ffdd57}.pageloader.is-warning::after{border-color:rgba(0,0,0,.7);-webkit-animation:loader-figure-warning 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-warning 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-warning .title{color:rgba(0,0,0,.7)}.pageloader.is-danger{background-color:#ff3860;background:#ff3860}.pageloader.is-danger::after{border-color:#fff;-webkit-animation:loader-figure-danger 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure-danger 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader.is-danger .title{color:#fff}.pageloader:not(.is-bottom-to-top){-webkit-transform:translateY(-100%);transform:translateY(-100%)}.pageloader.is-bottom-to-top{-webkit-transform:translateY(100%);transform:translateY(100%)}.pageloader.is-left-to-right{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.pageloader.is-right-to-left{-webkit-transform:translateX(100%);transform:translateX(100%)}.pageloader.is-active:not(.is-left-to-right),.pageloader.is-active:not(.is-right-to-left){-webkit-transform:translateY(0);transform:translateY(0)}.pageloader.is-active.is-left-to-right,.pageloader.is-active.is-right-to-left{-webkit-transform:translateX(0);transform:translateX(0)}.pageloader::after{position:absolute;top:50%;left:50%;display:block;border-radius:100%;content:'';z-index:9999;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:0;height:0;box-sizing:border-box;border:0 solid #fff;-webkit-animation:loader-figure 1.15s infinite cubic-bezier(.215,.61,.355,1);animation:loader-figure 1.15s infinite cubic-bezier(.215,.61,.355,1)}.pageloader .title{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:2em 0 0 0;font-size:.875em;letter-spacing:.1em;line-height:1.5em;color:#fff;white-space:nowrap}@-webkit-keyframes loader-figure{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-white{0%{height:0;width:0;background-color:#0a0a0a}29%{background-color:#0a0a0a}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-white{0%{height:0;width:0;background-color:#0a0a0a}29%{background-color:#0a0a0a}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-black{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-black{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-light{0%{height:0;width:0;background-color:#363636}29%{background-color:#363636}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-light{0%{height:0;width:0;background-color:#363636}29%{background-color:#363636}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-dark{0%{height:0;width:0;background-color:#f5f5f5}29%{background-color:#f5f5f5}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-dark{0%{height:0;width:0;background-color:#f5f5f5}29%{background-color:#f5f5f5}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-primary{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-primary{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-link{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-link{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-info{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-info{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-success{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-success{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-warning{0%{height:0;width:0;background-color:rgba(0,0,0,.7)}29%{background-color:rgba(0,0,0,.7)}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-warning{0%{height:0;width:0;background-color:rgba(0,0,0,.7)}29%{background-color:rgba(0,0,0,.7)}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@-webkit-keyframes loader-figure-danger{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}@keyframes loader-figure-danger{0%{height:0;width:0;background-color:#fff}29%{background-color:#fff}30%{height:2em;width:2em;background-color:transparent;border-width:1em;opacity:1}100%{height:2em;width:2em;border-width:0;opacity:0;background-color:transparent}}
-|]
-
-bulmaSwitchCSS :: String
-bulmaSwitchCSS = [s|
-.switch[type=checkbox]{outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;position:absolute;opacity:0}.switch[type=checkbox]:focus+label::after,.switch[type=checkbox]:focus+label::before,.switch[type=checkbox]:focus+label:after,.switch[type=checkbox]:focus+label:before{outline:1px dotted #b5b5b5}.switch[type=checkbox][disabled]{cursor:not-allowed}.switch[type=checkbox][disabled]+label{opacity:.5}.switch[type=checkbox][disabled]+label::before,.switch[type=checkbox][disabled]+label:before{opacity:.5}.switch[type=checkbox][disabled]+label::after,.switch[type=checkbox][disabled]+label:after{opacity:.5}.switch[type=checkbox][disabled]+label:hover{cursor:not-allowed}.switch[type=checkbox]+label{position:relative;display:inline-flex;align-items:center;justify-content:flex-start;font-size:1rem;height:2.5em;line-height:1.5;padding-left:3.5rem;padding-top:.2rem;cursor:pointer}.switch[type=checkbox]+label::before,.switch[type=checkbox]+label:before{position:absolute;display:block;top:calc(50% - 1.5rem * .5);left:0;width:3rem;height:1.5rem;border:.1rem solid transparent;border-radius:4px;background:#b5b5b5;content:""}.switch[type=checkbox]+label::after,.switch[type=checkbox]+label:after{display:block;position:absolute;top:calc(50% - 1rem * .5);left:.25rem;width:1rem;height:1rem;transform:translate3d(0,0,0);border-radius:4px;background:#fff;transition:all .25s ease-out;content:""}.switch[type=checkbox]+label .switch-active,.switch[type=checkbox]+label .switch-inactive{font-size:.9rem;z-index:1;margin-top:-4px}.switch[type=checkbox]+label.has-text-inside .switch-inactive{margin-left:-1.925rem}.switch[type=checkbox]+label.has-text-inside .switch-active{margin-left:-3.25rem}.switch[type=checkbox].is-rtl+label{padding-left:0;padding-right:3.5rem}.switch[type=checkbox].is-rtl+label::before,.switch[type=checkbox].is-rtl+label:before{left:auto;right:0}.switch[type=checkbox].is-rtl+label::after,.switch[type=checkbox].is-rtl+label:after{left:auto;right:1.625rem}.switch[type=checkbox]:checked+label::before,.switch[type=checkbox]:checked+label:before{background:#00d1b2}.switch[type=checkbox]:checked+label::after{left:1.625rem}.switch[type=checkbox]:checked.is-rtl+label::after,.switch[type=checkbox]:checked.is-rtl+label:after{left:auto;right:.25rem}.switch[type=checkbox].is-outlined+label::before,.switch[type=checkbox].is-outlined+label:before{background-color:transparent;border-color:#b5b5b5}.switch[type=checkbox].is-outlined+label::after,.switch[type=checkbox].is-outlined+label:after{background:#b5b5b5}.switch[type=checkbox].is-outlined:checked+label::before,.switch[type=checkbox].is-outlined:checked+label:before{background-color:transparent;border-color:#00d1b2}.switch[type=checkbox].is-outlined:checked+label::after,.switch[type=checkbox].is-outlined:checked+label:after{background:#00d1b2}.switch[type=checkbox].is-thin+label::before,.switch[type=checkbox].is-thin+label:before{top:.5454545456rem;height:.375rem}.switch[type=checkbox].is-thin+label::after,.switch[type=checkbox].is-thin+label:after{box-shadow:0 0 3px #7a7a7a}.switch[type=checkbox].is-rounded+label::before,.switch[type=checkbox].is-rounded+label:before{border-radius:24px}.switch[type=checkbox].is-rounded+label::after,.switch[type=checkbox].is-rounded+label:after{border-radius:50%}.switch[type=checkbox].is-small+label{position:relative;display:inline-flex;align-items:center;justify-content:flex-start;font-size:.75rem;height:2.5em;line-height:1.5;padding-left:2.75rem;padding-top:.2rem;cursor:pointer}.switch[type=checkbox].is-small+label::before,.switch[type=checkbox].is-small+label:before{position:absolute;display:block;top:calc(50% - 1.125rem * .5);left:0;width:2.25rem;height:1.125rem;border:.1rem solid transparent;border-radius:4px;background:#b5b5b5;content:""}.switch[type=checkbox].is-small+label::after,.switch[type=checkbox].is-small+label:after{display:block;position:absolute;top:calc(50% - .625rem * .5);left:.25rem;width:.625rem;height:.625rem;transform:translate3d(0,0,0);border-radius:4px;background:#fff;transition:all .25s ease-out;content:""}.switch[type=checkbox].is-small+label .switch-active,.switch[type=checkbox].is-small+label .switch-inactive{font-size:.65rem;z-index:1;margin-top:-4px}.switch[type=checkbox].is-small+label.has-text-inside .switch-inactive{margin-left:-1.55rem}.switch[type=checkbox].is-small+label.has-text-inside .switch-active{margin-left:-2.5rem}.switch[type=checkbox].is-small.is-rtl+label{padding-left:0;padding-right:2.75rem}.switch[type=checkbox].is-small.is-rtl+label::before,.switch[type=checkbox].is-small.is-rtl+label:before{left:auto;right:0}.switch[type=checkbox].is-small.is-rtl+label::after,.switch[type=checkbox].is-small.is-rtl+label:after{left:auto;right:1.25rem}.switch[type=checkbox].is-small:checked+label::before,.switch[type=checkbox].is-small:checked+label:before{background:#00d1b2}.switch[type=checkbox].is-small:checked+label::after{left:1.25rem}.switch[type=checkbox].is-small:checked.is-rtl+label::after,.switch[type=checkbox].is-small:checked.is-rtl+label:after{left:auto;right:.25rem}.switch[type=checkbox].is-small.is-outlined+label::before,.switch[type=checkbox].is-small.is-outlined+label:before{background-color:transparent;border-color:#b5b5b5}.switch[type=checkbox].is-small.is-outlined+label::after,.switch[type=checkbox].is-small.is-outlined+label:after{background:#b5b5b5}.switch[type=checkbox].is-small.is-outlined:checked+label::before,.switch[type=checkbox].is-small.is-outlined:checked+label:before{background-color:transparent;border-color:#00d1b2}.switch[type=checkbox].is-small.is-outlined:checked+label::after,.switch[type=checkbox].is-small.is-outlined:checked+label:after{background:#00d1b2}.switch[type=checkbox].is-small.is-thin+label::before,.switch[type=checkbox].is-small.is-thin+label:before{top:.4090909093rem;height:.28125rem}.switch[type=checkbox].is-small.is-thin+label::after,.switch[type=checkbox].is-small.is-thin+label:after{box-shadow:0 0 3px #7a7a7a}.switch[type=checkbox].is-small.is-rounded+label::before,.switch[type=checkbox].is-small.is-rounded+label:before{border-radius:24px}.switch[type=checkbox].is-small.is-rounded+label::after,.switch[type=checkbox].is-small.is-rounded+label:after{border-radius:50%}.switch[type=checkbox].is-medium+label{position:relative;display:inline-flex;align-items:center;justify-content:flex-start;font-size:1.25rem;height:2.5em;line-height:1.5;padding-left:4.25rem;padding-top:.2rem;cursor:pointer}.switch[type=checkbox].is-medium+label::before,.switch[type=checkbox].is-medium+label:before{position:absolute;display:block;top:calc(50% - 1.875rem * .5);left:0;width:3.75rem;height:1.875rem;border:.1rem solid transparent;border-radius:4px;background:#b5b5b5;content:""}.switch[type=checkbox].is-medium+label::after,.switch[type=checkbox].is-medium+label:after{display:block;position:absolute;top:calc(50% - 1.375rem * .5);left:.25rem;width:1.375rem;height:1.375rem;transform:translate3d(0,0,0);border-radius:4px;background:#fff;transition:all .25s ease-out;content:""}.switch[type=checkbox].is-medium+label .switch-active,.switch[type=checkbox].is-medium+label .switch-inactive{font-size:1.15rem;z-index:1;margin-top:-4px}.switch[type=checkbox].is-medium+label.has-text-inside .switch-inactive{margin-left:-2.3rem}.switch[type=checkbox].is-medium+label.has-text-inside .switch-active{margin-left:-4rem}.switch[type=checkbox].is-medium.is-rtl+label{padding-left:0;padding-right:4.25rem}.switch[type=checkbox].is-medium.is-rtl+label::before,.switch[type=checkbox].is-medium.is-rtl+label:before{left:auto;right:0}.switch[type=checkbox].is-medium.is-rtl+label::after,.switch[type=checkbox].is-medium.is-rtl+label:after{left:auto;right:2rem}.switch[type=checkbox].is-medium:checked+label::before,.switch[type=checkbox].is-medium:checked+label:before{background:#00d1b2}.switch[type=checkbox].is-medium:checked+label::after{left:2rem}.switch[type=checkbox].is-medium:checked.is-rtl+label::after,.switch[type=checkbox].is-medium:checked.is-rtl+label:after{left:auto;right:.25rem}.switch[type=checkbox].is-medium.is-outlined+label::before,.switch[type=checkbox].is-medium.is-outlined+label:before{background-color:transparent;border-color:#b5b5b5}.switch[type=checkbox].is-medium.is-outlined+label::after,.switch[type=checkbox].is-medium.is-outlined+label:after{background:#b5b5b5}.switch[type=checkbox].is-medium.is-outlined:checked+label::before,.switch[type=checkbox].is-medium.is-outlined:checked+label:before{background-color:transparent;border-color:#00d1b2}.switch[type=checkbox].is-medium.is-outlined:checked+label::after,.switch[type=checkbox].is-medium.is-outlined:checked+label:after{background:#00d1b2}.switch[type=checkbox].is-medium.is-thin+label::before,.switch[type=checkbox].is-medium.is-thin+label:before{top:.6818181819rem;height:.46875rem}.switch[type=checkbox].is-medium.is-thin+label::after,.switch[type=checkbox].is-medium.is-thin+label:after{box-shadow:0 0 3px #7a7a7a}.switch[type=checkbox].is-medium.is-rounded+label::before,.switch[type=checkbox].is-medium.is-rounded+label:before{border-radius:24px}.switch[type=checkbox].is-medium.is-rounded+label::after,.switch[type=checkbox].is-medium.is-rounded+label:after{border-radius:50%}.switch[type=checkbox].is-large+label{position:relative;display:inline-flex;align-items:center;justify-content:flex-start;font-size:1.5rem;height:2.5em;line-height:1.5;padding-left:5rem;padding-top:.2rem;cursor:pointer}.switch[type=checkbox].is-large+label::before,.switch[type=checkbox].is-large+label:before{position:absolute;display:block;top:calc(50% - 2.25rem * .5);left:0;width:4.5rem;height:2.25rem;border:.1rem solid transparent;border-radius:4px;background:#b5b5b5;content:""}.switch[type=checkbox].is-large+label::after,.switch[type=checkbox].is-large+label:after{display:block;position:absolute;top:calc(50% - 1.75rem * .5);left:.25rem;width:1.75rem;height:1.75rem;transform:translate3d(0,0,0);border-radius:4px;background:#fff;transition:all .25s ease-out;content:""}.switch[type=checkbox].is-large+label .switch-active,.switch[type=checkbox].is-large+label .switch-inactive{font-size:1.4rem;z-index:1;margin-top:-4px}.switch[type=checkbox].is-large+label.has-text-inside .switch-inactive{margin-left:-2.675rem}.switch[type=checkbox].is-large+label.has-text-inside .switch-active{margin-left:-4.75rem}.switch[type=checkbox].is-large.is-rtl+label{padding-left:0;padding-right:5rem}.switch[type=checkbox].is-large.is-rtl+label::before,.switch[type=checkbox].is-large.is-rtl+label:before{left:auto;right:0}.switch[type=checkbox].is-large.is-rtl+label::after,.switch[type=checkbox].is-large.is-rtl+label:after{left:auto;right:2.375rem}.switch[type=checkbox].is-large:checked+label::before,.switch[type=checkbox].is-large:checked+label:before{background:#00d1b2}.switch[type=checkbox].is-large:checked+label::after{left:2.375rem}.switch[type=checkbox].is-large:checked.is-rtl+label::after,.switch[type=checkbox].is-large:checked.is-rtl+label:after{left:auto;right:.25rem}.switch[type=checkbox].is-large.is-outlined+label::before,.switch[type=checkbox].is-large.is-outlined+label:before{background-color:transparent;border-color:#b5b5b5}.switch[type=checkbox].is-large.is-outlined+label::after,.switch[type=checkbox].is-large.is-outlined+label:after{background:#b5b5b5}.switch[type=checkbox].is-large.is-outlined:checked+label::before,.switch[type=checkbox].is-large.is-outlined:checked+label:before{background-color:transparent;border-color:#00d1b2}.switch[type=checkbox].is-large.is-outlined:checked+label::after,.switch[type=checkbox].is-large.is-outlined:checked+label:after{background:#00d1b2}.switch[type=checkbox].is-large.is-thin+label::before,.switch[type=checkbox].is-large.is-thin+label:before{top:.8181818183rem;height:.5625rem}.switch[type=checkbox].is-large.is-thin+label::after,.switch[type=checkbox].is-large.is-thin+label:after{box-shadow:0 0 3px #7a7a7a}.switch[type=checkbox].is-large.is-rounded+label::before,.switch[type=checkbox].is-large.is-rounded+label:before{border-radius:24px}.switch[type=checkbox].is-large.is-rounded+label::after,.switch[type=checkbox].is-large.is-rounded+label:after{border-radius:50%}.switch[type=checkbox].is-white+label .switch-active{display:none}.switch[type=checkbox].is-white+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-white:checked+label::before,.switch[type=checkbox].is-white:checked+label:before{background:#fff}.switch[type=checkbox].is-white:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-white:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-white.is-outlined:checked+label::before,.switch[type=checkbox].is-white.is-outlined:checked+label:before{background-color:transparent;border-color:#fff!important}.switch[type=checkbox].is-white.is-outlined:checked+label::after,.switch[type=checkbox].is-white.is-outlined:checked+label:after{background:#fff}.switch[type=checkbox].is-white.is-thin.is-outlined+label::after,.switch[type=checkbox].is-white.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-white+label::before,.switch[type=checkbox].is-unchecked-white+label:before{background:#fff}.switch[type=checkbox].is-unchecked-white.is-outlined+label::before,.switch[type=checkbox].is-unchecked-white.is-outlined+label:before{background-color:transparent;border-color:#fff!important}.switch[type=checkbox].is-unchecked-white.is-outlined+label::after,.switch[type=checkbox].is-unchecked-white.is-outlined+label:after{background:#fff}.switch[type=checkbox].is-black+label .switch-active{display:none}.switch[type=checkbox].is-black+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-black:checked+label::before,.switch[type=checkbox].is-black:checked+label:before{background:#0a0a0a}.switch[type=checkbox].is-black:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-black:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-black.is-outlined:checked+label::before,.switch[type=checkbox].is-black.is-outlined:checked+label:before{background-color:transparent;border-color:#0a0a0a!important}.switch[type=checkbox].is-black.is-outlined:checked+label::after,.switch[type=checkbox].is-black.is-outlined:checked+label:after{background:#0a0a0a}.switch[type=checkbox].is-black.is-thin.is-outlined+label::after,.switch[type=checkbox].is-black.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-black+label::before,.switch[type=checkbox].is-unchecked-black+label:before{background:#0a0a0a}.switch[type=checkbox].is-unchecked-black.is-outlined+label::before,.switch[type=checkbox].is-unchecked-black.is-outlined+label:before{background-color:transparent;border-color:#0a0a0a!important}.switch[type=checkbox].is-unchecked-black.is-outlined+label::after,.switch[type=checkbox].is-unchecked-black.is-outlined+label:after{background:#0a0a0a}.switch[type=checkbox].is-light+label .switch-active{display:none}.switch[type=checkbox].is-light+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-light:checked+label::before,.switch[type=checkbox].is-light:checked+label:before{background:#f5f5f5}.switch[type=checkbox].is-light:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-light:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-light.is-outlined:checked+label::before,.switch[type=checkbox].is-light.is-outlined:checked+label:before{background-color:transparent;border-color:#f5f5f5!important}.switch[type=checkbox].is-light.is-outlined:checked+label::after,.switch[type=checkbox].is-light.is-outlined:checked+label:after{background:#f5f5f5}.switch[type=checkbox].is-light.is-thin.is-outlined+label::after,.switch[type=checkbox].is-light.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-light+label::before,.switch[type=checkbox].is-unchecked-light+label:before{background:#f5f5f5}.switch[type=checkbox].is-unchecked-light.is-outlined+label::before,.switch[type=checkbox].is-unchecked-light.is-outlined+label:before{background-color:transparent;border-color:#f5f5f5!important}.switch[type=checkbox].is-unchecked-light.is-outlined+label::after,.switch[type=checkbox].is-unchecked-light.is-outlined+label:after{background:#f5f5f5}.switch[type=checkbox].is-dark+label .switch-active{display:none}.switch[type=checkbox].is-dark+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-dark:checked+label::before,.switch[type=checkbox].is-dark:checked+label:before{background:#363636}.switch[type=checkbox].is-dark:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-dark:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-dark.is-outlined:checked+label::before,.switch[type=checkbox].is-dark.is-outlined:checked+label:before{background-color:transparent;border-color:#363636!important}.switch[type=checkbox].is-dark.is-outlined:checked+label::after,.switch[type=checkbox].is-dark.is-outlined:checked+label:after{background:#363636}.switch[type=checkbox].is-dark.is-thin.is-outlined+label::after,.switch[type=checkbox].is-dark.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-dark+label::before,.switch[type=checkbox].is-unchecked-dark+label:before{background:#363636}.switch[type=checkbox].is-unchecked-dark.is-outlined+label::before,.switch[type=checkbox].is-unchecked-dark.is-outlined+label:before{background-color:transparent;border-color:#363636!important}.switch[type=checkbox].is-unchecked-dark.is-outlined+label::after,.switch[type=checkbox].is-unchecked-dark.is-outlined+label:after{background:#363636}.switch[type=checkbox].is-primary+label .switch-active{display:none}.switch[type=checkbox].is-primary+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-primary:checked+label::before,.switch[type=checkbox].is-primary:checked+label:before{background:#00d1b2}.switch[type=checkbox].is-primary:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-primary:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-primary.is-outlined:checked+label::before,.switch[type=checkbox].is-primary.is-outlined:checked+label:before{background-color:transparent;border-color:#00d1b2!important}.switch[type=checkbox].is-primary.is-outlined:checked+label::after,.switch[type=checkbox].is-primary.is-outlined:checked+label:after{background:#00d1b2}.switch[type=checkbox].is-primary.is-thin.is-outlined+label::after,.switch[type=checkbox].is-primary.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-primary+label::before,.switch[type=checkbox].is-unchecked-primary+label:before{background:#00d1b2}.switch[type=checkbox].is-unchecked-primary.is-outlined+label::before,.switch[type=checkbox].is-unchecked-primary.is-outlined+label:before{background-color:transparent;border-color:#00d1b2!important}.switch[type=checkbox].is-unchecked-primary.is-outlined+label::after,.switch[type=checkbox].is-unchecked-primary.is-outlined+label:after{background:#00d1b2}.switch[type=checkbox].is-link+label .switch-active{display:none}.switch[type=checkbox].is-link+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-link:checked+label::before,.switch[type=checkbox].is-link:checked+label:before{background:#485fc7}.switch[type=checkbox].is-link:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-link:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-link.is-outlined:checked+label::before,.switch[type=checkbox].is-link.is-outlined:checked+label:before{background-color:transparent;border-color:#485fc7!important}.switch[type=checkbox].is-link.is-outlined:checked+label::after,.switch[type=checkbox].is-link.is-outlined:checked+label:after{background:#485fc7}.switch[type=checkbox].is-link.is-thin.is-outlined+label::after,.switch[type=checkbox].is-link.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-link+label::before,.switch[type=checkbox].is-unchecked-link+label:before{background:#485fc7}.switch[type=checkbox].is-unchecked-link.is-outlined+label::before,.switch[type=checkbox].is-unchecked-link.is-outlined+label:before{background-color:transparent;border-color:#485fc7!important}.switch[type=checkbox].is-unchecked-link.is-outlined+label::after,.switch[type=checkbox].is-unchecked-link.is-outlined+label:after{background:#485fc7}.switch[type=checkbox].is-info+label .switch-active{display:none}.switch[type=checkbox].is-info+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-info:checked+label::before,.switch[type=checkbox].is-info:checked+label:before{background:#3e8ed0}.switch[type=checkbox].is-info:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-info:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-info.is-outlined:checked+label::before,.switch[type=checkbox].is-info.is-outlined:checked+label:before{background-color:transparent;border-color:#3e8ed0!important}.switch[type=checkbox].is-info.is-outlined:checked+label::after,.switch[type=checkbox].is-info.is-outlined:checked+label:after{background:#3e8ed0}.switch[type=checkbox].is-info.is-thin.is-outlined+label::after,.switch[type=checkbox].is-info.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-info+label::before,.switch[type=checkbox].is-unchecked-info+label:before{background:#3e8ed0}.switch[type=checkbox].is-unchecked-info.is-outlined+label::before,.switch[type=checkbox].is-unchecked-info.is-outlined+label:before{background-color:transparent;border-color:#3e8ed0!important}.switch[type=checkbox].is-unchecked-info.is-outlined+label::after,.switch[type=checkbox].is-unchecked-info.is-outlined+label:after{background:#3e8ed0}.switch[type=checkbox].is-success+label .switch-active{display:none}.switch[type=checkbox].is-success+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-success:checked+label::before,.switch[type=checkbox].is-success:checked+label:before{background:#48c78e}.switch[type=checkbox].is-success:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-success:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-success.is-outlined:checked+label::before,.switch[type=checkbox].is-success.is-outlined:checked+label:before{background-color:transparent;border-color:#48c78e!important}.switch[type=checkbox].is-success.is-outlined:checked+label::after,.switch[type=checkbox].is-success.is-outlined:checked+label:after{background:#48c78e}.switch[type=checkbox].is-success.is-thin.is-outlined+label::after,.switch[type=checkbox].is-success.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-success+label::before,.switch[type=checkbox].is-unchecked-success+label:before{background:#48c78e}.switch[type=checkbox].is-unchecked-success.is-outlined+label::before,.switch[type=checkbox].is-unchecked-success.is-outlined+label:before{background-color:transparent;border-color:#48c78e!important}.switch[type=checkbox].is-unchecked-success.is-outlined+label::after,.switch[type=checkbox].is-unchecked-success.is-outlined+label:after{background:#48c78e}.switch[type=checkbox].is-warning+label .switch-active{display:none}.switch[type=checkbox].is-warning+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-warning:checked+label::before,.switch[type=checkbox].is-warning:checked+label:before{background:#ffe08a}.switch[type=checkbox].is-warning:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-warning:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-warning.is-outlined:checked+label::before,.switch[type=checkbox].is-warning.is-outlined:checked+label:before{background-color:transparent;border-color:#ffe08a!important}.switch[type=checkbox].is-warning.is-outlined:checked+label::after,.switch[type=checkbox].is-warning.is-outlined:checked+label:after{background:#ffe08a}.switch[type=checkbox].is-warning.is-thin.is-outlined+label::after,.switch[type=checkbox].is-warning.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-warning+label::before,.switch[type=checkbox].is-unchecked-warning+label:before{background:#ffe08a}.switch[type=checkbox].is-unchecked-warning.is-outlined+label::before,.switch[type=checkbox].is-unchecked-warning.is-outlined+label:before{background-color:transparent;border-color:#ffe08a!important}.switch[type=checkbox].is-unchecked-warning.is-outlined+label::after,.switch[type=checkbox].is-unchecked-warning.is-outlined+label:after{background:#ffe08a}.switch[type=checkbox].is-danger+label .switch-active{display:none}.switch[type=checkbox].is-danger+label .switch-inactive{display:inline-block}.switch[type=checkbox].is-danger:checked+label::before,.switch[type=checkbox].is-danger:checked+label:before{background:#f14668}.switch[type=checkbox].is-danger:checked+label .switch-active{display:inline-block}.switch[type=checkbox].is-danger:checked+label .switch-inactive{display:none}.switch[type=checkbox].is-danger.is-outlined:checked+label::before,.switch[type=checkbox].is-danger.is-outlined:checked+label:before{background-color:transparent;border-color:#f14668!important}.switch[type=checkbox].is-danger.is-outlined:checked+label::after,.switch[type=checkbox].is-danger.is-outlined:checked+label:after{background:#f14668}.switch[type=checkbox].is-danger.is-thin.is-outlined+label::after,.switch[type=checkbox].is-danger.is-thin.is-outlined+label:after{box-shadow:none}.switch[type=checkbox].is-unchecked-danger+label::before,.switch[type=checkbox].is-unchecked-danger+label:before{background:#f14668}.switch[type=checkbox].is-unchecked-danger.is-outlined+label::before,.switch[type=checkbox].is-unchecked-danger.is-outlined+label:before{background-color:transparent;border-color:#f14668!important}.switch[type=checkbox].is-unchecked-danger.is-outlined+label::after,.switch[type=checkbox].is-unchecked-danger.is-outlined+label:after{background:#f14668}.field-body .switch[type=checkbox]+label{margin-top:.375em}
-|]
-
-bulmaDividerCSS :: String
-bulmaDividerCSS = [s|
-/*! @creativebulma/bulma-divider v1.1.0 | (c) 2020 Gaetan | MIT License | https://github.com/CreativeBulma/bulma-divider */
-.divider{position:relative;display:flex;align-items:center;text-transform:uppercase;color:#7a7a7a;font-size:.75rem;font-weight:600;letter-spacing:.5px;margin:25px 0}.divider:after,.divider:before{content:"";display:block;flex:1;height:1px;background-color:#dbdbdb}.divider:not(.is-right):after{margin-left:10px}.divider:not(.is-left):before{margin-right:10px}.divider.is-left:before,.divider.is-right:after{display:none}.divider.is-vertical{flex-direction:column;margin:0 25px}.divider.is-vertical:after,.divider.is-vertical:before{height:auto;width:1px}.divider.is-vertical:after{margin-left:0;margin-top:10px}.divider.is-vertical:before{margin-right:0;margin-bottom:10px}.divider.is-white:after,.divider.is-white:before{background-color:#fff}.divider.is-black:after,.divider.is-black:before{background-color:#0a0a0a}.divider.is-light:after,.divider.is-light:before{background-color:#f5f5f5}.divider.is-dark:after,.divider.is-dark:before{background-color:#363636}.divider.is-primary:after,.divider.is-primary:before{background-color:#00d1b2}.divider.is-primary.is-light:after,.divider.is-primary.is-light:before{background-color:#ebfffc}.divider.is-link:after,.divider.is-link:before{background-color:#3273dc}.divider.is-link.is-light:after,.divider.is-link.is-light:before{background-color:#eef3fc}.divider.is-info:after,.divider.is-info:before{background-color:#3298dc}.divider.is-info.is-light:after,.divider.is-info.is-light:before{background-color:#eef6fc}.divider.is-success:after,.divider.is-success:before{background-color:#48c774}.divider.is-success.is-light:after,.divider.is-success.is-light:before{background-color:#effaf3}.divider.is-warning:after,.divider.is-warning:before{background-color:#ffdd57}.divider.is-warning.is-light:after,.divider.is-warning.is-light:before{background-color:#fffbeb}.divider.is-danger:after,.divider.is-danger:before{background-color:#f14668}.divider.is-danger.is-light:after,.divider.is-danger.is-light:before{background-color:#feecf0}
-|]
-
-bulmaCheckboxCSS :: String
-bulmaCheckboxCSS = [s|
-.is-checkradio[type=checkbox],.is-checkradio[type=radio]{outline:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:none;position:absolute;opacity:0}.is-checkradio[type=checkbox]+label,.is-checkradio[type=radio]+label{position:relative;display:initial;cursor:pointer;vertical-align:middle;margin:.5em;padding:.2rem .5rem .2rem 0;border-radius:4px}.is-checkradio[type=checkbox]+label:first-of-type,.is-checkradio[type=radio]+label:first-of-type{margin-left:0}.is-checkradio[type=checkbox]+label:hover::before,.is-checkradio[type=checkbox]+label:hover:before,.is-checkradio[type=radio]+label:hover::before,.is-checkradio[type=radio]+label:hover:before{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:hover-color;animation-name:hover-color}.is-checkradio[type=checkbox]+label::before,.is-checkradio[type=checkbox]+label:before,.is-checkradio[type=radio]+label::before,.is-checkradio[type=radio]+label:before{position:absolute;left:0;top:0;content:"";border:.1rem solid #dbdbdb}.is-checkradio[type=checkbox]+label::after,.is-checkradio[type=checkbox]+label:after,.is-checkradio[type=radio]+label::after,.is-checkradio[type=radio]+label:after{position:absolute;display:none;content:"";top:0}.is-checkradio[type=checkbox].is-rtl+label,.is-checkradio[type=radio].is-rtl+label{margin-right:0;margin-left:.5rem}.is-checkradio[type=checkbox].is-rtl+label::before,.is-checkradio[type=checkbox].is-rtl+label:before,.is-checkradio[type=radio].is-rtl+label::before,.is-checkradio[type=radio].is-rtl+label:before{left:auto;right:0}.is-checkradio[type=checkbox]:focus+label::before,.is-checkradio[type=checkbox]:focus+label:before,.is-checkradio[type=radio]:focus+label::before,.is-checkradio[type=radio]:focus+label:before{outline:1px dotted #b5b5b5}.is-checkradio[type=checkbox]:hover:not([disabled])+label::before,.is-checkradio[type=checkbox]:hover:not([disabled])+label:before,.is-checkradio[type=radio]:hover:not([disabled])+label::before,.is-checkradio[type=radio]:hover:not([disabled])+label:before{border-color:#00d1b2!important}.is-checkradio[type=checkbox]:checked+label::before,.is-checkradio[type=checkbox]:checked+label:before,.is-checkradio[type=radio]:checked+label::before,.is-checkradio[type=radio]:checked+label:before{border:.1rem solid #dbdbdb}.is-checkradio[type=checkbox]:checked[disabled],.is-checkradio[type=radio]:checked[disabled]{cursor:not-allowed}.is-checkradio[type=checkbox]:checked[disabled]+label,.is-checkradio[type=radio]:checked[disabled]+label{opacity:.5}.is-checkradio[type=checkbox]:checked+label::before,.is-checkradio[type=checkbox]:checked+label:before,.is-checkradio[type=radio]:checked+label::before,.is-checkradio[type=radio]:checked+label:before{-webkit-animation-name:none;animation-name:none}.is-checkradio[type=checkbox]:checked+label::after,.is-checkradio[type=checkbox]:checked+label:after,.is-checkradio[type=radio]:checked+label::after,.is-checkradio[type=radio]:checked+label:after{display:inline-block}.is-checkradio[type=checkbox][disabled],.is-checkradio[type=radio][disabled]{cursor:not-allowed}.is-checkradio[type=checkbox][disabled]+label,.is-checkradio[type=radio][disabled]+label{opacity:.5;cursor:not-allowed}.is-checkradio[type=checkbox][disabled]+label::after,.is-checkradio[type=checkbox][disabled]+label::before,.is-checkradio[type=checkbox][disabled]+label:after,.is-checkradio[type=checkbox][disabled]+label:before,.is-checkradio[type=checkbox][disabled]+label:hover,.is-checkradio[type=radio][disabled]+label::after,.is-checkradio[type=radio][disabled]+label::before,.is-checkradio[type=radio][disabled]+label:after,.is-checkradio[type=radio][disabled]+label:before,.is-checkradio[type=radio][disabled]+label:hover{cursor:not-allowed}.is-checkradio[type=checkbox][disabled]:hover,.is-checkradio[type=radio][disabled]:hover{cursor:not-allowed}.is-checkradio[type=checkbox][disabled]:hover::before,.is-checkradio[type=checkbox][disabled]:hover:before,.is-checkradio[type=radio][disabled]:hover::before,.is-checkradio[type=radio][disabled]:hover:before{-webkit-animation-name:none;animation-name:none}.is-checkradio[type=checkbox][disabled]::before,.is-checkradio[type=checkbox][disabled]:before,.is-checkradio[type=radio][disabled]::before,.is-checkradio[type=radio][disabled]:before{cursor:not-allowed}.is-checkradio[type=checkbox][disabled]::after,.is-checkradio[type=checkbox][disabled]:after,.is-checkradio[type=radio][disabled]::after,.is-checkradio[type=radio][disabled]:after{cursor:not-allowed}.is-checkradio[type=checkbox].has-no-border+label::before,.is-checkradio[type=checkbox].has-no-border+label:before,.is-checkradio[type=radio].has-no-border+label::before,.is-checkradio[type=radio].has-no-border+label:before{border:none!important}.is-checkradio[type=checkbox].is-block,.is-checkradio[type=radio].is-block{display:none!important}.is-checkradio[type=checkbox].is-block+label,.is-checkradio[type=radio].is-block+label{width:100%!important;background:#f5f5f5;color:rgba(0,0,0,.7);padding-right:.75em}.is-checkradio[type=checkbox].is-block:hover:not([disabled])+label,.is-checkradio[type=radio].is-block:hover:not([disabled])+label{background:#e8e8e8}.is-checkradio[type=checkbox]+label::before,.is-checkradio[type=checkbox]+label:before{border-radius:4px}.is-checkradio[type=checkbox]+label::after,.is-checkradio[type=checkbox]+label:after{box-sizing:border-box;transform:translateY(0) rotate(45deg);border-width:.1rem;border-style:solid;border-color:#00d1b2;border-top:0;border-left:0}.is-checkradio[type=checkbox].is-circle+label::before,.is-checkradio[type=checkbox].is-circle+label:before{border-radius:50%}.is-checkradio[type=checkbox]+label{font-size:1rem;padding-left:2rem}.is-checkradio[type=checkbox]+label::before,.is-checkradio[type=checkbox]+label:before{width:1.5rem;height:1.5rem}.is-checkradio[type=checkbox]+label::after,.is-checkradio[type=checkbox]+label:after{width:.375rem;height:.6rem;top:.405rem;left:.6rem}.is-checkradio[type=checkbox].is-block+label::before,.is-checkradio[type=checkbox].is-block+label:before{width:1.25rem;height:1.25rem;left:.175rem;top:.175rem}.is-checkradio[type=checkbox].is-block+label::after,.is-checkradio[type=checkbox].is-block+label:after{top:.325rem;left:.65rem}.is-checkradio[type=checkbox].is-rtl+label{padding-left:0;padding-right:2rem}.is-checkradio[type=checkbox].is-rtl+label::after,.is-checkradio[type=checkbox].is-rtl+label:after{left:auto;right:.6rem}.is-checkradio[type=checkbox].is-small+label{font-size:.75rem;padding-left:1.5rem}.is-checkradio[type=checkbox].is-small+label::before,.is-checkradio[type=checkbox].is-small+label:before{width:1.125rem;height:1.125rem}.is-checkradio[type=checkbox].is-small+label::after,.is-checkradio[type=checkbox].is-small+label:after{width:.28125rem;height:.45rem;top:.30375rem;left:.45rem}.is-checkradio[type=checkbox].is-small.is-block+label::before,.is-checkradio[type=checkbox].is-small.is-block+label:before{width:.9375rem;height:.9375rem;left:.175rem;top:.175rem}.is-checkradio[type=checkbox].is-small.is-block+label::after,.is-checkradio[type=checkbox].is-small.is-block+label:after{top:.29375rem;left:.5375rem}.is-checkradio[type=checkbox].is-small.is-rtl+label{padding-left:0;padding-right:1.5rem}.is-checkradio[type=checkbox].is-small.is-rtl+label::after,.is-checkradio[type=checkbox].is-small.is-rtl+label:after{left:auto;right:.45rem}.is-checkradio[type=checkbox].is-medium+label{font-size:1.25rem;padding-left:2.5rem}.is-checkradio[type=checkbox].is-medium+label::before,.is-checkradio[type=checkbox].is-medium+label:before{width:1.875rem;height:1.875rem}.is-checkradio[type=checkbox].is-medium+label::after,.is-checkradio[type=checkbox].is-medium+label:after{width:.46875rem;height:.75rem;top:.50625rem;left:.75rem}.is-checkradio[type=checkbox].is-medium.is-block+label::before,.is-checkradio[type=checkbox].is-medium.is-block+label:before{width:1.5625rem;height:1.5625rem;left:.175rem;top:.175rem}.is-checkradio[type=checkbox].is-medium.is-block+label::after,.is-checkradio[type=checkbox].is-medium.is-block+label:after{top:.35625rem;left:.7625rem}.is-checkradio[type=checkbox].is-medium.is-rtl+label{padding-left:0;padding-right:2.5rem}.is-checkradio[type=checkbox].is-medium.is-rtl+label::after,.is-checkradio[type=checkbox].is-medium.is-rtl+label:after{left:auto;right:.75rem}.is-checkradio[type=checkbox].is-large+label{font-size:1.5rem;padding-left:3rem}.is-checkradio[type=checkbox].is-large+label::before,.is-checkradio[type=checkbox].is-large+label:before{width:2.25rem;height:2.25rem}.is-checkradio[type=checkbox].is-large+label::after,.is-checkradio[type=checkbox].is-large+label:after{width:.5625rem;height:.9rem;top:.6075rem;left:.9rem}.is-checkradio[type=checkbox].is-large.is-block+label::before,.is-checkradio[type=checkbox].is-large.is-block+label:before{width:1.875rem;height:1.875rem;left:.175rem;top:.175rem}.is-checkradio[type=checkbox].is-large.is-block+label::after,.is-checkradio[type=checkbox].is-large.is-block+label:after{top:.3875rem;left:.875rem}.is-checkradio[type=checkbox].is-large.is-rtl+label{padding-left:0;padding-right:3rem}.is-checkradio[type=checkbox].is-large.is-rtl+label::after,.is-checkradio[type=checkbox].is-large.is-rtl+label:after{left:auto;right:.9rem}.is-checkradio[type=checkbox].is-white.has-background-color+label::before,.is-checkradio[type=checkbox].is-white.has-background-color+label:before{border-color:transparent!important;background-color:#fff!important}.is-checkradio[type=checkbox].is-white:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-white:hover:not([disabled])+label:before{border-color:#fff!important}.is-checkradio[type=checkbox].is-white:checked+label::after,.is-checkradio[type=checkbox].is-white:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-white:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-white:checked.has-background-color+label:before{border-color:transparent!important;background-color:#fff!important}.is-checkradio[type=checkbox].is-white:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-white:checked.has-background-color+label:after{border-color:#0a0a0a!important;background-color:#fff!important}.is-checkradio[type=checkbox].is-white.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-white.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-white.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-white.is-block:hover:not([disabled])+label:before{border-color:#fff!important}.is-checkradio[type=checkbox].is-white.is-block:checked+label{color:#0a0a0a;border-color:#fff!important;background:#fff}.is-checkradio[type=checkbox].is-white.is-block:checked+label::after,.is-checkradio[type=checkbox].is-white.is-block:checked+label:after{border-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-white.is-block:checked:hover:not([disabled])+label{background:#f2f2f2}.is-checkradio[type=checkbox].is-white.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-white.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-white.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-white.is-block:checked:hover:not([disabled])+label:before{border-color:#000!important}.is-checkradio[type=checkbox].is-black.has-background-color+label::before,.is-checkradio[type=checkbox].is-black.has-background-color+label:before{border-color:transparent!important;background-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-black:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-black:hover:not([disabled])+label:before{border-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-black:checked+label::after,.is-checkradio[type=checkbox].is-black:checked+label:after{border-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-black:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-black:checked.has-background-color+label:before{border-color:transparent!important;background-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-black:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-black:checked.has-background-color+label:after{border-color:#fff!important;background-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-black.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-black.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-black.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-black.is-block:hover:not([disabled])+label:before{border-color:#0a0a0a!important}.is-checkradio[type=checkbox].is-black.is-block:checked+label{color:#fff;border-color:#0a0a0a!important;background:#0a0a0a}.is-checkradio[type=checkbox].is-black.is-block:checked+label::after,.is-checkradio[type=checkbox].is-black.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-black.is-block:checked:hover:not([disabled])+label{background:#000}.is-checkradio[type=checkbox].is-black.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-black.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-black.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-black.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox].is-light.has-background-color+label::before,.is-checkradio[type=checkbox].is-light.has-background-color+label:before{border-color:transparent!important;background-color:#f5f5f5!important}.is-checkradio[type=checkbox].is-light:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-light:hover:not([disabled])+label:before{border-color:#f5f5f5!important}.is-checkradio[type=checkbox].is-light:checked+label::after,.is-checkradio[type=checkbox].is-light:checked+label:after{border-color:#f5f5f5!important}.is-checkradio[type=checkbox].is-light:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-light:checked.has-background-color+label:before{border-color:transparent!important;background-color:#f5f5f5!important}.is-checkradio[type=checkbox].is-light:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-light:checked.has-background-color+label:after{border-color:rgba(0,0,0,.7)!important;background-color:#f5f5f5!important}.is-checkradio[type=checkbox].is-light.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-light.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-light.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-light.is-block:hover:not([disabled])+label:before{border-color:#f5f5f5!important}.is-checkradio[type=checkbox].is-light.is-block:checked+label{color:rgba(0,0,0,.7);border-color:#f5f5f5!important;background:#f5f5f5}.is-checkradio[type=checkbox].is-light.is-block:checked+label::after,.is-checkradio[type=checkbox].is-light.is-block:checked+label:after{border-color:rgba(0,0,0,.7)!important}.is-checkradio[type=checkbox].is-light.is-block:checked:hover:not([disabled])+label{background:#e8e8e8}.is-checkradio[type=checkbox].is-light.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-light.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-light.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-light.is-block:checked:hover:not([disabled])+label:before{border-color:rgba(0,0,0,.7)!important}.is-checkradio[type=checkbox].is-dark.has-background-color+label::before,.is-checkradio[type=checkbox].is-dark.has-background-color+label:before{border-color:transparent!important;background-color:#363636!important}.is-checkradio[type=checkbox].is-dark:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-dark:hover:not([disabled])+label:before{border-color:#363636!important}.is-checkradio[type=checkbox].is-dark:checked+label::after,.is-checkradio[type=checkbox].is-dark:checked+label:after{border-color:#363636!important}.is-checkradio[type=checkbox].is-dark:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-dark:checked.has-background-color+label:before{border-color:transparent!important;background-color:#363636!important}.is-checkradio[type=checkbox].is-dark:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-dark:checked.has-background-color+label:after{border-color:#fff!important;background-color:#363636!important}.is-checkradio[type=checkbox].is-dark.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-dark.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-dark.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-dark.is-block:hover:not([disabled])+label:before{border-color:#363636!important}.is-checkradio[type=checkbox].is-dark.is-block:checked+label{color:#fff;border-color:#363636!important;background:#363636}.is-checkradio[type=checkbox].is-dark.is-block:checked+label::after,.is-checkradio[type=checkbox].is-dark.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-dark.is-block:checked:hover:not([disabled])+label{background:#292929}.is-checkradio[type=checkbox].is-dark.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-dark.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-dark.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-dark.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox].is-primary.has-background-color+label::before,.is-checkradio[type=checkbox].is-primary.has-background-color+label:before{border-color:transparent!important;background-color:#00d1b2!important}.is-checkradio[type=checkbox].is-primary:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-primary:hover:not([disabled])+label:before{border-color:#00d1b2!important}.is-checkradio[type=checkbox].is-primary:checked+label::after,.is-checkradio[type=checkbox].is-primary:checked+label:after{border-color:#00d1b2!important}.is-checkradio[type=checkbox].is-primary:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-primary:checked.has-background-color+label:before{border-color:transparent!important;background-color:#00d1b2!important}.is-checkradio[type=checkbox].is-primary:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-primary:checked.has-background-color+label:after{border-color:#fff!important;background-color:#00d1b2!important}.is-checkradio[type=checkbox].is-primary.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-primary.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-primary.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-primary.is-block:hover:not([disabled])+label:before{border-color:#00d1b2!important}.is-checkradio[type=checkbox].is-primary.is-block:checked+label{color:#fff;border-color:#00d1b2!important;background:#00d1b2}.is-checkradio[type=checkbox].is-primary.is-block:checked+label::after,.is-checkradio[type=checkbox].is-primary.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-primary.is-block:checked:hover:not([disabled])+label{background:#00b89c}.is-checkradio[type=checkbox].is-primary.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-primary.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-primary.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-primary.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox].is-link.has-background-color+label::before,.is-checkradio[type=checkbox].is-link.has-background-color+label:before{border-color:transparent!important;background-color:#485fc7!important}.is-checkradio[type=checkbox].is-link:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-link:hover:not([disabled])+label:before{border-color:#485fc7!important}.is-checkradio[type=checkbox].is-link:checked+label::after,.is-checkradio[type=checkbox].is-link:checked+label:after{border-color:#485fc7!important}.is-checkradio[type=checkbox].is-link:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-link:checked.has-background-color+label:before{border-color:transparent!important;background-color:#485fc7!important}.is-checkradio[type=checkbox].is-link:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-link:checked.has-background-color+label:after{border-color:#fff!important;background-color:#485fc7!important}.is-checkradio[type=checkbox].is-link.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-link.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-link.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-link.is-block:hover:not([disabled])+label:before{border-color:#485fc7!important}.is-checkradio[type=checkbox].is-link.is-block:checked+label{color:#fff;border-color:#485fc7!important;background:#485fc7}.is-checkradio[type=checkbox].is-link.is-block:checked+label::after,.is-checkradio[type=checkbox].is-link.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-link.is-block:checked:hover:not([disabled])+label{background:#3a51bb}.is-checkradio[type=checkbox].is-link.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-link.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-link.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-link.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox].is-info.has-background-color+label::before,.is-checkradio[type=checkbox].is-info.has-background-color+label:before{border-color:transparent!important;background-color:#3e8ed0!important}.is-checkradio[type=checkbox].is-info:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-info:hover:not([disabled])+label:before{border-color:#3e8ed0!important}.is-checkradio[type=checkbox].is-info:checked+label::after,.is-checkradio[type=checkbox].is-info:checked+label:after{border-color:#3e8ed0!important}.is-checkradio[type=checkbox].is-info:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-info:checked.has-background-color+label:before{border-color:transparent!important;background-color:#3e8ed0!important}.is-checkradio[type=checkbox].is-info:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-info:checked.has-background-color+label:after{border-color:#fff!important;background-color:#3e8ed0!important}.is-checkradio[type=checkbox].is-info.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-info.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-info.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-info.is-block:hover:not([disabled])+label:before{border-color:#3e8ed0!important}.is-checkradio[type=checkbox].is-info.is-block:checked+label{color:#fff;border-color:#3e8ed0!important;background:#3e8ed0}.is-checkradio[type=checkbox].is-info.is-block:checked+label::after,.is-checkradio[type=checkbox].is-info.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-info.is-block:checked:hover:not([disabled])+label{background:#3082c5}.is-checkradio[type=checkbox].is-info.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-info.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-info.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-info.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox].is-success.has-background-color+label::before,.is-checkradio[type=checkbox].is-success.has-background-color+label:before{border-color:transparent!important;background-color:#48c78e!important}.is-checkradio[type=checkbox].is-success:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-success:hover:not([disabled])+label:before{border-color:#48c78e!important}.is-checkradio[type=checkbox].is-success:checked+label::after,.is-checkradio[type=checkbox].is-success:checked+label:after{border-color:#48c78e!important}.is-checkradio[type=checkbox].is-success:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-success:checked.has-background-color+label:before{border-color:transparent!important;background-color:#48c78e!important}.is-checkradio[type=checkbox].is-success:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-success:checked.has-background-color+label:after{border-color:#fff!important;background-color:#48c78e!important}.is-checkradio[type=checkbox].is-success.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-success.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-success.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-success.is-block:hover:not([disabled])+label:before{border-color:#48c78e!important}.is-checkradio[type=checkbox].is-success.is-block:checked+label{color:#fff;border-color:#48c78e!important;background:#48c78e}.is-checkradio[type=checkbox].is-success.is-block:checked+label::after,.is-checkradio[type=checkbox].is-success.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-success.is-block:checked:hover:not([disabled])+label{background:#3abb81}.is-checkradio[type=checkbox].is-success.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-success.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-success.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-success.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox].is-warning.has-background-color+label::before,.is-checkradio[type=checkbox].is-warning.has-background-color+label:before{border-color:transparent!important;background-color:#ffe08a!important}.is-checkradio[type=checkbox].is-warning:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-warning:hover:not([disabled])+label:before{border-color:#ffe08a!important}.is-checkradio[type=checkbox].is-warning:checked+label::after,.is-checkradio[type=checkbox].is-warning:checked+label:after{border-color:#ffe08a!important}.is-checkradio[type=checkbox].is-warning:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-warning:checked.has-background-color+label:before{border-color:transparent!important;background-color:#ffe08a!important}.is-checkradio[type=checkbox].is-warning:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-warning:checked.has-background-color+label:after{border-color:rgba(0,0,0,.7)!important;background-color:#ffe08a!important}.is-checkradio[type=checkbox].is-warning.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-warning.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-warning.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-warning.is-block:hover:not([disabled])+label:before{border-color:#ffe08a!important}.is-checkradio[type=checkbox].is-warning.is-block:checked+label{color:rgba(0,0,0,.7);border-color:#ffe08a!important;background:#ffe08a}.is-checkradio[type=checkbox].is-warning.is-block:checked+label::after,.is-checkradio[type=checkbox].is-warning.is-block:checked+label:after{border-color:rgba(0,0,0,.7)!important}.is-checkradio[type=checkbox].is-warning.is-block:checked:hover:not([disabled])+label{background:#ffd970}.is-checkradio[type=checkbox].is-warning.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-warning.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-warning.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-warning.is-block:checked:hover:not([disabled])+label:before{border-color:rgba(0,0,0,.7)!important}.is-checkradio[type=checkbox].is-danger.has-background-color+label::before,.is-checkradio[type=checkbox].is-danger.has-background-color+label:before{border-color:transparent!important;background-color:#f14668!important}.is-checkradio[type=checkbox].is-danger:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-danger:hover:not([disabled])+label:before{border-color:#f14668!important}.is-checkradio[type=checkbox].is-danger:checked+label::after,.is-checkradio[type=checkbox].is-danger:checked+label:after{border-color:#f14668!important}.is-checkradio[type=checkbox].is-danger:checked.has-background-color+label::before,.is-checkradio[type=checkbox].is-danger:checked.has-background-color+label:before{border-color:transparent!important;background-color:#f14668!important}.is-checkradio[type=checkbox].is-danger:checked.has-background-color+label::after,.is-checkradio[type=checkbox].is-danger:checked.has-background-color+label:after{border-color:#fff!important;background-color:#f14668!important}.is-checkradio[type=checkbox].is-danger.is-block:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-danger.is-block:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-danger.is-block:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-danger.is-block:hover:not([disabled])+label:before{border-color:#f14668!important}.is-checkradio[type=checkbox].is-danger.is-block:checked+label{color:#fff;border-color:#f14668!important;background:#f14668}.is-checkradio[type=checkbox].is-danger.is-block:checked+label::after,.is-checkradio[type=checkbox].is-danger.is-block:checked+label:after{border-color:#fff!important}.is-checkradio[type=checkbox].is-danger.is-block:checked:hover:not([disabled])+label{background:#ef2e55}.is-checkradio[type=checkbox].is-danger.is-block:checked:hover:not([disabled])+label::after,.is-checkradio[type=checkbox].is-danger.is-block:checked:hover:not([disabled])+label::before,.is-checkradio[type=checkbox].is-danger.is-block:checked:hover:not([disabled])+label:after,.is-checkradio[type=checkbox].is-danger.is-block:checked:hover:not([disabled])+label:before{border-color:#f2f2f2!important}.is-checkradio[type=checkbox]:indeterminate+label::after,.is-checkradio[type=checkbox]:indeterminate+label:after{display:inline-block;transform:rotate(90deg);border-bottom:none}.is-checkradio[type=checkbox]:indeterminate.is-white+label::after,.is-checkradio[type=checkbox]:indeterminate.is-white+label:after{border-color:#fff}.is-checkradio[type=checkbox]:indeterminate.is-black+label::after,.is-checkradio[type=checkbox]:indeterminate.is-black+label:after{border-color:#0a0a0a}.is-checkradio[type=checkbox]:indeterminate.is-light+label::after,.is-checkradio[type=checkbox]:indeterminate.is-light+label:after{border-color:#f5f5f5}.is-checkradio[type=checkbox]:indeterminate.is-dark+label::after,.is-checkradio[type=checkbox]:indeterminate.is-dark+label:after{border-color:#363636}.is-checkradio[type=checkbox]:indeterminate.is-primary+label::after,.is-checkradio[type=checkbox]:indeterminate.is-primary+label:after{border-color:#00d1b2}.is-checkradio[type=checkbox]:indeterminate.is-link+label::after,.is-checkradio[type=checkbox]:indeterminate.is-link+label:after{border-color:#485fc7}.is-checkradio[type=checkbox]:indeterminate.is-info+label::after,.is-checkradio[type=checkbox]:indeterminate.is-info+label:after{border-color:#3e8ed0}.is-checkradio[type=checkbox]:indeterminate.is-success+label::after,.is-checkradio[type=checkbox]:indeterminate.is-success+label:after{border-color:#48c78e}.is-checkradio[type=checkbox]:indeterminate.is-warning+label::after,.is-checkradio[type=checkbox]:indeterminate.is-warning+label:after{border-color:#ffe08a}.is-checkradio[type=checkbox]:indeterminate.is-danger+label::after,.is-checkradio[type=checkbox]:indeterminate.is-danger+label:after{border-color:#f14668}.is-checkradio[type=radio]+label::before,.is-checkradio[type=radio]+label:before{border-radius:50%}.is-checkradio[type=radio]+label::after,.is-checkradio[type=radio]+label:after{border-radius:50%;background:#00d1b2;left:0;transform:scale(.5)}.is-checkradio[type=radio]:checked.has-background-color+label::before,.is-checkradio[type=radio]:checked.has-background-color+label:before{border-color:#4a4a4a!important;background-color:#4a4a4a!important}.is-checkradio[type=radio]:checked.has-background-color+label::after,.is-checkradio[type=radio]:checked.has-background-color+label:after{border-color:#4a4a4a!important;background-color:#4a4a4a!important}.is-checkradio[type=radio].is-rtl+label{padding-left:0}.is-checkradio[type=radio].is-rtl+label::after,.is-checkradio[type=radio].is-rtl+label:after{left:auto;right:0}.is-checkradio[type=radio]+label{font-size:1rem;line-height:1.5rem;padding-left:2rem}.is-checkradio[type=radio]+label::after,.is-checkradio[type=radio]+label::before,.is-checkradio[type=radio]+label:after,.is-checkradio[type=radio]+label:before{width:1.5rem;height:1.5rem}.is-checkradio[type=radio].is-rtl+label{padding-right:2rem}.is-checkradio[type=radio].is-small+label{font-size:.75rem;line-height:1.125rem;padding-left:1.5rem}.is-checkradio[type=radio].is-small+label::after,.is-checkradio[type=radio].is-small+label::before,.is-checkradio[type=radio].is-small+label:after,.is-checkradio[type=radio].is-small+label:before{width:1.125rem;height:1.125rem}.is-checkradio[type=radio].is-small.is-rtl+label{padding-right:1.5rem}.is-checkradio[type=radio].is-medium+label{font-size:1.25rem;line-height:1.875rem;padding-left:2.5rem}.is-checkradio[type=radio].is-medium+label::after,.is-checkradio[type=radio].is-medium+label::before,.is-checkradio[type=radio].is-medium+label:after,.is-checkradio[type=radio].is-medium+label:before{width:1.875rem;height:1.875rem}.is-checkradio[type=radio].is-medium.is-rtl+label{padding-right:2.5rem}.is-checkradio[type=radio].is-large+label{font-size:1.5rem;line-height:2.25rem;padding-left:3rem}.is-checkradio[type=radio].is-large+label::after,.is-checkradio[type=radio].is-large+label::before,.is-checkradio[type=radio].is-large+label:after,.is-checkradio[type=radio].is-large+label:before{width:2.25rem;height:2.25rem}.is-checkradio[type=radio].is-large.is-rtl+label{padding-right:3rem}.is-checkradio[type=radio].is-white.has-background-color+label::before,.is-checkradio[type=radio].is-white.has-background-color+label:before{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-white:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-white:hover:not([disabled])+label:before{border-color:#fff!important}.is-checkradio[type=radio].is-white:checked+label::after,.is-checkradio[type=radio].is-white:checked+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-white:checked.has-background-color+label::before,.is-checkradio[type=radio].is-white:checked.has-background-color+label:before{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-white:checked.has-background-color+label::after,.is-checkradio[type=radio].is-white:checked.has-background-color+label:after{border-color:#0a0a0a!important;background-color:#0a0a0a!important}.is-checkradio[type=radio].is-black.has-background-color+label::before,.is-checkradio[type=radio].is-black.has-background-color+label:before{border-color:#0a0a0a!important;background-color:#0a0a0a!important}.is-checkradio[type=radio].is-black:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-black:hover:not([disabled])+label:before{border-color:#0a0a0a!important}.is-checkradio[type=radio].is-black:checked+label::after,.is-checkradio[type=radio].is-black:checked+label:after{border-color:#0a0a0a!important;background-color:#0a0a0a!important}.is-checkradio[type=radio].is-black:checked.has-background-color+label::before,.is-checkradio[type=radio].is-black:checked.has-background-color+label:before{border-color:#0a0a0a!important;background-color:#0a0a0a!important}.is-checkradio[type=radio].is-black:checked.has-background-color+label::after,.is-checkradio[type=radio].is-black:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-light.has-background-color+label::before,.is-checkradio[type=radio].is-light.has-background-color+label:before{border-color:#f5f5f5!important;background-color:#f5f5f5!important}.is-checkradio[type=radio].is-light:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-light:hover:not([disabled])+label:before{border-color:#f5f5f5!important}.is-checkradio[type=radio].is-light:checked+label::after,.is-checkradio[type=radio].is-light:checked+label:after{border-color:#f5f5f5!important;background-color:#f5f5f5!important}.is-checkradio[type=radio].is-light:checked.has-background-color+label::before,.is-checkradio[type=radio].is-light:checked.has-background-color+label:before{border-color:#f5f5f5!important;background-color:#f5f5f5!important}.is-checkradio[type=radio].is-light:checked.has-background-color+label::after,.is-checkradio[type=radio].is-light:checked.has-background-color+label:after{border-color:rgba(0,0,0,.7)!important;background-color:rgba(0,0,0,.7)!important}.is-checkradio[type=radio].is-dark.has-background-color+label::before,.is-checkradio[type=radio].is-dark.has-background-color+label:before{border-color:#363636!important;background-color:#363636!important}.is-checkradio[type=radio].is-dark:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-dark:hover:not([disabled])+label:before{border-color:#363636!important}.is-checkradio[type=radio].is-dark:checked+label::after,.is-checkradio[type=radio].is-dark:checked+label:after{border-color:#363636!important;background-color:#363636!important}.is-checkradio[type=radio].is-dark:checked.has-background-color+label::before,.is-checkradio[type=radio].is-dark:checked.has-background-color+label:before{border-color:#363636!important;background-color:#363636!important}.is-checkradio[type=radio].is-dark:checked.has-background-color+label::after,.is-checkradio[type=radio].is-dark:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-primary.has-background-color+label::before,.is-checkradio[type=radio].is-primary.has-background-color+label:before{border-color:#00d1b2!important;background-color:#00d1b2!important}.is-checkradio[type=radio].is-primary:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-primary:hover:not([disabled])+label:before{border-color:#00d1b2!important}.is-checkradio[type=radio].is-primary:checked+label::after,.is-checkradio[type=radio].is-primary:checked+label:after{border-color:#00d1b2!important;background-color:#00d1b2!important}.is-checkradio[type=radio].is-primary:checked.has-background-color+label::before,.is-checkradio[type=radio].is-primary:checked.has-background-color+label:before{border-color:#00d1b2!important;background-color:#00d1b2!important}.is-checkradio[type=radio].is-primary:checked.has-background-color+label::after,.is-checkradio[type=radio].is-primary:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-link.has-background-color+label::before,.is-checkradio[type=radio].is-link.has-background-color+label:before{border-color:#485fc7!important;background-color:#485fc7!important}.is-checkradio[type=radio].is-link:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-link:hover:not([disabled])+label:before{border-color:#485fc7!important}.is-checkradio[type=radio].is-link:checked+label::after,.is-checkradio[type=radio].is-link:checked+label:after{border-color:#485fc7!important;background-color:#485fc7!important}.is-checkradio[type=radio].is-link:checked.has-background-color+label::before,.is-checkradio[type=radio].is-link:checked.has-background-color+label:before{border-color:#485fc7!important;background-color:#485fc7!important}.is-checkradio[type=radio].is-link:checked.has-background-color+label::after,.is-checkradio[type=radio].is-link:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-info.has-background-color+label::before,.is-checkradio[type=radio].is-info.has-background-color+label:before{border-color:#3e8ed0!important;background-color:#3e8ed0!important}.is-checkradio[type=radio].is-info:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-info:hover:not([disabled])+label:before{border-color:#3e8ed0!important}.is-checkradio[type=radio].is-info:checked+label::after,.is-checkradio[type=radio].is-info:checked+label:after{border-color:#3e8ed0!important;background-color:#3e8ed0!important}.is-checkradio[type=radio].is-info:checked.has-background-color+label::before,.is-checkradio[type=radio].is-info:checked.has-background-color+label:before{border-color:#3e8ed0!important;background-color:#3e8ed0!important}.is-checkradio[type=radio].is-info:checked.has-background-color+label::after,.is-checkradio[type=radio].is-info:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-success.has-background-color+label::before,.is-checkradio[type=radio].is-success.has-background-color+label:before{border-color:#48c78e!important;background-color:#48c78e!important}.is-checkradio[type=radio].is-success:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-success:hover:not([disabled])+label:before{border-color:#48c78e!important}.is-checkradio[type=radio].is-success:checked+label::after,.is-checkradio[type=radio].is-success:checked+label:after{border-color:#48c78e!important;background-color:#48c78e!important}.is-checkradio[type=radio].is-success:checked.has-background-color+label::before,.is-checkradio[type=radio].is-success:checked.has-background-color+label:before{border-color:#48c78e!important;background-color:#48c78e!important}.is-checkradio[type=radio].is-success:checked.has-background-color+label::after,.is-checkradio[type=radio].is-success:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}.is-checkradio[type=radio].is-warning.has-background-color+label::before,.is-checkradio[type=radio].is-warning.has-background-color+label:before{border-color:#ffe08a!important;background-color:#ffe08a!important}.is-checkradio[type=radio].is-warning:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-warning:hover:not([disabled])+label:before{border-color:#ffe08a!important}.is-checkradio[type=radio].is-warning:checked+label::after,.is-checkradio[type=radio].is-warning:checked+label:after{border-color:#ffe08a!important;background-color:#ffe08a!important}.is-checkradio[type=radio].is-warning:checked.has-background-color+label::before,.is-checkradio[type=radio].is-warning:checked.has-background-color+label:before{border-color:#ffe08a!important;background-color:#ffe08a!important}.is-checkradio[type=radio].is-warning:checked.has-background-color+label::after,.is-checkradio[type=radio].is-warning:checked.has-background-color+label:after{border-color:rgba(0,0,0,.7)!important;background-color:rgba(0,0,0,.7)!important}.is-checkradio[type=radio].is-danger.has-background-color+label::before,.is-checkradio[type=radio].is-danger.has-background-color+label:before{border-color:#f14668!important;background-color:#f14668!important}.is-checkradio[type=radio].is-danger:hover:not([disabled])+label::before,.is-checkradio[type=radio].is-danger:hover:not([disabled])+label:before{border-color:#f14668!important}.is-checkradio[type=radio].is-danger:checked+label::after,.is-checkradio[type=radio].is-danger:checked+label:after{border-color:#f14668!important;background-color:#f14668!important}.is-checkradio[type=radio].is-danger:checked.has-background-color+label::before,.is-checkradio[type=radio].is-danger:checked.has-background-color+label:before{border-color:#f14668!important;background-color:#f14668!important}.is-checkradio[type=radio].is-danger:checked.has-background-color+label::after,.is-checkradio[type=radio].is-danger:checked.has-background-color+label:after{border-color:#fff!important;background-color:#fff!important}
-|]
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Own.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Own.hs
deleted file mode 100644
index c3d19888827..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/CSS/Own.hs
+++ /dev/null
@@ -1,1302 +0,0 @@
-{-# LANGUAGE QuasiQuotes #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.CSS.Own
- ( ownCSS
- , chartGridDark
- , chartGridLight
- , chartTextDark
- , chartTextLight
- ) where
-
-import Data.String.QQ
-
--- | To avoid run-time dependency from the static content, embed own CSS in the page's header.
-ownCSS :: String
-ownCSS = [s|
-html {
- height: 100%;
-}
-
-body {
- height: 100%;
-}
-
-.wrapper {
- min-height: 100%;
- width: 100%;
- position: relative;
- padding-bottom: 62px;
- box-sizing: border-box;
-}
-
-.footer {
- height: 62px;
- bottom: 0;
- position: absolute;
- width: 100%;
-}
-
-code {
- color: #1d359f;
- padding: 0.11em 0.2em 0.11em;
- border-radius: 3px;
-}
-
-pre {
- color: #1d359f;
- font-size: .875em;
- overflow-x: auto;
- padding: 8px 8px 8px 8px;
- margin-top: 12px;
- margin-bottom: 12px;
- white-space: pre;
- word-wrap: normal;
- border-radius: 3px;
-}
-
-.message.is-link .message-body {
- border-color: #485fc7;
- color: #1834ae;
-}
-
-span[data-tooltip] {
- border-bottom: none !important;
-}
-
-.pageloader {
- opacity: 0.98 !important;
-}
-
-.field.is-grouped {
- display: inline-flex !important;
-}
-
-.divider {
- font-size: 16px;
- letter-spacing: .5px;
- margin: 30px 0;
-}
-
-.table tbody tr:first-child td {
- padding-top: 17px;
-}
-
-.rt-view-show-hide-chart-group {
- margin-top: 5px;
-}
-
-.rt-view-no-nodes-icon svg {
- width: 70px;
- margin-top: 60px;
- margin-bottom: 40px;
-}
-
-.rt-view-no-nodes-info {
- max-width: 800px !important;
- margin-top: 50px;
- font-size: 97%;
-}
-
-.rt-view-logs-live-view-copies {
- width: 40px;
-}
-
-.rt-view-chart-area {
- width: 100% !important;
-}
-
-.rt-view-main-table-description {
- min-width: 380px;
-}
-
-.rt-view-node-chart-label svg {
- width: 42px;
- height: 15px;
- margin-right: 3px;
-}
-
-.rt-view-peer-modal {
- width: 45%;
-}
-
-.rt-view-logs-live-view-modal {
- width: 85%;
- min-height: 65%;
-}
-
-.rt-view-errors-modal {
- width: 65%;
- min-height: 65%;
-}
-
-.rt-view-ekg-metrics-modal {
- width: 60%;
-}
-
-.rt-view-divider {
- margin-top: 5px;
- margin-bottom: 13px;
-}
-
-@media only screen and (max-width: 1216px) {
- .rt-view-peer-modal {
- width: 60%;
- }
-
- .rt-view-logs-live-view-modal {
- width: 80%;
- }
-
- .rt-view-errors-modal {
- width: 70%;
- }
-
- .rt-view-ekg-metrics-modal {
- width: 60%;
- }
-}
-
-@media only screen and (max-width: 1024px) {
- .rt-view-peer-modal {
- width: 70%;
- }
-
- .rt-view-logs-live-view-modal {
- width: 85%;
- }
-
- .rt-view-errors-modal {
- width: 75%;
- }
-
- .rt-view-ekg-metrics-modal {
- width: 70%;
- }
-}
-
-@media screen and (min-width: 769px), print {
- .field-label {
- flex-grow: 1.5;
- }
-}
-
-@media only screen and (max-width: 769px) {
- .rt-view-peer-modal {
- width: 80%;
- }
-
- .rt-view-logs-live-view-modal {
- width: 95%;
- }
-
- .rt-view-errors-modal {
- width: 85%;
- }
-
- .rt-view-ekg-metrics-modal {
- width: 80%;
- }
-}
-
-.rt-view-notifications-settings {
-}
-
-.rt-view-logs-input {
- max-width: 200px;
-}
-
-.rt-view-logs-live-view-tbody {
- font-family: monospace;
- font-size: 90%;
-}
-
-.rt-view-logs-live-view-msg-timestamp {
- font-size: 90%;
- padding-right: 15px;
- color: #888;
-}
-
-.rt-view-logs-live-view-msg-node {
- font-size: 90%;
- padding-right: 15px;
-}
-
-.rt-view-logs-live-view-msg-severity {
- font-weight: bold;
- background-color: #2b2929;
- margin-right: 15px;
-}
-
-.rt-view-logs-live-view-msg-namespace {
- color: #bcbcbc;
- padding-right: 15px;
-}
-
-.rt-view-logs-live-view-msg-body {
- color: #fff;
-}
-
-.rt-view-logs-live-view-node {
- width: 9%;
-}
-
-.rt-view-logs-live-view-timestamp {
- width: 14%;
-}
-
-.rt-view-logs-live-view-severity {
- width: 8%;
-}
-
-.rt-view-logs-live-view-namespace {
- width: 14%;
-}
-
-.rt-view-errors-timestamp {
- width: 30%;
-}
-
-.rt-view-errors-severity {
- width: 16%;
-}
-
-.rt-view-copy-icon {
- margin-top: 6px;
-}
-
-.rt-view-show-hide-pass-icon {
- margin-top: 6px;
-}
-
-.rt-view-search-logs-icon {
- margin-top: 6px;
-}
-
-.rt-view-search-logs-icon svg {
- width: 18px;
- color: whitesmoke;
-}
-
-.rt-view-notifications-errors-select-wrapper {
- padding-top: 7px;
- padding-bottom: 11px;
- float: right;
- clear: right;
-}
-
-.rt-view-progress-container {
- width: 110px;
- background-color: #f5f5f5;
- height: 32px;
- position: relative;
- border-radius: 4px;
-}
-
-.rt-view-progress-container-text {
- position: absolute;
- left: 0;
- right: 0;
- height: 100%;
- border-radius: 4px;
-}
-
-.rt-view-progress-container-text-label {
- display: flex;
- height: 100%;
- justify-content: center;
- align-items: center;
- border-radius: 4px;
- color: #444;
-}
-
-.rt-view-loading-bar {
- width: 0%;
- height: 100%;
- background-color: #f14668;
- border-radius: 4px;
-}
-
-/* Dark Theme */
-
-.dark {
- font-family: sans-serif;
- font-size: 22px;
- background-color: #131325;
- min-height: 100%;
-}
-
-.dark .wrapper {
- background-color: #131325;
-}
-
-.dark .rt-view-href {
- color: #607bf7;
-}
-
-.dark .rt-view-href:hover {
- color: #889cf5 !important;
- border-bottom: 1px solid #889cf5;
-}
-
-.dark .navbar-link, a.navbar-item {
- font-size: 18px;
- cursor: pointer;
-}
-
-@media screen and (min-width: 1024px) {
- .dark .navbar-item.has-dropdown:hover .navbar-link {
- background-color: #434360;
- }
-
- .dark .navbar-dropdown {
- background-color: #434360;
- border-top: 1px solid #aaa;
- }
-}
-
-.dark .navbar-dropdown.is-right .navbar-item {
- background-color: #434360;
- color: #cecece;
-}
-
-.dark .navbar-dropdown.is-right a.navbar-item:hover {
- background-color: #545478;
-}
-
-.dark .rt-view-href-icon svg {
- width: 12px;
- margin-left: 5px;
- margin-bottom: 4px;
- color: #607bf7;
-}
-
-.dark .rt-view-top-bar {
- background-color: #282841;
- color: whitesmoke;
- padding-top: 8px;
- padding-bottom: 2px;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-cardano-logo svg {
- width: 48px;
- color: whitesmoke;
- margin-left: 5px;
-}
-
-.dark .rt-view-name {
- color: whitesmoke;
- margin-left: 17px;
- margin-right: 6px;
- margin-bottom: 6px;
-}
-
-.dark .rt-view-info-icon svg {
- width: 25px;
- padding-top: 2px;
- color: whitesmoke;
- cursor: pointer;
-}
-
-.dark .rt-view-theme-icon svg {
- width: 23px;
- padding-top: 2px;
- color: whitesmoke;
- cursor: pointer;
-}
-
-.dark .rt-view-copy-icon svg {
- width: 20px;
- color: whitesmoke;
- cursor: pointer;
-}
-
-.dark .rt-view-copy-icon-on-button svg {
- width: 20px;
- color: whitesmoke;
- margin-top: 5px;
-}
-
-.dark .rt-view-info-icon-on-button svg {
- width: 20px;
- color: whitesmoke;
- margin-top: 6px;
-}
-
-.dark .rt-view-leader-icon-on-button svg {
- width: 20px;
- color: whitesmoke;
- margin-top: 7px;
-}
-
-.dark .rt-view-leader-icon-2-on-button svg {
- width: 14px;
- color: whitesmoke;
- margin-top: 7px;
-}
-
-.dark .rt-view-leader-icon-3-on-button svg {
- width: 11px;
- color: whitesmoke;
- margin-top: 7px;
-}
-
-.dark .rt-view-show-hide-pass-icon svg {
- width: 20px;
- cursor: pointer;
-}
-
-.dark .rt-view-sort-icon svg {
- width: 11px;
- margin-left: 9px;
- color: whitesmoke;
- cursor: pointer;
-}
-
-.dark .rt-view-delete-icon svg {
- width: 20px;
- color: red;
- cursor: pointer;
-}
-
-.dark .rt-view-delete-errors-icon svg {
- width: 22px;
- color: red;
- cursor: pointer;
-}
-
-.dark .rt-view-export-icon svg {
- width: 29px;
- margin-top: 5px;
- margin-right: 5px;
- color: whitesmoke;
- cursor: pointer;
-}
-
-.dark .rt-view-logs-icon svg {
- width: 23px;
- padding-top: 2px;
- color: whitesmoke;
-}
-
-.dark .rt-view-overview-icon svg {
- width: 18px;
- margin-right: 12px;
- color: #0cc9cb;
-}
-
-.dark .rt-view-no-nodes-icon svg {
- color: #677deb;
-}
-
-.dark .rt-view-no-nodes-progress {
- margin-top: 34px;
- max-width: 360px;
- margin-left: auto;
- margin-right: auto;
-}
-
-.dark .rt-view-notify-menu-icon svg {
- width: 15px;
- padding-top: 6px;
- margin-right: 9px;
- color: whitesmoke;
-}
-
-.dark .rt-view-no-nodes-message {
- font-size: 23px;
- color: whitesmoke;
- text-align: center;
-}
-
-.dark .rt-view-charts-container {
- padding-bottom: 0px;
-}
-
-.dark .rt-view-chart-container {
- background-color: #2c2b3b;
- padding-top: 10px;
- padding-bottom: 20px;
- padding-left: 20px;
- padding-right: 20px;
- margin-bottom: 24px;
- border: 1px solid #444;
- border-radius: 6px;
-}
-
-.dark .rt-view-chart-name {
- color: whitesmoke;
-}
-
-.dark .rt-view-about-title {
- color: whitesmoke;
-}
-
-.dark .rt-view-about-head {
- color: whitesmoke;
- background-color: #282841;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-about-body {
- color: whitesmoke;
- background-color: #131325;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.dark .rt-view-peer-title {
- color: whitesmoke;
-}
-
-.dark .rt-view-peer-head {
- color: whitesmoke;
- background-color: #282841;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-peer-body {
- color: whitesmoke;
- background-color: #131325;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.dark .rt-view-logs-live-view-title {
- color: whitesmoke;
-}
-
-.dark .rt-view-logs-live-view-head {
- color: whitesmoke;
- background-color: #282841;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-logs-live-view-body {
- color: whitesmoke;
- background-color: #131325;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.dark .rt-view-logs-live-view-foot {
- color: whitesmoke;
- background-color: #282841;
- border-top: 1px solid #555;
- display: block;
-}
-
-.dark .rt-view-errors-title {
- color: whitesmoke;
-}
-
-.dark .rt-view-errors-head {
- color: whitesmoke;
- background-color: #282841;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-errors-body {
- color: whitesmoke;
- background-color: #131325;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.dark .rt-view-errors-foot {
- color: whitesmoke;
- background-color: #282841;
- border-top: 1px solid #555;
- display: block;
-}
-
-.dark .rt-view-notification-settings-foot {
- color: whitesmoke;
- background-color: #282841;
- border-top: 1px solid #555;
- display: block;
-}
-
-.dark .rt-view-notifications-title {
- color: whitesmoke;
-}
-
-.dark .rt-view-notifications-head {
- color: whitesmoke;
- background-color: #282841;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-notifications-body {
- color: whitesmoke;
- background-color: #131325;
-}
-
-.dark .rt-view-ekg-metrics-title {
- color: whitesmoke;
-}
-
-.dark .rt-view-ekg-metrics-head {
- color: whitesmoke;
- background-color: #282841;
- border-bottom: 1px solid #555;
-}
-
-.dark .rt-view-ekg-metrics-body {
- color: whitesmoke;
- background-color: #131325;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.dark .rt-view-main-table {
- background-color: #131325;
- color: whitesmoke;
-}
-
-.dark .rt-view-main-table td {
- padding-top: 17px;
- padding-bottom: 17px;
- border-bottom: 0px solid #444;
-}
-
-.dark .rt-view-main-table th {
- color: whitesmoke;
- border-bottom: 2px solid #888;
- vertical-align: middle;
- min-width: 450px;
-}
-
-.dark .rt-view-peer-table {
- background-color: #131325;
- color: whitesmoke;
-}
-
-.dark .rt-view-peer-table td {
- padding-top: 10px;
- padding-bottom: 10px;
- border-bottom: 0px solid #444;
-}
-
-.dark .rt-view-peer-table th {
- color: whitesmoke;
- border-bottom: 2px solid #888;
- vertical-align: middle;
-}
-
-.dark .rt-view-logs-live-view-table {
- background-color: #131325;
- color: whitesmoke;
-}
-
-.dark .rt-view-logs-live-view-table td {
- padding-top: 10px;
- padding-bottom: 10px;
- border-bottom: 0px solid #444;
-}
-
-.dark .rt-view-logs-live-view-table th {
- color: whitesmoke;
- border-bottom: 2px solid #888;
- vertical-align: middle;
-}
-
-
-.dark .rt-view-errors-table {
- background-color: #131325;
- color: whitesmoke;
-}
-
-.dark .rt-view-errors-table td {
- padding-top: 10px;
- padding-bottom: 10px;
- border-bottom: 0px solid #444;
-}
-
-.dark .rt-view-errors-table th {
- color: whitesmoke;
- border-bottom: 2px solid #888;
- vertical-align: middle;
-}
-
-.dark .rt-view-chart-group-title {
- color: whitesmoke;
- font-weight: bold;
- margin-left: 13px;
- font-size: 115%;
-}
-
-.dark .rt-view-events-title {
- color: whitesmoke;
- font-size: 105%;
-}
-
-.dark .rt-view-show-hide-chart-group svg {
- width: 21px;
- color: #0cc9cb;
-}
-
-.dark .rt-view-chart-icon svg {
- width: 19px;
- margin-right: 11px;
- color: #0cc9cb;
-}
-
-.dark .rt-view-footer {
- background-color: #282841;
- color: #999;
- padding-top: 16px;
- padding-bottom: 12px;
- border-top: 1px solid #555;
- font-size: 80%;
-}
-
-.dark .rt-view-footer-github svg {
- width: 23px;
- margin-top: 1px;
- color: #0cc9cb;
-}
-
-.dark .rt-view-footer-doc svg {
- width: 20px;
- margin-top: 1px;
- margin-left: 15px;
- color: #0cc9cb;
-}
-
-.dark .rt-view-percent-done {
- color: #07e949;
-}
-
-.dark .rt-view-what-icon svg {
- width: 18px;
- margin-left: 12px;
- color: #999;
-}
-
-.dark .rt-view-period-what-icon svg {
- width: 18px;
- margin-left: 8px;
- margin-top: 5px;
- color: #999;
-}
-
-.dark .rt-view-epoch-end svg {
- width: 16px;
- margin-left: 20px;
- margin-right: 5px;
- color: #0cc9cb;
-}
-
-.dark .rt-view-email-only {
- color: orange;
- font-size: 95%;
- margin-bottom: 21px;
-}
-
-.dark .rt-view-label {
- font-size: 80%;
- font-weight: 600;
- color: whitesmoke;
-}
-
-.dark .rt-view-test-status-message-ok {
- color: #48ee66;
-}
-
-.dark .rt-view-test-status-message-fail {
- color: #f7967f;
-}
-
-.dark .rt-view-node-producer-label svg {
- width: 22px;
- margin-left: 10px;
- color: lightgreen;
-}
-
-/********************* Light Theme *********************/
-
-.light {
- font-family: sans-serif;
- font-size: 22px;
- background-color: #f5f5f5;
- min-height: 100%;
-}
-
-.light .wrapper {
- background-color: #f5f5f5;
-}
-
-.light .rt-view-href {
- color: #264af0;
-}
-
-.light .rt-view-href:hover {
- color: #889cf5 !important;
- border-bottom: 1px solid #889cf5;
-}
-
-.light .rt-view-href-icon svg {
- width: 12px;
- margin-left: 5px;
- margin-bottom: 4px;
- color: #264af0;
-}
-
-.light .navbar-link, a.navbar-item {
- font-size: 18px;
- cursor: pointer;
-}
-
-.light .rt-view-top-bar {
- background-color: #efefef;
- color: #131325;
- padding-top: 8px;
- padding-bottom: 2px;
- border-bottom: 1px solid #dbdbdb;
-}
-
-.light .rt-view-cardano-logo svg {
- width: 48px;
- color: #0033ad;
- margin-left: 5px;
-}
-
-.light .rt-view-name {
- color: #0033ad;
- margin-left: 17px;
- margin-right: 6px;
- margin-bottom: 6px;
-}
-
-.light .rt-view-info-icon svg {
- width: 25px;
- padding-top: 2px;
- color: #0033ad;
- cursor: pointer;
-}
-
-.light .rt-view-theme-icon svg {
- width: 23px;
- padding-top: 2px;
- color: #0033ad;
- cursor: pointer;
-}
-
-.light .rt-view-copy-icon svg {
- width: 20px;
- color: #444;
- cursor: pointer;
-}
-
-.light .rt-view-copy-icon-on-button svg {
- width: 20px;
- color: whitesmoke;
- margin-top: 5px;
-}
-
-.light .rt-view-info-icon-on-button svg {
- width: 20px;
- color: whitesmoke;
- margin-top: 6px;
-}
-
-.light .rt-view-leader-icon-on-button svg {
- width: 20px;
- color: whitesmoke;
- margin-top: 7px;
-}
-
-.light .rt-view-leader-icon-2-on-button svg {
- width: 14px;
- color: whitesmoke;
- margin-top: 7px;
-}
-
-.light .rt-view-leader-icon-3-on-button svg {
- width: 11px;
- color: whitesmoke;
- margin-top: 7px;
-}
-
-.light .rt-view-show-hide-pass-icon svg {
- width: 20px;
- cursor: pointer;
-}
-
-.light .rt-view-sort-icon svg {
- width: 11px;
- margin-left: 9px;
- color: #444;
- cursor: pointer;
-}
-
-.light .rt-view-delete-icon svg {
- width: 20px;
- color: red;
- cursor: pointer;
-}
-
-.light .rt-view-delete-errors-icon svg {
- width: 22px;
- color: red;
- cursor: pointer;
-}
-
-.light .rt-view-export-icon svg {
- width: 29px;
- margin-top: 5px;
- margin-right: 5px;
- color: #0033ad;
- cursor: pointer;
-}
-
-.light .rt-view-logs-icon svg {
- width: 23px;
- padding-top: 2px;
- color: #0033ad;
-}
-
-.light .rt-view-overview-icon svg {
- width: 18px;
- margin-right: 12px;
- color: #038b8c;
-}
-
-.light .rt-view-no-nodes-icon svg {
- color: #0033ad;
-}
-
-.light .rt-view-no-nodes-message {
- font-size: 23px;
- color: #0033ad;
- text-align: center;
-}
-
-.light .rt-view-no-nodes-progress {
- margin-top: 34px;
- max-width: 360px;
- margin-left: auto;
- margin-right: auto;
-}
-
-.light .rt-view-charts-container {
- padding-bottom: 0px;
-}
-
-.light .rt-view-chart-container {
- background-color: #eeeeee;
- padding-top: 10px;
- padding-bottom: 20px;
- padding-left: 20px;
- padding-right: 20px;
- margin-bottom: 24px;
- border: 1px solid #dddddd;
- border-radius: 6px;
-}
-
-.light .rt-view-chart-name {
- color: #444;
-}
-
-.light .rt-view-about-title {
- color: #444;
-}
-
-.light .rt-view-about-head {
- color: whitesmoke;
- background-color: whitesmoke;
- border-bottom: 1px solid #bebebe;
-}
-
-.light .rt-view-about-body {
- color: #555;
- background-color: #eaeaea;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.light .rt-view-peer-title {
- color: #444;
-}
-
-.light .rt-view-peer-head {
- color: whitesmoke;
- background-color: whitesmoke;
- border-bottom: 1px solid #bebebe;
-}
-
-.light .rt-view-peer-body {
- color: #555;
- background-color: #eaeaea;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.light .rt-view-logs-live-view-title {
- color: #444;
-}
-
-.light .rt-view-logs-live-view-head {
- color: #555;
- background-color: whitesmoke;
- border-bottom: 1px solid #bebebe;
-}
-
-.light .rt-view-logs-live-view-body {
- color: #555;
- background-color: #eaeaea;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.light .rt-view-logs-live-view-foot {
- color: #555;
- background-color: whitesmoke;
- border-top: 1px solid #bebebe;
- display: block;
-}
-
-.light .rt-view-errors-title {
- color: #444;
-}
-
-.light .rt-view-errors-head {
- color: #555;
- background-color: whitesmoke;
- border-bottom: 1px solid #bebebe;
-}
-
-.light .rt-view-errors-body {
- color: #555;
- background-color: #eaeaea;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.light .rt-view-errors-foot {
- color: #555;
- background-color: whitesmoke;
- border-top: 1px solid #bebebe;
- display: block;
-}
-
-.light .rt-view-notification-settings-foot {
- color: #555;
- background-color: whitesmoke;
- border-top: 1px solid #bebebe;
- display: block;
-}
-
-.light .rt-view-notifications-title {
- color: #444;
-}
-
-.light .rt-view-notifications-head {
- color: whitesmoke;
- background-color: whitesmoke;
- border-bottom: 1px solid #bebebe;
-}
-
-.light .rt-view-notifications-body {
- color: #555;
- background-color: #eaeaea;
-}
-
-.light .rt-view-ekg-metrics-title {
- color: #444;
-}
-
-.light .rt-view-ekg-metrics-head {
- color: whitesmoke;
- background-color: whitesmoke;
- border-bottom: 1px solid #bebebe;
-}
-
-.light .rt-view-ekg-metrics-body {
- color: #555;
- background-color: #eaeaea;
- border-bottom-left-radius: 6px;
- border-bottom-right-radius: 6px;
-}
-
-.light .rt-view-main-table {
- background-color: #f5f5f5;
- color: #444;
-}
-
-.light .rt-view-main-table td {
- padding-top: 17px;
- padding-bottom: 17px;
- border-bottom: 0px solid #444;
-}
-
-.light .rt-view-main-table th {
- color: #444;
- border-bottom: 2px solid #cfcfcf;
- vertical-align: middle;
- min-width: 450px;
-}
-
-.light .rt-view-peer-table {
- background-color: #eaeaea;
- color: #444;
-}
-
-.light .rt-view-peer-table td {
- padding-top: 10px;
- padding-bottom: 10px;
- border-bottom: 0px solid #444;
-}
-
-.light .rt-view-peer-table th {
- color: #444;
- border-bottom: 2px solid #cfcfcf;
- vertical-align: middle;
-}
-
-.light .rt-view-logs-live-view-table {
- background-color: #eaeaea;
- color: #444;
-}
-
-.light .rt-view-logs-live-view-table td {
- padding-top: 10px;
- padding-bottom: 10px;
- border-bottom: 0px solid #444;
-}
-
-.light .rt-view-logs-live-view-table th {
- color: #444;
- border-bottom: 2px solid #cfcfcf;
- vertical-align: middle;
-}
-
-.light .rt-view-errors-table {
- background-color: #eaeaea;
- color: #444;
-}
-
-.light .rt-view-errors-table td {
- padding-top: 10px;
- padding-bottom: 10px;
- border-bottom: 0px solid #444;
-}
-
-.light .rt-view-errors-table th {
- color: #444;
- border-bottom: 2px solid #cfcfcf;
- vertical-align: middle;
-}
-
-.light .rt-view-chart-group-title {
- color: #444;
- font-weight: bold;
- margin-left: 13px;
- font-size: 110%;
-}
-
-.light .rt-view-events-title {
- color: #555;
- font-size: 105%;
-}
-
-.light .rt-view-show-hide-chart-group svg {
- width: 21px;
- color: #038b8c;
-}
-
-.light .rt-view-chart-icon svg {
- width: 19px;
- margin-right: 11px;
- color: #038b8c;
-}
-
-.light .rt-view-footer {
- background-color: #efefef;
- color: #777;
- padding-top: 16px;
- padding-bottom: 12px;
- border-top: 1px solid #dbdbdb;
- font-size: 80%;
-}
-
-.light .rt-view-footer-github svg {
- width: 23px;
- margin-top: 1px;
- color: #038b8c;
-}
-
-.light .rt-view-footer-doc svg {
- width: 20px;
- margin-top: 1px;
- margin-left: 15px;
- color: #038b8c;
-}
-
-.light .rt-view-percent-done {
- color: #048b04;
-}
-
-.light .rt-view-what-icon svg {
- width: 18px;
- margin-left: 12px;
- color: #9a9a9a;
-}
-
-.light .rt-view-period-what-icon svg {
- width: 18px;
- margin-left: 8px;
- margin-top: 5px;
- color: #9a9a9a;
-}
-
-.light .rt-view-epoch-end svg {
- width: 16px;
- margin-left: 20px;
- margin-right: 5px;
- color: #038b8c;
-}
-
-.light .rt-view-notify-menu-icon svg {
- width: 15px;
- padding-top: 6px;
- margin-right: 9px;
- color: #0033ad;
-}
-
-.light .rt-view-email-only {
- color: #d68c04;
- font-size: 95%;
- margin-bottom: 21px;
-}
-
-.light .rt-view-label {
- font-size: 80%;
- font-weight: 600;
- color: #555;
-}
-
-.light .rt-view-test-status-message-ok {
- color: #0b9223;
-}
-
-.light .rt-view-test-status-message-fail {
- color: #e6380d;
-}
-
-.light .rt-view-node-producer-label svg {
- width: 22px;
- margin-left: 10px;
- color: green;
-}
-|]
-
-chartTextLight
- , chartTextDark
- , chartGridDark
- , chartGridLight :: String
-chartGridDark = "#ccc"
-chartGridLight = "#555"
-chartTextDark = "#555"
-chartTextLight = "#ddd"
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/Charts.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/Charts.hs
deleted file mode 100644
index c426162a2b0..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/Charts.hs
+++ /dev/null
@@ -1,345 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
--- | The module 'Cardano.Tracer.Handlers.RTView.UI.JS.Charts' contains the tools
--- for rendering/updating charts using Chart.JS library, via JS FFI.
---
--- This module contains common tools for charts' state. We need it to be able
--- to re-render their values after web-page reloading.
-
-module Cardano.Tracer.Handlers.RTView.UI.Charts
- ( initColors
- , initDatasetsIndices
- , addNodeDatasetsToCharts
- , addPointsToChart
- , addAllPointsToChart
- , getSavedColorForNode
- , restoreChartsSettings
- , saveChartsSettings
- , changeChartsToLightTheme
- , changeChartsToDarkTheme
- , replacePointsByAvgPoints
- , restoreAllHistoryOnChart
- , restoreLastHistoryOnAllCharts
- , restoreLastHistoryOnCharts
- , PointsAdder
- ) where
-
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.UI.CSS.Own
-import qualified Cardano.Tracer.Handlers.RTView.UI.JS.Charts as Chart
-import qualified Cardano.Tracer.Handlers.RTView.UI.JS.Utils as JS
-import Cardano.Tracer.Handlers.RTView.UI.Types
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Update.Historical
-import Cardano.Tracer.Handlers.System
-import Cardano.Tracer.Types
-import Cardano.Tracer.Utils
-
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TBQueue (newTBQueueIO, tryReadTBQueue, writeTBQueue)
-import Control.Concurrent.STM.TVar (modifyTVar', newTVarIO, readTVarIO)
-import Control.Exception.Extra (ignore, try_)
-import Control.Monad (forM, forM_, unless, when)
-import Control.Monad.Extra (whenJustM)
-import Data.Aeson (decodeFileStrict', encodeFile)
-import Data.Kind
-import Data.List (find, isInfixOf)
-import Data.List.Extra (chunksOf)
-import qualified Data.Map.Strict as M
-import Data.Maybe (catMaybes)
-import qualified Data.Set as S
-import Data.Text (pack, unpack)
-import System.Directory.Extra (listFiles)
-import System.FilePath (takeBaseName, (>))
-import Text.Read (readMaybe)
-
-import Graphics.UI.Threepenny.Core
-
-chartsIds :: [ChartId]
-chartsIds = [minBound .. maxBound]
-
-initColors :: UI Colors
-initColors = liftIO $ do
- q <- newTBQueueIO . fromIntegral $ length colors
- mapM_ (atomically . writeTBQueue q . Color) colors
- return q
- where
- -- | There are unique colors for each chart line corresponding to each connected node.
- -- To make chart lines visually distinct, the colors in this list are contrast enough.
- -- It is assumed that the number of colors in this list is enough for real SPO cluster.
- colors =
- [ "#ff0000", "#66ff33", "#0066ff", "#ff00ff", "#cc0066", "#00ccff", "#ff9933", "#cc9900"
- , "#33cc33", "#0099ff", "#9a751b", "#7c0657", "#1a6f17", "#118989", "#c44153", "#b31c2c"
- ]
-
-initDatasetsIndices :: UI DatasetsIndices
-initDatasetsIndices = liftIO . newTVarIO $ M.empty
-
-getDatasetIx
- :: DatasetsIndices
- -> NodeName
- -> UI (Maybe Index)
-getDatasetIx indices nodeName = liftIO $ M.lookup nodeName <$> readTVarIO indices
-
-addNodeDatasetsToCharts
- :: TracerEnv
- -> Colors
- -> DatasetsIndices
- -> NodeId
- -> UI ()
-addNodeDatasetsToCharts tracerEnv colors datasetIndices nodeId@(NodeId anId) = do
- nodeName <- liftIO $ askNodeName tracerEnv nodeId
- mIx <- getDatasetIx datasetIndices nodeName
- -- We have to check if the node with 'nodeName' was connected previously.
- -- If so - we have to take its color again, from the file.
- -- If not - we have to take the new color for it and save it for the future.
- colorForNode@(Color code) <-
- liftIO (getSavedColorForNode tracerEnv nodeName) >>= \case
- Just savedColor -> return savedColor
- Nothing -> do
- newColor <- getNewColor
- liftIO $ saveColorForNode tracerEnv nodeName newColor
- return newColor
- forM_ chartsIds $ \chartId ->
- case mIx of
- Nothing -> do
- -- This is the new node, so add dataset for it with the new index and save it.
- newIx <- Chart.getDatasetsLengthChartJS chartId
- Chart.addDatasetChartJS chartId nodeName colorForNode
- saveDatasetIx nodeName $ Index newIx
- Just _ix ->
- -- This node was already connected, so use the same dataset for
- -- the new historical data received from it.
- return ()
- -- Change color label for node name as well.
- window <- askWindow
- findAndSet (set style [("color", code)]) window (anId <> "__node-chart-label")
- where
- saveDatasetIx nodeName ix = liftIO . atomically $
- modifyTVar' datasetIndices $ \currentIndices ->
- case M.lookup nodeName currentIndices of
- Nothing -> M.insert nodeName ix currentIndices
- Just _ -> M.adjust (const ix) nodeName currentIndices
-
- getNewColor =
- (liftIO . atomically $ tryReadTBQueue colors) >>= \case
- Just color -> return color
- Nothing -> return defaultColor
-
- defaultColor = Color "#cccc00"
-
-type PointsAdder :: Type -> Type
-type PointsAdder a =
- TracerEnv
- -> History
- -> DatasetsIndices
- -> DataName
- -> ChartId
- -> UI a
-
--- Each chart updates independently from others. Because of this, the user
--- can specify "auto-update period" for each chart. Some of data (by its nature)
--- shoudn't be updated too frequently.
---
--- All points will be added to all datasets (corresponding to the number of connected nodes)
--- using one single FFI-call, for better performance.
---
--- 'addAllPointsToChart' doesn not do average calculation, it pushes all the points as they are.
-addPointsToChart, addAllPointsToChart :: PointsAdder ()
-addPointsToChart = doAddPointsToChart replacePointsByAvgPoints
-addAllPointsToChart = doAddPointsToChart id
-
-doAddPointsToChart :: ([HistoricalPoint] -> [HistoricalPoint]) -> PointsAdder ()
-doAddPointsToChart replaceByAvg tracerEnv hist datasetIndices dataName chartId = do
- connected <- liftIO $ S.toList <$> readTVarIO (teConnectedNodes tracerEnv)
- dataForPush <-
- forM connected $ \nodeId ->
- liftIO (getHistoricalData hist nodeId dataName) >>= \case
- [] -> return Nothing
- points -> do
- nodeName <- liftIO $ askNodeName tracerEnv nodeId
- getDatasetIx datasetIndices nodeName >>= \case
- Nothing -> return Nothing
- Just ix -> return $ Just (ix, replaceByAvg points)
- let datasetIxsWithPoints = catMaybes dataForPush
- Chart.addAllPointsChartJS chartId datasetIxsWithPoints
- -- Now all the points from 'hist' is already pushed to JS-chart.
- -- It means that we can back these points up and removed them from the 'hist'.
- liftIO $ backupSpecificHistory tracerEnv hist connected dataName
-
-replacePointsByAvgPoints :: [HistoricalPoint] -> [HistoricalPoint]
-replacePointsByAvgPoints [] = []
-replacePointsByAvgPoints points =
- map calculateAvgPoint $ chunksOf numberOfPointsToAverage points
- where
- calculateAvgPoint :: [HistoricalPoint] -> HistoricalPoint
- calculateAvgPoint pointsForAvg =
- let !valuesSum = sum [v | (_, v) <- pointsForAvg]
- avgValue =
- case valuesSum of
- ValueI i -> ValueD $ fromIntegral i / fromIntegral (length pointsForAvg)
- ValueD d -> ValueD $ d / fromIntegral (length pointsForAvg)
- (latestTS, _) = last pointsForAvg
- in (latestTS, avgValue)
- -- TODO: calculate it, remove hardcoded value!
- -- P1 - Period of calling 'addAllPointsToChart'
- -- P2 - Period of asking of EKG.Metrics
- -- Number of new points received since last call of 'addAllPointsToChart'
- -- is P1/P2
- -- Maximum number of points to calculate avg = 15 s.
- numberOfPointsToAverage = 15
-
-restoreChartsSettings :: TracerEnv -> UI ()
-restoreChartsSettings tracerEnv = readSavedChartsSettings tracerEnv >>= setCharts
- where
- setCharts settings =
- forM_ settings $ \(chartId, ChartSettings tr up) -> do
- JS.selectOption (show chartId <> show TimeRangeSelect) tr
- JS.selectOption (show chartId <> show UpdatePeriodSelect) up
- Chart.setTimeRange chartId tr
- when (tr == 0) $ Chart.resetZoomChartJS chartId
-
-saveChartsSettings :: TracerEnv -> UI ()
-saveChartsSettings tracerEnv = do
- settings <-
- forM chartsIds $ \chartId -> do
- selectedTR <- getOptionValue $ show chartId <> show TimeRangeSelect
- selectedUP <- getOptionValue $ show chartId <> show UpdatePeriodSelect
- return (chartId, ChartSettings selectedTR selectedUP)
- liftIO . ignore $ do
- pathToChartsConfig <- getPathToChartsConfig tracerEnv
- encodeFile pathToChartsConfig settings
- where
- getOptionValue selectId = do
- window <- askWindow
- v <- findAndGetValue window (pack selectId)
- case readMaybe v of
- Just (valueInS :: Int) -> return valueInS
- Nothing -> return 0
-
-readSavedChartsSettings :: TracerEnv -> UI ChartsSettings
-readSavedChartsSettings tracerEnv = liftIO $
- try_ (decodeFileStrict' =<< getPathToChartsConfig tracerEnv) >>= \case
- Right (Just (settings :: ChartsSettings)) -> return settings
- _ -> return defaultSettings
- where
- defaultSettings =
- [ (chartId, ChartSettings defaultTimeRangeInS defaultUpdatePeriodInS)
- | chartId <- chartsIds
- ]
- defaultTimeRangeInS = 21600 -- Last 6 hours
- defaultUpdatePeriodInS = 15
-
-changeChartsToLightTheme :: UI ()
-changeChartsToLightTheme =
- forM_ chartsIds $ \chartId ->
- Chart.changeColorsChartJS chartId (Color chartTextDark) (Color chartGridDark)
-
-changeChartsToDarkTheme :: UI ()
-changeChartsToDarkTheme =
- forM_ chartsIds $ \chartId ->
- Chart.changeColorsChartJS chartId (Color chartTextLight) (Color chartGridLight)
-
-restoreAllHistoryOnChart
- :: TracerEnv
- -> DataName
- -> ChartId
- -> DatasetsIndices
- -> UI ()
-restoreAllHistoryOnChart tracerEnv dataName chartId dsIxs = do
- pointsFromBackup <- liftIO $ getAllHistoryFromBackup tracerEnv dataName
- forM_ pointsFromBackup \(nodeId, points) -> do
- nodeName <- liftIO $ askNodeName tracerEnv nodeId
- whenJustM (getDatasetIx dsIxs nodeName) \ix -> do
- Chart.clearPointsChartJS chartId [ix]
- Chart.addAllPointsChartJS chartId [(ix, replacePointsByAvgPoints points)]
-
-restoreLastHistoryOnAllCharts
- :: TracerEnv
- -> DatasetsIndices
- -> UI ()
-restoreLastHistoryOnAllCharts tracerEnv =
- restoreLastHistoryOnCharts' tracerEnv
- (getLastHistoryFromBackupsAll tracerEnv)
-
-restoreLastHistoryOnCharts
- :: TracerEnv
- -> DatasetsIndices
- -> S.Set NodeId
- -> UI ()
-restoreLastHistoryOnCharts tracerEnv dsIxs nodeIds =
- restoreLastHistoryOnCharts' tracerEnv
- (getLastHistoryFromBackups tracerEnv nodeIds) dsIxs
-
-restoreLastHistoryOnCharts'
- :: TracerEnv
- -> IO [(NodeId, [(DataName, [HistoricalPoint])])]
- -> DatasetsIndices
- -> UI ()
-restoreLastHistoryOnCharts' tracerEnv historyGetter dsIxs =
- forMM_ (liftIO historyGetter) $ \(nodeId, dataNamesWithPoints) -> do
- nodeName <- liftIO $ askNodeName tracerEnv nodeId
- whenJustM (getDatasetIx dsIxs nodeName) $ \ix ->
- forM_ dataNamesWithPoints $ \(dataName, points) ->
- unless (null points) $ do
- let chartId = dataNameToChartId dataName
- Chart.clearPointsChartJS chartId [ix]
- Chart.addAllPointsChartJS chartId [(ix, replacePointsByAvgPoints points)]
-
-dataNameToChartId :: DataName -> ChartId
-dataNameToChartId dataName =
- case dataName of
- CPUData -> CPUChart
- MemoryData -> MemoryChart
- GCMajorNumData -> GCMajorNumChart
- GCMinorNumData -> GCMinorNumChart
- GCLiveMemoryData -> GCLiveMemoryChart
- CPUTimeGCData -> CPUTimeGCChart
- CPUTimeAppData -> CPUTimeAppChart
- ThreadsNumData -> ThreadsNumChart
- -- Chain
- ChainDensityData -> ChainDensityChart
- SlotNumData -> SlotNumChart
- BlockNumData -> BlockNumChart
- SlotInEpochData -> SlotInEpochChart
- EpochData -> EpochChart
- NodeCannotForgeData -> NodeCannotForgeChart
- ForgedSlotLastData -> ForgedSlotLastChart
- NodeIsLeaderData -> NodeIsLeaderChart
- NodeIsNotLeaderData -> NodeIsNotLeaderChart
- ForgedInvalidSlotLastData -> ForgedInvalidSlotLastChart
- AdoptedSlotLastData -> AdoptedSlotLastChart
- NotAdoptedSlotLastData -> NotAdoptedSlotLastChart
- AboutToLeadSlotLastData -> AboutToLeadSlotLastChart
- CouldNotForgeSlotLastData -> CouldNotForgeSlotLastChart
- -- TX
- TxsProcessedNumData -> TxsProcessedNumChart
- MempoolBytesData -> MempoolBytesChart
- TxsInMempoolData -> TxsInMempoolChart
-
-getSavedColorForNode
- :: TracerEnv
- -> NodeName
- -> IO (Maybe Color)
-getSavedColorForNode tracerEnv nodeName = do
- colorsDir <- getPathToChartColorsDir tracerEnv
- colorFiles <- map (\cf -> colorsDir > takeBaseName cf) <$> listFiles colorsDir
- case find (\cf -> unpack nodeName `isInfixOf` cf) colorFiles of
- Nothing -> return Nothing
- Just colorFile ->
- try_ (readFile colorFile) >>= \case
- Left _ -> return Nothing
- Right code -> return . Just $ Color code
-
-saveColorForNode
- :: TracerEnv
- -> NodeName
- -> Color
- -> IO ()
-saveColorForNode tracerEnv nodeName (Color code) = do
- colorsDir <- getPathToChartColorsDir tracerEnv
- ignore $ writeFile (colorsDir > unpack nodeName) code
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/About.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/About.hs
deleted file mode 100644
index 8707fad6b2b..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/About.hs
+++ /dev/null
@@ -1,120 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE TemplateHaskell #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.HTML.About
- ( mkAboutInfo
- ) where
-
-import Cardano.Git.Rev (gitRev)
-import Cardano.Tracer.Handlers.RTView.UI.Img.Icons
-import Cardano.Tracer.Handlers.RTView.UI.JS.Utils
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Data.List.Extra (lower)
-import qualified Data.Text as T
-import Data.Version (showVersion)
-import System.Directory (makeAbsolute)
-import System.Environment (getArgs)
-import System.Info (os)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-import Paths_cardano_tracer (version)
-import Cardano.Tracer.Utils (getProcessId)
-
-mkAboutInfo :: UI Element
-mkAboutInfo = do
- pathToConfig <- liftIO $ getArgs >>= \case
- ["-c", path] -> makeAbsolute path
- ["--config", path] -> makeAbsolute path
- _ -> return ""
-
- copyPath <- UI.button #. "button is-info"
- #+ [image "rt-view-copy-icon-on-button" copySVG]
- on_ UI.click copyPath do
- copyTextToClipboard pathToConfig
-
- closeIt <- UI.button #. "delete"
- pid <- liftIO getProcessId
- info <-
- UI.div #. "modal" #+
- [ UI.div #. "modal-background" #+ []
- , UI.div #. "modal-card" #+
- [ UI.header #. "modal-card-head rt-view-about-head" #+
- [ UI.p #. "modal-card-title rt-view-about-title" # set text "About"
- , element closeIt
- ]
- , UI.mkElement "section" #. "modal-card-body rt-view-about-body" #+
- [ UI.div #. "columns" #+
- [ UI.div #. "column ml-1 is-one-third" #+
- [ UI.p #. "mb-3" #+
- [ image "rt-view-overview-icon" versionSVG
- , string "Version"
- ]
- , UI.p #. "mb-3" #+
- [ image "rt-view-overview-icon" commitSVG
- , string "Commit"
- ]
- , UI.p #. "mb-3" #+
- [ image "rt-view-overview-icon" platformSVG
- , string "Platform"
- ]
- , UI.p #. "mb-3 mt-4" #+
- [ image "rt-view-overview-icon" configSVG
- , string "Configuration"
- ]
- , UI.p #. "mb-1 mt-4" #+
- [ image "rt-view-overview-icon" serverSVG
- , string "Process ID"
- ]
- ]
- , UI.div #. "column has-text-weight-semibold" #+
- [ UI.p #. "mb-3" #+ [string $ showVersion version]
- , UI.p #. "mb-3" #+
- [ UI.anchor
- #. ("rt-view-href is-family-monospace has-text-weight-normal"
- <> " has-tooltip-multiline has-tooltip-top")
- # set UI.href ("https://github.com/intersectmbo/cardano-node/commit/" <> commit)
- # set UI.target "_blank"
- # set dataTooltip "Browse repository on this commit"
- # set text commit
- , image "rt-view-href-icon" externalLinkSVG
- ]
- , UI.p #. "mb-3" #+
- [ string currentOS
- ]
- , UI.p #. "mb-3" #+
- [ UI.div #. "field has-addons" #+
- [ UI.p #. "control" #+
- [ UI.input #. "input rt-view-logs-input"
- # set UI.type_ "text"
- # set (UI.attr "readonly") "readonly"
- # set UI.value pathToConfig
- ]
- , UI.p #. "control" #+
- [ element copyPath
- ]
- ]
- ]
- , UI.p #. "mb-1" #+
- [ string $ show pid
- ]
- ]
- ]
- ]
- ]
- ]
- on_ UI.click closeIt do element info #. "modal"
- return info
- where
- commit = T.unpack . T.take 7 $ $(gitRev)
-
-currentOS :: String
-currentOS =
- case lower os of
- "darwin" -> "macOS"
- "mingw32" -> "Windows"
- "linux" -> "Linux"
- "freebsd" -> "FreeBSD"
- "netbsd" -> "NetBSD"
- "openbsd" -> "OpenBSD"
- _ -> "Unknown"
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Body.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Body.hs
deleted file mode 100644
index 1fac5b69679..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Body.hs
+++ /dev/null
@@ -1,615 +0,0 @@
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE NumericUnderscores #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.HTML.Body
- ( mkPageBody
- ) where
-
-import Cardano.Tracer.Configuration
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.UI.Charts
-import Cardano.Tracer.Handlers.RTView.UI.HTML.About
-import Cardano.Tracer.Handlers.RTView.UI.HTML.Logs
-import Cardano.Tracer.Handlers.RTView.UI.HTML.NoNodes
-import Cardano.Tracer.Handlers.RTView.UI.HTML.Notifications
-import Cardano.Tracer.Handlers.RTView.UI.Img.Icons
-import Cardano.Tracer.Handlers.RTView.UI.JS.ChartJS
-import qualified Cardano.Tracer.Handlers.RTView.UI.JS.Charts as Chart
-import Cardano.Tracer.Handlers.RTView.UI.Logs
-import Cardano.Tracer.Handlers.RTView.UI.Notifications
-import Cardano.Tracer.Handlers.RTView.UI.Theme
-import Cardano.Tracer.Handlers.RTView.UI.Types
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Update.Logs
-
-import Control.Monad (unless, void, when)
-import Control.Monad.Extra (whenJustM, whenM)
-import Data.Text (Text)
-import Text.Read (readMaybe)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-import Graphics.UI.Threepenny.JQuery (Easing (..), fadeIn, fadeOut)
-
-mkPageBody
- :: TracerEnv
- -> TracerEnvRTView
- -> Network
- -> DatasetsIndices
- -> UI Element
-mkPageBody tracerEnv tracerEnvRTView networkConfig dsIxs = do
- let ResHistory rHistory = teResourcesHistory tracerEnvRTView
- ChainHistory cHistory = teBlockchainHistory tracerEnvRTView
- TXHistory tHistory = teTxHistory tracerEnvRTView
-
- txsProcessedNumTimer <- mkChartTimer tracerEnv tHistory dsIxs TxsProcessedNumData TxsProcessedNumChart
- mempoolBytesTimer <- mkChartTimer tracerEnv tHistory dsIxs MempoolBytesData MempoolBytesChart
- txsInMempoolTimer <- mkChartTimer tracerEnv tHistory dsIxs TxsInMempoolData TxsInMempoolChart
-
- txsProcessedNumChart <- mkChart txsProcessedNumTimer TxsProcessedNumData TxsProcessedNumChart "Processed txs"
- mempoolBytesChart <- mkChart mempoolBytesTimer MempoolBytesData MempoolBytesChart "Mempool size"
- txsInMempoolChart <- mkChart txsInMempoolTimer TxsInMempoolData TxsInMempoolChart "Txs in mempool"
-
- -- Resources charts.
- cpuTimer <- mkChartTimer tracerEnv rHistory dsIxs CPUData CPUChart
- memoryTimer <- mkChartTimer tracerEnv rHistory dsIxs MemoryData MemoryChart
- gcMajorNumTimer <- mkChartTimer tracerEnv rHistory dsIxs GCMajorNumData GCMajorNumChart
- gcMinorNumTimer <- mkChartTimer tracerEnv rHistory dsIxs GCMinorNumData GCMinorNumChart
- gcLiveMemoryTimer <- mkChartTimer tracerEnv rHistory dsIxs GCLiveMemoryData GCLiveMemoryChart
- cpuTimeGCTimer <- mkChartTimer tracerEnv rHistory dsIxs CPUTimeGCData CPUTimeGCChart
- cpuTimeAppTimer <- mkChartTimer tracerEnv rHistory dsIxs CPUTimeAppData CPUTimeAppChart
- threadsNumTimer <- mkChartTimer tracerEnv rHistory dsIxs ThreadsNumData ThreadsNumChart
-
- cpuChart <- mkChart cpuTimer CPUData CPUChart "CPU usage"
- memoryChart <- mkChart memoryTimer MemoryData MemoryChart "Memory usage"
- gcMajorNumChart <- mkChart gcMajorNumTimer GCMajorNumData GCMajorNumChart "Number of major GCs"
- gcMinorNumChart <- mkChart gcMinorNumTimer GCMinorNumData GCMinorNumChart "Number of minor GCs"
- gcLiveMemoryChart <- mkChart gcLiveMemoryTimer GCLiveMemoryData GCLiveMemoryChart "GC, live data in heap"
- cpuTimeGCChart <- mkChart cpuTimeGCTimer CPUTimeGCData CPUTimeGCChart "CPU time used by GC"
- cpuTimeAppChart <- mkChart cpuTimeAppTimer CPUTimeAppData CPUTimeAppChart "CPU time used by app"
- threadsNumChart <- mkChart threadsNumTimer ThreadsNumData ThreadsNumChart "Number of threads"
-
- -- Blockchain charts.
- chainDensityTimer <- mkChartTimer tracerEnv cHistory dsIxs ChainDensityData ChainDensityChart
- slotNumTimer <- mkChartTimer tracerEnv cHistory dsIxs SlotNumData SlotNumChart
- blockNumTimer <- mkChartTimer tracerEnv cHistory dsIxs BlockNumData BlockNumChart
- slotInEpochTimer <- mkChartTimer tracerEnv cHistory dsIxs SlotInEpochData SlotInEpochChart
- epochTimer <- mkChartTimer tracerEnv cHistory dsIxs EpochData EpochChart
-
- chainDensityChart <- mkChart chainDensityTimer ChainDensityData ChainDensityChart "Chain density"
- slotNumChart <- mkChart slotNumTimer SlotNumData SlotNumChart "Slot height"
- blockNumChart <- mkChart blockNumTimer BlockNumData BlockNumChart "Block height"
- slotInEpochChart <- mkChart slotInEpochTimer SlotInEpochData SlotInEpochChart "Slot in epoch"
- epochChart <- mkChart epochTimer EpochData EpochChart "Epoch"
-
- -- Leadership charts.
- cannotForgeTimer <- mkChartTimer' tracerEnv cHistory dsIxs NodeCannotForgeData NodeCannotForgeChart
- forgedSlotTimer <- mkChartTimer' tracerEnv cHistory dsIxs ForgedSlotLastData ForgedSlotLastChart
- nodeIsLeaderTimer <- mkChartTimer' tracerEnv cHistory dsIxs NodeIsLeaderData NodeIsLeaderChart
- nodeIsNotLeaderTimer <- mkChartTimer' tracerEnv cHistory dsIxs NodeIsNotLeaderData NodeIsNotLeaderChart
- forgedInvalidTimer <- mkChartTimer' tracerEnv cHistory dsIxs ForgedInvalidSlotLastData ForgedInvalidSlotLastChart
- adoptedTimer <- mkChartTimer' tracerEnv cHistory dsIxs AdoptedSlotLastData AdoptedSlotLastChart
- notAdoptedTimer <- mkChartTimer' tracerEnv cHistory dsIxs NotAdoptedSlotLastData NotAdoptedSlotLastChart
- aboutToLeadTimer <- mkChartTimer' tracerEnv cHistory dsIxs AboutToLeadSlotLastData AboutToLeadSlotLastChart
- couldNotForgeTimer <- mkChartTimer' tracerEnv cHistory dsIxs CouldNotForgeSlotLastData CouldNotForgeSlotLastChart
-
- cannotForgeChart <- mkChart cannotForgeTimer NodeCannotForgeData NodeCannotForgeChart "Cannot forge"
- forgedSlotChart <- mkChart forgedSlotTimer ForgedSlotLastData ForgedSlotLastChart "Forged"
- nodeIsLeaderChart <- mkChart nodeIsLeaderTimer NodeIsLeaderData NodeIsLeaderChart "Is leader"
- nodeIsNotLeaderChart <- mkChart nodeIsNotLeaderTimer NodeIsNotLeaderData NodeIsNotLeaderChart "Is not leader"
- forgedInvalidChart <- mkChart forgedInvalidTimer ForgedInvalidSlotLastData ForgedInvalidSlotLastChart "Forged invalid"
- adoptedChart <- mkChart adoptedTimer AdoptedSlotLastData AdoptedSlotLastChart "Is adopted"
- notAdoptedChart <- mkChart notAdoptedTimer NotAdoptedSlotLastData NotAdoptedSlotLastChart "Is not adopted"
- aboutToLeadChart <- mkChart aboutToLeadTimer AboutToLeadSlotLastData AboutToLeadSlotLastChart "About to lead"
- couldNotForgeChart <- mkChart couldNotForgeTimer CouldNotForgeSlotLastData CouldNotForgeSlotLastChart "Could not forge"
-
- -- Visibility of charts groups.
- showHideTxs <- image "has-tooltip-multiline has-tooltip-top rt-view-show-hide-chart-group" showSVG
- # set dataTooltip "Click to hide Transactions"
- # set dataState shownState
- showHideChain <- image "has-tooltip-multiline has-tooltip-top rt-view-show-hide-chart-group" showSVG
- # set dataTooltip "Click to hide Blockchain"
- # set dataState shownState
- showHideLeadership <- image "has-tooltip-multiline has-tooltip-top rt-view-show-hide-chart-group" showSVG
- # set dataTooltip "Click to hide Leadership"
- # set dataState shownState
- showHideResources <- image "has-tooltip-multiline has-tooltip-top rt-view-show-hide-chart-group" showSVG
- # set dataTooltip "Click to hide Resources"
- # set dataState shownState
-
- on_ UI.click showHideTxs do
- changeVisibilityForCharts showHideTxs "transactions-charts" "Transactions"
- on_ UI.click showHideChain do
- changeVisibilityForCharts showHideChain "chain-charts" "Blockchain"
- on_ UI.click showHideLeadership do
- changeVisibilityForCharts showHideLeadership "leadership-charts" "Leadership"
- on_ UI.click showHideResources do
- changeVisibilityForCharts showHideResources "resources-charts" "Resources"
-
- logsLiveView <- mkLogsLiveView tracerEnv
- logsLiveViewButton <- UI.button ## "logs-live-view-button"
- #. "button is-info is-medium"
- # set text "Logs view"
- # hideIt
- on_ UI.click logsLiveViewButton do
- fadeInModal logsLiveView
- void $ element logsLiveView # set dataState "opened"
- updateLogsLiveViewNodes tracerEnv
- restoreLogsLiveViewFont tracerEnv
-
- -- Body.
- window <- askWindow
- body <-
- UI.getBody window #+
- [ UI.div #. "wrapper" #+
- [ UI.div ## "preloader" #. "pageloader is-active" #+
- [ UI.span #. "title" # set text "Just a second..."
- ]
- , topNavigation tracerEnv tracerEnvRTView
- , mkNoNodesInfo networkConfig
- , UI.mkElement "section" #. "section" #+
- [ UI.div ## "main-table-container"
- #. "table-container"
- # hideIt #+
- [ UI.table ## "main-table" #. "table rt-view-main-table" #+
- [ UI.mkElement "thead" #+
- [ UI.tr ## "node-name-row" #+
- [ UI.th #. "rt-view-main-table-description"
- #+ [UI.span # set html " "]
- ]
- ]
- , UI.mkElement "tbody" #+
- [ UI.tr ## "node-basic-info-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" infoSVG
- , string "Basic info"
- ]
- ]
- , UI.tr ## "node-era-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" eraSVG
- , string "Era"
- ]
- ]
- , UI.tr ## "node-epoch-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" lengthSVG
- , string "Epoch"
- , image "has-tooltip-multiline has-tooltip-right rt-view-what-icon" whatSVG
- # set dataTooltip ("Current epoch from this node."
- <> " It can be outdated because of node's out of sync!")
- ]
- ]
- , UI.tr ## "node-block-replay-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" blocksSVG
- , string "Block replay"
- ]
- ]
- , UI.tr ## "node-sync-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" refreshSVG
- , string "Sync"
- ]
- ]
- , UI.tr ## "node-start-time-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" startSVG
- , string "Start time"
- ]
- ]
- , UI.tr ## "node-uptime-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" uptimeSVG
- , string "Uptime"
- ]
- ]
- , UI.tr ## "node-logs-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" logsSVG
- , string "Logs paths"
- ]
- ]
- , UI.tr ## "node-peers-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" peersSVG
- , string "Peers"
- ]
- ]
- , UI.tr ## "node-leadership-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" firstSVG
- , string "Leadership"
- ]
- ]
- , UI.tr ## "node-kes-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" kesSVG
- , string "KES"
- ]
- ]
- , UI.tr ## "node-op-cert-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" certificateSVG
- , string "Op Cert"
- ]
- ]
- , UI.tr ## "node-ekg-metrics-row" #+
- [ UI.td #+ [ image "rt-view-overview-icon" ekgMetricsSVG
- , string "EKG metrics"
- , image "has-tooltip-multiline has-tooltip-right rt-view-what-icon" whatSVG
- # set dataTooltip ("All EKG metrics forwarded by this node, "
- <> "as they are (no preparing)")
- ]
- ]
- ]
- ]
- ]
- , UI.div #+
- [ element logsLiveView
- , element logsLiveViewButton
- ]
- ]
- , UI.mkElement "section" #. "section" #+
- [ UI.div ## "main-charts-container"
- #. "is-fluid rt-view-charts-container"
- # hideIt #+
- [ UI.p #. "mb-5" #+
- [ UI.div #. "divider" #+
- [ element showHideChain
- , UI.span #. "rt-view-chart-group-title" # set text "Blockchain"
- ]
- ]
- , UI.div ## "chain-charts" #. "columns" #+
- [ UI.div #. "column" #+
- [ element chainDensityChart
- , element epochChart
- , element blockNumChart
- ]
- , UI.div #. "column" #+
- [ element slotInEpochChart
- , element slotNumChart
- ]
- ]
- -- Leadership charts.
- , UI.p #. "mb-5" #+
- [ UI.div #. "divider" #+
- [ element showHideLeadership
- , UI.span #. "rt-view-chart-group-title" # set text "Leadership"
- ]
- ]
- , UI.div ## "leadership-charts" #. "columns" #+
- [ UI.div #. "column" #+
- [ element forgedSlotChart
- , element nodeIsLeaderChart
- , element forgedInvalidChart
- , element adoptedChart
- , element aboutToLeadChart
- ]
- , UI.div #. "column" #+
- [ element cannotForgeChart
- , element nodeIsNotLeaderChart
- , element couldNotForgeChart
- , element notAdoptedChart
- ]
- ]
- -- Transactions charts.
- , UI.p #. "mb-5" #+
- [ UI.div #. "divider" #+
- [ element showHideTxs
- , UI.span #. "rt-view-chart-group-title" # set text "Transactions"
- ]
- ]
- , UI.div ## "transactions-charts" #. "columns" #+
- [ UI.div #. "column" #+
- [ element mempoolBytesChart
- , element txsProcessedNumChart
- ]
- , UI.div #. "column" #+
- [ element txsInMempoolChart
- ]
- ]
- -- Resources charts.
- , UI.p #. "mb-5" #+
- [ UI.div #. "divider" #+
- [ element showHideResources
- , UI.span #. "rt-view-chart-group-title" # set text "Resources"
- ]
- ]
- , UI.div ## "resources-charts" #. "columns" #+
- [ UI.div #. "column" #+
- [ element cpuChart
- , element gcMajorNumChart
- , element gcLiveMemoryChart
- , element cpuTimeGCChart
- ]
- , UI.div #. "column" #+
- [ element memoryChart
- , element gcMinorNumChart
- , element threadsNumChart
- , element cpuTimeAppChart
- ]
- ]
- ]
- ]
- , footer
- ]
- -- JS
- , UI.mkElement "script" # set UI.html chartJS
- , UI.mkElement "script" # set UI.html chartJSLuxon
- , UI.mkElement "script" # set UI.html chartJSAdapter
- , UI.mkElement "script" # set UI.html chartJSPluginZoom
- ]
-
- -- closeModalsByEscapeButton
-
- Chart.prepareChartsJS
-
- Chart.newTimeChartJS TxsProcessedNumChart ""
- Chart.newTimeChartJS MempoolBytesChart "MB"
- Chart.newTimeChartJS TxsInMempoolChart ""
-
- Chart.newTimeChartJS CPUChart "Percent"
- Chart.newTimeChartJS MemoryChart "MB"
- Chart.newTimeChartJS GCMajorNumChart ""
- Chart.newTimeChartJS GCMinorNumChart ""
- Chart.newTimeChartJS GCLiveMemoryChart "MB"
- Chart.newTimeChartJS CPUTimeGCChart "Percent"
- Chart.newTimeChartJS CPUTimeAppChart "Percent"
- Chart.newTimeChartJS ThreadsNumChart ""
-
- Chart.newTimeChartJS ChainDensityChart "Percent"
- Chart.newTimeChartJS SlotNumChart ""
- Chart.newTimeChartJS BlockNumChart ""
- Chart.newTimeChartJS SlotInEpochChart ""
- Chart.newTimeChartJS EpochChart ""
-
- Chart.newTimeChartJS NodeCannotForgeChart "Slots"
- Chart.newTimeChartJS ForgedSlotLastChart "Slots"
- Chart.newTimeChartJS NodeIsLeaderChart "Slots"
- Chart.newTimeChartJS NodeIsNotLeaderChart "Slots"
- Chart.newTimeChartJS ForgedInvalidSlotLastChart "Slots"
- Chart.newTimeChartJS AdoptedSlotLastChart "Slots"
- Chart.newTimeChartJS NotAdoptedSlotLastChart "Slots"
- Chart.newTimeChartJS AboutToLeadSlotLastChart "Slots"
- Chart.newTimeChartJS CouldNotForgeSlotLastChart "Slots"
-
- -- Start all timer.
-
- UI.start txsProcessedNumTimer
- UI.start mempoolBytesTimer
- UI.start txsInMempoolTimer
-
- UI.start cpuTimer
- UI.start memoryTimer
- UI.start gcMajorNumTimer
- UI.start gcMinorNumTimer
- UI.start gcLiveMemoryTimer
- UI.start cpuTimeGCTimer
- UI.start cpuTimeAppTimer
- UI.start threadsNumTimer
-
- UI.start chainDensityTimer
- UI.start slotNumTimer
- UI.start blockNumTimer
- UI.start slotInEpochTimer
- UI.start epochTimer
-
- UI.start cannotForgeTimer
- UI.start forgedSlotTimer
- UI.start nodeIsLeaderTimer
- UI.start nodeIsNotLeaderTimer
- UI.start forgedInvalidTimer
- UI.start adoptedTimer
- UI.start notAdoptedTimer
- UI.start aboutToLeadTimer
- UI.start couldNotForgeTimer
-
- on_ UI.disconnect window do
- UI.stop txsProcessedNumTimer
- UI.stop mempoolBytesTimer
- UI.stop txsInMempoolTimer
-
- UI.stop cpuTimer
- UI.stop memoryTimer
- UI.stop gcMajorNumTimer
- UI.stop gcMinorNumTimer
- UI.stop gcLiveMemoryTimer
- UI.stop cpuTimeGCTimer
- UI.stop cpuTimeAppTimer
- UI.stop threadsNumTimer
-
- UI.stop chainDensityTimer
- UI.stop slotNumTimer
- UI.stop blockNumTimer
- UI.stop slotInEpochTimer
- UI.stop epochTimer
-
- UI.stop cannotForgeTimer
- UI.stop forgedSlotTimer
- UI.stop nodeIsLeaderTimer
- UI.stop nodeIsNotLeaderTimer
- UI.stop forgedInvalidTimer
- UI.stop adoptedTimer
- UI.stop notAdoptedTimer
- UI.stop aboutToLeadTimer
- UI.stop couldNotForgeTimer
-
- return body
- where
- mkChart chartUpdateTimer dataName chartId chartName = do
- selectTimeRange <-
- UI.select ## (show chartId <> show TimeRangeSelect) #+
- -- Values are ranges in seconds.
- [ UI.option # set value "0" # set text "All time"
- , UI.option # set value "300" # set text "Last 5 minutes"
- , UI.option # set value "900" # set text "Last 15 minutes"
- , UI.option # set value "1800" # set text "Last 30 minutes"
- , UI.option # set value "3600" # set text "Last 1 hour"
- , UI.option # set value "10800" # set text "Last 3 hours"
- , UI.option # set value "21600" # set text "Last 6 hours"
- ]
- selectUpdatePeriod <-
- UI.select ## (show chartId <> show UpdatePeriodSelect) #+
- -- Values are periods in seconds.
- [ UI.option # set value "0" # set text "Off"
- , UI.option # set value "15" # set text "15 seconds"
- , UI.option # set value "30" # set text "30 seconds"
- , UI.option # set value "60" # set text "1 minute"
- , UI.option # set value "300" # set text "5 minutes"
- , UI.option # set value "900" # set text "15 minutes"
- , UI.option # set value "1800" # set text "30 minutes"
- , UI.option # set value "3600" # set text "1 hour"
- ]
-
- on_ UI.selectionChange selectTimeRange do
- whenJustM (readMaybe <$> get value selectTimeRange) $ \(rangeInSec :: Int) -> do
- Chart.setTimeRange chartId rangeInSec
- when (rangeInSec == 0) $ do
- -- Since the user changed '0' (which means "All time"),
- -- we have to load all the history for currently connected nodes,
- -- but for this 'dataName' only!
- restoreAllHistoryOnChart tracerEnv dataName chartId dsIxs
- Chart.resetZoomChartJS chartId
- saveChartsSettings tracerEnv
-
- on_ UI.selectionChange selectUpdatePeriod do
- whenJustM (readMaybe <$> get value selectUpdatePeriod) \(periodInSec :: Int) -> do
- whenM (get UI.running chartUpdateTimer) $ UI.stop chartUpdateTimer
- unless (periodInSec == 0) do
- void $ return chartUpdateTimer # set UI.interval (periodInSec * 1_000)
- UI.start chartUpdateTimer
- saveChartsSettings tracerEnv
-
- UI.div #. "rt-view-chart-container" #+
- [ UI.div #. "columns" #+
- [ UI.div #. "column mt-1" #+
- [ UI.span #. "rt-view-chart-name" # set text chartName
- ]
- , UI.div #. "column has-text-right" #+
- [ UI.div #. "field is-grouped mt-3" #+
- [ image "has-tooltip-multiline has-tooltip-top rt-view-chart-icon" timeRangeSVG
- # set dataTooltip "Select time range"
- , UI.div #. "select is-link is-small mr-4" #+ [element selectTimeRange]
- , image "has-tooltip-multiline has-tooltip-top rt-view-chart-icon" refreshSVG
- # set dataTooltip "Select update period"
- , UI.div #. "select is-link is-small" #+ [element selectUpdatePeriod]
- ]
- ]
- ]
- , UI.canvas ## show chartId #. "rt-view-chart-area" #+ []
- ]
-
-topNavigation :: TracerEnv -> TracerEnvRTView -> UI Element
-topNavigation tracerEnv TracerEnvRTView{teEventsQueues} = do
- info <- mkAboutInfo
- infoIcon <- image "has-tooltip-multiline has-tooltip-bottom rt-view-info-icon mr-1" rtViewInfoSVG
- ## "info-icon"
- # set dataTooltip "RTView info"
- on_ UI.click infoIcon do
- fadeInModal info
-
- notificationsEvents <- mkNotificationsEvents tracerEnv teEventsQueues
- notificationsSettings <- mkNotificationsSettings tracerEnv
-
- notificationsEventsItem <- UI.anchor #. "navbar-item" #+
- [ image "rt-view-notify-menu-icon" eventsSVG
- , string "Events"
- ]
- notificationsSettingsItem <- UI.anchor #. "navbar-item" #+
- [ image "rt-view-notify-menu-icon" settingsSVG
- , string "Settings"
- ]
- on_ UI.click notificationsEventsItem do
- fadeInModal notificationsEvents
- on_ UI.click notificationsSettingsItem do
- restoreEmailSettings tracerEnv
- fadeInModal notificationsSettings
-
- notificationsIcon <- image "rt-view-info-icon mr-2" rtViewNotifySVG
- ## "notifications-icon"
-
- themeIcon <- image "has-tooltip-multiline has-tooltip-bottom rt-view-theme-icon" rtViewThemeToLightSVG
- ## "theme-icon"
- # set dataTooltip "Switch to light theme"
- on_ UI.click themeIcon do
- switchTheme tracerEnv
-
- UI.div ## "top-bar" #. "navbar rt-view-top-bar" #+
- [ element info
- , element notificationsEvents
- , element notificationsSettings
- , UI.div #. "navbar-brand" #+
- [ UI.div #. "navbar-item" #+
- [ image "rt-view-cardano-logo" cardanoLogoSVG ## "cardano-logo"
- , UI.span ## "name" #. "rt-view-name" # set text "Node Real-time View"
- ]
- ]
- , UI.div #. "navbar-menu" #+
- [ UI.div #. "navbar-start" #+ []
- , UI.div #. "navbar-end" #+
- [ UI.div #. "navbar-item" #+ [element themeIcon]
- , UI.div #. "navbar-item" #+ [element infoIcon]
- , UI.div #. "navbar-item has-dropdown is-hoverable" #+
- [ UI.anchor #. "navbar-link" #+ [element notificationsIcon]
- , UI.div #. "navbar-dropdown is-right" #+
- [ element notificationsEventsItem
- , element notificationsSettingsItem
- ]
- ]
- ]
- ]
- ]
-
-footer :: UI Element
-footer =
- UI.mkElement "footer" #. "footer rt-view-footer" #+
- [ UI.div #. "columns" #+
- [ UI.div #. "column" #+
- [ string "© IOHK 2015—2022"
- ]
- , UI.div #. "column has-text-right" #+
- [ UI.anchor # set UI.href "https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/README.md"
- # set UI.target "_blank" #+
- [ image "has-tooltip-multiline has-tooltip-left rt-view-footer-github" githubSVG
- # set dataTooltip "Browse our GitHub repository"
- ]
- , UI.anchor # set UI.href "https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-rtview.md"
- # set UI.target "_blank" #+
- [ image "has-tooltip-multiline has-tooltip-left rt-view-footer-doc" docSVG
- # set dataTooltip "Read RTView documentation"
- ]
- ]
- ]
- ]
-
-changeVisibilityForCharts
- :: Element
- -> Text
- -> String
- -> UI ()
-changeVisibilityForCharts showHideIcon areaId areaName = do
- window <- askWindow
- state <- get dataState showHideIcon
- let haveToHide = state == shownState
- if haveToHide
- then
- findAndDo window areaId $ \el ->
- fadeOut el 180 Swing $ runUI window $ do
- void $ element el # hideIt
- void $ element showHideIcon # set html hideSVG
- # set dataState hiddenState
- # set dataTooltip ("Click to show " <> areaName)
- else
- findAndDo window areaId $ \el -> do
- void $ element el # showFlex
- fadeIn el 180 Swing $ return ()
- void $ element showHideIcon # set html showSVG
- # set dataState shownState
- # set dataTooltip ("Click to hide " <> areaName)
-
-mkChartTimer, mkChartTimer' :: PointsAdder UI.Timer
-mkChartTimer = doMakeChartTimer addPointsToChart
-mkChartTimer' = doMakeChartTimer addAllPointsToChart
-
-doMakeChartTimer
- :: PointsAdder ()
- -> PointsAdder UI.Timer
-doMakeChartTimer addPoints tracerEnv history datasetIndices dataName chartId = do
- uiUpdateTimer <- UI.timer # set UI.interval defaultUpdatePeriodInMs
- on_ UI.tick uiUpdateTimer do
- addPoints tracerEnv history datasetIndices dataName chartId
- return uiUpdateTimer
- where
- defaultUpdatePeriodInMs = 15_000
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Logs.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Logs.hs
deleted file mode 100644
index dd45f3f3ff4..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Logs.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.HTML.Logs
- ( mkLogsLiveView
- ) where
-
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.UI.Img.Icons
-import Cardano.Tracer.Handlers.RTView.UI.Logs
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-
-import Control.Monad (void)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-
-mkLogsLiveView :: TracerEnv -> UI Element
-mkLogsLiveView tracerEnv = do
- closeIt <- UI.button #. "delete"
-
- _searchMessagesInput <-
- UI.input #. "input rt-view-search-messages"
- # set UI.type_ "text"
- # set (UI.attr "placeholder") "Search log items"
- _searchMessages <-
- UI.button #. "button is-info"
- #+ [image "rt-view-search-logs-icon" searchSVG]
-
- _whenToSearch <-
- UI.div #. "dropdown is-hoverable" #+
- [ UI.div #. "dropdown-trigger" #+
- [ UI.button #. "button"
- # set ariaHasPopup "true"
- # set ariaControls "dropdown-menu4" #+
- [ UI.span # set text "Last 3 days"
- -- ICON?
- ]
- ]
- , UI.div ## "dropdown-menu4"
- #. "dropdown-menu"
- # set role "menu" #+
- [ UI.div #. "dropdown-content" #+
- [ UI.div #. "dropdown-item" #+
- [ UI.p # set text "TEST ME"
- ]
- ]
- ]
- ]
-
- _whereToSearch <-
- UI.div #. "dropdown is-hoverable" #+
- [ UI.div #. "dropdown-trigger" #+
- [ UI.button #. "button"
- # set ariaHasPopup "true"
- # set ariaControls "dropdown-menu4" #+
- [ UI.span # set text "In message"
- -- ICON?
- ]
- ]
- , UI.div ## "dropdown-menu4"
- #. "dropdown-menu"
- # set role "menu" #+
- [ UI.div #. "dropdown-content" #+
- [ UI.div #. "dropdown-item" #+
- [ UI.p # set text "TEST ME"
- ]
- ]
- ]
- ]
-
- fontSetter <-
- UI.input ## "logs-live-view-font-setter"
- # set UI.type_ "range"
- # set min_ "1"
- # set max_ "6"
- # set value "5"
- on_ change fontSetter do
- window <- askWindow
- fontSizePct <-
- get value fontSetter >>= \case
- "1" -> return "50%"
- "2" -> return "60%"
- "3" -> return "70%"
- "4" -> return "80%"
- "5" -> return "90%"
- "6" -> return "100%"
- _ -> return "90%"
- findAndSet (set style [("font-size", fontSizePct)]) window "node-logs-live-view-tbody"
- saveLogsLiveViewFont tracerEnv fontSizePct
-
- logsLiveViewTable <-
- UI.div ## "logs-live-view-modal-window" #. "modal" # set dataState "closed" #+
- [ UI.div #. "modal-background" #+ []
- , UI.div #. "modal-card rt-view-logs-live-view-modal" #+
- [ UI.header #. "modal-card-head rt-view-logs-live-view-head" #+
- [ UI.p #. "modal-card-title rt-view-logs-live-view-title" #+
- [ string "Log items from connected nodes"
- ]
- , element closeIt
- ]
- , UI.mkElement "section" #. "modal-card-body rt-view-logs-live-view-body" #+
- [ UI.div #. "columns" #+
- [ UI.div #. "column is-8" #+
- [ UI.div #. "bd-notification" #+
- [ UI.div ## "logs-live-view-nodes-checkboxes" #. "field" #+ []
- ]
- ]
- , UI.div #. "column has-text-right" #+
- [ string "A" #. "is-size-5 mr-2"
- , element fontSetter
- , string "A" #. "is-size-3 ml-2"
- ]
- ]
- , UI.div ## "logs-live-view-table-container" #. "table-container" #+
- [ UI.div ## "node-logs-live-view-tbody"
- #. "rt-view-logs-live-view-tbody"
- # set dataState "0"
- #+ []
- ]
- ]
- {-
- , UI.mkElement "footer" #. "modal-card-foot rt-view-logs-live-view-foot" #+
- [ UI.div #. "columns" #+
- [ UI.div #. "column" #+
- [ UI.div #. "field has-addons" #+
- [ UI.p #. "control" #+
- [ element whenToSearch
- ]
- , UI.p #. "control" #+
- [ element whereToSearch
- ]
- , UI.p #. "control" #+
- [ element searchMessagesInput
- ]
- , UI.p #. "control" #+
- [ element searchMessages
- ]
- ]
- ]
- --, UI.div #. "column has-text-right" #+
- -- [ element exportToJSON
- -- ]
- ]
- ]
- -}
- ]
- ]
- on_ UI.click closeIt do
- void $ element logsLiveViewTable #. "modal"
- void $ element logsLiveViewTable # set dataState "closed"
-
- return logsLiveViewTable
- where
- change = void . domEvent "change"
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs
deleted file mode 100644
index 33df05a3791..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Main.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.HTML.Main
- ( mkMainPage
- ) where
-
-import Cardano.Tracer.Configuration
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.State.EraSettings
-import Cardano.Tracer.Handlers.RTView.UI.CSS.Bulma
-import Cardano.Tracer.Handlers.RTView.UI.CSS.Own
-import Cardano.Tracer.Handlers.RTView.UI.Charts
-import Cardano.Tracer.Handlers.RTView.UI.HTML.Body
-import Cardano.Tracer.Handlers.RTView.UI.Img.Icons
-import Cardano.Tracer.Handlers.RTView.UI.Notifications
-import Cardano.Tracer.Handlers.RTView.UI.Theme
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Update.EKG
-import Cardano.Tracer.Handlers.RTView.Update.KES
-import Cardano.Tracer.Handlers.RTView.Update.Logs
-import Cardano.Tracer.Handlers.RTView.Update.NodeState
-import Cardano.Tracer.Handlers.RTView.Update.Nodes
-import Cardano.Tracer.Handlers.RTView.Update.Reload
-import Cardano.Tracer.Handlers.State.TraceObjects
-import Cardano.Tracer.Handlers.Utils
-
-import Control.Concurrent.STM.TVar (readTVarIO)
-import Control.Monad (void)
-import Control.Monad.Extra (whenM)
-import Data.List.NonEmpty (NonEmpty)
-import Data.Text (pack)
-import System.Time.Extra (sleep)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-
-mkMainPage
- :: TracerEnv
- -> TracerEnvRTView
- -> DisplayedElements
- -> ErasSettings
- -> PageReloadedFlag
- -> NonEmpty LoggingParams
- -> Network
- -> UI.Window
- -> UI ()
-mkMainPage tracerEnv tracerEnvRTView displayedElements nodesEraSettings reloadFlag
- loggingConfig networkConfig window = do
- void $ return window # set UI.title pageTitle
- void $ UI.getHead window #+
- [ UI.link # set UI.rel "icon"
- # set UI.href ("data:image/svg+xml;base64," <> faviconSVGBase64)
- , UI.meta # set UI.name "viewport"
- # set UI.content "width=device-width, initial-scale=1"
- -- CSS
- , UI.mkElement "style" # set UI.html bulmaCSS
- , UI.mkElement "style" # set UI.html bulmaTooltipCSS
- , UI.mkElement "style" # set UI.html bulmaPageloaderCSS
- , UI.mkElement "style" # set UI.html bulmaSwitchCSS
- , UI.mkElement "style" # set UI.html bulmaDividerCSS
- , UI.mkElement "style" # set UI.html bulmaCheckboxCSS
- , UI.mkElement "style" # set UI.html ownCSS
- ]
-
- colors <- initColors
- datasetIndices <- initDatasetsIndices
-
- webPageIsOpened tracerEnvRTView
-
- pageBody <- mkPageBody tracerEnv tracerEnvRTView networkConfig datasetIndices
-
- -- Prepare and run the timer, which will hide the page preloader.
- preloaderTimer <- UI.timer # set UI.interval 10
- on_ UI.tick preloaderTimer do
- liftIO $ sleep 0.8
- findAndSet (set UI.class_ "pageloader") window "preloader"
- UI.stop preloaderTimer
- UI.start preloaderTimer
-
- restoreTheme tracerEnv
- restoreChartsSettings tracerEnv
- restoreEmailSettings tracerEnv
- restoreEventsSettings tracerEnv
-
- uiNoNodesProgressTimer <- UI.timer # set UI.interval 1000
- on_ UI.tick uiNoNodesProgressTimer do
- let elId = "no-nodes-progress"
- valueS <- findAndGetValue window elId
- let valueI = readInt (pack valueS) 0
- if valueI < 60
- then findAndSet (set UI.value $ show (valueI + 1)) window elId
- else do
- UI.stop uiNoNodesProgressTimer
- findAndSet hiddenOnly window elId
-
- whenM (liftIO $ readTVarIO reloadFlag) do
- liftIO $ cleanupDisplayedValues displayedElements
-
- updateUIAfterReload
- tracerEnv
- displayedElements
- loggingConfig
- colors
- datasetIndices
- uiNoNodesProgressTimer
-
- liftIO $ pageWasNotReload reloadFlag
-
- llvCounters <- liftIO initLogsLiveViewCounters
-
- uiLogsLiveViewTimer <- UI.timer # set UI.interval 1000
- on_ UI.tick uiLogsLiveViewTimer do
- updateLogsLiveViewItems tracerEnv tracerEnvRTView llvCounters
-
- -- Uptime is a real-time clock, so update it every second.
- uiUptimeTimer <- UI.timer # set UI.interval 1000
- on_ UI.tick uiUptimeTimer do
- updateNodesUptime tracerEnv displayedElements
-
- uiEKGTimer <- UI.timer # set UI.interval 1000
- on_ UI.tick uiEKGTimer do
- updateEKGMetrics tracerEnv
-
- uiNodesTimer <- UI.timer # set UI.interval 1000
- on_ UI.tick uiNodesTimer do
- updateNodesUI
- tracerEnv
- displayedElements
- nodesEraSettings
- loggingConfig
- colors
- datasetIndices
- uiNoNodesProgressTimer
-
- uiPeersTimer <- UI.timer # set UI.interval 4000
- on_ UI.tick uiPeersTimer do
- askNSetNodeState tracerEnv displayedElements
- updateKESInfo tracerEnv nodesEraSettings displayedElements
-
- UI.start uiLogsLiveViewTimer
- UI.start uiUptimeTimer
- UI.start uiNodesTimer
- UI.start uiPeersTimer
- UI.start uiEKGTimer
- UI.start uiNoNodesProgressTimer
-
- on_ UI.disconnect window do
- webPageIsClosed tracerEnvRTView
- UI.stop uiLogsLiveViewTimer
- UI.stop uiNodesTimer
- UI.stop uiUptimeTimer
- UI.stop uiPeersTimer
- UI.stop uiEKGTimer
- UI.stop uiNoNodesProgressTimer
- liftIO $ pageWasReload reloadFlag
-
- void $ UI.element pageBody
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/NoNodes.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/NoNodes.hs
deleted file mode 100644
index 8d18fda9e9a..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/NoNodes.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE QuasiQuotes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.UI.HTML.NoNodes
- ( mkNoNodesInfo
- , hideNoNodes
- , showNoNodes
- ) where
-
-import Cardano.Tracer.Configuration
-import Cardano.Tracer.Handlers.RTView.UI.Img.Icons
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-
-import Data.List (intercalate)
-import qualified Data.List.NonEmpty as NE
-import Data.String.QQ
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-
--- | If the user doesn't see connected nodes - possible reason of it is
--- misconfiguration of 'cardano-tracer' and/or 'cardano-node'.
--- So we have to show basic explanation, which is based on current
--- configuration of 'cardano-tracer'.
-mkNoNodesInfo :: Network -> UI Element
-mkNoNodesInfo networkConfig = do
- window <- askWindow
- closeIt <- UI.button #. "delete" # set (UI.attr "aria-label") "delete"
- on_ UI.click closeIt do
- findAndHide window "no-nodes-info"
-
- UI.div ## "no-nodes" #. "container is-max-widescreen" #+
- [ UI.p #. "has-text-centered" #+
- [ image "rt-view-no-nodes-icon" noNodesSVG ## "no-nodes-icon"
- ]
- , UI.p ## "no-nodes-message" #. "rt-view-no-nodes-message" #+
- [ string "There are no connected nodes. Yet."
- ]
- , UI.div #. "rt-view-no-nodes-progress" #+
- [ UI.mkElement "progress" ## "no-nodes-progress"
- #. "progress is-small is-link"
- # set UI.value "0"
- # set (attr "max") "60"
- ]
- , UI.mkElement "article" ## "no-nodes-info"
- #. "container message is-link rt-view-no-nodes-info" #+
- [ UI.div #. "message-header" #+
- [ UI.p # set text "«Hey, where are my nodes?»"
- , element closeIt
- ]
- , UI.div #. "message-body" #+
- [ UI.p #+
- [ UI.span # set UI.html pleaseWait
- ]
- , UI.p #. "mt-5" #+
- [ string intro
- ]
- , UI.p #. "mt-5" #+
- [ UI.span # set UI.html cardanoTracerNote
- ]
- , UI.p #. "mt-5" #+
- [ UI.span # set UI.html localNote
- ]
- , UI.p #. "mt-5" #+
- [ UI.span # set UI.html sshNote
- , UI.anchor # set UI.href "https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-tracer.md#distributed-scenario"
- # set text "here"
- # set UI.target "_blank"
- , image "rt-view-href-icon" externalLinkSVG
- , string "."
- ]
- , UI.p #. "mt-5" #+
- [ UI.span # set UI.html nodeNameNote
- ]
- , UI.p #. "mt-5" #+
- [ string "For more details, please read "
- , UI.anchor # set UI.href "https://github.com/intersectmbo/cardano-node/blob/master/cardano-tracer/docs/cardano-tracer.md#configuration"
- # set text "our documentation"
- # set UI.target "_blank"
- , image "rt-view-href-icon" externalLinkSVG
- , string "."
- ]
- ]
- ]
- ]
- where
- pleaseWait =
- "If your nodes and cardano-tracer are configured properly, "
- <> "the connection between them will be established automatically, "
- <> "but it may take some time."
-
- intro =
- "However, if there is no connection after 1 minute, please check your configuration."
-
- cardanoTracerNote =
- case networkConfig of
- AcceptAt conn ->
- "Currently, your cardano-tracer is configured as a server, "
- <> "so it accepts connections from your nodes via the local socket "
- <> show conn <> ". Correspondingly, your nodes should be configured to "
- <> "initiate connections using tracing socket."
- ConnectTo addrs ->
- let manySocks = NE.length addrs > 1 in
- "Currently, your cardano-tracer is configured as a client, "
- <> "so it connects to your "
- <> (if manySocks then "nodes" else "node")
- <> " via UNIX domain or TCP socket "
- <> (if manySocks
- then
- let socks = map (\conn -> "" <> show conn <> "") $ NE.toList addrs
- in "addresses " <> intercalate ", " socks <> "."
- else
- "address " <> show (NE.head addrs) <> ".")
- <> " Correspondingly, our nodes should be configured to accept connections using tracing socket."
-
- -- TODO: customize Node's CLI code hint by case matching on `conn :: HowToConnect`
- localNote =
- case networkConfig of
- AcceptAt conn ->
- "Thus, if your cardano-tracer and your nodes are running on the same machine, run "
- <> "the nodes with this argument: --tracer-socket-path-connect " <> show conn <> "."
- ConnectTo{} ->
- "Thus, if your cardano-tracer and your nodes are running on the same machine, run "
- <> "the nodes with this argument: --tracer-socket-path-accept SOCKET, where "
- <> "SOCKET is the path to one of sockets specified in ConnectTo-list "
- <> "in cardano-tracer configuration file."
-
- sshNote =
- "But if your cardano-tracer and your nodes are running on different machines, the only "
- <> "way to connect them is SSH tunneling with your credentials. Please see an explanation with the "
- <> "real-life example "
-
- nodeNameNote =
- "Also, please add a meaningful name for your nodes using TraceOptionNodeName field"
- <> " in their configuration files. For example:
" <> traceOptionNodeName <> "" - -traceOptionNodeName :: String -traceOptionNodeName = [s| -"TraceOptionNodeName": "stk-a-1-IOG1" -|] - -hideNoNodes, showNoNodes :: UI.Window -> UI.Timer -> UI () -hideNoNodes window aTimer = do - findAndHide window "no-nodes" - findAndHide window "no-nodes-info" - UI.stop aTimer -showNoNodes window aTimer = do - let elId = "no-nodes-progress" - findAndSet (set UI.value "0") window elId - findAndSet visibleOnly window elId - findAndShow window "no-nodes" - findAndShow window "no-nodes-info" - UI.start aTimer diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs deleted file mode 100644 index 053a4187fd4..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/Column.hs +++ /dev/null @@ -1,389 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} - -module Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Column - ( addNodeColumn - , deleteNodeColumn - ) where - -import Cardano.Tracer.Configuration -import Cardano.Tracer.Environment -import Cardano.Tracer.Handlers.RTView.UI.HTML.Node.EKG -import Cardano.Tracer.Handlers.RTView.UI.Img.Icons -import Cardano.Tracer.Handlers.RTView.UI.JS.Utils -import Cardano.Tracer.Handlers.RTView.UI.Utils -import Cardano.Tracer.Types -import Cardano.Tracer.Utils - -import Control.Monad (forM, void) -import Control.Monad.Extra (whenJustM) -import Data.List.NonEmpty (NonEmpty) -import qualified Data.List.NonEmpty as NE -import Data.Text (unpack) -import System.FilePath ((>)) - -import qualified Graphics.UI.Threepenny as UI -import Graphics.UI.Threepenny.Core - --- | For every connected node the new column should be added. -addNodeColumn - :: TracerEnv - -> NonEmpty LoggingParams - -> NodeId - -> UI () -addNodeColumn tracerEnv loggingConfig nodeId@(NodeId anId) = do - nodeName <- liftIO $ askNodeName tracerEnv nodeId - - let id' = unpack anId - - bi <- basicInfo id' - st <- startTime id' - ut <- nodeUptime id' - ls <- logsSettings loggingConfig nodeName - leadership <- nodeLeadership id' - epoch <- nodeEpoch id' - kes <- nodeKES id' - opCert <- nodeOpCert id' - - ekgMetricsWindow <- mkEKGMetricsWindow id' - ekgMetricsButton <- UI.button ## (id' <> "__node-ekg-metrics-button") - #. "button is-info" - # set text "Details" - on_ UI.click ekgMetricsButton do - fadeInModal ekgMetricsWindow - - addNodeCellH "name" [ image "rt-view-node-chart-label has-tooltip-multiline has-tooltip-left" rectangleSVG - ## (id' <> "__node-chart-label") - # set dataTooltip "Label using for this node on charts" - , UI.span ## (id' <> "__node-name") - #. "has-text-weight-bold is-size-4 rt-view-node-name" - # set text "Node" - , image "has-tooltip-multiline has-tooltip-bottom rt-view-what-icon" whatSVG - # set dataTooltip "Node's name, taken from its configuration file" - , image "rt-view-node-producer-label has-tooltip-multiline has-tooltip-right" forgeSVG - ## (id' <> "__node-producer-label") - # set dataTooltip "This node is a producer" - # hideIt - ] - addNodeCell "basic-info" bi - addNodeCell "era" [ UI.span ## (id' <> "__node-era") #. "has-text-weight-semibold" # set text "—" - ] - addNodeCell "epoch" epoch - addNodeCell "block-replay" [ UI.span ## (id' <> "__node-block-replay") - # set html "0 %" - ] - addNodeCell "sync" [ UI.span ## (id' <> "__node-sync-progress") - # set text "—" - ] - addNodeCell "start-time" st - addNodeCell "uptime" ut - addNodeCell "logs" ls - addNodeCell "leadership" leadership - addNodeCell "kes" kes - addNodeCell "op-cert" opCert - addNodeCell "ekg-metrics" [ UI.div #. "buttons has-addons" #+ - [ UI.button ## (id' <> "__node-ekg-metrics-num") - #. "button is-static" - # set text "—" - , element ekgMetricsButton - ] - , element ekgMetricsWindow - ] - where - addNodeCellH rowId cellContent = do - window <- askWindow - whenJustM (UI.getElementById window ("node-" <> rowId <> "-row")) $ \el -> - void $ element el #+ [ UI.th #. (unpack anId <> "__column_cell") - #+ cellContent - ] - addNodeCell rowId cellContent = do - window <- askWindow - whenJustM (UI.getElementById window ("node-" <> rowId <> "-row")) $ \el -> - void $ element el #+ [ UI.td #. (unpack anId <> "__column_cell") - #+ cellContent - ] - -basicInfo :: String -> UI [UI Element] -basicInfo id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "tags has-addons" #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-info-icon-on-button" versionSVG] - , UI.span ## (id' <> "__node-version") - #. "tag is-medium has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Node's version" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons" #+ - [ UI.span #. "tag is-link is-medium" #+ [image "rt-view-info-icon-on-button" commitSVG] - , UI.span ## (id' <> "__node-commit") - #. "tag is-medium is-family-monospace has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Node's commit hash" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons" #+ - [ UI.span #. "tag is-success is-medium" #+ [image "rt-view-info-icon-on-button" protocolSVG] - , UI.span ## (id' <> "__node-protocol") - #. "tag is-medium has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Node's protocol" - # set text "—" - ] - ] - ] - ] - -nodeEpoch :: String -> UI [UI Element] -nodeEpoch id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "tags has-addons" #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-2-on-button" hashtagSVG] - , UI.span ## (id' <> "__node-epoch-num") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Current epoch ends..." - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-2-on-button" endSVG] - , UI.span ## (id' <> "__node-epoch-end") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "rt-view-progress-container has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Current epoch progress" - #+ - [ UI.div #. "rt-view-progress-container-text" #+ - [ UI.div ## (id' <> "__node-epoch-progress-label") - #. "rt-view-progress-container-text-label" - # set text "0%" - ] - , UI.div ## (id' <> "__node-epoch-progress") - #. "rt-view-loading-bar" - ] - ] - ] - ] - -nodeKES :: String -> UI [UI Element] -nodeKES id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "KES current" - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-2-on-button" cSVG] - , UI.span ## (id' <> "__node-current-kes-period") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "KES expiry" - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-3-on-button" eSVG] - , UI.span ## (id' <> "__node-op-cert-expiry-kes-period") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "KES remaining" - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-3-on-button" rSVG] - , UI.span ## (id' <> "__node-remaining-kes-periods") - #. "tag is-medium" - # set text "—" - ] - ] - ] - ] - -nodeOpCert :: String -> UI [UI Element] -nodeOpCert id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Op Cert start KES" - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-2-on-button" start2SVG] - , UI.span ## (id' <> "__node-op-cert-start-kes-period") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Days until Op Cert renew" - #+ - [ UI.span #. "tag is-danger is-medium" #+ [image "rt-view-leader-icon-2-on-button" endSVG] - , UI.span ## (id' <> "__node-days-until-op-cert-renew") - #. "tag is-medium" - # set text "—" - ] - ] - ] - ] - -nodeLeadership :: String -> UI [UI Element] -nodeLeadership id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "How many times this node was a leader" - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-on-button" leaderSVG] - , UI.span ## (id' <> "__node-leadership") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "How many blocks were forge by this node" - #+ - [ UI.span #. "tag is-info is-medium" #+ [image "rt-view-leader-icon-on-button" forgeSVG] - , UI.span ## (id' <> "__node-forged-blocks") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "How many times this node could not forge" - #+ - [ UI.span #. "tag is-danger is-medium" #+ [image "rt-view-leader-icon-on-button" notForgeSVG] - , UI.span ## (id' <> "__node-cannot-forge") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "How many slots were missed by this node" - #+ - [ UI.span #. "tag is-danger is-medium" #+ [image "rt-view-leader-icon-2-on-button" missedSVG] - , UI.span ## (id' <> "__node-missed-slots") - #. "tag is-medium" - # set text "—" - ] - ] - ] - ] - -startTime :: String -> UI [UI Element] -startTime id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Blockchain's start time in UTC" - #+ - [ UI.span #. "tag is-primary is-medium" #+ [image "rt-view-leader-icon-2-on-button" bSVG] - , UI.span ## (id' <> "__node-system-start-time") - #. "tag is-medium" - # set text "—" - ] - ] - , UI.p #. "control" #+ - [ UI.div #. "tags has-addons has-tooltip-multiline has-tooltip-top" - # set dataTooltip "Node's start time in UTC" - #+ - [ UI.span #. "tag is-primary is-medium" #+ [image "rt-view-leader-icon-2-on-button" nSVG] - , UI.span ## (id' <> "__node-start-time") - #. "tag is-medium" - # set text "—" - ] - ] - ] - ] - -nodeUptime :: String -> UI [UI Element] -nodeUptime id' = return - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.span ## (id' <> "__node-uptime-days") #. "tag is-medium is-link" # set text "—" - ] - , UI.p #. "control" #+ - [ UI.span ## (id' <> "__node-uptime-hours") #. "tag is-medium is-link" # set text "—" - ] - , UI.p #. "control" #+ - [ UI.span ## (id' <> "__node-uptime-mins") #. "tag is-medium is-link" # set text "—" - ] - , UI.p #. "control" #+ - [ UI.span ## (id' <> "__node-uptime-secs") #. "tag is-medium is-link" # set text "—" - ] - ] - ] - --- | The new node is already connected, so we can display its logging settings. -logsSettings - :: NonEmpty LoggingParams - -> NodeName - -> UI [UI Element] -logsSettings loggingConfig nodeName = - forM (NE.toList loggingConfig) $ \(LoggingParams root mode format) -> - case mode of - FileMode -> do - let pathToSubdir = root > unpack nodeName - - copyPath <- UI.button #. "button is-info" - #+ [image "rt-view-copy-icon-on-button" copySVG] - on_ UI.click copyPath do - copyTextToClipboard pathToSubdir - - return $ - UI.div #. "field has-addons" #+ - [ UI.p #. "control" #+ - [ UI.button #. "button is-static" - # set html (if format == ForHuman then " LOG " else "JSON") - ] - , UI.p #. "control" #+ - [ UI.input #. "input rt-view-logs-input" - # set UI.type_ "text" - # set (UI.attr "readonly") "readonly" - # set UI.value pathToSubdir - ] - , UI.p #. "control" #+ - [ element copyPath - ] - ] - JournalMode -> do - copyId <- UI.button #. "button is-info" - #+ [image "rt-view-copy-icon" copySVG] - on_ UI.click copyId do - copyTextToClipboard (unpack nodeName) - - return $ - UI.div #. "field has-addons" #+ - [ UI.p #. "control" #+ - [ UI.button #. "button is-static" - # set text "JRNL" - ] - , UI.p #. "control" #+ - [ UI.input #. "input rt-view-logs-input" - # set UI.type_ "text" - # set (UI.attr "readonly") "readonly" - # set UI.value (unpack nodeName) - ] - , UI.p #. "control" #+ - [ element copyId - ] - ] - --- | The node was disconnected, so its column should be deleted. -deleteNodeColumn - :: UI.Window - -> NodeId - -> UI () -deleteNodeColumn window (NodeId anId) = do - let className = anId <> "__column_cell" - findByClassAndDo window className delete' diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/EKG.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/EKG.hs deleted file mode 100644 index 6dadd7df6ac..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Node/EKG.hs +++ /dev/null @@ -1,49 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} - -module Cardano.Tracer.Handlers.RTView.UI.HTML.Node.EKG - ( mkEKGMetricsWindow - ) where - -import Cardano.Tracer.Handlers.RTView.UI.Utils - -import qualified Graphics.UI.Threepenny as UI -import Graphics.UI.Threepenny.Core - -mkEKGMetricsWindow :: String -> UI Element -mkEKGMetricsWindow anId = do - closeIt <- UI.button #. "delete" - metricsWindow <- - UI.div #. "modal" #+ - [ UI.div #. "modal-background" #+ [] - , UI.div #. "modal-card rt-view-ekg-metrics-modal" #+ - [ UI.header #. "modal-card-head rt-view-ekg-metrics-head" #+ - [ UI.p #. "modal-card-title rt-view-ekg-metrics-title" #+ - [ string "EKG metrics from " - , UI.span ## (anId <> "__node-name-for-ekg-metrics") - #. "has-text-weight-bold" - # set text anId - ] - , element closeIt - ] - , UI.mkElement "section" #. "modal-card-body rt-view-ekg-metrics-body" #+ - [ UI.div ## "ekg-metrics-columns" #. "columns" #+ - [ UI.div #. "column" #+ - [ UI.span #. "is-size-4 has-text-weight-bold" # set text "Metric name" - , UI.p #. "mt-3" #+ - [ UI.span ## (anId <> "__node-ekg-metrics-names") #. "is-family-monospace" # set text "—" - ] - ] - , UI.div #. "column has-text-right" #+ - [ UI.span #. "is-size-4 has-text-weight-bold" # set text "Metric value" - , UI.p #. "mt-3" #+ - [ UI.span ## (anId <> "__node-ekg-metrics-values") # set text "—" - ] - ] - ] - ] - ] - ] - on_ UI.click closeIt do - element metricsWindow #. "modal" - return metricsWindow diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Notifications.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Notifications.hs deleted file mode 100644 index 187d69ce457..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/HTML/Notifications.hs +++ /dev/null @@ -1,375 +0,0 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE ScopedTypeVariables #-} - -module Cardano.Tracer.Handlers.RTView.UI.HTML.Notifications - ( mkNotificationsEvents - , mkNotificationsSettings - ) where - -import Cardano.Tracer.Environment -import Cardano.Tracer.Handlers.Notifications.Email -import Cardano.Tracer.Handlers.Notifications.Timer -import Cardano.Tracer.Handlers.Notifications.Types -import Cardano.Tracer.Handlers.Notifications.Utils -import Cardano.Tracer.Handlers.RTView.UI.Img.Icons -import Cardano.Tracer.Handlers.RTView.UI.Notifications -import Cardano.Tracer.Handlers.RTView.UI.Utils - -import Control.Monad (void) -import Control.Monad.Extra (whenJustM) -import qualified Data.Text as T -import Text.Read (readMaybe) - -import qualified Graphics.UI.Threepenny as UI -import Graphics.UI.Threepenny.Core - -mkNotificationsEvents :: TracerEnv -> EventsQueues -> UI Element -mkNotificationsEvents tracerEnv eventsQueues = do - closeIt <- UI.button #. "delete" - - (switchAll, switchAllW) <- mkSwitch "switch-all" "All events" "" - - (switchWarnings, switchWarningsW) <- mkSwitch "switch-warnings" "Warnings" "warning" - (switchErrors, switchErrorsW) <- mkSwitch "switch-errors" "Errors" "danger" - (switchCriticals, switchCriticalsW) <- mkSwitch "switch-criticals" "Criticals" "danger" - (switchAlerts, switchAlertsW) <- mkSwitch "switch-alerts" "Alerts" "danger" - (switchEmergencies, switchEmergenciesW) <- mkSwitch "switch-emergencies" "Emergencies" "danger" - (switchNodeDiscon, switchNodeDisconW) <- mkSwitch "switch-node-disconnected" "Node disconnected" "warning" - - selectNotifyPeriodWarnings <- mkSelect "select-period-warnings" - selectNotifyPeriodErrors <- mkSelect "select-period-errors" - selectNotifyPeriodCriticals <- mkSelect "select-period-criticals" - selectNotifyPeriodAlerts <- mkSelect "select-period-alerts" - selectNotifyPeriodEmergencies <- mkSelect "select-period-emergencies" - selectNotifyPeriodNodeDiscon <- mkSelect "select-period-node-disconnected" - - notifications <- - UI.div #. "modal" #+ - [ UI.div #. "modal-background" #+ [] - , UI.div #. "modal-card" #+ - [ UI.header #. "modal-card-head rt-view-notifications-head" #+ - [ UI.p #. "modal-card-title rt-view-notifications-title" # set text "Notifications: events" - , element closeIt - ] - , UI.mkElement "section" #. "modal-card-body rt-view-notifications-body" #+ - [ mkDivider "Common Errors" - , UI.div #. "columns" #+ - [ UI.div #. "column" #+ - [ element switchWarningsW - , element switchErrorsW - , element switchCriticalsW - , element switchAlertsW - , element switchEmergenciesW - ] - , UI.div #. "column" #+ - [ mkErrorsSelectWrapper selectNotifyPeriodWarnings - , mkErrorsSelectWrapper selectNotifyPeriodErrors - , mkErrorsSelectWrapper selectNotifyPeriodCriticals - , mkErrorsSelectWrapper selectNotifyPeriodAlerts - , mkErrorsSelectWrapper selectNotifyPeriodEmergencies - ] - ] - , mkDivider "Network" - , UI.div #. "columns" #+ - [ UI.div #. "column" #+ - [ element switchNodeDisconW - ] - , UI.div #. "column" #+ - [ mkErrorsSelectWrapper selectNotifyPeriodNodeDiscon - ] - ] - ] - , UI.mkElement "footer" #. "modal-card-foot rt-view-notification-settings-foot" #+ - [ UI.div #. "columns" #+ - [ UI.div #. "column" #+ - [ element switchAllW - ] - ] - ] - ] - ] - - on UI.click closeIt \_ -> do - void $ element notifications #. "modal" - saveEventsSettings tracerEnv - - on UI.checkedChange switchWarnings \state -> do - setNotifyIconState - saveEventsSettings tracerEnv - liftIO $ updateNotificationsEvents eventsQueues EventWarnings state - on UI.checkedChange switchErrors \state -> do - setNotifyIconState - saveEventsSettings tracerEnv - liftIO $ updateNotificationsEvents eventsQueues EventErrors state - on UI.checkedChange switchCriticals \state -> do - setNotifyIconState - saveEventsSettings tracerEnv - liftIO $ updateNotificationsEvents eventsQueues EventCriticals state - on UI.checkedChange switchAlerts \state -> do - setNotifyIconState - saveEventsSettings tracerEnv - liftIO $ updateNotificationsEvents eventsQueues EventAlerts state - on UI.checkedChange switchEmergencies \state -> do - setNotifyIconState - saveEventsSettings tracerEnv - liftIO $ updateNotificationsEvents eventsQueues EventEmergencies state - on UI.checkedChange switchNodeDiscon \state -> do - setNotifyIconState - saveEventsSettings tracerEnv - liftIO $ updateNotificationsEvents eventsQueues EventNodeDisconnected state - - on UI.checkedChange switchAll \state -> do - void $ element switchWarnings # set UI.checked state - void $ element switchErrors # set UI.checked state - void $ element switchCriticals # set UI.checked state - void $ element switchAlerts # set UI.checked state - void $ element switchEmergencies # set UI.checked state - void $ element switchNodeDiscon # set UI.checked state - - setNotifyIconState - saveEventsSettings tracerEnv - - liftIO $ do - updateNotificationsEvents eventsQueues EventWarnings state - updateNotificationsEvents eventsQueues EventErrors state - updateNotificationsEvents eventsQueues EventCriticals state - updateNotificationsEvents eventsQueues EventAlerts state - updateNotificationsEvents eventsQueues EventEmergencies state - updateNotificationsEvents eventsQueues EventNodeDisconnected state - - handleSelectChange selectNotifyPeriodWarnings EventWarnings - handleSelectChange selectNotifyPeriodErrors EventErrors - handleSelectChange selectNotifyPeriodCriticals EventCriticals - handleSelectChange selectNotifyPeriodAlerts EventAlerts - handleSelectChange selectNotifyPeriodEmergencies EventEmergencies - handleSelectChange selectNotifyPeriodNodeDiscon EventNodeDisconnected - - return notifications - where - handleSelectChange selector eventGroup = - on_ UI.selectionChange selector do - whenJustM (readMaybe <$> get value selector) \(period :: PeriodInSec) -> - liftIO $ updateNotificationsPeriods eventsQueues eventGroup period - -mkDivider :: String -> UI Element -mkDivider dTitle = - UI.div #. "divider rt-view-divider" #+ - [ UI.span #. "rt-view-events-title" # set text dTitle - ] - -mkErrorsSelectWrapper :: Element -> UI Element -mkErrorsSelectWrapper sel = - UI.div #. "rt-view-notifications-errors-select-wrapper" #+ - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ UI.div #. "select is-link is-small" #+ - [ element sel - ] - ] - , UI.p #. "control" #+ - [ image "has-tooltip-multiline has-tooltip-left rt-view-period-what-icon" whatSVG - # set dataTooltip "How often notification will be sent" - ] - ] - ] - -mkSelect :: String -> UI Element -mkSelect elId = - UI.select ## elId #+ - -- Values are periods in seconds. - [ UI.option # set value "5" # set text "Immediately" - , UI.option # set value "300" # set text "Every 5 minutes" - , UI.option # set value "1800" # set text "Every 30 minutes" - , UI.option # set value "3600" # set text "Every 1 hour" - , UI.option # set value "10800" # set text "Every 3 hours" - , UI.option # set value "21600" # set text "Every 6 hours" - , UI.option # set value "43200" # set text "Every 12 hours" - ] - -mkSwitch - :: String - -> String - -> String - -> UI (Element, Element) -mkSwitch switchId switchName bulmaColorName = do - let colorClass = case bulmaColorName of - "" -> "" - _ -> " is-" <> bulmaColorName - aSwitch <- - UI.input ## switchId - #. ("switch is-rounded" <> colorClass) - # set UI.type_ "checkbox" - # set UI.name switchId - - switchWrapper <- - UI.div #. "field" #+ - [ element aSwitch - , UI.label # set UI.for switchId - # set text switchName - ] - - return (aSwitch, switchWrapper) - --- | Settings for notifications (email, etc.). - -mkNotificationsSettings :: TracerEnv -> UI Element -mkNotificationsSettings tracerEnv = do - closeIt <- UI.button #. "delete" - sendTestEmail <- UI.button ## "send-test-email" - #. "button is-primary" - # set text "Send test email" - sendTestEmailStatus <- UI.span # set text "" - showHidePasswordIcon <- image "rt-view-show-hide-pass-icon" hideSVG - showHidePassword <- UI.button #. "button is-info" - # set dataState hiddenState - #+ [element showHidePasswordIcon] - inputHost <- UI.input ## "es-smtp-host" - #. "input is-normal" - # set (attr "placeholder") "e.g. smtp.gmail.com" - # set (attr "required") "required" - inputUser <- UI.input ## "es-username" - #. "input is-normal" - # set (attr "placeholder") "e.g. your.name@gmail.com" - # set (attr "required") "required" - inputPassword <- UI.input ## "es-password" - #. "input is-normal" - # set UI.type_ "password" - # set (attr "placeholder") "your password" - # set (attr "required") "required" - inputEmailFrom <- UI.input ## "es-email-from" - #. "input is-normal" - # set UI.type_ "email" - # set (attr "placeholder") "e.g. your.no.reply@gmail.com" - # set (attr "required") "required" - inputEmailTo <- UI.input ## "es-email-to" - #. "input is-normal" - # set UI.type_ "email" - # set (attr "placeholder") "e.g. your.name@gmail.com" - # set (attr "required") "required" - notifications <- - UI.div #. "modal" #+ - [ UI.div #. "modal-background" #+ [] - , UI.div #. "modal-card rt-view-notifications-settings" #+ - [ UI.header #. "modal-card-head rt-view-notifications-head" #+ - [ UI.p #. "modal-card-title rt-view-notifications-title" # set text "Notifications: settings" - , element closeIt - ] - , UI.mkElement "section" #. "modal-card-body rt-view-notifications-body" #+ - [ UI.p #. "rt-view-email-only" #+ - [ string "Currently, only email notifications are supported" - ] - , mkControlPair "SMTP host *" $ element inputHost - , mkControlPair "SMTP port" $ - UI.div #. "select" #+ - [ UI.select ## "es-smtp-port" #+ - [ UI.option # set value "25" # set text "25" - , UI.option # set value "465" # set text "465" - , UI.option # set value "587" # set text "587" - , UI.option # set value "2525" # set text "2525" - ] - ] - , mkControlPair "Username *" $ element inputUser - , UI.div #. "field is-horizontal" #+ - [ UI.div #. "field-label is-normal" #+ - [ UI.label #. "label rt-view-label" # set text "Password *" - ] - , UI.div #. "field-body" #+ - [ UI.div #. "field has-addons" #+ - [ UI.p #. "control" #+ - [ element inputPassword - ] - , UI.div #. "control" #+ - [ element showHidePassword - ] - ] - ] - ] - , mkControlPair "SSL" $ - UI.div #. "select" #+ - [ UI.select ## "es-ssl" #+ - [ UI.option # set value (show TLS) # set text "TLS" - , UI.option # set value (show STARTTLS) # set text "STARTTLS" - , UI.option # set value (show NoSSL) # set text "No SSL" - ] - ] - , mkControlPair "From *" $ element inputEmailFrom - , mkControlPair "To *" $ element inputEmailTo - , mkControlPair "Subject" $ - UI.input ## "es-subject" - #. "input is-normal" - # set (attr "placeholder") "e.g. Cardano RTView Notification" - ] - , UI.mkElement "footer" #. "modal-card-foot rt-view-notification-settings-foot" #+ - [ UI.div #. "columns" #+ - [ UI.div #. "column" #+ - [ UI.div #. "field is-grouped" #+ - [ UI.p #. "control" #+ - [ element sendTestEmail - ] - , UI.p #. "control pt-2" #+ - [ element sendTestEmailStatus - ] - ] - ] - ] - ] - ] - ] - - on_ UI.click closeIt do - void $ element notifications #. "modal" - void $ element sendTestEmailStatus # set text "" - saveEmailSettings tracerEnv - - on_ UI.click sendTestEmail do - void $ element sendTestEmailStatus # set text "" - void $ element sendTestEmail #. "button is-primary is-loading" - # set UI.enabled False - statusMessage <- liftIO . createAndSendTestEmail =<< getCurrentEmailSettings - let msgClass = - if statusIsOK statusMessage - then "rt-view-test-status-message-ok" - else "rt-view-test-status-message-fail" - void $ element sendTestEmailStatus # set text (T.unpack statusMessage) - # set UI.class_ msgClass - void $ element sendTestEmail #. "button is-primary" - # set UI.enabled True - - on_ UI.click showHidePassword do - state <- get dataState showHidePassword - let haveToHide = state == shownState - if haveToHide - then do - void $ element showHidePasswordIcon # set html hideSVG - void $ element showHidePassword # set dataState hiddenState - void $ element inputPassword # set UI.type_ "password" - else do - void $ element showHidePasswordIcon # set html showSVG - void $ element showHidePassword # set dataState shownState - void $ element inputPassword # set UI.type_ "text" - - on_ UI.valueChange inputHost do setStatusTestEmailButton - on_ UI.valueChange inputUser do setStatusTestEmailButton - on_ UI.valueChange inputPassword do setStatusTestEmailButton - on_ UI.valueChange inputEmailFrom do setStatusTestEmailButton - on_ UI.valueChange inputEmailTo do setStatusTestEmailButton - - return notifications - -mkControlPair - :: String - -> UI Element - -> UI Element -mkControlPair labelText control = - UI.div #. "field is-horizontal" #+ - [ UI.div #. "field-label is-normal" #+ - [ UI.label #. "label rt-view-label" # set text labelText - ] - , UI.div #. "field-body" #+ - [ UI.div #. "field" #+ - [ UI.p #. "control" #+ - [ control - ] - ] - ] - ] diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/Img/Icons.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/Img/Icons.hs deleted file mode 100644 index 537133697d9..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/Img/Icons.hs +++ /dev/null @@ -1,432 +0,0 @@ -{-# LANGUAGE QuasiQuotes #-} - -module Cardano.Tracer.Handlers.RTView.UI.Img.Icons - ( blocksSVG - , calendarSVG - , cardanoLogoSVG - , chainSVG - , commitSVG - , connectedSVG - , dbSVG - , downSVG - , errorsSVG - , faviconSVGBase64 - , healthSVG - , kesSVG - , linuxSVG - , noNodesSVG - , overviewSVG - , peersSVG - , peersNumSVG - , platformSVG - , configSVG - , protocolSVG - , remainingSVG - , rtViewInfoSVG - , rtViewNotifySVG - , rtViewNoNotifySVG - , rtViewThemeToLightSVG - , rtViewThemeToDarkSVG - , serverSVG - , whatSVG - , versionSVG - , startSVG - , start2SVG - , systemStartSVG - , uptimeSVG - , logsSVG - , logsAccessSVG - , directorySVG - , copySVG - , externalLinkSVG - , externalLinkWhiteSVG - , rectangleSVG - , showSVG - , hideSVG - , githubSVG - , refreshSVG - , timeRangeSVG - , leaderSVG - , firstSVG - , forgeSVG - , notForgeSVG - , missedSVG - , eraSVG - , lengthSVG - , endSVG - , ekgMetricsSVG - , certificateSVG - , csvSVG - , deleteSVG - , trashSVG - , sortSVG - , searchSVG - , eventsSVG - , settingsSVG - , exportSVG - , docSVG - , infoSVG - , hashtagSVG - , bSVG - , nSVG - , cSVG - , eSVG - , rSVG - ) where - -import Data.String.QQ - -cardanoLogoSVG :: String -cardanoLogoSVG = [s| - -|] - -rtViewInfoSVG :: String -rtViewInfoSVG = [s| - -|] - -rtViewNotifySVG :: String -rtViewNotifySVG = [s| - -|] - -rtViewNoNotifySVG :: String -rtViewNoNotifySVG = [s| - -|] - -rtViewThemeToLightSVG :: String -rtViewThemeToLightSVG = [s| - -|] - -rtViewThemeToDarkSVG :: String -rtViewThemeToDarkSVG = [s| - -|] - -whatSVG :: String -whatSVG = [s| - -|] - -dbSVG :: String -dbSVG = [s| - -|] - -downSVG :: String -downSVG = [s| - -|] - -protocolSVG :: String -protocolSVG = [s| - -|] - -versionSVG :: String -versionSVG = [s| - -|] - -commitSVG :: String -commitSVG = [s| - -|] - -linuxSVG :: String -linuxSVG = [s| - -|] - -calendarSVG :: String -calendarSVG = [s| - -|] - -healthSVG :: String -healthSVG = [s| - -|] - -overviewSVG :: String -overviewSVG = [s| - -|] - -kesSVG :: String -kesSVG = [s| - -|] - -peersSVG :: String -peersSVG = [s| - -|] - -blocksSVG :: String -blocksSVG = [s| - -|] - -errorsSVG :: String -errorsSVG = [s| - -|] - -noNodesSVG :: String -noNodesSVG = [s| - -|] - -connectedSVG :: String -connectedSVG = [s| - -|] - -remainingSVG :: String -remainingSVG = [s| - -|] - -peersNumSVG :: String -peersNumSVG = [s| - -|] - -chainSVG :: String -chainSVG = [s| - -|] - -faviconSVGBase64 :: String -faviconSVGBase64 = [s| -PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNzUgMzQ2LjUxIj48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPjxwYXRoIGQ9Ik0xMDIuNzYsMTcyYTI1LjMxLDI1LjMxLDAsMCwwLDIzLjc4LDI2LjY1Yy40OSwwLDEsMCwxLjQ2LDBBMjUuMjYsMjUuMjYsMCwxLDAsMTAyLjc2LDE3MloiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNOC42MiwxNjUuNWE4LjE2LDguMTYsMCwxLDAsNy42OSw4LjYxQTguMTUsOC4xNSwwLDAsMCw4LjYyLDE2NS41WiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0xMDEuMTYsMjUuNDNhOC4xNiw4LjE2LDAsMSwwLTExLTMuNjJBOC4xOCw4LjE4LDAsMCwwLDEwMS4xNiwyNS40M1oiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMTI2Ljc4LDcwLjFhMTIuNjEsMTIuNjEsMCwxLDAtMTYuOTQtNS41OUExMi42MiwxMi42MiwwLDAsMCwxMjYuNzgsNzAuMVoiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNNDAuNTgsMTAwLjgyYTEwLjM5LDEwLjM5LDAsMSwwLTMtMTQuMzhBMTAuMzksMTAuMzksMCwwLDAsNDAuNTgsMTAwLjgyWiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik01NS45MywxNjFhMTIuNjIsMTIuNjIsMCwxLDAsMTEuODgsMTMuMzFBMTIuNjIsMTIuNjIsMCwwLDAsNTUuOTMsMTYxWiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik00MiwyNDUuNzJhMTAuMzksMTAuMzksMCwxLDAsMTMuOTUsNC42QTEwLjM3LDEwLjM3LDAsMCwwLDQyLDI0NS43MloiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNOTEsMTM0Ljg5YTE0Ljg0LDE0Ljg0LDAsMSwwLTQuMjctMjAuNTVBMTQuODMsMTQuODMsMCwwLDAsOTEsMTM0Ljg5WiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0yNDYuNDcsNjkuMWExMi42MiwxMi42MiwwLDEsMC0zLjYzLTE3LjQ3QTEyLjYxLDEyLjYxLDAsMCwwLDI0Ni40Nyw2OS4xWiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0yNzIuMzUsMjQuNTdBOC4xNiw4LjE2LDAsMSwwLDI3MCwxMy4yNiw4LjE2LDguMTYsMCwwLDAsMjcyLjM1LDI0LjU3WiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0yNDguNDUsMTQ3LjkxYTI1LjI1LDI1LjI1LDAsMCwwLTIuODcsNTAuNDJjLjQ5LDAsMSwwLDEuNDUsMGEyNS4yNSwyNS4yNSwwLDAsMCwxLjQyLTUwLjQ2WiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0xMzUuMDgsMTMzLjE0QTI1LjEyLDI1LjEyLDAsMCwwLDE1Ny42NCwxNDdhMjUuMjUsMjUuMjUsMCwwLDAsMjIuNTQtMzYuNjIsMjUuMjUsMjUuMjUsMCwxLDAtNDUuMSwyMi43M1oiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMzMzLDEwMC43OWExMC4zOSwxMC4zOSwwLDEsMC0xNC00LjZBMTAuNCwxMC40LDAsMCwwLDMzMywxMDAuNzlaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTI2OSwxMDguODNhMTQuODQsMTQuODQsMCwxLDAsMTkuOTQsNi41OEExNC44NiwxNC44NiwwLDAsMCwyNjksMTA4LjgzWiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0xODYuNTUsMjAuNzZhMTAuMzksMTAuMzksMCwxLDAtOS43OS0xMUExMC4zOCwxMC4zOCwwLDAsMCwxODYuNTUsMjAuNzZaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTE4Ni40Myw4Ni4xM2ExNC44NCwxNC44NCwwLDEsMC0xNC0xNS42NkExNC44NCwxNC44NCwwLDAsMCwxODYuNDMsODYuMTNaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTEwNiwyMzcuNjhhMTQuODQsMTQuODQsMCwxLDAtMTkuOTMtNi41OEExNC44NSwxNC44NSwwLDAsMCwxMDYsMjM3LjY4WiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0xOTYsMTA3Ljc5YTI1LjIyLDI1LjIyLDAsMSwwLDIxLjE0LTExLjQxQTI1LjI4LDI1LjI4LDAsMCwwLDE5NiwxMDcuNzlaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTIzOS45MiwyMTMuMzdhMjUuMjYsMjUuMjYsMCwxLDAtMTEuMTgsMzMuOTFBMjUuMTEsMjUuMTEsMCwwLDAsMjM5LjkyLDIxMy4zN1oiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMjg0LDIxMS42MmExNC44NCwxNC44NCwwLDEsMCw0LjI3LDIwLjU1QTE0Ljg0LDE0Ljg0LDAsMCwwLDI4NCwyMTEuNjJaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTMzMi4zOCwxNzMuNjhhMTIuNjIsMTIuNjIsMCwxLDAtMTMuMzEsMTEuODhBMTIuNjIsMTIuNjIsMCwwLDAsMzMyLjM4LDE3My42OFoiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMzY3LjMsMTY0LjcxYTguMTYsOC4xNiwwLDEsMCw3LjY5LDguNjFBOC4xNyw4LjE3LDAsMCwwLDM2Ny4zLDE2NC43MVoiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMzM0LjQyLDI0NS42OGExMC4zOSwxMC4zOSwwLDEsMCwzLDE0LjM5QTEwLjM5LDEwLjM5LDAsMCwwLDMzNC40MiwyNDUuNjhaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTEwMi42NSwzMjEuOTRhOC4xNiw4LjE2LDAsMSwwLDIuMzQsMTEuM0E4LjE3LDguMTcsMCwwLDAsMTAyLjY1LDMyMS45NFoiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMjczLjgzLDMyMS4wOGE4LjE2LDguMTYsMCwxLDAsMTEsMy42MkE4LjE2LDguMTYsMCwwLDAsMjczLjgzLDMyMS4wOFoiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMTc5LDIzOC43MWEyNS4yNSwyNS4yNSwwLDEsMC0yMS4xNCwxMS40MUEyNS4xLDI1LjEsMCwwLDAsMTc5LDIzOC43MVoiIGZpbGw9IiMwMDMzYWQiLz48cGF0aCBkPSJNMTI4LjUzLDI3Ny40MWExMi42MiwxMi42MiwwLDEsMCwzLjYzLDE3LjQ3QTEyLjYyLDEyLjYyLDAsMCwwLDEyOC41MywyNzcuNDFaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTE4Ny4zOCwzMjUuNzRhMTAuMzksMTAuMzksMCwxLDAsOS43OCwxMUExMC4zOSwxMC4zOSwwLDAsMCwxODcuMzgsMzI1Ljc0WiIgZmlsbD0iIzAwMzNhZCIvPjxwYXRoIGQ9Ik0xODcuNDksMjYwLjM3YTE0Ljg0LDE0Ljg0LDAsMSwwLDE0LDE1LjY3QTE0Ljg1LDE0Ljg1LDAsMCwwLDE4Ny40OSwyNjAuMzdaIiBmaWxsPSIjMDAzM2FkIi8+PHBhdGggZD0iTTI0OC4yMSwyNzYuNGExMi42MiwxMi42MiwwLDEsMCwxNyw1LjU5QTEyLjYyLDEyLjYyLDAsMCwwLDI0OC4yMSwyNzYuNFoiIGZpbGw9IiMwMDMzYWQiLz48L2c+PC9nPjwvc3ZnPg== -|] - -platformSVG :: String -platformSVG = [s| - -|] - -configSVG :: String -configSVG = [s| - -|] - -startSVG :: String -startSVG = [s| - -|] - -start2SVG :: String -start2SVG = [s| - -|] - -systemStartSVG :: String -systemStartSVG = [s| - -|] - -hashtagSVG :: String -hashtagSVG = [s| - -|] - -bSVG :: String -bSVG = [s| - -|] - -nSVG :: String -nSVG = [s| - -|] - -cSVG :: String -cSVG = [s| - -|] - -eSVG :: String -eSVG = [s| - -|] - -rSVG :: String -rSVG = [s| - -|] - -uptimeSVG :: String -uptimeSVG = [s| - -|] - -logsSVG :: String -logsSVG = [s| - -|] - -logsAccessSVG :: String -logsAccessSVG = [s| - -|] - -directorySVG :: String -directorySVG = [s| - -|] - -copySVG :: String -copySVG = [s| - -|] - -serverSVG :: String -serverSVG = [s| - -|] - -externalLinkSVG :: String -externalLinkSVG = [s| - -|] - -externalLinkWhiteSVG :: String -externalLinkWhiteSVG = [s| - -|] - -showSVG :: String -showSVG = [s| - -|] - -hideSVG :: String -hideSVG = [s| - -|] - -githubSVG :: String -githubSVG = [s| - -|] - -refreshSVG :: String -refreshSVG = [s| - -|] - -timeRangeSVG :: String -timeRangeSVG = [s| - -|] - -leaderSVG :: String -leaderSVG = [s| - -|] - -firstSVG :: String -firstSVG = [s| - -|] - -forgeSVG :: String -forgeSVG = [s| - -|] - -notForgeSVG :: String -notForgeSVG = [s| - -|] - -missedSVG :: String -missedSVG = [s| - -|] - -eraSVG :: String -eraSVG = [s| - -|] - -lengthSVG :: String -lengthSVG = [s| - -|] - -endSVG :: String -endSVG = [s| - -|] - -ekgMetricsSVG :: String -ekgMetricsSVG = [s| - -|] - -certificateSVG :: String -certificateSVG = [s| - -|] - -csvSVG :: String -csvSVG = [s| - -|] - -deleteSVG :: String -deleteSVG = [s| - -|] - -trashSVG :: String -trashSVG = [s| - -|] - -sortSVG :: String -sortSVG = [s| - -|] - -searchSVG :: String -searchSVG = [s| - -|] - -eventsSVG :: String -eventsSVG = [s| - -|] - -settingsSVG :: String -settingsSVG = [s| - -|] - -exportSVG :: String -exportSVG = [s| - -|] - -docSVG :: String -docSVG = [s| - -|] - -infoSVG :: String -infoSVG = [s| - -|] - -rectangleSVG :: String -rectangleSVG = [s| - -|] diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/JS/.gitignore b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/JS/.gitignore deleted file mode 100644 index f5593add106..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/JS/.gitignore +++ /dev/null @@ -1 +0,0 @@ -ChartJS.hs \ No newline at end of file diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/JS/ChartJS.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/JS/ChartJS.hs deleted file mode 100644 index 1b08cc49874..00000000000 --- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/UI/JS/ChartJS.hs +++ /dev/null @@ -1,55 +0,0 @@ -{-# LANGUAGE QuasiQuotes #-} - -module Cardano.Tracer.Handlers.RTView.UI.JS.ChartJS - ( chartJS - , chartJSLuxon - , chartJSAdapter - , chartJSPluginZoom - ) where - -import Data.String.QQ - --- | To avoid run-time dependency from the static content, embed chart.js library in the page's header. -chartJS :: String -chartJS = [s| -/*! - * Chart.js v3.7.1 - * https://www.chartjs.org - * (c) 2022 Chart.js Contributors - * Released under the MIT License - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";const t="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function e(e,i,s){const n=s||(t=>Array.prototype.slice.call(t));let o=!1,a=[];return function(...s){a=n(s),o||(o=!0,t.call(window,(()=>{o=!1,e.apply(i,a)})))}}function i(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const s=t=>"start"===t?"left":"end"===t?"right":"center",n=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,o=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;var a=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=t.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}; -/*! - * @kurkle/color v0.1.9 - * https://github.com/kurkle/color#readme - * (c) 2020 Jukka Kurkela - * Released under the MIT License - */const r={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},l="0123456789ABCDEF",h=t=>l[15&t],c=t=>l[(240&t)>>4]+l[15&t],d=t=>(240&t)>>4==(15&t);function u(t){var e=function(t){return d(t.r)&&d(t.g)&&d(t.b)&&d(t.a)}(t)?h:c;return t?"#"+e(t.r)+e(t.g)+e(t.b)+(t.a<255?e(t.a):""):t}function f(t){return t+.5|0}const g=(t,e,i)=>Math.max(Math.min(t,i),e);function p(t){return g(f(2.55*t),0,255)}function m(t){return g(f(255*t),0,255)}function x(t){return g(f(t/2.55)/100,0,1)}function b(t){return g(f(100*t),0,100)}const _=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const y=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function v(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function w(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function M(t,e,i){const s=v(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function k(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=n===e?(i-s)/h+(i
0===e||isNaN(e)?0:e<0?Math.min(Math.round(e),-1):Math.max(Math.round(e),1);const x={second:500,minute:3e4,hour:18e5,day:432e5,week:3024e5,month:1296e6,quarter:5184e6,year:157248e5};function g(e,n,t,o=!1){const{min:a,max:i,options:c}=e,r=c.time&&c.time.round,l=x[r]||0,s=e.getValueForPixel(e.getPixelForValue(a+l)-n),m=e.getValueForPixel(e.getPixelForValue(i+l)-n),{min:u=-1/0,max:d=1/0}=o&&t&&t[e.axis]||{};return!!(isNaN(s)||isNaN(m)||sd)||h(e,{min:s,max:m},t,o)}function b(e,n,t){return g(e,n,t,!0)}const y={category:function(e,n,t,o){const a=d(e,n,t);return e.min===e.max&&n<1&&function(e){const n=e.getLabels().length-1;e.min>0&&(e.min-=1),e.max
"
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/EraSettings.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/EraSettings.hs
deleted file mode 100644
index b66d6417284..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/EraSettings.hs
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.EraSettings
- ( runEraSettingsUpdater
- ) where
-
-import Cardano.Logging.Types.NodeStartupInfo (NodeStartupInfo (..))
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.EraSettings
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Handlers.RTView.Utils
-
-import Control.Monad (forever)
-import Control.Monad.Extra (whenJustM)
-import Data.Time.Clock (nominalDiffTimeToSeconds)
-import System.Time.Extra (sleep)
-
-runEraSettingsUpdater
- :: TracerEnv
- -> ErasSettings
- -> IO ()
-runEraSettingsUpdater tracerEnv settings = forever $ do
- updateErasSettings
- sleep 5.0
- where
- TracerEnv{teDPRequestors, teCurrentDPLock} = tracerEnv
-
- updateErasSettings =
- forConnected_ tracerEnv $ \nodeId ->
- whenJustM (askDataPoint teDPRequestors teCurrentDPLock nodeId "NodeStartupInfo") $ \nsi ->
- addEraSettings settings nodeId $
- EraSettings
- { esEra = suiEra nsi
- , esSlotLengthInS = floor . nominalDiffTimeToSeconds $ suiSlotLength nsi
- , esEpochLength = fromIntegral $ suiEpochLength nsi
- , esKESPeriodLength = fromIntegral $ suiSlotsPerKESPeriod nsi
- }
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Historical.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Historical.hs
deleted file mode 100644
index 84fbc272836..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Historical.hs
+++ /dev/null
@@ -1,264 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Historical
- ( backupAllHistory
- , backupSpecificHistory
- , getAllHistoryFromBackup
- , getLastHistoryFromBackups
- , getLastHistoryFromBackupsAll
- , runHistoricalBackup
- , runHistoricalUpdater
- ) where
-
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.State.Last
-import Cardano.Tracer.Handlers.RTView.Update.Chain
-import Cardano.Tracer.Handlers.RTView.Update.Leadership
-import Cardano.Tracer.Handlers.RTView.Update.Resources
-import Cardano.Tracer.Handlers.RTView.Update.Transactions
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Handlers.System
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Types
-import Cardano.Tracer.Utils
-
-import Control.Concurrent.Async (forConcurrently_)
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TVar (modifyTVar', readTVar, readTVarIO)
-import Control.Exception.Extra (ignore, try_)
-import Control.Monad (forM, forM_, forever)
-import Control.Monad.Extra (ifM, whenJust)
-import qualified Data.ByteString.Lazy as BSL
-import qualified Data.Csv as CSV
-import Data.List (find, isInfixOf)
-import Data.Map.Strict (Map)
-import qualified Data.Map.Strict as M
-import Data.Maybe (catMaybes)
-import Data.Set (Set)
-import qualified Data.Set as S
-import qualified Data.Text as T
-import Data.Time.Clock.System (getSystemTime, systemToUTCTime)
-import qualified Data.Vector as V
-import System.Directory (createDirectoryIfMissing, doesDirectoryExist, doesFileExist)
-import System.Directory.Extra (listFiles)
-import System.FilePath (takeBaseName, (>))
-import System.Time.Extra (sleep)
-import Text.Read (readMaybe)
-
--- | A lot of information received from the node is useful as historical data.
--- It means that such an information should be displayed on time charts,
--- where X axis is a time in UTC. An example: resource metrics, chain information,
--- tx information, etc.
---
--- This information is extracted both from 'TraceObject's and 'EKG.Metrics' and then
--- it will be saved as chart coords '[(ts, v)]', where 'ts' is a timestamp
--- and 'v' is a value. Later, when the user will open RTView web-page, this
--- saved data will be used to render historical charts.
---
--- It allows to collect historical data even when RTView web-page is closed.
---
-runHistoricalUpdater
- :: TracerEnv
- -> TracerEnvRTView
- -> LastResources
- -> IO ()
-runHistoricalUpdater tracerEnv tracerEnvRTView lastResources = forever do
- sleep 1.0 -- TODO: should it be configured?
- now <- systemToUTCTime <$> getSystemTime
- forAcceptedMetrics_ tracerEnv \(nodeId, (ekgStore, _)) ->
- forMM_ (getListOfMetrics ekgStore) \(metricName, metricValue) -> do
- updateTransactionsHistory nodeId teTxHistory metricName metricValue now
- updateResourcesHistory nodeId teResourcesHistory lastResources metricName metricValue now
- updateBlockchainHistory nodeId teBlockchainHistory metricName metricValue now
- updateLeadershipHistory nodeId teBlockchainHistory metricName metricValue now
- where
- TracerEnvRTView{teTxHistory, teResourcesHistory, teBlockchainHistory} = tracerEnvRTView
-
--- | If RTView's web page is opened, historical backup is performing by UI-code,
--- in this case we should skip backup.
-runHistoricalBackup :: TracerEnv -> TracerEnvRTView -> IO ()
-runHistoricalBackup tracerEnv tracerEnvRTView@TracerEnvRTView{teRTViewPageOpened} = forever do
- sleep 300.0 -- TODO: 5 minutes, should it be changed?
- ifM (readTVarIO teRTViewPageOpened)
- (return ()) -- Skip, UI-code is performing backup.
- (backupAllHistory tracerEnv tracerEnvRTView)
-
-backupAllHistory :: TracerEnv -> TracerEnvRTView -> IO ()
-backupAllHistory tracerEnv@TracerEnv{teConnectedNodes} tracerEnvRTView = do
- connected <- S.toList <$> readTVarIO teConnectedNodes
- nodesIdsWithNames <- getNodesIdsWithNames tracerEnv connected
- backupDir <- getPathToBackupDir tracerEnv
- (cHistory, rHistory, tHistory) <- atomically $ (,,)
- <$> readTVar chainHistory
- <*> readTVar resourcesHistory
- <*> readTVar txHistory
- -- We can safely work with files for different nodes concurrently.
- forConcurrently_ nodesIdsWithNames \(nodeId, nodeName) -> do
- backupHistory backupDir cHistory nodeId nodeName Nothing
- backupHistory backupDir rHistory nodeId nodeName Nothing
- backupHistory backupDir tHistory nodeId nodeName Nothing
- -- Now we can remove historical points from histories,
- -- to prevent big memory consumption.
- cleanupHistoryPoints chainHistory
- cleanupHistoryPoints resourcesHistory
- cleanupHistoryPoints txHistory
- where
- TracerEnvRTView{teResourcesHistory, teBlockchainHistory, teTxHistory}
- = tracerEnvRTView
- ChainHistory chainHistory
- = teBlockchainHistory
- ResHistory resourcesHistory
- = teResourcesHistory
- TXHistory txHistory
- = teTxHistory
-
- -- Remove sets of historical points only, because they are already backed up.
- cleanupHistoryPoints history = atomically do
- modifyTVar' history $ M.map (M.map (const S.empty))
-
--- | Backup specific history after these points were pushed to corresponding JS-chart.
--- After cleanup we can safely remove them from the memory.
-backupSpecificHistory
- :: TracerEnv
- -> History
- -> [NodeId]
- -> DataName
- -> IO ()
-backupSpecificHistory tracerEnv history connected dataName = do
- backupDir <- getPathToBackupDir tracerEnv
- hist <- readTVarIO history
- forMM_ (getNodesIdsWithNames tracerEnv connected) \(nodeId, nodeName) -> do
- backupHistory backupDir hist nodeId nodeName $ Just dataName
- cleanupSpecificHistoryPoints nodeId
- where
- cleanupSpecificHistoryPoints nodeId = atomically do
- -- Removes only the points for 'nodeId' and 'dataName'.
- modifyTVar' history \currentHistory ->
- case M.lookup nodeId currentHistory of
- Nothing -> currentHistory
- Just dataForNode ->
- case M.lookup dataName dataForNode of
- Nothing -> currentHistory
- Just _histPoints ->
- let newDataForNode = M.adjust (const S.empty) dataName dataForNode
- in M.adjust (const newDataForNode) nodeId currentHistory
-
-backupHistory
- :: FilePath
- -> Map NodeId HistoricalData
- -> NodeId
- -> T.Text
- -> Maybe DataName
- -> IO ()
-backupHistory backupDir history nodeId nodeName mDataName =
- whenJust (M.lookup nodeId history) \historyData -> ignore do
- let nodeSubdir = backupDir > T.unpack nodeName
- createDirectoryIfMissing True nodeSubdir
- case mDataName of
- Nothing ->
- forM_ (M.toList historyData) $ doBackup nodeSubdir
- Just dataName ->
- case M.lookup dataName historyData of
- Nothing -> return ()
- Just historyPoints -> doBackup nodeSubdir (dataName, historyPoints)
- where
- doBackup nodeSubdir (dataName, historyPoints) = do
- let historyDataFile = nodeSubdir > show dataName
- ifM (doesFileExist historyDataFile)
- (BSL.appendFile historyDataFile $ pointsToBS historyPoints)
- (BSL.writeFile historyDataFile $ pointsToBS historyPoints)
-
- pointsToBS = CSV.encode . S.toAscList
-
-getAllHistoryFromBackup
- :: TracerEnv
- -> DataName
- -> IO [(NodeId, [HistoricalPoint])]
-getAllHistoryFromBackup tracerEnv@TracerEnv{teConnectedNodes} dataName = do
- connected <- S.toList <$> readTVarIO teConnectedNodes
- nodesIdsWithNames <- getNodesIdsWithNames tracerEnv connected
- backupDir <- getPathToBackupDir tracerEnv
- forM nodesIdsWithNames \(nodeId, nodeName) -> do
- let nodeSubdir = backupDir > T.unpack nodeName
- doesDirectoryExist nodeSubdir >>= \case
- False -> return (nodeId, []) -- There is no backup for this node.
- True -> do
- backupFiles <- listFiles nodeSubdir
- case find (\bFile -> show dataName `isInfixOf` bFile) backupFiles of
- Nothing -> return (nodeId, [])
- Just backupFile -> do
- points <- extractHistoricalPoints nodeSubdir backupFile
- return (nodeId, points)
- where
- extractHistoricalPoints nodeSubdir bFile = do
- let backupFile = nodeSubdir > takeBaseName bFile
- try_ (BSL.readFile backupFile) >>= \case
- Left _ -> return []
- Right rawPoints ->
- case CSV.decode CSV.NoHeader rawPoints of
- Left _ -> return [] -- Maybe file was broken...
- Right (pointsV :: V.Vector HistoricalPoint) -> return $! V.toList pointsV
-
-getLastHistoryFromBackupsAll
- :: TracerEnv
- -> IO [(NodeId, [(DataName, [HistoricalPoint])])]
-getLastHistoryFromBackupsAll tracerEnv@TracerEnv{teConnectedNodes} =
- getLastHistoryFromBackups' tracerEnv . S.toList =<< readTVarIO teConnectedNodes
-
-getLastHistoryFromBackups
- :: TracerEnv
- -> Set NodeId
- -> IO [(NodeId, [(DataName, [HistoricalPoint])])]
-getLastHistoryFromBackups tracerEnv =
- getLastHistoryFromBackups' tracerEnv . S.toList
-
-getLastHistoryFromBackups'
- :: TracerEnv
- -> [NodeId]
- -> IO [(NodeId, [(DataName, [HistoricalPoint])])]
-getLastHistoryFromBackups' tracerEnv nodeIds = do
- backupDir <- getPathToBackupDir tracerEnv
- forMM (getNodesIdsWithNames tracerEnv nodeIds) \(nodeId, nodeName) -> do
- let nodeSubdir = backupDir > T.unpack nodeName
- doesDirectoryExist nodeSubdir >>= \case
- False -> return (nodeId, []) -- There is no backup for this node.
- True -> do
- namesWithPoints <-
- forMM (listFiles nodeSubdir) $
- extractNamesWithHistoricalPoints nodeSubdir
- return (nodeId, catMaybes namesWithPoints)
- where
- extractNamesWithHistoricalPoints nodeSubdir bFile = do
- let pureFile = takeBaseName bFile
- case readMaybe pureFile of
- Nothing -> return Nothing
- Just (dataName :: DataName) -> do
- -- Ok, this file contains historical points for 'dataName', extract them...
- let backupFile = nodeSubdir > pureFile
- try_ (BSL.readFile backupFile) >>= \case
- Left _ -> return Nothing
- Right rawPoints ->
- case CSV.decode CSV.NoHeader rawPoints of
- Left _ -> return Nothing -- Maybe file was broken...
- Right (pointsV :: V.Vector HistoricalPoint) -> do
- now <- systemToUTCTime <$> getSystemTime
- -- Ok, take the points for the last 6 hours from now.
- let sixHoursInS = 21600
- !firstTSWeNeed = utc2s now - sixHoursInS
- pointsWeNeed = filter (\(ts, _) -> ts >= firstTSWeNeed) $ V.toList pointsV
- return $ Just (dataName, pointsWeNeed)
-
-getNodesIdsWithNames
- :: TracerEnv
- -> [NodeId]
- -> IO [(NodeId, NodeName)]
-getNodesIdsWithNames _ [] = return []
-getNodesIdsWithNames tracerEnv connected =
- forM connected \nodeId -> do
- nodeName <- askNodeName tracerEnv nodeId
- return (nodeId, nodeName)
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/KES.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/KES.hs
deleted file mode 100644
index bd63b3d1453..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/KES.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.KES
- ( updateKESInfo
- ) where
-
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.State.EraSettings
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Types
-import Cardano.Tracer.Utils
-
-import Control.Concurrent.STM.TVar (readTVarIO)
-import Control.Monad.Extra (whenJust)
-import qualified Data.Map.Strict as M
-import Data.Text (isInfixOf, pack)
-import Data.Text.Read (decimal)
-import Text.Printf (printf)
-
-import Graphics.UI.Threepenny.Core (UI, liftIO)
-
-updateKESInfo
- :: TracerEnv
- -> ErasSettings
- -> DisplayedElements
- -> UI ()
-updateKESInfo tracerEnv settings displayed =
- forAcceptedMetricsUI_ tracerEnv $ \(nodeId@(NodeId anId), (ekgStore, _)) ->
- forMM_ (liftIO $ getListOfMetrics ekgStore) $ \(metricName, metricValue) ->
- if
- | "currentKESPeriod" `isInfixOf` metricName ->
- setDisplayedValue nodeId displayed (anId <> "__node-current-kes-period") metricValue
- | "operationalCertificateExpiryKESPeriod" `isInfixOf` metricName ->
- setDisplayedValue nodeId displayed (anId <> "__node-op-cert-expiry-kes-period") metricValue
- | "operationalCertificateStartKESPeriod" `isInfixOf` metricName ->
- setDisplayedValue nodeId displayed (anId <> "__node-op-cert-start-kes-period") metricValue
- | "remainingKESPeriods" `isInfixOf` metricName -> do
- setDisplayedValue nodeId displayed (anId <> "__node-remaining-kes-periods") metricValue
- allSettings <- liftIO $ readTVarIO settings
- whenJust (M.lookup nodeId allSettings) $
- setDaysUntilRenew nodeId metricValue
- | otherwise -> return ()
- where
- setDaysUntilRenew nodeId@(NodeId anId) metricValue EraSettings{esKESPeriodLength, esSlotLengthInS} = do
- case decimal metricValue of
- Left _ -> return ()
- Right (remainingKesPeriods :: Int, _) -> do
- let secondsUntilRenew = remainingKesPeriods * esKESPeriodLength * esSlotLengthInS
- daysUntilRenew :: Double
- !daysUntilRenew = fromIntegral secondsUntilRenew / 3600 / 24
- setDisplayedValue nodeId displayed (anId <> "__node-days-until-op-cert-renew") $
- pack $ printf "%.1f" daysUntilRenew
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Leadership.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Leadership.hs
deleted file mode 100644
index defe4385183..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Leadership.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Leadership
- ( updateLeadershipHistory
- ) where
-
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Types
-
-import Data.Text (isInfixOf)
-import Data.Time.Clock (UTCTime)
-
-updateLeadershipHistory
- :: NodeId
- -> BlockchainHistory
- -> MetricName
- -> MetricValue
- -> UTCTime
- -> IO ()
-updateLeadershipHistory nodeId (ChainHistory cHistory) metricName metricValue now =
- if
- -- Slot when the node was a leader, but couldn't forge the block.
- | "nodeCannotForge" `isInfixOf` metricName -> updateNodeCannotForge
- -- Slot when this node forged last block.
- | "forgedSlotLast" `isInfixOf` metricName -> updateForgedSlotLast
- -- Slot when this node is leader.
- | "Forge.node-is-leader" `isInfixOf` metricName -> updateNodeIsLeader
- -- Slot when this node made leadership check and concludes it's not leader.
- | "Forge.node-not-leader" `isInfixOf` metricName -> updateNodeIsNotLeader
- -- Slot when invalid block was forged.
- | "Forge.forged-invalid" `isInfixOf` metricName -> updateForgedInvalidSlotLast
- -- Slot when the node adopted the block it forged.
- | "Forge.adopted" `isInfixOf` metricName -> updateAdoptedSlotLast
- -- Slot when the node didn't adopted the block it forged, but the block was valid.
- | "Forge.didnt-adopt" `isInfixOf` metricName -> updateNotAdoptedSlotLast
- -- Slot when the leadership check is started.
- | "Forge.about-to-lead" `isInfixOf` metricName -> updateAboutToLeadSlotLast
- -- Slot when the leadership check is failed.
- | "Forge.could-not-forge" `isInfixOf` metricName -> updateCouldNotForgeSlotLast
- | otherwise -> return ()
- where
- updateNodeCannotForge =
- readValueI metricValue $ addHistoricalData cHistory nodeId now NodeCannotForgeData
-
- updateForgedSlotLast =
- readValueI metricValue $ addHistoricalData cHistory nodeId now ForgedSlotLastData
-
- updateNodeIsLeader =
- readValueI metricValue $ addHistoricalData cHistory nodeId now NodeIsLeaderData
-
- updateNodeIsNotLeader =
- readValueI metricValue $ addHistoricalData cHistory nodeId now NodeIsNotLeaderData
-
- updateForgedInvalidSlotLast =
- readValueI metricValue $ addHistoricalData cHistory nodeId now ForgedInvalidSlotLastData
-
- updateAdoptedSlotLast =
- readValueI metricValue $ addHistoricalData cHistory nodeId now AdoptedSlotLastData
-
- updateNotAdoptedSlotLast =
- readValueI metricValue $ addHistoricalData cHistory nodeId now NotAdoptedSlotLastData
-
- updateAboutToLeadSlotLast =
- readValueI metricValue $ addHistoricalData cHistory nodeId now AboutToLeadSlotLastData
-
- updateCouldNotForgeSlotLast =
- readValueI metricValue $ addHistoricalData cHistory nodeId now CouldNotForgeSlotLastData
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Logs.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Logs.hs
deleted file mode 100644
index 3c97a6bae49..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Logs.hs
+++ /dev/null
@@ -1,149 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Logs
- ( updateLogsLiveViewItems
- , updateLogsLiveViewNodes
- ) where
-
-import Cardano.Logging (SeverityS (..), showT)
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.UI.Charts
-import Cardano.Tracer.Handlers.RTView.UI.Img.Icons
-import Cardano.Tracer.Handlers.RTView.UI.JS.Utils
-import Cardano.Tracer.Handlers.RTView.UI.Types
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Update.Nodes
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Handlers.State.TraceObjects
-import Cardano.Tracer.Types
-import Cardano.Tracer.Utils
-
-import Control.Concurrent.STM.TVar (readTVarIO)
-import Control.Monad (forM_, void, when)
-import Control.Monad.Extra (whenJustM, whenM)
-import qualified Data.Text as T
-import Data.Time.Format (defaultTimeLocale, formatTime)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-
-updateLogsLiveViewItems
- :: TracerEnv
- -> TracerEnvRTView
- -> LogsLiveViewCounters
- -> UI ()
-updateLogsLiveViewItems tracerEnv TracerEnvRTView{teSavedTO} llvCounters =
- whenM logsLiveViewIsOpened do
- window <- askWindow
- whenJustM (UI.getElementById window "node-logs-live-view-tbody") \el ->
- forConnectedUI_ tracerEnv \nodeId@(NodeId anId) -> do
- nodeName <- liftIO $ askNodeName tracerEnv nodeId
- nodeColor <- liftIO $ getSavedColorForNode tracerEnv nodeName
- tosFromThisNode <- liftIO $ getTraceObjects teSavedTO nodeId
- forM_ tosFromThisNode \trObInfo -> do
- -- We should add log items only for nodes which is "enabled" via checkbox.
- let checkId = T.unpack anId <> "__node-live-view-checkbox"
- whenJustM (UI.getElementById window checkId) \checkbox -> do
- whenM (get UI.checked checkbox) do
- doAddItemRow nodeId nodeName nodeColor llvCounters el trObInfo
- -- Since we have added a new item row, we have to check if there are
- -- too many items already. If so - we have to remove old item row,
- -- to prevent too big number of them (if the user opened the window
- -- for a long time).
- liftIO (getLogsLiveViewCounter llvCounters nodeId) >>= \case
- Nothing -> return ()
- Just currentNumber ->
- when (currentNumber > maxNumberOfLogsLiveViewItems) do
- -- Ok, we have to delete outdated item row.
- let !outdatedItemNumber = currentNumber - maxNumberOfLogsLiveViewItems
- outdatedItemId = nodeName <> "llv" <> showT outdatedItemNumber
- findAndDo window outdatedItemId delete'
- where
- -- TODO: Probably it will be configured by the user.
- maxNumberOfLogsLiveViewItems = 20
-
-logsLiveViewIsOpened :: UI Bool
-logsLiveViewIsOpened = do
- window <- askWindow
- UI.getElementById window "logs-live-view-modal-window" >>= \case
- Nothing -> return False
- Just el -> (==) "opened" <$> get dataState el
-
-doAddItemRow
- :: NodeId
- -> NodeName
- -> Maybe Color
- -> LogsLiveViewCounters
- -> Element
- -> (Namespace, TraceObjectInfo)
- -> UI ()
-doAddItemRow nodeId@(NodeId anId) nodeName nodeColor
- llvCounters parentEl (ns, (msg, sev, ts)) = do
- liftIO $ incLogsLiveViewCounter llvCounters nodeId
- aRow <- mkItemRow
- void $ element parentEl #+ [aRow]
- where
- mkItemRow = do
- copyItemIcon <- image "has-tooltip-multiline has-tooltip-left rt-view-copy-icon" copySVG
- # set dataTooltip "Click to copy this log item"
- on_ UI.click copyItemIcon do
- copyTextToClipboard $
- "[" <> preparedTS ts <> "] [" <> show sev <> "] [" <> T.unpack ns <> "] [" <> T.unpack msg <> "]"
-
- let nodeNamePrepared = T.unpack $
- if T.length nodeName > 13
- then T.take 10 nodeName <> "..."
- else nodeName
-
- nodeNameLabel <-
- case nodeColor of
- Nothing -> UI.span #. "rt-view-logs-live-view-msg-node"
- # set text nodeNamePrepared
- Just (Color code) -> UI.span #. "rt-view-logs-live-view-msg-node"
- # set style [("color", code)]
- # set text nodeNamePrepared
-
- let sevClass =
- case sev of
- Debug -> "has-text-primary"
- Info -> "has-text-link"
- Notice -> "has-text-info"
- Warning -> "has-text-warning"
- _ -> "has-text-danger"
- severity <- UI.span #. ("rt-view-logs-live-view-msg-severity " <> sevClass) # set text (show sev)
-
- logItemRowId <-
- liftIO (getLogsLiveViewCounter llvCounters nodeId) >>= \case
- Nothing -> return $ T.unpack nodeName <> "llv0"
- Just currentNumber -> return $ T.unpack nodeName <> "llv" <> show currentNumber
-
- return $
- UI.p ## logItemRowId #. (T.unpack anId <> "-node-logs-live-view-row") #+
- [ UI.span #. "rt-view-logs-live-view-msg-timestamp" # set text (preparedTS ts)
- , element nodeNameLabel
- , element severity
- , UI.span #. "rt-view-logs-live-view-msg-namespace" # set text ("[" <> T.unpack ns <> "]")
- , UI.span #. "rt-view-logs-live-view-msg-body" # set text (T.unpack msg)
- -- , element copyItemIcon
- ]
-
- preparedTS = formatTime defaultTimeLocale "%D %T"
-
--- | The userck clicks to button that opens live logs view window - so we should update its content.
--- Particularly, update nodes' checkboxes.
-updateLogsLiveViewNodes :: TracerEnv -> UI ()
-updateLogsLiveViewNodes tracerEnv@TracerEnv{teConnectedNodes} = do
- deleteAllNodesCheckboxes
- addNodesCheckboxesForConnected
- where
- deleteAllNodesCheckboxes = do
- window <- askWindow
- findByClassAndDo window "rt-view-ncbl" delete'
- findByClassAndDo window "is-checkradio is-medium rt-view-ncb" delete'
-
- addNodesCheckboxesForConnected =
- liftIO (readTVarIO teConnectedNodes) >>= doAddLiveViewNodesForConnected tracerEnv
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/NodeInfo.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/NodeInfo.hs
deleted file mode 100644
index 4ff141a47e1..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/NodeInfo.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.NodeInfo
- ( askNSetNodeInfo
- ) where
-
-import Cardano.Logging.Types.NodeInfo (NodeInfo (..))
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Types
-
-import Control.Monad (forM_)
-import Control.Monad.Extra (whenJustM)
-import Data.Set (Set)
-import qualified Data.Text as T
-import Data.Time.Format (defaultTimeLocale, formatTime)
-
-import Graphics.UI.Threepenny.Core
-
-askNSetNodeInfo
- :: TracerEnv
- -> Set NodeId
- -> DisplayedElements
- -> UI ()
-askNSetNodeInfo TracerEnv{teDPRequestors, teCurrentDPLock} newlyConnected displayedElements =
- forM_ newlyConnected $ \nodeId@(NodeId anId) ->
- whenJustM (liftIO $ askDataPoint teDPRequestors teCurrentDPLock nodeId "NodeInfo") $ \ni -> do
- let nodeNameElId = anId <> "__node-name"
- shortName = shortenName $ niName ni
-
- setTextValues
- [ (nodeNameElId, shortName)
- , (anId <> "__node-version", niVersion ni)
- , (anId <> "__node-commit", T.take 7 $ niCommit ni)
- , (anId <> "__node-name-for-peers", shortName)
- , (anId <> "__node-name-for-ekg-metrics", shortName)
- , (anId <> "__node-name-for-errors", shortName)
- ]
-
- setProtocol (niProtocol ni) (anId <> "__node-protocol")
-
- window <- askWindow
- let nodeStartElId = anId <> "__node-start-time"
- setTime window (niStartTime ni) nodeStartElId
- setTime window (niSystemStartTime ni) (anId <> "__node-system-start-time")
-
- liftIO $ saveDisplayedValue displayedElements nodeId nodeStartElId (T.pack . show $ niStartTime ni)
- liftIO $ saveDisplayedValue displayedElements nodeId nodeNameElId (niName ni)
- where
- setProtocol p id' = do
- justCleanText id'
- case p of
- "Byron" -> setTextValue id' "Byron"
- "Shelley" -> setTextValue id' "Shelley"
- _ -> setTextValue id' "Cardano"
-
- setTime window ts id' = do
- justCleanText id'
- let time = formatTime defaultTimeLocale "%D %T" ts
- findAndAdd [string time] window id'
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/NodeState.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/NodeState.hs
deleted file mode 100644
index ac29d4ed03c..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/NodeState.hs
+++ /dev/null
@@ -1,42 +0,0 @@
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.NodeState
- ( askNSetNodeState
- ) where
-
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Types
-import Cardano.Tracer.Utils (NodeStateWrapper (..))
-
-import Control.Monad.Extra (whenJustM)
-import Data.Text (pack)
-import Text.Printf (printf)
-
-import Graphics.UI.Threepenny.Core (UI, liftIO)
-
--- | There is 'NodeState' datapoint, it contains different information
--- about the current state of the node. For example, its sync progress.
-askNSetNodeState
- :: TracerEnv
- -> DisplayedElements
- -> UI ()
-askNSetNodeState tracerEnv displayed =
- forConnectedUI_ tracerEnv $ \nodeId ->
- whenJustM (liftIO $ askDataPoint teDPRequestors teCurrentDPLock nodeId "NodeState") \(NodeStateWrapper syncPct) ->
- setSyncProgress nodeId syncPct
- where
- TracerEnv{teDPRequestors, teCurrentDPLock} = tracerEnv
-
- setSyncProgress :: NodeId -> Double -> UI ()
- setSyncProgress nodeId@(NodeId anId) syncPct = do
- let nodeSyncProgressElId = anId <> "__node-sync-progress"
- if syncPct < 100.0
- then setDisplayedValue nodeId displayed nodeSyncProgressElId $
- pack (printf "%.2f" syncPct) <> " %"
- else setTextAndClasses nodeSyncProgressElId "100 %" "rt-view-percent-done"
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Nodes.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Nodes.hs
deleted file mode 100644
index 202ad905fe5..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Nodes.hs
+++ /dev/null
@@ -1,400 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE LambdaCase #-}
-{-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE NamedFieldPuns #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Nodes
- ( addColumnsForConnected
- , addDatasetsForConnected
- , doAddLiveViewNodesForConnected
- , checkNoNodesState
- , updateNodesUI
- , updateNodesUptime
- ) where
-
-import Cardano.Logging (showT)
-import Cardano.Tracer.Configuration
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.State.EraSettings
-import Cardano.Tracer.Handlers.RTView.UI.Charts
-import Cardano.Tracer.Handlers.RTView.UI.HTML.Node.Column
-import Cardano.Tracer.Handlers.RTView.UI.HTML.NoNodes
-import Cardano.Tracer.Handlers.RTView.UI.Types
-import Cardano.Tracer.Handlers.RTView.UI.Utils
-import Cardano.Tracer.Handlers.RTView.Update.NodeInfo
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Types
-import Cardano.Tracer.Utils
-
-import Control.Concurrent.STM (atomically)
-import Control.Concurrent.STM.TVar
-import Control.Monad (forM_, unless, void, when)
-import Control.Monad.Extra (whenJust, whenJustM, whenM)
-import Data.List (find)
-import Data.List.NonEmpty (NonEmpty)
-import qualified Data.Map.Strict as M
-import Data.Set (Set, (\\))
-import qualified Data.Set as S
-import Data.Text (isInfixOf)
-import qualified Data.Text as T
-import Data.Text.Read (decimal, double)
-import Data.Time.Calendar (diffDays)
-import Data.Time.Clock (UTCTime, addUTCTime, diffUTCTime, utctDay)
-import Data.Time.Clock.System (getSystemTime, systemToUTCTime)
-import Data.Time.Format (defaultTimeLocale, formatTime)
-import Data.Word (Word64)
-import Text.Printf (printf)
-import Text.Read (readMaybe)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-
-updateNodesUI
- :: TracerEnv
- -> DisplayedElements
- -> ErasSettings
- -> NonEmpty LoggingParams
- -> Colors
- -> DatasetsIndices
- -> UI.Timer
- -> UI ()
-updateNodesUI tracerEnv@TracerEnv{teConnectedNodes, teAcceptedMetrics}
- displayedElements nodesEraSettings loggingConfig
- colors datasetIndices noNodesProgressTimer = do
- (connected, displayedEls) <- liftIO . atomically $ (,)
- <$> readTVar teConnectedNodes
- <*> readTVar displayedElements
- -- Check connected/disconnected nodes since previous UI's update.
- let displayed = S.fromList $ M.keys displayedEls
- when (connected /= displayed) $ do
- let disconnected = displayed \\ connected -- In 'displayed' but not in 'connected'.
- newlyConnected = connected \\ displayed -- In 'connected' but not in 'displayed'.
- deleteColumnsForDisconnected connected disconnected
- deleteLiveViewNodesForDisconnected tracerEnv disconnected
- addColumnsForConnected tracerEnv newlyConnected loggingConfig
- addLiveViewNodesForConnected tracerEnv newlyConnected
- checkNoNodesState connected noNodesProgressTimer
- askNSetNodeInfo tracerEnv newlyConnected displayedElements
- addDatasetsForConnected tracerEnv newlyConnected colors datasetIndices
- restoreLastHistoryOnCharts tracerEnv datasetIndices newlyConnected
- liftIO $
- updateDisplayedElements displayedElements connected
- setBlockReplayProgress connected teAcceptedMetrics
- setProducerMode connected teAcceptedMetrics
- setLeadershipStats connected displayedElements teAcceptedMetrics
- setEraEpochInfo connected displayedElements teAcceptedMetrics nodesEraSettings
-
-addColumnsForConnected
- :: TracerEnv
- -> Set NodeId
- -> NonEmpty LoggingParams
- -> UI ()
-addColumnsForConnected tracerEnv newlyConnected loggingConfig = do
- unless (S.null newlyConnected) $ do
- window <- askWindow
- findAndShow window "main-table-container"
- findAndShow window "logs-live-view-button"
- forM_ newlyConnected $
- addNodeColumn tracerEnv loggingConfig
-
-addDatasetsForConnected
- :: TracerEnv
- -> Set NodeId
- -> Colors
- -> DatasetsIndices
- -> UI ()
-addDatasetsForConnected tracerEnv newlyConnected colors datasetIndices = do
- unless (S.null newlyConnected) $ do
- window <- askWindow
- findAndShow window "main-charts-container"
- findAndShow window "logs-live-view-button"
- forM_ newlyConnected $
- addNodeDatasetsToCharts tracerEnv colors datasetIndices
-
-deleteColumnsForDisconnected
- :: Set NodeId
- -> Set NodeId
- -> UI ()
-deleteColumnsForDisconnected connected disconnected = do
- window <- askWindow
- forM_ disconnected $ deleteNodeColumn window
- when (S.null connected) $ do
- findAndHide window "main-table-container"
- findAndHide window "main-charts-container"
- findAndHide window "logs-live-view-button"
- -- Please note that we don't remove historical data from charts
- -- for disconnected node. Because the user may want to see the
- -- historical data even for the node that already disconnected.
-
-checkNoNodesState
- :: Set NodeId
- -> UI.Timer
- -> UI ()
-checkNoNodesState connected noNodesProgressTimer = do
- window <- askWindow
- if S.null connected
- then do
- showNoNodes window noNodesProgressTimer
- whenM logsLiveViewIsOpened $ do
- findAndSet (set UI.class_ "modal") window "logs-live-view-modal-window"
- findAndSet (set dataState "closed") window "logs-live-view-modal-window"
- else
- hideNoNodes window noNodesProgressTimer
-
-updateNodesUptime
- :: TracerEnv
- -> DisplayedElements
- -> UI ()
-updateNodesUptime tracerEnv displayedElements = do
- now <- systemToUTCTime <$> liftIO getSystemTime
- displayed <- liftIO $ readTVarIO displayedElements
- forConnectedUI_ tracerEnv $ getUptimeForNode now displayed
- where
- getUptimeForNode now displayed nodeId@(NodeId anId) = do
- let nodeStartElId = anId <> "__node-start-time"
- nodeUptimeDElId = anId <> "__node-uptime-days"
- nodeUptimeHElId = anId <> "__node-uptime-hours"
- nodeUptimeMElId = anId <> "__node-uptime-mins"
- nodeUptimeSElId = anId <> "__node-uptime-secs"
- case getDisplayedValuePure displayed nodeId nodeStartElId of
- Nothing -> return ()
- Just tsRaw ->
- case readMaybe (T.unpack tsRaw) of
- Nothing -> return ()
- Just (startTime :: UTCTime) -> do
- let uptimeDiff = now `diffUTCTime` startTime
- uptime = uptimeDiff `addUTCTime` nullTime
- hoursNum = formatTime defaultTimeLocale "%H" uptime
- minsNum = formatTime defaultTimeLocale "%M" uptime
- secsNum = formatTime defaultTimeLocale "%S" uptime
- daysNum = utctDay uptime `diffDays` utctDay nullTime
- setTextValues
- [ (nodeUptimeDElId, showT daysNum <> "d")
- , (nodeUptimeHElId, T.pack hoursNum <> "h")
- , (nodeUptimeMElId, T.pack minsNum <> "m")
- , (nodeUptimeSElId, T.pack secsNum <> "s")
- ]
-
-addLiveViewNodesForConnected
- :: TracerEnv
- -> Set NodeId
- -> UI ()
-addLiveViewNodesForConnected tracerEnv newlyConnected =
- whenM logsLiveViewIsOpened do
- doAddLiveViewNodesForConnected tracerEnv newlyConnected
-
-doAddLiveViewNodesForConnected
- :: TracerEnv
- -> Set NodeId
- -> UI ()
-doAddLiveViewNodesForConnected tracerEnv connected = do
- window <- askWindow
- whenJustM (UI.getElementById window "logs-live-view-nodes-checkboxes") \el ->
- forM_ connected \nodeId@(NodeId anId) -> do
- nodeName <- liftIO $ askNodeName tracerEnv nodeId
- nodeColor <- liftIO $ getSavedColorForNode tracerEnv nodeName
-
- let nodeNamePrepared = T.unpack $
- if T.length nodeName > 13
- then T.take 10 nodeName <> "..."
- else nodeName
- checkId = T.unpack anId <> "__node-live-view-checkbox"
- checkLabelId = T.unpack anId <> "__node-live-view-checkbox-label"
-
- void $ element el #+
- [ UI.input ## checkId
- #. "is-checkradio is-medium rt-view-ncb"
- # set UI.type_ "checkbox"
- # set UI.name checkId
- # set UI.checked True
- , case nodeColor of
- Nothing ->
- UI.label ## checkLabelId
- #. "rt-view-ncbl"
- # set UI.for checkId
- # set text nodeNamePrepared
- Just (Color code) ->
- UI.label ## checkLabelId
- #. "rt-view-ncbl"
- # set UI.for checkId
- # set style [("color", code)]
- # set text nodeNamePrepared
- ]
-
-deleteLiveViewNodesForDisconnected
- :: TracerEnv
- -> Set NodeId
- -> UI ()
-deleteLiveViewNodesForDisconnected _tracerEnv disconnected =
- whenM logsLiveViewIsOpened $ do
- window <- askWindow
- forM_ disconnected $ \(NodeId anId) -> do
- let checkId = anId <> "__node-live-view-checkbox"
- checkLabelId = anId <> "__node-live-view-checkbox-label"
- findAndDo window checkId delete'
- findAndDo window checkLabelId delete'
-
-logsLiveViewIsOpened :: UI Bool
-logsLiveViewIsOpened = do
- window <- askWindow
- UI.getElementById window "logs-live-view-modal-window" >>= \case
- Nothing -> return False
- Just el -> (==) "opened" <$> get dataState el
-
-setBlockReplayProgress
- :: Set NodeId
- -> AcceptedMetrics
- -> UI ()
-setBlockReplayProgress connected acceptedMetrics = do
- allMetrics <- liftIO $ readTVarIO acceptedMetrics
- forM_ connected $ \nodeId ->
- whenJust (M.lookup nodeId allMetrics) $ \(ekgStore, _) -> do
- metrics <- liftIO $ getListOfMetrics ekgStore
- whenJust (find (\(x, _) -> "blockReplayProgress" `isInfixOf` x) metrics) $ \(_, metricValue) ->
- updateBlockReplayProgress nodeId metricValue
- where
- updateBlockReplayProgress (NodeId anId) mValue =
- case double mValue of
- Left _ -> return ()
- Right (progressPct, _) -> do
- let nodeBlockReplayElId = anId <> "__node-block-replay"
- progressPctS = T.pack $ show progressPct
- if "100" `T.isInfixOf` progressPctS
- then setTextAndClasses nodeBlockReplayElId "100 %" "rt-view-percent-done"
- else setTextValue nodeBlockReplayElId $ progressPctS <> " %"
-
-setProducerMode
- :: Set NodeId
- -> AcceptedMetrics
- -> UI ()
-setProducerMode connected acceptedMetrics = do
- allMetrics <- liftIO $ readTVarIO acceptedMetrics
- forM_ connected $ \nodeId@(NodeId anId) ->
- whenJust (M.lookup nodeId allMetrics) $ \(ekgStore, _) ->
- forMM_ (liftIO $ getListOfMetrics ekgStore) $ \(mName, _) ->
- when ("nodeIsLeader" `isInfixOf` mName) $ showProducerMode anId
- where
- -- The presence of these metrics is a proof that this node is
- -- configured as a producer, so display corresponding icon.
- showProducerMode anId = do
- window <- askWindow
- findAndSet showInline window (anId <> "__node-producer-label")
-
-setLeadershipStats
- :: Set NodeId
- -> DisplayedElements
- -> AcceptedMetrics
- -> UI ()
-setLeadershipStats connected displayed acceptedMetrics = do
- allMetrics <- liftIO $ readTVarIO acceptedMetrics
- forM_ connected $ \nodeId@(NodeId anId) ->
- whenJust (M.lookup nodeId allMetrics) $ \(ekgStore, _) -> do
- metrics <- liftIO $ getListOfMetrics ekgStore
- forM_ metrics $ \(mName, mValue) ->
- if
- -- How many times this node was a leader.
- | "nodeIsLeader" `isInfixOf` mName -> setDisplayedValue nodeId displayed (anId <> "__node-leadership") mValue
- -- How many blocks were forged by this node.
- | "blocksForged" `isInfixOf` mName -> setDisplayedValue nodeId displayed (anId <> "__node-forged-blocks") mValue
- -- How many times this node could not forge.
- | "nodeCannotForge" `isInfixOf` mName -> setDisplayedValue nodeId displayed (anId <> "__node-cannot-forge") mValue
- -- How many slots were missed in this node.
- | "slotsMissed" `isInfixOf` mName -> setDisplayedValue nodeId displayed (anId <> "__node-missed-slots") mValue
- | otherwise -> return ()
-
-setEraEpochInfo
- :: Set NodeId
- -> DisplayedElements
- -> AcceptedMetrics
- -> ErasSettings
- -> UI ()
-setEraEpochInfo connected displayed acceptedMetrics nodesEraSettings = do
- allSettings <- liftIO $ readTVarIO nodesEraSettings
- allMetrics <- liftIO $ readTVarIO acceptedMetrics
- forM_ connected $ \nodeId@(NodeId anId) -> do
- epochS <-
- case M.lookup nodeId allMetrics of
- Just (ekgStore, _) -> do
- metrics <- liftIO $ getListOfMetrics ekgStore
- return $ maybe "" snd (find (\(x, _) -> "epoch" `isInfixOf` x) metrics)
- Nothing -> return ""
- unless (T.null epochS) $
- setDisplayedValue nodeId displayed (anId <> "__node-epoch-num") epochS
-
- whenJust (M.lookup nodeId allSettings) $ \settings -> do
- setDisplayedValue nodeId displayed (anId <> "__node-era") $ esEra settings
- updateEpochInfo settings nodeId epochS
- updateEpochSlotProgress settings nodeId allMetrics
- where
- updateEpochInfo settings (NodeId anId) epochS =
- unless (T.null epochS) $ do
- let epochNum = readInt epochS 0
- whenJust (getEndOfCurrentEpoch settings epochNum) $ \(start, end) -> do
- now <- systemToUTCTime <$> liftIO getSystemTime
- if start < now && now < end
- then do
- -- We're synced and on the current epoch.
- let diffFromNowToEnd = end `diffUTCTime` now
- timeLeft = diffFromNowToEnd `addUTCTime` nullTime
- daysNum = utctDay timeLeft `diffDays` utctDay nullTime
- hoursNum = formatTime defaultTimeLocale "%H" timeLeft
- minsNum = formatTime defaultTimeLocale "%M" timeLeft
- secsNum = formatTime defaultTimeLocale "%S" timeLeft
- timeLeftF = showT daysNum <> "d "
- <> T.pack hoursNum <> "h "
- <> T.pack minsNum <> "m "
- <> T.pack secsNum <> "s"
- setTextValue (anId <> "__node-epoch-end") timeLeftF
- else do
- -- We're out of date (sync in progress), so just display the end date.
- let endDateF = T.pack $ formatTime defaultTimeLocale "%D %T" end
- setTextValue (anId <> "__node-epoch-end") endDateF
-
- getEndOfCurrentEpoch EraSettings{esEra, esSlotLengthInS, esEpochLength} currentEpoch =
- case lookup esEra epochsInfo of
- Nothing ->
- -- So, there is no such an era. The possible reason: this is "too new" era
- -- (not officially forked yet). Try to find corresponding epoch directly.
- case find (\(_, (_, firstEpoch)) -> currentEpoch >= firstEpoch) epochsInfo of
- Nothing -> Nothing
- Just (_, (epochStart, firstEpoch)) -> getEpochDates epochStart firstEpoch
- Just (epochStart, firstEpoch) -> getEpochDates epochStart firstEpoch
- where
- getEpochDates startDate firstEpoch =
- let elapsedEpochsInEra = currentEpoch - firstEpoch
- epochLengthInS = esSlotLengthInS * esEpochLength
- secondsFromEpochStartToEpoch = epochLengthInS * elapsedEpochsInEra
- !dateOfEpochStart = startDate + fromIntegral secondsFromEpochStartToEpoch
- !dateOfEpochEnd = dateOfEpochStart + fromIntegral epochLengthInS
- in Just (s2utc dateOfEpochStart, s2utc dateOfEpochEnd)
-
- updateEpochSlotProgress EraSettings{esEpochLength} nodeId@(NodeId anId) allMetrics =
- whenJust (M.lookup nodeId allMetrics) $ \(ekgStore, _) -> do
- metrics <- liftIO $ getListOfMetrics ekgStore
- whenJust (find (\(x, _) -> "slotInEpoch" `isInfixOf` x) metrics) $ \(_, slotInEpochS) ->
- case decimal slotInEpochS of
- Left _ -> return ()
- Right (slotInEpoch :: Int, _) -> do
- let slotsPct :: Double
- slotsPct = fromIntegral slotInEpoch / fromIntegral (esEpochLength `div` 100)
- slotsPctF = printf "%.1f" slotsPct <> "%"
- setTextValue (anId <> "__node-epoch-progress-label") (T.pack slotsPctF)
- window <- askWindow
- findAndSet (set style [("width", slotsPctF)]) window (anId <> "__node-epoch-progress")
-
-type EraName = T.Text
-type FirstEpochInEra = Int
-type EraStartPOSIX = Word64
-
--- It is taken from 'cardano-ledger' wiki topic "First-Block-of-Each-Era".
-epochsInfo :: [(EraName, (EraStartPOSIX, FirstEpochInEra))]
-epochsInfo =
- [ ("Shelley", (1596073491, 208)) -- 07/30/2020 1:44:51 AM GMT
- , ("Allegra", (1608169491, 236)) -- 12/17/2020 1:44:51 AM GMT
- , ("Mary", (1614649491, 251)) -- 03/02/2021 1:44:51 AM GMT
- , ("Alonzo", (1634953491, 298)) -- 10/23/2021 1:44:51 AM GMT, start of new protocol.
- ]
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Reload.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Reload.hs
deleted file mode 100644
index 72c20c665f5..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Reload.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Reload
- ( updateUIAfterReload
- ) where
-
-import Cardano.Tracer.Configuration
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Handlers.RTView.State.Displayed
-import Cardano.Tracer.Handlers.RTView.UI.Charts
-import Cardano.Tracer.Handlers.RTView.UI.Types
-import Cardano.Tracer.Handlers.RTView.Update.NodeInfo
-import Cardano.Tracer.Handlers.RTView.Update.Nodes
-
-import Control.Concurrent.STM.TVar (readTVarIO)
-import Data.List.NonEmpty (NonEmpty)
-
-import qualified Graphics.UI.Threepenny as UI
-import Graphics.UI.Threepenny.Core
-
-updateUIAfterReload
- :: TracerEnv
- -> DisplayedElements
- -> NonEmpty LoggingParams
- -> Colors
- -> DatasetsIndices
- -> UI.Timer
- -> UI ()
-updateUIAfterReload tracerEnv displayedElements loggingConfig
- colors datasetIndices noNodesProgressTimer = do
- -- Ok, web-page was reload (i.e. it's the first update after DOM-rendering),
- -- so displayed state should be restored immediately.
- connected <- liftIO $ readTVarIO (teConnectedNodes tracerEnv)
- addColumnsForConnected
- tracerEnv
- connected
- loggingConfig
- checkNoNodesState connected noNodesProgressTimer
- askNSetNodeInfo tracerEnv connected displayedElements
- addDatasetsForConnected tracerEnv connected colors datasetIndices
- restoreLastHistoryOnAllCharts tracerEnv datasetIndices
- liftIO $
- updateDisplayedElements displayedElements connected
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Resources.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Resources.hs
deleted file mode 100644
index 8cdb6569c80..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Resources.hs
+++ /dev/null
@@ -1,128 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE NumericUnderscores #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE MultiWayIf #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Resources
- ( updateResourcesHistory
- ) where
-
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.State.Last
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Handlers.Utils
-import Cardano.Tracer.Types
-
-import Control.Concurrent.STM.TVar (readTVarIO)
-import qualified Data.Map.Strict as M
-import Data.Text (isInfixOf)
-import Data.Text.Read (decimal)
-import Data.Time.Clock (UTCTime)
-import Data.Word (Word64)
-
-updateResourcesHistory
- :: NodeId
- -> ResourcesHistory
- -> LastResources
- -> MetricName
- -> MetricValue
- -> UTCTime
- -> IO ()
-updateResourcesHistory nodeId (ResHistory rHistory) lastResources metricName metricValue now =
- if
- | "Stat.cputicks" `isInfixOf` metricName -> updateCPUUsage
- | "Mem.resident" `isInfixOf` metricName -> updateRSSMemory
- | "RTS.gcLiveBytes" `isInfixOf` metricName -> updateGCLiveMemory
- | "RTS.gcMajorNum" `isInfixOf` metricName -> updateGCMajorNum
- | "RTS.gcMinorNum" `isInfixOf` metricName -> updateGCMinorNum
- | "RTS.gcticks" `isInfixOf` metricName -> updateCPUTimeGC
- | "RTS.mutticks" `isInfixOf` metricName -> updateCPUTimeApp
- | "RTS.threads" `isInfixOf` metricName -> updateThreadsNum
- | otherwise -> return ()
- where
- updateCPUUsage =
- case decimal metricValue of
- Left _ -> return ()
- Right (cpuTicks :: Int, _) -> do
- lastOnes <- readTVarIO lastResources
- case M.lookup nodeId lastOnes of
- Nothing ->
- -- There is no last resources for this node yet.
- addNullResources lastResources nodeId
- Just resourcesForNode -> do
- let tns = utc2ns now
- tDiffInSec = max 0.1 $ fromIntegral (tns - cpuLastNS resourcesForNode) / 1000_000_000 :: Double
- ticksDiff = cpuTicks - cpuLastTicks resourcesForNode
- cpuV = fromIntegral ticksDiff / fromIntegral (100 :: Int) / tDiffInSec
- !newCPUPct = if cpuV < 0 then 0.0 else cpuV * 100.0
- addHistoricalData rHistory nodeId now CPUData $ ValueD newCPUPct
- updateLastResources lastResources nodeId $ \current ->
- current { cpuLastTicks = cpuTicks
- , cpuLastNS = tns
- }
-
- updateRSSMemory =
- case decimal metricValue of
- Left _ -> return ()
- Right (bytes :: Word64, _) -> do
- let !memoryInMB = fromIntegral bytes / 1_024 / 1_024 :: Double
- addHistoricalData rHistory nodeId now MemoryData $ ValueD memoryInMB
-
- updateGCLiveMemory =
- case decimal metricValue of
- Left _ -> return ()
- Right (bytes :: Word64, _) -> do
- let !memoryInMB = fromIntegral bytes / 1_024 / 1_024 :: Double
- addHistoricalData rHistory nodeId now GCLiveMemoryData $ ValueD memoryInMB
-
- updateGCMajorNum =
- readValueI metricValue $ addHistoricalData rHistory nodeId now GCMajorNumData
-
- updateGCMinorNum =
- readValueI metricValue $ addHistoricalData rHistory nodeId now GCMinorNumData
-
- updateCPUTimeGC =
- case decimal metricValue of
- Left _ -> return ()
- Right (cpuTimeGCInCentiS :: Int, _) -> do
- lastOnes <- readTVarIO lastResources
- case M.lookup nodeId lastOnes of
- Nothing ->
- -- There is no last resources for this node yet.
- addNullResources lastResources nodeId
- Just resourcesForNode -> do
- let tns = utc2ns now
- tDiffInSec = max 0.1 $ fromIntegral (tns - cpuGCLastNS resourcesForNode) / 1000_000_000 :: Double
- ticksDiff = cpuTimeGCInCentiS - cpuGCLastTicks resourcesForNode
- cpuV = fromIntegral ticksDiff / fromIntegral (100 :: Int) / tDiffInSec
- !newCPUPct = if cpuV < 0 then 0.0 else cpuV * 100.0
- addHistoricalData rHistory nodeId now CPUTimeGCData $ ValueD newCPUPct
- updateLastResources lastResources nodeId $ \current ->
- current { cpuGCLastTicks = cpuTimeGCInCentiS
- , cpuGCLastNS = tns
- }
-
- updateCPUTimeApp =
- case decimal metricValue of
- Left _ -> return ()
- Right (cpuTimeAppInCentiS :: Int, _) -> do
- lastOnes <- readTVarIO lastResources
- case M.lookup nodeId lastOnes of
- Nothing ->
- -- There is no last resources for this node yet.
- addNullResources lastResources nodeId
- Just resourcesForNode -> do
- let tns = utc2ns now
- tDiffInSec = max 0.1 $ fromIntegral (tns - cpuAppLastNS resourcesForNode) / 1000_000_000 :: Double
- ticksDiff = cpuTimeAppInCentiS - cpuAppLastTicks resourcesForNode
- cpuV = fromIntegral ticksDiff / fromIntegral (100 :: Int) / tDiffInSec
- !newCPUPct = if cpuV < 0 then 0.0 else cpuV * 100.0
- addHistoricalData rHistory nodeId now CPUTimeAppData $ ValueD newCPUPct
- updateLastResources lastResources nodeId $ \current ->
- current { cpuAppLastTicks = cpuTimeAppInCentiS
- , cpuAppLastNS = tns
- }
-
- updateThreadsNum =
- readValueI metricValue $ addHistoricalData rHistory nodeId now ThreadsNumData
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Transactions.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Transactions.hs
deleted file mode 100644
index 87466300188..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Update/Transactions.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# LANGUAGE BangPatterns #-}
-{-# LANGUAGE MultiWayIf #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Cardano.Tracer.Handlers.RTView.Update.Transactions
- ( updateTransactionsHistory
- ) where
-
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.Utils
-import Cardano.Tracer.Types
-
-import Data.Text (isInfixOf)
-import Data.Text.Read (decimal)
-import Data.Time.Clock (UTCTime)
-
-updateTransactionsHistory
- :: NodeId
- -> TransactionsHistory
- -> MetricName
- -> MetricValue
- -> UTCTime
- -> IO ()
-updateTransactionsHistory nodeId (TXHistory tHistory) metricName metricValue now =
- if
- | "txsProcessedNum" `isInfixOf` metricName -> updateTxsProcessedNum
- | "mempoolBytes" `isInfixOf` metricName -> updateMempoolBytes
- | "txsInMempool" `isInfixOf` metricName -> updateTxsInMempool
- | otherwise -> return ()
- where
- updateTxsProcessedNum =
- readValueI metricValue $ addHistoricalData tHistory nodeId now TxsProcessedNumData
-
- updateTxsInMempool =
- readValueI metricValue $ addHistoricalData tHistory nodeId now TxsInMempoolData
-
- updateMempoolBytes =
- case decimal metricValue of
- Left _ -> return ()
- Right (mempoolBytes :: Int, _) -> do
- let !mempoolInMB = fromIntegral mempoolBytes / 1024 / 1024 :: Double
- addHistoricalData tHistory nodeId now MempoolBytesData $ ValueD mempoolInMB
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Utils.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Utils.hs
deleted file mode 100644
index 6ecad2723a8..00000000000
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/RTView/Utils.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE NamedFieldPuns #-}
-
-module Cardano.Tracer.Handlers.RTView.Utils
- ( module Cardano.Tracer.Handlers.RTView.Utils
- ) where
-
-import Cardano.Tracer.Environment
-import Cardano.Tracer.Types
-
-import Control.Concurrent.STM.TVar (readTVarIO)
-import qualified Data.HashMap.Strict as HM (toList)
-import qualified Data.Map.Strict as M
-import Data.Maybe (mapMaybe)
-import qualified Data.Set as S
-import Data.Text as T (Text, pack)
-import System.Metrics (Store, Value (..), sampleAll)
-
-import Graphics.UI.Threepenny.Core
-
-type MetricName = Text
-type MetricValue = Text
-type MetricsList = [(MetricName, MetricValue)]
-
-
-forConnected :: TracerEnv -> (NodeId -> IO b) -> IO [b]
-forConnected TracerEnv{teConnectedNodes} action =
- mapM action . S.toList =<< readTVarIO teConnectedNodes
-
-forConnected_ :: TracerEnv -> (NodeId -> IO ()) -> IO ()
-forConnected_ TracerEnv{teConnectedNodes} action =
- mapM_ action =<< readTVarIO teConnectedNodes
-
-forConnectedUI :: TracerEnv -> (NodeId -> UI b) -> UI [b]
-forConnectedUI TracerEnv{teConnectedNodes} action =
- mapM action . S.toList =<< liftIO (readTVarIO teConnectedNodes)
-
-forConnectedUI_ :: TracerEnv -> (NodeId -> UI ()) -> UI ()
-forConnectedUI_ TracerEnv{teConnectedNodes} action =
- mapM_ action =<< liftIO (readTVarIO teConnectedNodes)
-
-forAcceptedMetrics_
- :: TracerEnv
- -> ((NodeId, MetricsStores) -> IO ())
- -> IO ()
-forAcceptedMetrics_ TracerEnv{teAcceptedMetrics} action =
- mapM_ action . M.toList =<< readTVarIO teAcceptedMetrics
-
-forAcceptedMetricsUI_
- :: TracerEnv
- -> ((NodeId, MetricsStores) -> UI ())
- -> UI ()
-forAcceptedMetricsUI_ TracerEnv{teAcceptedMetrics} action =
- mapM_ action . M.toList =<< liftIO (readTVarIO teAcceptedMetrics)
-
-getListOfMetrics :: Store -> IO MetricsList
-getListOfMetrics = fmap (mapMaybe metricsWeNeed . HM.toList) . sampleAll
- where
- metricsWeNeed (mName, mValue) =
- case mValue of
- Counter c -> Just (mName, T.pack $ show c)
- Gauge g -> Just (mName, T.pack $ show g)
- Label l -> Just (mName, l)
- _ -> Nothing -- 'ekg-forward' doesn't support 'Distribution' yet.
diff --git a/cardano-tracer/src/Cardano/Tracer/Handlers/System.hs b/cardano-tracer/src/Cardano/Tracer/Handlers/System.hs
index e26b9a4b6fa..32683fb950f 100644
--- a/cardano-tracer/src/Cardano/Tracer/Handlers/System.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Handlers/System.hs
@@ -1,32 +1,10 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE NamedFieldPuns #-}
-
module Cardano.Tracer.Handlers.System
- ( getPathToBackupDir
- , getPathToChartColorsDir
- , getPathToChartsConfig
- , getPathToLogsLiveViewFontConfig
- , getPathToThemeConfig
- , getPathsToNotificationsSettings
+ ( getPathsToNotificationsSettings
) where
import qualified System.Directory as D
import System.FilePath ((>))
-import Cardano.Tracer.Environment
-
-getPathToChartsConfig
- , getPathToThemeConfig
- , getPathToLogsLiveViewFontConfig :: TracerEnv -> IO FilePath
-getPathToChartsConfig = getPathToConfig "charts"
-getPathToThemeConfig = getPathToConfig "theme"
-getPathToLogsLiveViewFontConfig = getPathToConfig "llvFontSize"
-
-getPathToConfig :: FilePath -> TracerEnv -> IO FilePath
-getPathToConfig configName TracerEnv{teStateDir} = do
- configDir <- getPathToConfigDir teStateDir
- return $ configDir > configName
-
getPathsToNotificationsSettings :: Maybe FilePath -> IO (FilePath, FilePath)
getPathsToNotificationsSettings rtvSD = do
configDir <- getPathToConfigDir rtvSD
@@ -36,26 +14,12 @@ getPathsToNotificationsSettings rtvSD = do
, pathToNotifySubDir > "events"
)
-getPathToChartColorsDir :: TracerEnv -> IO FilePath
-getPathToChartColorsDir TracerEnv{teStateDir} = do
- configDir <- getPathToConfigDir teStateDir
- let pathToColorsSubDir = configDir > "color"
- D.createDirectoryIfMissing True pathToColorsSubDir
- return pathToColorsSubDir
-
getPathToConfigDir :: Maybe FilePath -> IO FilePath
getPathToConfigDir rtvSD = do
configDir <- getStateDir rtvSD D.XdgConfig
- let pathToRTViewConfigDir = configDir > rtViewRootDir
- D.createDirectoryIfMissing True pathToRTViewConfigDir
- return pathToRTViewConfigDir
-
-getPathToBackupDir :: TracerEnv -> IO FilePath
-getPathToBackupDir TracerEnv{teStateDir} = do
- dataDir <- getStateDir teStateDir D.XdgData
- let pathToRTViewBackupDir = dataDir > rtViewRootDir > "backup"
- D.createDirectoryIfMissing True pathToRTViewBackupDir
- return pathToRTViewBackupDir
+ let pathToConfigDir = configDir > tracerStateRootDir
+ D.createDirectoryIfMissing True pathToConfigDir
+ return pathToConfigDir
getStateDir
:: Maybe FilePath
@@ -64,5 +28,5 @@ getStateDir
getStateDir Nothing xdgDir = D.getXdgDirectory xdgDir ""
getStateDir (Just stateDir) _ = return stateDir
-rtViewRootDir :: FilePath
-rtViewRootDir = "cardano-rt-view"
+tracerStateRootDir :: FilePath
+tracerStateRootDir = "cardano-tracer"
diff --git a/cardano-tracer/src/Cardano/Tracer/MetaTrace.hs b/cardano-tracer/src/Cardano/Tracer/MetaTrace.hs
index b48b8a7a50d..151e5e365a9 100644
--- a/cardano-tracer/src/Cardano/Tracer/MetaTrace.hs
+++ b/cardano-tracer/src/Cardano/Tracer/MetaTrace.hs
@@ -35,24 +35,16 @@ import qualified System.IO as Sys
-rtViewConfigWarning :: Text
-rtViewConfigWarning = "RTView requested in config but cardano-tracer was built without it"
-
data TracerTrace
- -- | Static information about the build.
= TracerBuildInfo
- { ttBuiltWithRTView :: Bool
- }
| TracerParamsAre
{ ttConfigPath :: FilePath
, ttStateDir :: Maybe FilePath
, ttMinLogSeverity :: Maybe SeverityS }
| TracerConfigIs
{ ttConfig :: TracerConfig
- , ttWarnRTViewMissing :: Bool
}
| TracerInitStarted
- | TracerInitEventQueues
| TracerInitDone
| TracerAddNewNodeIdMapping
{ ttBimapping :: !(NodeId, NodeName)
@@ -70,7 +62,6 @@ data TracerTrace
}
| TracerStartedAcceptors
{ ttAcceptorsAddr :: Network }
- | TracerStartedRTView
| TracerStartedReforwarder
| TracerSockListen
{ ttListenAt :: FilePath }
@@ -82,7 +73,6 @@ data TracerTrace
| TracerSockConnected
{ ttConnectedTo :: FilePath }
| TracerShutdownInitiated
- | TracerShutdownHistBackup
| TracerShutdownComplete
| TracerError
{ ttError :: Text }
@@ -105,16 +95,13 @@ data TraceBundle = TraceBundle{
}
instance LogFormatting TracerTrace where
- forHuman t@TracerConfigIs{ttWarnRTViewMissing = True} =
- rtViewConfigWarning <> ": " <> forHuman t {ttWarnRTViewMissing = False}
forHuman (TracerForwardingInterrupted howToConnect msg) =
T.pack $ "connection with " <> show howToConnect <> " failed: " <> msg
forHuman _ = ""
forMachine _dtal = \case
- TracerBuildInfo{..} -> mconcat
- [ "builtWithRTView" .= ttBuiltWithRTView
- , "kind" .= AE.String "TracerBuildInfo"
+ TracerBuildInfo -> mconcat
+ [ "kind" .= AE.String "TracerBuildInfo"
]
TracerParamsAre{..} -> mconcat
[ "configPath" .= ttConfigPath
@@ -122,18 +109,13 @@ instance LogFormatting TracerTrace where
, "minLogSeverity" .= ttMinLogSeverity
, "kind" .= AE.String "TracerParamsAre"
]
- TracerConfigIs{..} -> mconcat $
- [ "config" .= ttConfig
- , "kind" .= AE.String "TracerConfigIs" ] ++
- [ "warnRTViewMissing" .= rtViewConfigWarning
- | ttWarnRTViewMissing
+ TracerConfigIs{..} -> mconcat
+ [ "config" .= ttConfig
+ , "kind" .= AE.String "TracerConfigIs"
]
TracerInitStarted -> mconcat
[ "kind" .= AE.String "TracerInitStarted"
]
- TracerInitEventQueues -> mconcat
- [ "kind" .= AE.String "TracerInitEventQueues"
- ]
TracerInitDone -> mconcat
[ "kind" .= AE.String "TracerInitDone"
]
@@ -162,9 +144,6 @@ instance LogFormatting TracerTrace where
[ "kind" .= AE.String "TracerStartedAcceptors"
, "AcceptorsAddr" .= ttAcceptorsAddr
]
- TracerStartedRTView -> mconcat
- [ "kind" .= AE.String "TracerStartedRTView"
- ]
TracerStartedReforwarder -> mconcat
[ "kind" .= AE.String "TracerStartedReforwarder"
]
@@ -188,9 +167,6 @@ instance LogFormatting TracerTrace where
TracerShutdownInitiated -> mconcat
[ "kind" .= AE.String "TracerShutdownInitiated"
]
- TracerShutdownHistBackup -> mconcat
- [ "kind" .= AE.String "TracerShutdownHistBackup"
- ]
TracerShutdownComplete -> mconcat
[ "kind" .= AE.String "TracerShutdownComplete"
]
@@ -214,7 +190,6 @@ instance MetaTrace TracerTrace where
namespaceFor TracerParamsAre {} = Namespace [] ["ParamsAre"]
namespaceFor TracerConfigIs {} = Namespace [] ["ConfigIs"]
namespaceFor TracerInitStarted = Namespace [] ["InitStart"]
- namespaceFor TracerInitEventQueues = Namespace [] ["EventQueues"]
namespaceFor TracerInitDone = Namespace [] ["InitDone"]
namespaceFor TracerAddNewNodeIdMapping {} = Namespace [] ["AddNewNodeIdMapping"]
namespaceFor TracerStartedLogRotator = Namespace [] ["StartedLogRotator"]
@@ -222,14 +197,12 @@ instance MetaTrace TracerTrace where
namespaceFor TracerStartedTimeseries{} = Namespace [] ["StartedTimeseriers"]
namespaceFor TracerStartedMonitoring{} = Namespace [] ["StartedMonitoring"]
namespaceFor TracerStartedAcceptors {} = Namespace [] ["StartedAcceptors"]
- namespaceFor TracerStartedRTView = Namespace [] ["StartedRTView"]
namespaceFor TracerStartedReforwarder = Namespace [] ["StartedReforwarder"]
namespaceFor TracerSockListen {} = Namespace [] ["SockListen"]
namespaceFor TracerSockIncoming {} = Namespace [] ["SockIncoming"]
namespaceFor TracerSockConnecting {} = Namespace [] ["SockConnecting"]
namespaceFor TracerSockConnected {} = Namespace [] ["SockConnected"]
namespaceFor TracerShutdownInitiated = Namespace [] ["ShutdownInitiated"]
- namespaceFor TracerShutdownHistBackup = Namespace [] ["ShutdownHistBackup"]
namespaceFor TracerShutdownComplete = Namespace [] ["ShutdownComplete"]
namespaceFor TracerMissingCertificate {} = Namespace [] ["MissingCertificate"]
namespaceFor TracerError {} = Namespace [] ["Error"]
@@ -240,7 +213,6 @@ instance MetaTrace TracerTrace where
severityFor (Namespace _ ["ParamsAre"]) _ = Just Warning
severityFor (Namespace _ ["ConfigIs"]) _ = Just Warning
severityFor (Namespace _ ["InitStart"]) _ = Just Info
- severityFor (Namespace _ ["EventQueues"]) _ = Just Info
severityFor (Namespace _ ["InitDone"]) _ = Just Info
severityFor (Namespace _ ["AddNewNodeIdMapping"]) _ = Just Info
severityFor (Namespace _ ["StartedLogRotator"]) _ = Just Info
@@ -248,7 +220,6 @@ instance MetaTrace TracerTrace where
severityFor (Namespace _ ["StartedTimeseries"]) _ = Just Info
severityFor (Namespace _ ["StartedMonitoring"]) _ = Just Info
severityFor (Namespace _ ["StartedAcceptors"]) _ = Just Info
- severityFor (Namespace _ ["StartedRTView"]) _ = Just Info
severityFor (Namespace _ ["StartedReforwarder"]) _ = Just Info
severityFor (Namespace _ ["SockListen"]) _ = Just Info
severityFor (Namespace _ ["SockIncoming"]) _ = Just Info
@@ -256,7 +227,6 @@ instance MetaTrace TracerTrace where
severityFor (Namespace _ ["SockConnected"]) _ = Just Info
severityFor (Namespace _ ["MissingCertificate"]) _ = Just Warning
severityFor (Namespace _ ["ShutdownInitiated"]) _ = Just Warning
- severityFor (Namespace _ ["ShutdownHistBackup"]) _ = Just Info
severityFor (Namespace _ ["ShutdownComplete"]) _ = Just Warning
severityFor (Namespace _ ["Error"]) _ = Just Error
severityFor (Namespace _ ["Resources"]) _ = Just Info
@@ -270,7 +240,6 @@ instance MetaTrace TracerTrace where
, Namespace [] ["ParamsAre"]
, Namespace [] ["ConfigIs"]
, Namespace [] ["InitStart"]
- , Namespace [] ["EventQueues"]
, Namespace [] ["InitDone"]
, Namespace [] ["AddNewNodeIdMapping"]
, Namespace [] ["StartedLogRotator"]
@@ -278,7 +247,6 @@ instance MetaTrace TracerTrace where
, Namespace [] ["StartedTimeseries"]
, Namespace [] ["StartedMonitoring"]
, Namespace [] ["StartedAcceptors"]
- , Namespace [] ["StartedRTView"]
, Namespace [] ["StartedReforwarder"]
, Namespace [] ["SockListen"]
, Namespace [] ["SockIncoming"]
@@ -286,7 +254,6 @@ instance MetaTrace TracerTrace where
, Namespace [] ["SockConnected"]
, Namespace [] ["MissingCertificate"]
, Namespace [] ["ShutdownInitiated"]
- , Namespace [] ["ShutdownHistBackup"]
, Namespace [] ["ShutdownComplete"]
, Namespace [] ["Error"]
, Namespace [] ["Resources"]
diff --git a/cardano-tracer/src/Cardano/Tracer/Run.hs b/cardano-tracer/src/Cardano/Tracer/Run.hs
index ad10952cae1..bd605acec7e 100644
--- a/cardano-tracer/src/Cardano/Tracer/Run.hs
+++ b/cardano-tracer/src/Cardano/Tracer/Run.hs
@@ -19,11 +19,6 @@ import Cardano.Tracer.Environment
import Cardano.Tracer.Handlers.Logs.Rotator
import Cardano.Tracer.Handlers.Metrics.Servers
import Cardano.Tracer.Handlers.ReForwarder
-#if RTVIEW
-import Cardano.Tracer.Handlers.RTView.State.Historical
-import Cardano.Tracer.Handlers.RTView.Update.Historical
-import Cardano.Tracer.Handlers.RTView.Run
-#endif
import Cardano.Tracer.MetaTrace
import Cardano.Tracer.Types
import Cardano.Tracer.Utils
@@ -34,9 +29,6 @@ import Control.Applicative
import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (async, link)
import Control.Concurrent.Extra (newLock)
-#if RTVIEW
-import Control.Concurrent.STM.TVar (newTVarIO)
-#endif
import Control.Exception (SomeException, try)
import Control.Monad
import Data.Aeson (decodeFileStrict')
@@ -53,12 +45,6 @@ runCardanoTracer :: TracerParams -> IO ()
runCardanoTracer TracerParams{tracerConfig, stateDir, logSeverity} = do
!tr <- mkTraceBundle $ SeverityF $ logSeverity <|> Just Info -- default severity filter to Info
traceWith tr.assorted TracerBuildInfo
-#if RTVIEW
- { ttBuiltWithRTView = True
-#else
- { ttBuiltWithRTView = False
-#endif
- }
traceWith tr.assorted TracerParamsAre
{ ttConfigPath = tracerConfig
, ttStateDir = stateDir
@@ -67,12 +53,7 @@ runCardanoTracer TracerParams{tracerConfig, stateDir, logSeverity} = do
config <- readTracerConfig tracerConfig
traceWith tr.assorted TracerConfigIs
- { ttConfig = config
-#if RTVIEW
- , ttWarnRTViewMissing = False
-#else
- , ttWarnRTViewMissing = case hasRTView config of { Just{} -> True; Nothing -> False; }
-#endif
+ { ttConfig = config
}
for_ (resourceFreq config) \msInterval -> do
@@ -91,35 +72,21 @@ runCardanoTracer TracerParams{tracerConfig, stateDir, logSeverity} = do
-- | Runs all internal services of the tracer.
doRunCardanoTracer
:: TracerConfig -- ^ Tracer's configuration.
- -> Maybe FilePath -- ^ Path to RTView's internal state files.
+ -> Maybe FilePath -- ^ Path to tracer's internal state files.
-> TraceBundle
-> ProtocolsBrake -- ^ The flag we use to stop all the protocols.
-> DataPointRequestors -- ^ The DataPointRequestors to ask 'DataPoint's.
-> IO ()
-doRunCardanoTracer config rtViewStateDir tr protocolsBrake dpRequestors = do
+doRunCardanoTracer config stateDir tr protocolsBrake dpRequestors = do
traceWith tr.assorted TracerInitStarted
connectedNodes <- initConnectedNodes
connectedNodesNames <- initConnectedNodesNames
acceptedMetrics <- initAcceptedMetrics
mHelp <- loadMetricsHelp $ metricsHelp config
-#if RTVIEW
- savedTO <- initSavedTraceObjects
-
- chainHistory <- initBlockchainHistory
- resourcesHistory <- initResourcesHistory
- txHistory <- initTransactionsHistory
-#endif
-
currentLogLock <- newLock
currentDPLock <- newLock
- traceWith tr.assorted TracerInitEventQueues
-#if RTVIEW
- eventsQueues <- initEventsQueues tr.assorted rtViewStateDir connectedNodesNames dpRequestors currentDPLock
- rtViewPageOpened <- newTVarIO False
-#endif
-
(reforwardTraceObject,_trDataPoint) <- initReForwarder config tr.assorted
registry <- newRegistry
@@ -140,30 +107,14 @@ doRunCardanoTracer config rtViewStateDir tr protocolsBrake dpRequestors = do
, teTracer = tr.assorted
, teReforwardTraceObjects = reforwardTraceObject
, teRegistry = registry
- , teStateDir = rtViewStateDir
+ , teStateDir = stateDir
, teMetricsHelp = mHelp
, teTimeseriesHandle = timeseriesHandle
}
- tracerEnvRTView :: TracerEnvRTView
- tracerEnvRTView = TracerEnvRTView
-#if RTVIEW
- { teSavedTO = savedTO
- , teBlockchainHistory = chainHistory
- , teResourcesHistory = resourcesHistory
- , teTxHistory = txHistory
- , teEventsQueues = eventsQueues
- , teRTViewPageOpened = rtViewPageOpened
- }
-#endif
-
-- Specify what should be done before 'cardano-tracer' stops.
beforeProgramStops $ do
traceWith tr.assorted TracerShutdownInitiated
-#if RTVIEW
- backupAllHistory tracerEnv tracerEnvRTView
- traceWith tr.assorted TracerShutdownHistBackup
-#endif
applyBrake (teProtocolsBrake tracerEnv)
traceWith tr.assorted TracerShutdownComplete
@@ -171,10 +122,7 @@ doRunCardanoTracer config rtViewStateDir tr protocolsBrake dpRequestors = do
sequenceConcurrently_
[ runLogsRotator tracerEnv
, runMetricsServers tracerEnv
- , runAcceptors tracerEnv tracerEnvRTView
-#if RTVIEW
- , runRTView tracerEnv tracerEnvRTView
-#endif
+ , runAcceptors tracerEnv
]
-- NB. this fails silently if there's any read or decode error when an external JSON file is provided
diff --git a/cardano-tracer/test/Cardano/Tracer/Test/Acceptor.hs b/cardano-tracer/test/Cardano/Tracer/Test/Acceptor.hs
index 4a970e3a6db..6b4907730c3 100644
--- a/cardano-tracer/test/Cardano/Tracer/Test/Acceptor.hs
+++ b/cardano-tracer/test/Cardano/Tracer/Test/Acceptor.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
@@ -12,20 +11,12 @@ import Cardano.Tracer.Configuration
import Cardano.Tracer.Environment
import Cardano.Logging (standardTracer)
import qualified Cardano.Logging.Types as Net
-#if RTVIEW
-import Cardano.Tracer.Handlers.RTView.Run
-import Cardano.Tracer.Handlers.RTView.State.Historical
-#endif
import Cardano.Tracer.MetaTrace
import Cardano.Tracer.Types
import Cardano.Tracer.Utils
import Control.Concurrent.Extra (newLock)
-#if RTVIEW
-import Control.Concurrent.STM.TVar (newTVarIO, readTVarIO)
-#else
import Control.Concurrent.STM.TVar (readTVarIO)
-#endif
import Control.Monad (forM_, forever)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.List.NonEmpty as NE
@@ -48,25 +39,12 @@ launchAcceptorsSimple mode localSock dpName = do
connectedNodes <- initConnectedNodes
connectedNodesNames <- initConnectedNodesNames
acceptedMetrics <- initAcceptedMetrics
-#if RTVIEW
- savedTO <- initSavedTraceObjects
-#endif
currentLogLock <- newLock
currentDPLock <- newLock
std <- standardTracer
tr <- mkTracerTracer std $ SeverityF $ Just Warning
-#if RTVIEW
- eventsQueues <- initEventsQueues tr Nothing connectedNodesNames dpRequestors currentDPLock
-
- chainHistory <- initBlockchainHistory
- resourcesHistory <- initResourcesHistory
- txHistory <- initTransactionsHistory
-
- rtViewPageOpened <- newTVarIO False
-#endif
-
registry <- newRegistry
let tracerEnv :: TracerEnv
@@ -87,20 +65,9 @@ launchAcceptorsSimple mode localSock dpName = do
, teTimeseriesHandle = Nothing
}
- tracerEnvRTView :: TracerEnvRTView
- tracerEnvRTView = TracerEnvRTView
-#if RTVIEW
- { teSavedTO = savedTO
- , teBlockchainHistory = chainHistory
- , teResourcesHistory = resourcesHistory
- , teTxHistory = txHistory
- , teEventsQueues = eventsQueues
- , teRTViewPageOpened = rtViewPageOpened
- }
-#endif
- -- NOTE: no reforwarding in this acceptor.
+ -- NOTE: no reforwarding in this acceptor.
sequenceConcurrently_
- [ runAcceptors tracerEnv tracerEnvRTView
+ [ runAcceptors tracerEnv
, runDataPointsPrinter dpName dpRequestors
]
where
@@ -113,7 +80,6 @@ launchAcceptorsSimple mode localSock dpName = do
, ekgRequestFreq = Just 1.0
, hasEKG = Nothing
, hasPrometheus = Nothing
- , hasRTView = Nothing
, hasTimeseries = Nothing
, tlsCertificate = Nothing
, logging = NE.fromList [LoggingParams "/tmp/demo-acceptor" FileMode ForHuman]
diff --git a/cardano-tracer/test/Cardano/Tracer/Test/DataPoint/Tests.hs b/cardano-tracer/test/Cardano/Tracer/Test/DataPoint/Tests.hs
index 6ab547fa798..017d1ff43ff 100644
--- a/cardano-tracer/test/Cardano/Tracer/Test/DataPoint/Tests.hs
+++ b/cardano-tracer/test/Cardano/Tracer/Test/DataPoint/Tests.hs
@@ -88,7 +88,6 @@ propDataPoint ts@TestSetup{..} rootDir localSock = do
, ekgRequestFreq = Just 1.0
, hasEKG = Nothing
, hasPrometheus = Nothing
- , hasRTView = Nothing
, hasTimeseries = Nothing
, tlsCertificate = Nothing
, logging = NE.fromList [LoggingParams rootDir FileMode ForHuman]
diff --git a/cardano-tracer/test/Cardano/Tracer/Test/Logs/Tests.hs b/cardano-tracer/test/Cardano/Tracer/Test/Logs/Tests.hs
index 4b3b70f8f98..02ea981e441 100644
--- a/cardano-tracer/test/Cardano/Tracer/Test/Logs/Tests.hs
+++ b/cardano-tracer/test/Cardano/Tracer/Test/Logs/Tests.hs
@@ -71,7 +71,6 @@ propLogs ts@TestSetup{..} format logRotLimitBytes logRotMaxAgeMinutes rootDir lo
, hasEKG = Nothing
, hasPrometheus = Nothing
, hasTimeseries = Nothing
- , hasRTView = Nothing
, logging = LoggingParams root FileMode format :| []
, rotation = Just $ RotationParams
{ rpFrequencySecs = 3
@@ -119,7 +118,6 @@ propMultiInit ts@TestSetup{..} format rootDir howToConnect1 howToConnect2 = do
, ekgRequestFreq = Just 1.0
, hasEKG = Nothing
, hasPrometheus = Nothing
- , hasRTView = Nothing
, hasTimeseries = Nothing
, tlsCertificate = Nothing
, logging = LoggingParams rootDir FileMode format :| []
@@ -166,7 +164,6 @@ propMultiResp ts@TestSetup{..} format rootDir howToConnect = do
, ekgRequestFreq = Just 1.0
, hasEKG = Nothing
, hasPrometheus = Nothing
- , hasRTView = Nothing
, hasTimeseries = Nothing
, tlsCertificate = Nothing
, logging = LoggingParams rootDir FileMode format :| []
diff --git a/cardano-tracer/test/Cardano/Tracer/Test/Restart/Tests.hs b/cardano-tracer/test/Cardano/Tracer/Test/Restart/Tests.hs
index 827489af9a4..f9969008ca4 100644
--- a/cardano-tracer/test/Cardano/Tracer/Test/Restart/Tests.hs
+++ b/cardano-tracer/test/Cardano/Tracer/Test/Restart/Tests.hs
@@ -93,7 +93,6 @@ mkConfig TestSetup{..} rootDir p = TracerConfig
, ekgRequestFreq = Just 1.0
, hasEKG = Nothing
, hasPrometheus = Nothing
- , hasRTView = Nothing
, hasTimeseries = Nothing
, tlsCertificate = Nothing
, logging = NE.fromList [LoggingParams rootDir FileMode ForMachine]
diff --git a/nix/nixos/cardano-tracer-service-workbench.nix b/nix/nixos/cardano-tracer-service-workbench.nix
index ff83d024e6a..e159dbbfa19 100644
--- a/nix/nixos/cardano-tracer-service-workbench.nix
+++ b/nix/nixos/cardano-tracer-service-workbench.nix
@@ -54,11 +54,7 @@ let serviceConfigToJSON =
# "Mempool.TxsInMempool" = "Mempool.TxsInMempool.Mapped";
# "ChainDB.SlotNum" = "ChainDB.SlotNum.Mapped";
# };
- } // pkgs.lib.optionalAttrs ((cfg.RTView or {}) != {})
- {
- hasRTView = cfg.RTView;
- }
- // pkgs.lib.optionalAttrs ((cfg.timeseries or {}) != {})
+ } // pkgs.lib.optionalAttrs ((cfg.timeseries or {}) != {})
{
hasTimeseries = cfg.timeseries;
};
@@ -83,7 +79,6 @@ in pkgs.commonLib.defServiceModule
connectTo = mayOpt str "Socket path or HOST:PORT: connect to.";
logRoot = opt str null "Log storage root directory.";
rotation = opt attrs {} "Log rotation overrides: see cardano-tracer documentation.";
- RTView = opt attrs {} "RTView config overrides: see cardano-tracer documentation.";
timeseries = opt attrs {} "Timeseries config: {epHost, epPort}. Enables the POST /timeseries/query endpoint.";
ekgPortBase = opt int 3100 "EKG port base.";
ekgRequestFreq = opt int 1 "EKG request frequency";
diff --git a/nix/nixos/cardano-tracer-service.nix b/nix/nixos/cardano-tracer-service.nix
index 581dd90e342..222c3eb627a 100644
--- a/nix/nixos/cardano-tracer-service.nix
+++ b/nix/nixos/cardano-tracer-service.nix
@@ -73,12 +73,6 @@ with builtins; let
epPort = cfg.prometheusPort;
};
}
- // optionalAttrs cfg.rtviewEnable {
- hasRTView = {
- epHost = cfg.rtviewHost;
- epPort = cfg.rtviewPort;
- };
- }
// optionalAttrs cfg.timeseriesEnable {
hasTimeseries = {
epHost = cfg.timeseriesHost;
@@ -684,36 +678,6 @@ in {
'';
};
- rtviewEnable = mkOption {
- type = bool;
- default = false;
- description = ''
- Whether to enable an RTView client.
-
- As of node release 9.1 this option has no effect unless node was
- built with `-f +rtview`.
-
- Ref:
- https://github.com/IntersectMBO/cardano-node/pull/5846
- '';
- };
-
- rtviewHost = mkOption {
- type = str;
- default = "127.0.0.1";
- description = ''
- The host to bind if RTView is enabled.
- '';
- };
-
- rtviewPort = mkOption {
- type = port;
- default = 3300;
- description = ''
- The port to listen on if RTView is enabled.
- '';
- };
-
timeseriesEnable = mkOption {
type = bool;
default = false;
@@ -775,8 +739,6 @@ in {
description = ''
The directory to store any cardano-tracer process related data.
- RTView if enabled will save its state in this directory.
-
For non-systemd use cases, this can be set to null or any other
string path.
'';
diff --git a/nix/workbench/backend/nomad-job.nix b/nix/workbench/backend/nomad-job.nix
index cb2886ec464..a30fa7cdb1a 100644
--- a/nix/workbench/backend/nomad-job.nix
+++ b/nix/workbench/backend/nomad-job.nix
@@ -791,7 +791,7 @@ let
# and EKG and prometheus ports clash!
(builtins.removeAttrs
profileBundle.tracer-service.config
- [ "hasEKG" "hasPrometheus" "hasRTView" ]
+ [ "hasEKG" "hasPrometheus" ]
)
# Make it easier to download every log
{
diff --git a/nix/workbench/backend/supervisor.sh b/nix/workbench/backend/supervisor.sh
index ccdffbb623d..d9176bf0834 100755
--- a/nix/workbench/backend/supervisor.sh
+++ b/nix/workbench/backend/supervisor.sh
@@ -39,7 +39,6 @@ case "$op" in
setenvjq 'port_shift_ekg' 100
setenvjq 'port_shift_prometheus' 200
- setenvjq 'port_shift_rtview' 300
setenvjqstr 'supervisor_conf' "$backend_dir"/supervisor.conf
;;
@@ -124,11 +123,9 @@ case "$op" in
local basePort=$( envjq 'basePortTracer')
local port_ekg=$(( basePort+$(envjq 'port_shift_ekg')))
local port_prometheus=$((basePort+$(envjq 'port_shift_prometheus')))
- local port_rtview=$(( basePort+$(envjq 'port_shift_rtview')))
cat <