pyblastradius 0.4.2__tar.gz → 0.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/CHANGELOG.md +8 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/Cargo.lock +3 -3
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/Cargo.toml +1 -1
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/PKG-INFO +3 -3
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/README.md +2 -2
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/pyproject.toml +1 -1
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/__init__.py +1 -1
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/dependabot.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/pull_request_template.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/workflows/ci.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/workflows/example-blast-radius.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.github/workflows/publish.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.gitignore +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/.graphifyignore +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/CODE_OF_CONDUCT.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/CONTRIBUTING.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/LICENSE +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/ROADMAP_HONEST.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/SECURITY.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/action.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/benches/large_graph.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/ARCHITECTURE.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/BUILD_PLAN.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/GAP_ANALYSIS.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/GETTING_STARTED.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/IMPLEMENTATION_CLI.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/IMPLEMENTATION_PYTHON_API.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/INPUT_DESIGN.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/MARKET_RESEARCH.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/PHASE_0_2_COMPLETION.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/PHASE_3_4_COMPLETION.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/PHASE_4_REFOCUS.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/PRODUCT_VISION.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/QUICK_START.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/README.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/archive/RESEARCH_SUMMARY.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/examples/blastradius-complete.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/examples/blastradius-kubernetes.yml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/examples/python_advanced.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/examples/python_quickstart.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/docs/examples/rest_api_client.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/examples/business-impact/saas-impact.yaml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/examples/cli.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/examples/kubernetes/microservices.yaml +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/examples/terraform/infrastructure.tf +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/analysis.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/cli.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/config.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/discovery.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/integrations.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/python/pyblastradius/server.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/analysis/anomaly_detection.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/analysis/blast_radius.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/analysis/criticality.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/analysis/hidden_dependencies.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/analysis/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/analysis/simulator.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/api/graphql.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/api/integrations.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/api/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/discovery/airflow.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/discovery/kubernetes.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/discovery/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/discovery/otlp.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/discovery/terraform.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/error.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/graph/edge.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/graph/graph.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/graph/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/graph/node.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/graph/serialization.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/graph/traversal.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/integrations/data_quality.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/integrations/dbt_integration.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/integrations/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/integrations/otel_integration.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/integrations/statguardian_integration.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/lib.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/models/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/python.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/src/utils/mod.rs +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tests/conftest.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tests/test_analysis.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tests/test_cli.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tests/test_core_bindings.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tests/test_discovery_bindings.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tests/test_server.py +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tools/graphify/README.md +0 -0
- {pyblastradius-0.4.2 → pyblastradius-0.4.3}/tools/graphify/graphify_adapter.py +0 -0
|
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.4.3] - 2026-10-18
|
|
9
|
+
|
|
10
|
+
### Security
|
|
11
|
+
- Upgrade `rustls` to `0.23.46`, resolving `RUSTSEC-2026-0346`, `0347`, `0348`, and `0349` (RECHECK-031).
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- Update `README.md` discovery table to reflect the real Rust-backed `AirflowDiscoverer` implementation (RECHECK-008).
|
|
15
|
+
|
|
8
16
|
## [0.4.2] - 2026-10-17
|
|
9
17
|
|
|
10
18
|
### Fixed
|
|
@@ -1828,7 +1828,7 @@ dependencies = [
|
|
|
1828
1828
|
|
|
1829
1829
|
[[package]]
|
|
1830
1830
|
name = "pyblastradius"
|
|
1831
|
-
version = "0.4.
|
|
1831
|
+
version = "0.4.3"
|
|
1832
1832
|
dependencies = [
|
|
1833
1833
|
"anyhow",
|
|
1834
1834
|
"backtrace",
|
|
@@ -2153,9 +2153,9 @@ dependencies = [
|
|
|
2153
2153
|
|
|
2154
2154
|
[[package]]
|
|
2155
2155
|
name = "rustls"
|
|
2156
|
-
version = "0.23.
|
|
2156
|
+
version = "0.23.46"
|
|
2157
2157
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2158
|
-
checksum = "
|
|
2158
|
+
checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
|
|
2159
2159
|
dependencies = [
|
|
2160
2160
|
"once_cell",
|
|
2161
2161
|
"rustls-pki-types",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyblastradius
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.3
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -99,10 +99,10 @@ Working today, backed by the real Rust engine (`pyblastradius._core`):
|
|
|
99
99
|
- **Terraform discovery** — `TerraformDiscoverer` (used by `pyblastradius scan terraform://path=...`, `type: terraform` in `blastradius.yml`, and directly as `pyblastradius.TerraformDiscoverer`) parses real `.tf` files via `hcl-rs`, discovers any `resource "type" "name" { ... }` block (not limited to a handful of hardcoded AWS types), and derives real dependency edges from actual resource references found in each resource's own attribute values (`aws_db_instance.x.endpoint` bare traversals, and `"${aws_db_instance.x.endpoint}"` interpolated strings) — not a hardcoded example dependency list. Benchmarked in `benches/large_graph.rs` on graphs up to 1,000 nodes.
|
|
100
100
|
- **Kubernetes discovery** — `KubernetesDiscoverer` (used by `pyblastradius scan kubernetes://manifests_dir=...`, `type: kubernetes` in `blastradius.yml`, and directly as `pyblastradius.KubernetesDiscoverer`) parses real Service/Deployment/StatefulSet/DaemonSet YAML manifests (`---`-separated multi-document files supported) and infers edges from container env var values that reference other discovered workload names. `kubeconfig`/`context` are accepted for interface compatibility but have no effect — there is no live-cluster API client, only local manifest parsing; `namespaces` is likewise accepted but not yet used to filter.
|
|
101
101
|
- **OTLP trace discovery** — `OtelDiscoverer` (used by `pyblastradius scan otlp://endpoint=...`, `type: otlp` in `blastradius.yml`, and directly as `pyblastradius.OtelDiscoverer`) runs a real OTLP/gRPC trace *receiver* (the standard `TraceService.Export` RPC) bound to `endpoint`, collects whatever spans instrumented services actually push to it during the collection window, and builds edges from real cross-service parent/child span pairs with observed latency and error status. **This is a receiver you bind, not a client that connects to an existing collector** — `endpoint` must be a literal `ip:port` listen address (e.g. `"0.0.0.0:4317"`), and your services need to be configured to export to it.
|
|
102
|
+
- **Airflow DAG discovery** — `AirflowDiscoverer` (used by `pyblastradius scan airflow://dag_folder=...`, `type: airflow` in `blastradius.yml`, and directly as `pyblastradius.AirflowDiscoverer`) parses Python DAG files on disk (`src/discovery/airflow.rs`) to extract DAGs, tasks, `>>`/`<<`/`set_downstream`/`set_upstream`/`chain(...)` dependencies, and external system references (`conn_id`/SQL tables).
|
|
102
103
|
|
|
103
104
|
Not yet implemented (present as scaffolding/placeholders, listed here so you don't spend time debugging them):
|
|
104
105
|
|
|
105
|
-
- **Airflow discovery** — `AirflowDiscoverer` (used by `pyblastradius scan`) currently always returns an empty graph. There is no DAG parsing or Airflow API connection behind it yet. (Terraform/Kubernetes/OTLP discovery are real — see Features above.)
|
|
106
106
|
- **Hidden Dependency Detection / Anomaly Detection** — `HiddenDependencyDetector` and `AnomalyDetector` always return empty results; they are not wired to any metrics/trace source.
|
|
107
107
|
- **`pyblastradius.integrations`** — `OtelCollectorClient` and `StatGuardianClient` are placeholders that return empty/fake data; `DbtManifestParser` genuinely parses a dbt `manifest.json` you already have on disk and is real.
|
|
108
108
|
- **GraphQL API** — not exposed anywhere; the Rust crate has a query-string builder (`src/api/graphql.rs`) that nothing serves or executes.
|
|
@@ -310,7 +310,7 @@ Discovery source integration status (i.e. what `pyblastradius scan` /
|
|
|
310
310
|
|-----------------|--------|----------|
|
|
311
311
|
| Kubernetes | **Real** | `discover()` parses real Service/Deployment/StatefulSet/DaemonSet YAML manifests and infers edges from container env var references (see Features above); `kubeconfig`/`context`/live-cluster API access are not implemented |
|
|
312
312
|
| Terraform | **Real** | `discover()` parses actual `.tf` files via `hcl-rs` and derives real dependency edges from resource references (see Features above) |
|
|
313
|
-
| Airflow |
|
|
313
|
+
| Airflow | **Real** | `discover()` parses Python DAG files under `dag_folder` and extracts task dependency graphs and external `conn_id`/SQL references (local source analysis; no Airflow REST API client) |
|
|
314
314
|
| OpenTelemetry | **Real** | `discover()` runs a real OTLP/gRPC trace receiver and derives edges from actually-observed cross-service span pairs (see Features above) — it's a receiver you bind, not a client connecting to an existing collector |
|
|
315
315
|
| dbt | Partial | `DbtManifestParser` genuinely parses a local `manifest.json` for column lineage |
|
|
316
316
|
| StatGuardian | Not implemented | `StatGuardianClient` returns empty/hardcoded fake data |
|
|
@@ -46,10 +46,10 @@ Working today, backed by the real Rust engine (`pyblastradius._core`):
|
|
|
46
46
|
- **Terraform discovery** — `TerraformDiscoverer` (used by `pyblastradius scan terraform://path=...`, `type: terraform` in `blastradius.yml`, and directly as `pyblastradius.TerraformDiscoverer`) parses real `.tf` files via `hcl-rs`, discovers any `resource "type" "name" { ... }` block (not limited to a handful of hardcoded AWS types), and derives real dependency edges from actual resource references found in each resource's own attribute values (`aws_db_instance.x.endpoint` bare traversals, and `"${aws_db_instance.x.endpoint}"` interpolated strings) — not a hardcoded example dependency list. Benchmarked in `benches/large_graph.rs` on graphs up to 1,000 nodes.
|
|
47
47
|
- **Kubernetes discovery** — `KubernetesDiscoverer` (used by `pyblastradius scan kubernetes://manifests_dir=...`, `type: kubernetes` in `blastradius.yml`, and directly as `pyblastradius.KubernetesDiscoverer`) parses real Service/Deployment/StatefulSet/DaemonSet YAML manifests (`---`-separated multi-document files supported) and infers edges from container env var values that reference other discovered workload names. `kubeconfig`/`context` are accepted for interface compatibility but have no effect — there is no live-cluster API client, only local manifest parsing; `namespaces` is likewise accepted but not yet used to filter.
|
|
48
48
|
- **OTLP trace discovery** — `OtelDiscoverer` (used by `pyblastradius scan otlp://endpoint=...`, `type: otlp` in `blastradius.yml`, and directly as `pyblastradius.OtelDiscoverer`) runs a real OTLP/gRPC trace *receiver* (the standard `TraceService.Export` RPC) bound to `endpoint`, collects whatever spans instrumented services actually push to it during the collection window, and builds edges from real cross-service parent/child span pairs with observed latency and error status. **This is a receiver you bind, not a client that connects to an existing collector** — `endpoint` must be a literal `ip:port` listen address (e.g. `"0.0.0.0:4317"`), and your services need to be configured to export to it.
|
|
49
|
+
- **Airflow DAG discovery** — `AirflowDiscoverer` (used by `pyblastradius scan airflow://dag_folder=...`, `type: airflow` in `blastradius.yml`, and directly as `pyblastradius.AirflowDiscoverer`) parses Python DAG files on disk (`src/discovery/airflow.rs`) to extract DAGs, tasks, `>>`/`<<`/`set_downstream`/`set_upstream`/`chain(...)` dependencies, and external system references (`conn_id`/SQL tables).
|
|
49
50
|
|
|
50
51
|
Not yet implemented (present as scaffolding/placeholders, listed here so you don't spend time debugging them):
|
|
51
52
|
|
|
52
|
-
- **Airflow discovery** — `AirflowDiscoverer` (used by `pyblastradius scan`) currently always returns an empty graph. There is no DAG parsing or Airflow API connection behind it yet. (Terraform/Kubernetes/OTLP discovery are real — see Features above.)
|
|
53
53
|
- **Hidden Dependency Detection / Anomaly Detection** — `HiddenDependencyDetector` and `AnomalyDetector` always return empty results; they are not wired to any metrics/trace source.
|
|
54
54
|
- **`pyblastradius.integrations`** — `OtelCollectorClient` and `StatGuardianClient` are placeholders that return empty/fake data; `DbtManifestParser` genuinely parses a dbt `manifest.json` you already have on disk and is real.
|
|
55
55
|
- **GraphQL API** — not exposed anywhere; the Rust crate has a query-string builder (`src/api/graphql.rs`) that nothing serves or executes.
|
|
@@ -257,7 +257,7 @@ Discovery source integration status (i.e. what `pyblastradius scan` /
|
|
|
257
257
|
|-----------------|--------|----------|
|
|
258
258
|
| Kubernetes | **Real** | `discover()` parses real Service/Deployment/StatefulSet/DaemonSet YAML manifests and infers edges from container env var references (see Features above); `kubeconfig`/`context`/live-cluster API access are not implemented |
|
|
259
259
|
| Terraform | **Real** | `discover()` parses actual `.tf` files via `hcl-rs` and derives real dependency edges from resource references (see Features above) |
|
|
260
|
-
| Airflow |
|
|
260
|
+
| Airflow | **Real** | `discover()` parses Python DAG files under `dag_folder` and extracts task dependency graphs and external `conn_id`/SQL references (local source analysis; no Airflow REST API client) |
|
|
261
261
|
| OpenTelemetry | **Real** | `discover()` runs a real OTLP/gRPC trace receiver and derives edges from actually-observed cross-service span pairs (see Features above) — it's a receiver you bind, not a client connecting to an existing collector |
|
|
262
262
|
| dbt | Partial | `DbtManifestParser` genuinely parses a local `manifest.json` for column lineage |
|
|
263
263
|
| StatGuardian | Not implemented | `StatGuardianClient` returns empty/hardcoded fake data |
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyblastradius"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.3"
|
|
8
8
|
description = "Operational Blast Radius Intelligence Platform - Predict cascading failures and quantify business impact"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|