Skip to content

Commit d7ca1a8

Browse files
authored
docs: Update references, guides (#3415)
* docs: update BigQuery getting started * docs: brief refresh of operations guides * docs: reorder get data sections * docs: update networks in project files * docs: update references * New technical architecture diagram * fix: link in getting started
1 parent a6a65ba commit d7ca1a8

File tree

17 files changed

+81
-81
lines changed

17 files changed

+81
-81
lines changed

apps/docs/docs/get-started/bigquery.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ sidebar_position: 3
66
import Link from "@docusaurus/Link";
77
import Button from "../../src/components/plasmic/Button";
88

9-
10-
OSO's data lake is currently located in BigQuery on Google Cloud (GCP).
11-
Every data model is made publicly available by a BigQuery dataset.
9+
OSO uses BigQuery as the means of sharing large datasets with the community.
10+
Unless you plan to setup your own data pipeline, we recommend that
11+
you either start with [pyoso](./python.md) or the [API](./api.mdx) to access OSO data.
1212

1313
This page will guide you through the process of subscribing to the OSO production dataset and making your first query.
1414

@@ -77,7 +77,7 @@ Create a linked dataset in your own GCP project.
7777
Open a new tab by clicking on the `+` icon
7878
on the top right of the console to `Create SQL Query`.
7979

80-
From here you will be able to write any SQL you'd like any OSO dataset.
80+
From here you will be able to write any SQL you'd like to any OSO dataset.
8181
For example, you can query the `oso_production` dataset for
8282
all available collections like this:
8383

apps/docs/docs/guides/ops/gcloud.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,11 @@ sidebar_position: 2
44
---
55

66
TODO: add guides on how to manage the Google Cloud services
7+
8+
## Kubernetes
9+
10+
## Dagster
11+
12+
## Iceberg / Nessie
13+
14+
## Trino

apps/docs/docs/guides/ops/hasura.md

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,12 @@ title: Hasura
33
sidebar_position: 3
44
---
55

6-
## Setup
7-
8-
When setting up Hasura, the main things that need to be configured are the environment variables.
9-
For a complete list of environment variables, see the
10-
[Hasura reference](https://hasura.io/docs/latest/deployment/graphql-engine-flags/reference/).
11-
12-
- Env vars:
13-
- `HASURA_GRAPHQL_ADMIN_SECRET`: choose a random password
14-
- `HASURA_GRAPHQL_CORS_DOMAIN`: "\*"
15-
- `HASURA_GRAPHQL_UNAUTHORIZED_ROLE`: "anonymous"
16-
- `HASURA_GRAPHQL_DATABASE_URL`: enter the connection string for the Postgres database
17-
- `HASURA_GRAPHQL_AUTH_HOOK`: "https://www.opensource.observer/api/auth"
18-
- Domains: follow the prompt to enable a custom domain at `api.opensource.observer`.
6+
We currently use Hasura v3 (DDN) for serving the GraphQL API.
7+
Hasura will auto-generate the GraphQL schema by introspecting
8+
the consumer Trino cluster.
199

2010
## Metadata
2111

2212
Any configurations outside of environment variables should be set via metadata in the OSO repository.
2313
For more info on how to do this, check out the
24-
[README](https://github.com/opensource-observer/oso/tree/main/hasura) under `./apps/hasura`.
14+
[README](https://github.com/opensource-observer/oso/tree/main/apps/hasura-trino) under `./apps/hasura-trino`.

apps/docs/docs/guides/ops/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ The OSO architecture runs on the following platforms:
1010
- Vercel: used to build and host the [frontend](https://www.opensource.observer)
1111
- Cloudflare Pages: used to host the [documentation](https://docs.opensource.observer)
1212
- [GitHub Actions](https://github.com/opensource-observer/oso/actions): used for CI/CD
13-
- [Google Cloud](./gcloud)
14-
- [Hasura](./hasura) - GraphQL API service
15-
- [Supabase](./supabase) - user authentication and user database
13+
- [Google Cloud](./gcloud): self-managed k8s for Trino, Iceberg and Dagster
14+
- [Hasura](./hasura): GraphQL API service
15+
- [Supabase](./supabase): user authentication and user database

apps/docs/docs/guides/ops/service.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,23 @@ that the community aims to achieve together.
1212

1313
## Service Status
1414

15+
You can find our status page here:
16+
17+
[https://www.opensource.observer/status](https://www.opensource.observer/status)
18+
1519
## Service Definition
1620

1721
OSO is constantly experimenting with new technology and services
1822
to improve our infrastructure.
1923
We only aim to provide service availability for the following mature services:
2024

21-
- [Dagster](https://data.opensource.observer)
22-
- [dbt pipeline](https://dbt.opensource.observer)
23-
- [API](https://api.opensource.observer)
25+
- [Dagster](https://dagster.opensource.observer)
26+
- [sqlmesh pipeline](https://dagster.opensource.observer/assets/sqlmesh?view=folder)
27+
- [API](https://www.opensource.observer/graphql)
2428
- [Frontend](https://www.opensource.observer)
2529
- [Documentation](https://docs.opensource.observer)
2630

27-
_Note: the sqlmesh pipeline is currently in development and not yet reliable for production use_
28-
2931
## Outage Escalation
3032

31-
There are 2 surfaces
33+
The best way to get in touch with the team is via
34+
[Discord](https://www.opensource.observer/discord).

apps/docs/docs/guides/ops/supabase.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,31 @@ title: Supabase
33
sidebar_position: 4
44
---
55

6+
Supabase is the main OLTP database that we use
7+
for user operations on the website.
8+
69
## Setup
710

811
- Database >> Extensions
912
- Enable the "plpgsql", "plv8" and "pgjwt" extensions
1013
- Authentication >> Providers
11-
- Turn on the Google provider
14+
- Turn on the Google and GitHub provider
1215
- Authentication >> URL Configuration
1316
- Add allowed redirect URIs
1417
- `https://www.opensource.observer/**`
1518
- `http://localhost:3000/**`
19+
- Authentication >> Hooks
20+
- Enable the "hasura_token_hook" hook under the "public" schema
1621
- Settings >> Authentication
1722
- Turn on "Allow new users to sign up"
1823

1924
Run the Supabase migrations to create the tables and functions required for the OSO project.
2025

2126
```bash
22-
cd frontend/
27+
cd apps/frontend/
2328
pnpm supabase db push
2429
```
2530

26-
- Authentication >> Hooks
27-
- Enable the "hasura_token_hook" hook under the "public" schema
28-
2931
## Migrations
3032

3133
For updating the database schema or functions, make sure to put it in a migration.

apps/docs/docs/integrate/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ sidebar_position: 0
55

66
Open Source Observer is an open data pipeline for measuring the impact of open source efforts. Explore the following resources:
77

8-
- 📊 [Subscribe to Public Datasets](./datasets/index.mdx) - Get access to any of the public datasets that OSO maintains or builds on top of
98
- 🔍 [Explore the Data Lake](./query-data.mdx) - Query the OSO data lake using `pyoso`
109
-[Use the GraphQL API](./api.md) - Integrate OSO registries and metrics into a live production application
1110
- 📂 [Import or Clone OSS-Directory](./oss-directory.md) - Leverage oss-directory data separate from OSO
11+
- 📊 [Subscribe to Public Datasets](./datasets/index.mdx) - Get access to any of the public datasets that OSO maintains or builds on top of
1212

1313
See the [Tutorials](../tutorials/index.md) for more examples and the [Guides](../guides/index.mdx) for more detailed guides for integrating with specific tools.

apps/docs/docs/projects/index.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,22 +138,22 @@ For the latest fields, see the [project schema](https://github.com/opensource-ob
138138
The simplest way to add all contracts and factories associated with your project is to just add the deployer address in the project file. We will then automatically index all contracts and factories associated with the deployer address. If the deployer is on multiple EVM networks, you can use the `any_evm` tag instead of listing each network individually.
139139
:::
140140

141-
OSO currently supports the following blockchain networks, which can be enumerated in the `networks` field of a blockchain address:
141+
If you prefer to enumerate addresses, you should specify the `networks` and `tags`
142+
for the address.
143+
Some common `networks` include:
142144

143145
- `any_evm`: Any Ethereum Virtual Machine (EVM) network. This is the recommended tag for EOAs that deploy contracts on multiple EVM networks.
144146
- `mainnet`: The Ethereum mainnet.
145147
- `arbitrum_one`: The Arbitrum L2 network.
146148
- `base`: The Base L2 network.
147-
- `frax`: The Frax L2 network.
148-
- `metal`: The Metal L2 network.
149-
- `mode`: The Mode L2 network.
150149
- `optimism`: The Optimism L2 network.
151-
- `zora`: The Zora L2 network.
150+
- `zksync_eta`: zkSync Era L2 network.
152151

153152
Note: We do not support testnets for any of these networks and do not intend to.
154153

155154
The following tags can be used to describe blockchain addresses:
156155

156+
- `bridge`: A bridge address
157157
- `deployer`: A deployer address.
158158
- `eoa`: An externally owned account (EOA) address.
159159
- `safe`: A multisig safe contract address.
@@ -164,7 +164,10 @@ In previous versions of the schema, we enumerated contracts and factories with t
164164
- `contract`: A smart contract address.
165165
- `factory`: A factory contract address.
166166

167-
Read below for more detailed steps on how to add or update project data or consult the [schema](../guides/oss-directory/) for more information.
167+
For a full list of supported networks and tags, check out the
168+
[schema on oss-directory](https://github.com/opensource-observer/oss-directory/blob/main/src/resources/schema/blockchain-address.json).
169+
170+
Read below for more detailed steps on how to add or update project data or consult the [guide](../guides/oss-directory/) for more information.
168171

169172
## Add or Update Project Data (Detailed Steps)
170173

apps/docs/docs/references/architecture.md

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ OSO maintains an [ETL](https://en.wikipedia.org/wiki/Extract%2C_load%2C_transfor
1818
- **Load**: the results into various OSO data products (e.g., our API, website, widgets)
1919

2020
The following diagram illustrates Open Source Observer's technical architecture.
21-
[![OSO Architecture](https://mermaid.ink/img/pako:eNqVVU1z2jAQ_SsancwktNMcOXSGhHbaTgikNOkB9yDLC1ZjS44-gDST_96VLXDAhja-gFfvzdt9u149U65SoAPa7_djaYXNYUBiOilBkplymgOZJAb0CjQZap4JC9w6DTGNZUWJ5SJXa54xbcmPy1gSfIxLlpqVGSldkgs-j-mQW6UNiW6U7MMmY85YsYJeTH_VDP84lDGIvfO_eycprPzBiFlGPsmlkHCIYJLlT8buUDMuAKvByA4GMq3_VDqk38cy7wWsyXty60A_xRRjH4kyag1JjfS6NfAAwUpxiLhS0mqROAvEOxqwQqawAV2Dt0m2CLPb64DnqigxkjDLsy7SdyfJI-YiwATGmmnIFNZUww8agLnOu7tZ-dIY2LRMlJCjwx-QN2ZCksrPaYjume4fhTMBxmpmhZKe800l-0ESjdjSWNC9Fjm4s20aV3kOYVDS3Lbxu1rnUaDsIiS6FMuqS0jrHfBeuzoPzSSlVhyMqdUSezS7VrdSFO42v0uvpo8ZGiBYLv7AaWpTUMWb1kkenY7dYDev_yPuS0iY1z4xARdo1WeNdaPAW6bg4o1TsE3GN3VyPZxWWj5AoivcHg-VHR1dNY95Aaa7oeHsuFiXvYHUqfJvJ4-0o94W7S1ysgWLYPvrDvjPVnAwbfOrjYXQn5AQVpboWbD8HvCLz89uYGPf_Ta9Libm5tfz9CsJSz76wozT7GxY4teoekfUTm_FvXXbbKXmHx7Sc1qALphI8fJ59uGY2gwKNNZfQCnTD_6OeUEcc1bNniSnA6sdnFOt3DKjgwXLDb65Eq2EkWBoXbGFQCpwj4zrq6264V7-AjpFJyI?type=png)](https://mermaid.live/edit#pako:eNqVVU1z2jAQ_SsancwktNMcOXSGhHbaTgikNOkB9yDLC1ZjS44-gDST_96VLXDAhja-gFfvzdt9u149U65SoAPa7_djaYXNYUBiOilBkplymgOZJAb0CjQZap4JC9w6DTGNZUWJ5SJXa54xbcmPy1gSfIxLlpqVGSldkgs-j-mQW6UNiW6U7MMmY85YsYJeTH_VDP84lDGIvfO_eycprPzBiFlGPsmlkHCIYJLlT8buUDMuAKvByA4GMq3_VDqk38cy7wWsyXty60A_xRRjH4kyag1JjfS6NfAAwUpxiLhS0mqROAvEOxqwQqawAV2Dt0m2CLPb64DnqigxkjDLsy7SdyfJI-YiwATGmmnIFNZUww8agLnOu7tZ-dIY2LRMlJCjwx-QN2ZCksrPaYjume4fhTMBxmpmhZKe800l-0ESjdjSWNC9Fjm4s20aV3kOYVDS3Lbxu1rnUaDsIiS6FMuqS0jrHfBeuzoPzSSlVhyMqdUSezS7VrdSFO42v0uvpo8ZGiBYLv7AaWpTUMWb1kkenY7dYDev_yPuS0iY1z4xARdo1WeNdaPAW6bg4o1TsE3GN3VyPZxWWj5AoivcHg-VHR1dNY95Aaa7oeHsuFiXvYHUqfJvJ4-0o94W7S1ysgWLYPvrDvjPVnAwbfOrjYXQn5AQVpboWbD8HvCLz89uYGPf_Ta9Libm5tfz9CsJSz76wozT7GxY4teoekfUTm_FvXXbbKXmHx7Sc1qALphI8fJ59uGY2gwKNNZfQCnTD_6OeUEcc1bNniSnA6sdnFOt3DKjgwXLDb65Eq2EkWBoXbGFQCpwj4zrq6264V7-AjpFJyI)
21+
[![](https://mermaid.ink/img/pako:eNqFVU1P3DAQ_SuWT1nBtlKPe6gERVWpykcLpVJJD44zJC6OHcY2C0X8947jLNlsdiGXJPa88Zv3MpMnLm0JfMHn83luvPIaFiznZy0YdmEDSmBnhQO8B2QHKGvlQfqAkPPcdJDc3Gi7lLVAzy4Pc8PocqGoULQ1a0OhlbzO-YH0Fh3LTq2Zw0MtgvPqHmY5_5MQ8Qp0jKPYn_E-2inhPm4cCS-YkwqIp_OOvWdgKmVgPRxMmR66bGw-p2KuFCwp-HsAfMw5rX1k1tklFCkyZk-Bn6zxqIrggUVV-lhlSngAfCW4oWDtVqlJJXAehVfWbIJ-BMPuiIcCNzARrUpxG-rR1vV2K7pyB30GvVULmhQh2IlQhnWKnfeLI0njNWJKkK-2GK-x7EhUzgPuuTvdgKtnkxy9OCt3pNUaeq9L7afxhapi_Y_XWY9YCoTaklssO1RV5xGhZhswaZuWlC6ElzWddSjkLTm9WmZSh0iTZZeojJ1tyDOpNXlB5a5MWE-_tb6J5SVx78Fa3KYKdlNO8BNBHJXQ6h-8Dl2JlGDnaCW4t6m-JHsbtgMYTfn2kiU7llAAVlvtMC40gD7KTX5c0FepTMUS69SVIzN2ghPX9dbcoknX1MNrapkpcpR4a3_cIDlI2Yjy5_6RxY5SEty0PboZQaG_oGCibWmS9V1xBdSMeu8UHvy7v262DUkE49g7P2b98My-CBdQ7B201CJ2tuO0aVHr82E04IaBMTzRJt_nJEEjVElD_Sku59zX0NAnFwd7KfA2zu5nihPB24tHI_nCY4B9jjZUNV_cCO3oLbT0jcOREiRd87LaCvPb2uEdSkXdfpL-Id2vZJ9XGA_vcxIlwE82GM8XH57_A664BIU?type=png)](https://mermaid.live/edit#pako:eNqFVU1P3DAQ_SuWT1nBtlKPe6gERVWpykcLpVJJD44zJC6OHcY2C0X8947jLNlsdiGXJPa88Zv3MpMnLm0JfMHn83luvPIaFiznZy0YdmEDSmBnhQO8B2QHKGvlQfqAkPPcdJDc3Gi7lLVAzy4Pc8PocqGoULQ1a0OhlbzO-YH0Fh3LTq2Zw0MtgvPqHmY5_5MQ8Qp0jKPYn_E-2inhPm4cCS-YkwqIp_OOvWdgKmVgPRxMmR66bGw-p2KuFCwp-HsAfMw5rX1k1tklFCkyZk-Bn6zxqIrggUVV-lhlSngAfCW4oWDtVqlJJXAehVfWbIJ-BMPuiIcCNzARrUpxG-rR1vV2K7pyB30GvVULmhQh2IlQhnWKnfeLI0njNWJKkK-2GK-x7EhUzgPuuTvdgKtnkxy9OCt3pNUaeq9L7afxhapi_Y_XWY9YCoTaklssO1RV5xGhZhswaZuWlC6ElzWddSjkLTm9WmZSh0iTZZeojJ1tyDOpNXlB5a5MWE-_tb6J5SVx78Fa3KYKdlNO8BNBHJXQ6h-8Dl2JlGDnaCW4t6m-JHsbtgMYTfn2kiU7llAAVlvtMC40gD7KTX5c0FepTMUS69SVIzN2ghPX9dbcoknX1MNrapkpcpR4a3_cIDlI2Yjy5_6RxY5SEty0PboZQaG_oGCibWmS9V1xBdSMeu8UHvy7v262DUkE49g7P2b98My-CBdQ7B201CJ2tuO0aVHr82E04IaBMTzRJt_nJEEjVElD_Sku59zX0NAnFwd7KfA2zu5nihPB24tHI_nCY4B9jjZUNV_cCO3oLbT0jcOREiRd87LaCvPb2uEdSkXdfpL-Id2vZJ9XGA_vcxIlwE82GM8XH57_A664BIU)
2222

2323
## Major Components
2424

@@ -27,48 +27,41 @@ The architecture has the following major components.
2727
### Data Orchestration
2828

2929
Dagster is the central data orchestration system, which manages the entire pipeline,
30-
from the data ingestion (e.g. via [dlt](https://docs.dagster.io/integrations/embedded-elt/dlt) connectors), the [dbt](https://docs.dagster.io/integrations/dbt) pipeline, the [sqlmesh](https://github.com/opensource-observer/dagster-sqlmesh) pipeline, to copying mart models to data serving infrastructure.
30+
from the data ingestion (e.g. via [dlt](https://docs.dagster.io/integrations/embedded-elt/dlt) connectors) to the [sqlmesh](https://github.com/opensource-observer/dagster-sqlmesh) pipeline.
3131

3232
You can see our public Dagster dashboard at
3333
[https://dagster.opensource.observer/](https://dagster.opensource.observer/).
3434

35-
### Data Warehouse
35+
### Data Lakehouse
3636

37-
Currently all data is stored and processed in
38-
[Google BigQuery](https://cloud.google.com/bigquery/?hl=en).
39-
All of the collected data or aggregated views used by OSO is also made publicly available here (if it is not already a public dataset on BigQuery).
40-
Anyone with can view, query, or build off of any stage in the pipeline.
41-
In the future we plan to explore a decentralized lakehouse.
37+
Currently all data is stored in managed Iceberg tables.
4238

43-
To see all datasets that you can subscribe to, check out our
39+
We also make heavy use of public datasets from
40+
[Google BigQuery](https://cloud.google.com/bigquery/?hl=en).
41+
To see all BigQuery datasets that you can subscribe to, check out our
4442
[Data Overview](../integrate/datasets/index.mdx).
4543

46-
### dbt pipeline
44+
### sqlmesh pipeline
4745

48-
We use a [dbt](https://www.getdbt.com/) pipeline to clean and normalize the data
49-
into a universal event table. You can read more about our event model
46+
We use a [sqlmesh](https://sqlmesh.com/) pipeline to clean and normalize the data
47+
into a universal event table and metrics. You can read more about our event model
5048
[here](./event.md).
5149

52-
### OLAP database
50+
### Trino clusters
5351

54-
We use [Clickhouse](https://clickhouse.com/)
55-
as a frontend database for serving live queries to the API server
56-
and frontend website, as well as running a sqlmesh data pipeline.
57-
58-
### sqlmesh pipeline
52+
We maintain separate Trino clusters the operate over the Iceberg tables:
5953

60-
A [sqlmesh](https://sqlmesh.com/) pipeline
61-
is used for computing time series metrics from
62-
the universal event table, which is copied from the BigQuery dbt pipeline.
54+
- Production pipeline cluster - a read-write cluster to run the sqlmesh pipeline
55+
- Consumer query cluster - a read-only cluster to serve the API and `pyoso`
6356

6457
### API service
6558

6659
We use [Hasura](https://hasura.io/) to automatically generate
67-
a GraphQL API from our Clickhouse database.
60+
a GraphQL API from our consumer Trino cluster.
6861
We then use an [Apollo Router](https://www.apollographql.com/docs/router/)
6962
to service user queries to the public.
70-
The API can be used by external developers to integrate insights from OSO.
71-
Rate limits or cost sharing subscriptions may apply to its usage depending
63+
The API can be used by external developers to integrate data from OSO.
64+
Rate limits or subscription pricing may apply to its usage depending
7265
on the systems used. This also powers the OSO website.
7366

7467
### OSO Website
@@ -81,15 +74,15 @@ hosted by [Vercel](https://vercel.com/).
8174

8275
## Open Architecture for Open Source Data
8376

84-
The architecture is designed to be fully open to maximum open source collaboration.
77+
The architecture is designed to be fully open to maximize open source collaboration.
8578
With contributions and guidance from the community,
8679
we want Open Source Observer to evolve as we better understand
8780
what impact looks like in different domains.
8881

8982
All code is open source in our
9083
[monorepo](https://github.com/opensource-observer/oso).
91-
All data, including every stage in our pipeline, is publicly available on
92-
[BigQuery](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/87806073973/locations/us/dataExchanges/open_source_observer_190181416ae).
84+
All data, including every stage in our pipeline, is publicly available via
85+
[pyoso](../get-started/python.md).
9386
All data orchestration is visible in our public
9487
[Dagster dashboard](https://dagster.opensource.observer/).
9588

apps/docs/docs/references/ecosystems/arbitrum.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ Arbitrum One is an EVM-equivalent Optimistic Rollup chain. It inherits Ethereum-
88

99
## Coverage on Open Source Observer
1010

11-
Open Source Observer is in the process of adding the first collection of open source projects that are building on Arbitrum One. Project data will include Arbitrum addresses associated with smart contracts, deployers, and grant wallets.
11+
Open Source Observer is in the process of adding open source projects that are building on Arbitrum One. Project data will include Arbitrum addresses associated with smart contracts, deployers, and grant wallets.
1212

13-
The main sources of project data come from [STIP](https://forum.arbitrum.foundation/t/arbitrums-short-term-incentive-program-arbitrum-improvement-proposal/16131), grant programs, and the Dune contracts library.
14-
15-
We will be releasing our first version of Arbitrum One coverage in the coming weeks.
13+
The main sources of project data come from
14+
[STIP](https://forum.arbitrum.foundation/t/arbitrums-short-term-incentive-program-arbitrum-improvement-proposal/16131),
15+
[Stylus sprint](https://blog.arbitrum.io/stylus-sprint/),
16+
other grant programs, and the Dune contracts library.
1617

1718
## Ecosystem Resources
1819

0 commit comments

Comments
 (0)