Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions duckdb-vortex-tuned/benchmark.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
export BENCH_DOWNLOAD_SCRIPT="download-hits-parquet-single"
export BENCH_RESTARTABLE=no
# Single-process engine: each query forks a fresh full-machine process with no
# shared scheduler across connections, so the concurrent-QPS test only
# oversubscribes RAM rather than measuring throughput. Skip it by default;
# override BENCH_CONCURRENT_DURATION to re-enable. See issue #946.
export BENCH_CONCURRENT_DURATION="${BENCH_CONCURRENT_DURATION:-0}"
exec ../lib/benchmark-common.sh
4 changes: 4 additions & 0 deletions duckdb-vortex-tuned/check
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
set -e

duckdb -c "SELECT 1" >/dev/null
6 changes: 6 additions & 0 deletions duckdb-vortex-tuned/create.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
LOAD vortex;

CREATE VIEW hits AS
SELECT * REPLACE (make_date(EventDate) AS EventDate)
FROM read_vortex('hits.vortex');
CREATE MACRO toDateTime(t) AS epoch_ms(t * 1000);
4 changes: 4 additions & 0 deletions duckdb-vortex-tuned/data-size
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
set -e

du -bcs hits.vortex | awk 'END { print $1 }'
19 changes: 19 additions & 0 deletions duckdb-vortex-tuned/install
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash
set -e

# duckdb writes its extension cache under $HOME/.duckdb/extensions. With
# HOME unset (cloud-init occasionally runs scripts that way) the
# `INSTALL vortex` below ends up writing to /.duckdb and later sibling
# scripts (load/query) can't find the extension. The previous
# `export HOME=${HOME:=~}` was inside the install-duckdb branch, so
# re-runs with duckdb already on PATH still hit the bug. Pin HOME
# unconditionally at the top.
export HOME="${HOME:-/root}"

if ! command -v duckdb >/dev/null 2>&1; then
curl https://install.duckdb.org | sh
sudo ln -sf "$HOME/.duckdb/cli/latest/duckdb" /usr/local/bin/duckdb
fi

# Install the vortex extension (idempotent — safe to re-run).
duckdb -c "INSTALL vortex;"
18 changes: 18 additions & 0 deletions duckdb-vortex-tuned/load
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
set -e

# Convert source parquet to Vortex format. `duckdb-vortex` (default
# settings) OOM-kills on hosts with ~7.6 GiB usable RAM: even lowering
# `memory_limit` does not prevent it (see
# https://github.com/vortex-data/vortex/issues/10046 for the full
# investigation and raw evidence). `threads=2` is the largest thread
# count that completed in our testing; default (`threads=4`) OOMs.
duckdb -c "LOAD vortex; SET threads = 2; COPY 'hits.parquet' TO 'hits.vortex' (FORMAT vortex);"

# Create the persistent VIEW (over hits.vortex) in hits.db.
rm -f hits.db
duckdb hits.db -f create.sql

# Source parquet no longer needed.
rm -f hits.parquet
sync
43 changes: 43 additions & 0 deletions duckdb-vortex-tuned/queries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
SELECT COUNT(*) FROM hits;
SELECT COUNT(*) FROM hits WHERE AdvEngineID <> 0;
SELECT SUM(AdvEngineID), COUNT(*), AVG(ResolutionWidth) FROM hits;
SELECT AVG(UserID) FROM hits;
SELECT COUNT(DISTINCT UserID) FROM hits;
SELECT COUNT(DISTINCT SearchPhrase) FROM hits;
SELECT MIN(EventDate), MAX(EventDate) FROM hits;
SELECT AdvEngineID, COUNT(*) FROM hits WHERE AdvEngineID <> 0 GROUP BY AdvEngineID ORDER BY COUNT(*) DESC;
SELECT RegionID, COUNT(DISTINCT UserID) AS u FROM hits GROUP BY RegionID ORDER BY u DESC LIMIT 10;
SELECT RegionID, SUM(AdvEngineID), COUNT(*) AS c, AVG(ResolutionWidth), COUNT(DISTINCT UserID) FROM hits GROUP BY RegionID ORDER BY c DESC LIMIT 10;
SELECT MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel <> '' GROUP BY MobilePhoneModel ORDER BY u DESC LIMIT 10;
SELECT MobilePhone, MobilePhoneModel, COUNT(DISTINCT UserID) AS u FROM hits WHERE MobilePhoneModel <> '' GROUP BY MobilePhone, MobilePhoneModel ORDER BY u DESC LIMIT 10;
SELECT SearchPhrase, COUNT(*) AS c FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;
SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;
SELECT SearchEngineID, SearchPhrase, COUNT(*) AS c FROM hits WHERE SearchPhrase <> '' GROUP BY SearchEngineID, SearchPhrase ORDER BY c DESC LIMIT 10;
SELECT UserID, COUNT(*) FROM hits GROUP BY UserID ORDER BY COUNT(*) DESC LIMIT 10;
SELECT UserID, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, SearchPhrase ORDER BY COUNT(*) DESC LIMIT 10;
SELECT UserID, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, SearchPhrase LIMIT 10;
SELECT UserID, extract(minute FROM toDateTime(EventTime)) AS m, SearchPhrase, COUNT(*) FROM hits GROUP BY UserID, m, SearchPhrase ORDER BY COUNT(*) DESC LIMIT 10;
SELECT UserID FROM hits WHERE UserID = 435090932899640449;
SELECT COUNT(*) FROM hits WHERE URL LIKE '%google%';
SELECT SearchPhrase, MIN(URL), COUNT(*) AS c FROM hits WHERE URL LIKE '%google%' AND SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;
SELECT SearchPhrase, MIN(URL), MIN(Title), COUNT(*) AS c, COUNT(DISTINCT UserID) FROM hits WHERE Title LIKE '%Google%' AND URL NOT LIKE '%.google.%' AND SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY c DESC LIMIT 10;
SELECT * FROM hits WHERE URL LIKE '%google%' ORDER BY EventTime LIMIT 10;
SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY EventTime LIMIT 10;
SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY SearchPhrase LIMIT 10;
SELECT SearchPhrase FROM hits WHERE SearchPhrase <> '' ORDER BY EventTime, SearchPhrase LIMIT 10;
SELECT CounterID, AVG(STRLEN(URL)) AS l, COUNT(*) AS c FROM hits WHERE URL <> '' GROUP BY CounterID HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25;
SELECT REGEXP_REPLACE(Referer, '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS k, AVG(STRLEN(Referer)) AS l, COUNT(*) AS c, MIN(Referer) FROM hits WHERE Referer <> '' GROUP BY k HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25;
SELECT SUM(ResolutionWidth), SUM(ResolutionWidth + 1), SUM(ResolutionWidth + 2), SUM(ResolutionWidth + 3), SUM(ResolutionWidth + 4), SUM(ResolutionWidth + 5), SUM(ResolutionWidth + 6), SUM(ResolutionWidth + 7), SUM(ResolutionWidth + 8), SUM(ResolutionWidth + 9), SUM(ResolutionWidth + 10), SUM(ResolutionWidth + 11), SUM(ResolutionWidth + 12), SUM(ResolutionWidth + 13), SUM(ResolutionWidth + 14), SUM(ResolutionWidth + 15), SUM(ResolutionWidth + 16), SUM(ResolutionWidth + 17), SUM(ResolutionWidth + 18), SUM(ResolutionWidth + 19), SUM(ResolutionWidth + 20), SUM(ResolutionWidth + 21), SUM(ResolutionWidth + 22), SUM(ResolutionWidth + 23), SUM(ResolutionWidth + 24), SUM(ResolutionWidth + 25), SUM(ResolutionWidth + 26), SUM(ResolutionWidth + 27), SUM(ResolutionWidth + 28), SUM(ResolutionWidth + 29), SUM(ResolutionWidth + 30), SUM(ResolutionWidth + 31), SUM(ResolutionWidth + 32), SUM(ResolutionWidth + 33), SUM(ResolutionWidth + 34), SUM(ResolutionWidth + 35), SUM(ResolutionWidth + 36), SUM(ResolutionWidth + 37), SUM(ResolutionWidth + 38), SUM(ResolutionWidth + 39), SUM(ResolutionWidth + 40), SUM(ResolutionWidth + 41), SUM(ResolutionWidth + 42), SUM(ResolutionWidth + 43), SUM(ResolutionWidth + 44), SUM(ResolutionWidth + 45), SUM(ResolutionWidth + 46), SUM(ResolutionWidth + 47), SUM(ResolutionWidth + 48), SUM(ResolutionWidth + 49), SUM(ResolutionWidth + 50), SUM(ResolutionWidth + 51), SUM(ResolutionWidth + 52), SUM(ResolutionWidth + 53), SUM(ResolutionWidth + 54), SUM(ResolutionWidth + 55), SUM(ResolutionWidth + 56), SUM(ResolutionWidth + 57), SUM(ResolutionWidth + 58), SUM(ResolutionWidth + 59), SUM(ResolutionWidth + 60), SUM(ResolutionWidth + 61), SUM(ResolutionWidth + 62), SUM(ResolutionWidth + 63), SUM(ResolutionWidth + 64), SUM(ResolutionWidth + 65), SUM(ResolutionWidth + 66), SUM(ResolutionWidth + 67), SUM(ResolutionWidth + 68), SUM(ResolutionWidth + 69), SUM(ResolutionWidth + 70), SUM(ResolutionWidth + 71), SUM(ResolutionWidth + 72), SUM(ResolutionWidth + 73), SUM(ResolutionWidth + 74), SUM(ResolutionWidth + 75), SUM(ResolutionWidth + 76), SUM(ResolutionWidth + 77), SUM(ResolutionWidth + 78), SUM(ResolutionWidth + 79), SUM(ResolutionWidth + 80), SUM(ResolutionWidth + 81), SUM(ResolutionWidth + 82), SUM(ResolutionWidth + 83), SUM(ResolutionWidth + 84), SUM(ResolutionWidth + 85), SUM(ResolutionWidth + 86), SUM(ResolutionWidth + 87), SUM(ResolutionWidth + 88), SUM(ResolutionWidth + 89) FROM hits;
SELECT SearchEngineID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits WHERE SearchPhrase <> '' GROUP BY SearchEngineID, ClientIP ORDER BY c DESC LIMIT 10;
SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits WHERE SearchPhrase <> '' GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10;
SELECT WatchID, ClientIP, COUNT(*) AS c, SUM(IsRefresh), AVG(ResolutionWidth) FROM hits GROUP BY WatchID, ClientIP ORDER BY c DESC LIMIT 10;
SELECT URL, COUNT(*) AS c FROM hits GROUP BY URL ORDER BY c DESC LIMIT 10;
SELECT 1, URL, COUNT(*) AS c FROM hits GROUP BY 1, URL ORDER BY c DESC LIMIT 10;
SELECT ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3, COUNT(*) AS c FROM hits GROUP BY ClientIP, ClientIP - 1, ClientIP - 2, ClientIP - 3 ORDER BY c DESC LIMIT 10;
SELECT URL, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND IsRefresh = 0 AND URL <> '' GROUP BY URL ORDER BY PageViews DESC LIMIT 10;
SELECT Title, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND DontCountHits = 0 AND IsRefresh = 0 AND Title <> '' GROUP BY Title ORDER BY PageViews DESC LIMIT 10;
SELECT URL, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 AND IsLink <> 0 AND IsDownload = 0 GROUP BY URL ORDER BY PageViews DESC LIMIT 10 OFFSET 1000;
SELECT TraficSourceID, SearchEngineID, AdvEngineID, CASE WHEN (SearchEngineID = 0 AND AdvEngineID = 0) THEN Referer ELSE '' END AS Src, URL AS Dst, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 GROUP BY TraficSourceID, SearchEngineID, AdvEngineID, Src, Dst ORDER BY PageViews DESC LIMIT 10 OFFSET 1000;
SELECT URLHash, EventDate, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 AND TraficSourceID IN (-1, 6) AND RefererHash = 3594120000172545465 GROUP BY URLHash, EventDate ORDER BY PageViews DESC LIMIT 10 OFFSET 100;
SELECT WindowClientWidth, WindowClientHeight, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-01' AND EventDate <= '2013-07-31' AND IsRefresh = 0 AND DontCountHits = 0 AND URLHash = 2868770270353813622 GROUP BY WindowClientWidth, WindowClientHeight ORDER BY PageViews DESC LIMIT 10 OFFSET 10000;
SELECT DATE_TRUNC('minute', toDateTime(EventTime)) AS M, COUNT(*) AS PageViews FROM hits WHERE CounterID = 62 AND EventDate >= '2013-07-14' AND EventDate <= '2013-07-15' AND IsRefresh = 0 AND DontCountHits = 0 GROUP BY DATE_TRUNC('minute', toDateTime(EventTime)) ORDER BY DATE_TRUNC('minute', toDateTime(EventTime)) LIMIT 10 OFFSET 1000;
20 changes: 20 additions & 0 deletions duckdb-vortex-tuned/query
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash
# Reads a SQL query from stdin, runs it via duckdb against hits.db (a VIEW
# over hits.vortex). The vortex extension is loaded for each invocation.
# Stdout: query result. Stderr: runtime in fractional seconds on the last
# line. Exit non-zero on error.
set -e

query=$(cat)

out=$(duckdb hits.db -c "LOAD vortex;" -c ".timer on" -c "$query" 2>/tmp/duckdb.err.$$) && status=0 || status=$?

if [ "$status" -ne 0 ]; then
cat /tmp/duckdb.err.$$ >&2
rm -f /tmp/duckdb.err.$$
exit "$status"
fi
rm -f /tmp/duckdb.err.$$

printf '%s\n' "$out" | grep -v '^Run Time '
printf '%s\n' "$out" | awk '/^Run Time/ { print $5 }' | tail -n1 >&2
60 changes: 60 additions & 0 deletions duckdb-vortex-tuned/results/20260926/c6a.2xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"system": "DuckDB (Vortex, single, load threads=2)",
"date": "2026-09-26",
"machine": "c6a.2xlarge",
"cluster_size": 1,
"proprietary": "no",
"hardware": "cpu",
"tuned": "yes",
"tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"],
"load_time": 1105,
"data_size": 12262081588,
"concurrent_qps": null,
"concurrent_error_ratio": null,
"result": [
[0.039, 0.016, 0.016],
[0.076, 0.044, 0.044],
[0.255, 0.082, 0.083],
[0.55, 0.164, 0.164],
[0.897, 0.575, 0.579],
[0.916, 0.653, 0.652],
[0.09, 0.058, 0.058],
[0.101, 0.047, 0.048],
[1.214, 0.765, 0.758],
[1.424, 0.943, 0.95],
[0.667, 0.257, 0.252],
[0.703, 0.285, 0.29],
[0.982, 0.701, 0.699],
[2.647, 1.248, 1.263],
[1.151, 0.823, 0.817],
[1.014, 0.665, 0.664],
[2.578, 1.56, 1.563],
[2.264, 1.242, 1.241],
[4.274, 2.805, 2.822],
[0.356, 0.097, 0.097],
[10.252, 1.049, 1.038],
[13.288, 2.055, 2.016],
[16.853, 3.176, 3.145],
[1.722, 0.257, 0.263],
[0.324, 0.075, 0.069],
[0.767, 0.346, 0.353],
[0.244, 0.098, 0.103],
[11.558, 1.164, 1.199],
[11.278, 10.008, 9.981],
[0.254, 0.079, 0.079],
[2.213, 0.581, 0.587],
[5.296, 0.774, 0.778],
[5.447, 3.119, 3.191],
[12.271, 7.895, 7.561],
[12.34, 10.156, 9.95],
[1.222, 0.797, 0.799],
[0.313, 0.21, 0.212],
[0.176, 0.121, 0.121],
[0.28, 0.189, 0.189],
[0.527, 0.419, 0.406],
[0.142, 0.07, 0.063],
[0.146, 0.06, 0.06],
[0.126, 0.065, 0.06]
]
}

60 changes: 60 additions & 0 deletions duckdb-vortex-tuned/results/20260926/c6a.4xlarge.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"system": "DuckDB (Vortex, single, load threads=2)",
"date": "2026-09-26",
"machine": "c6a.4xlarge",
"cluster_size": 1,
"proprietary": "no",
"hardware": "cpu",
"tuned": "yes",
"tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"],
"load_time": 762,
"data_size": 12262081588,
"concurrent_qps": null,
"concurrent_error_ratio": null,
"result": [
[0.039, 0.016, 0.016],
[0.068, 0.032, 0.031],
[0.269, 0.058, 0.058],
[0.493, 0.107, 0.109],
[0.887, 0.387, 0.385],
[0.832, 0.424, 0.464],
[0.076, 0.04, 0.039],
[0.094, 0.036, 0.036],
[0.985, 0.51, 0.497],
[1.266, 0.618, 0.607],
[0.533, 0.167, 0.17],
[0.695, 0.193, 0.185],
[0.893, 0.502, 0.502],
[2.506, 0.937, 0.936],
[0.98, 0.584, 0.576],
[0.708, 0.453, 0.448],
[2.413, 1.086, 1.09],
[2.186, 0.837, 0.855],
[3.953, 1.912, 1.885],
[0.58, 0.072, 0.069],
[10.063, 0.771, 0.771],
[13.17, 1.339, 1.304],
[16.65, 2.156, 2.114],
[1.747, 0.208, 0.214],
[0.231, 0.068, 0.062],
[0.725, 0.215, 0.213],
[0.224, 0.081, 0.088],
[11.492, 0.836, 0.883],
[10.075, 5.409, 5.384],
[0.27, 0.062, 0.061],
[2.131, 0.397, 0.399],
[5.216, 0.562, 0.571],
[4.695, 2.074, 2.107],
[11.988, 2.53, 2.515],
[12.057, 2.769, 2.759],
[0.878, 0.493, 0.495],
[0.29, 0.176, 0.202],
[0.169, 0.119, 0.118],
[0.277, 0.161, 0.189],
[0.526, 0.352, 0.35],
[0.141, 0.073, 0.064],
[0.116, 0.055, 0.056],
[0.111, 0.06, 0.046]
]
}

60 changes: 60 additions & 0 deletions duckdb-vortex-tuned/results/20260926/c6a.metal.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"system": "DuckDB (Vortex, single, load threads=2)",
"date": "2026-09-26",
"machine": "c6a.metal",
"cluster_size": 1,
"proprietary": "no",
"hardware": "cpu",
"tuned": "yes",
"tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"],
"load_time": 829,
"data_size": 12262081588,
"concurrent_qps": null,
"concurrent_error_ratio": null,
"result": [
[0.034, 0.017, 0.017],
[0.069, 0.049, 0.047],
[0.137, 0.058, 0.072],
[0.365, 0.163, 0.161],
[0.538, 0.413, 0.4],
[0.52, 0.436, 0.469],
[0.073, 0.04, 0.043],
[0.088, 0.041, 0.041],
[0.754, 0.344, 0.322],
[1.014, 0.316, 0.413],
[0.514, 0.328, 0.363],
[0.466, 0.316, 0.331],
[0.588, 0.428, 0.509],
[1.878, 0.593, 0.607],
[0.679, 0.373, 0.531],
[0.457, 0.374, 0.433],
[1.845, 0.714, 0.695],
[1.856, 0.65, 0.757],
[2.972, 1.065, 1.016],
[0.268, 0.131, 0.152],
[9.094, 1.229, 1.253],
[13.123, 1.292, 2.322],
[16.76, 2.454, 2.707],
[2.302, 0.631, 0.614],
[0.425, 0.176, 0.149],
[0.486, 0.337, 0.325],
[0.238, 0.174, 0.164],
[11.086, 2.455, 2.134],
[9.237, 2.878, 2.43],
[0.199, 0.108, 0.109],
[1.79, 0.393, 0.313],
[4.833, 0.482, 0.72],
[3.683, 0.898, 0.792],
[11.289, 2.886, 2.79],
[11.337, 2.836, 3.002],
[0.293, 0.246, 0.217],
[0.674, 0.662, 0.677],
[0.444, 0.413, 0.454],
[0.658, 0.655, 0.685],
[1.203, 1.227, 1.258],
[0.242, 0.164, 0.175],
[0.193, 0.137, 0.135],
[0.117, 0.093, 0.071]
]
}

60 changes: 60 additions & 0 deletions duckdb-vortex-tuned/results/20260926/c7a.metal-48xl.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"system": "DuckDB (Vortex, single, load threads=2)",
"date": "2026-09-26",
"machine": "c7a.metal-48xl",
"cluster_size": 1,
"proprietary": "no",
"hardware": "cpu",
"tuned": "yes",
"tags": ["Rust","column-oriented","DuckDB derivative","embedded","stateless"],
"load_time": 737,
"data_size": 12262081588,
"concurrent_qps": null,
"concurrent_error_ratio": null,
"result": [
[0.031, 0.016, 0.018],
[0.067, 0.044, 0.046],
[0.116, 0.053, 0.055],
[0.391, 0.156, 0.161],
[0.62, 0.314, 0.323],
[0.528, 0.421, 0.419],
[0.064, 0.039, 0.042],
[0.08, 0.043, 0.042],
[0.738, 0.279, 0.289],
[0.997, 0.298, 0.292],
[0.426, 0.25, 0.259],
[0.483, 0.247, 0.238],
[0.521, 0.284, 0.361],
[1.861, 0.406, 0.451],
[0.682, 0.368, 0.37],
[0.411, 0.347, 0.3],
[1.864, 0.618, 0.598],
[1.868, 0.639, 0.617],
[2.957, 0.871, 0.545],
[0.17, 0.123, 0.144],
[8.932, 1.121, 1.28],
[13.259, 2.386, 1.341],
[16.847, 2.639, 2.331],
[1.986, 0.634, 0.628],
[0.186, 0.141, 0.137],
[0.485, 0.308, 0.251],
[0.19, 0.151, 0.157],
[11.095, 2.044, 1.003],
[9.12, 2.75, 2.786],
[0.173, 0.103, 0.108],
[1.825, 0.326, 0.374],
[4.795, 0.672, 0.565],
[3.749, 0.657, 0.781],
[11.077, 2.403, 1.363],
[11.404, 1.723, 1.411],
[0.234, 0.199, 0.197],
[0.656, 0.678, 0.65],
[0.426, 0.41, 0.388],
[0.686, 0.614, 0.652],
[1.336, 1.291, 1.29],
[0.211, 0.161, 0.167],
[0.175, 0.13, 0.132],
[0.119, 0.07, 0.075]
]
}

Loading
Loading