wxdata 2.0.1__tar.gz → 2.0.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.
- {wxdata-2.0.1/src/wxdata.egg-info → wxdata-2.0.3}/PKG-INFO +2 -2
- {wxdata-2.0.1 → wxdata-2.0.3}/README.md +1 -1
- {wxdata-2.0.1 → wxdata-2.0.3}/pyproject.toml +1 -1
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/client/byte_range.py +1 -29
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/rtma_post_processing.py +10 -7
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/progress_bar.py +1 -29
- {wxdata-2.0.1 → wxdata-2.0.3/src/wxdata.egg-info}/PKG-INFO +2 -2
- {wxdata-2.0.1 → wxdata-2.0.3}/LICENSE +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/setup.cfg +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigefs/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigefs/aigefs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigefs/paths.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigefs/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigfs/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigfs/aigfs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigfs/paths.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/aigfs/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/calc/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/calc/derived_fields.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/calc/kinematics.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/calc/thermodynamics.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/calc/unit_conversion.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/cfs/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/cfs/cfs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/cfs/file_scanner.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/cfs/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/client/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/client/client.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/client/level_coords.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/ecmwf.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/file_funcs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/keys.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/parsers.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/paths.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/ecmwf/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/fems/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/fems/meta_data.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/fems/observations.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gefs/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gefs/exception_messages.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gefs/file_funcs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gefs/gefs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gefs/paths.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gefs/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gfs/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gfs/exception_messages.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gfs/gfs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gfs/paths.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/gfs/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/hgefs/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/hgefs/hgefs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/hgefs/paths.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/hgefs/url_scanner.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/metars/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/metars/_clean_data.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/metars/metar_obs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/noaa/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/noaa/nws.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/aigefs_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/aigfs_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/cfs_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/ecmwf_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/gefs_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/gfs_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/post_processors/hgefs_post_processing.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/radar/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/radar/nexrad2.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/radar/url_scanner.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/rtma/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/rtma/file_funcs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/rtma/file_scanner.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/rtma/keys.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/rtma/rtma.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/rtma/url_scanners.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/soundings/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/soundings/_exceptions.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/soundings/wyoming_soundings.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/__init__.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/coords.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/exceptions.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/file_funcs.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/file_scanner.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/nomads_gribfilter.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/recycle_bin.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/scripts.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/tools.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata/utils/xmacis2_cleanup.py +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata.egg-info/SOURCES.txt +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata.egg-info/dependency_links.txt +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata.egg-info/requires.txt +0 -0
- {wxdata-2.0.1 → wxdata-2.0.3}/src/wxdata.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wxdata
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.3
|
|
4
4
|
Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data.
|
|
5
5
|
Author: Eric J. Drewitz
|
|
6
6
|
Project-URL: Documentation, https://github.com/edrewitz/wxdata/blob/main/Documentation/Landing%20Page.md
|
|
@@ -298,7 +298,7 @@ End-To-End clients with multiple servers to pull data from can find the differen
|
|
|
298
298
|
|
|
299
299
|
***Real-Time Mesoscale Analysis (RTMA)***
|
|
300
300
|
1. [RTMA](https://github.com/edrewitz/wxdata/blob/main/Documentation/rtma.md#real-time-mesoscale-analysis-rtma)
|
|
301
|
-
2. [RTMA Comparison](https://github.com/edrewitz/
|
|
301
|
+
2. [RTMA Comparison](https://github.com/edrewitz/WxData/blob/main/Documentation/rtma%20comparison.md#real-time-mesoscale-analysis-rtma-comparison)
|
|
302
302
|
|
|
303
303
|
***NOAA Storm Prediction Center Outlooks/Climate Prediction Center Outlooks/National Weather Service Forecasts***
|
|
304
304
|
1. [Get NDFD Grids](https://github.com/edrewitz/wxdata/blob/main/Documentation/noaa.md#noaa-get-storm-prediction-center-outlooks-and-national-weather-service-forecasts-ndfd-grids)
|
|
@@ -266,7 +266,7 @@ End-To-End clients with multiple servers to pull data from can find the differen
|
|
|
266
266
|
|
|
267
267
|
***Real-Time Mesoscale Analysis (RTMA)***
|
|
268
268
|
1. [RTMA](https://github.com/edrewitz/wxdata/blob/main/Documentation/rtma.md#real-time-mesoscale-analysis-rtma)
|
|
269
|
-
2. [RTMA Comparison](https://github.com/edrewitz/
|
|
269
|
+
2. [RTMA Comparison](https://github.com/edrewitz/WxData/blob/main/Documentation/rtma%20comparison.md#real-time-mesoscale-analysis-rtma-comparison)
|
|
270
270
|
|
|
271
271
|
***NOAA Storm Prediction Center Outlooks/Climate Prediction Center Outlooks/National Weather Service Forecasts***
|
|
272
272
|
1. [Get NDFD Grids](https://github.com/edrewitz/wxdata/blob/main/Documentation/noaa.md#noaa-get-storm-prediction-center-outlooks-and-national-weather-service-forecasts-ndfd-grids)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "wxdata"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.3"
|
|
4
4
|
description = "A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -6,35 +6,7 @@ This file hosts the function that fetches the byte-range for a variable.
|
|
|
6
6
|
|
|
7
7
|
import requests
|
|
8
8
|
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
def is_jupyter_notebook() -> bool:
|
|
12
|
-
"""
|
|
13
|
-
Checks if the code is running within a Jupyter Notebook environment.
|
|
14
|
-
|
|
15
|
-
Returns:
|
|
16
|
-
--------
|
|
17
|
-
bool
|
|
18
|
-
True if running in a Jupyter Notebook/Lab, False otherwise.
|
|
19
|
-
"""
|
|
20
|
-
# 1. Quick check for the ipykernel module in active memory
|
|
21
|
-
if 'ipykernel' not in sys.modules:
|
|
22
|
-
return False
|
|
23
|
-
|
|
24
|
-
# 2. Confirm by checking the active IPython shell type
|
|
25
|
-
try:
|
|
26
|
-
from IPython import get_ipython
|
|
27
|
-
shell = get_ipython().__class__.__name__
|
|
28
|
-
return shell == 'ZMQInteractiveShell'
|
|
29
|
-
except (ImportError, NameError):
|
|
30
|
-
return False # Probably standard Python interpreter
|
|
31
|
-
|
|
32
|
-
NOTEBOOK = is_jupyter_notebook()
|
|
33
|
-
|
|
34
|
-
if NOTEBOOK == False:
|
|
35
|
-
from tqdm.auto import tqdm
|
|
36
|
-
else:
|
|
37
|
-
from tqdm.notebook import tqdm
|
|
9
|
+
from tqdm.auto import tqdm
|
|
38
10
|
|
|
39
11
|
|
|
40
12
|
def fetch_range(url,
|
|
@@ -13,9 +13,9 @@ import warnings as _warnings
|
|
|
13
13
|
_warnings.filterwarnings('ignore')
|
|
14
14
|
|
|
15
15
|
from wxdata.utils.exceptions import eccodes_error_message as _eccodes_error_message
|
|
16
|
-
from wxdata.calc.thermodynamics import relative_humidity as _relative_humidity
|
|
17
16
|
from wxdata.utils.file_funcs import clear_idx_files_in_path as _clear_idx_files_in_path
|
|
18
17
|
from wxdata.utils.coords import shift_longitude as _shift_longitude_regrid
|
|
18
|
+
from metpy.units import units
|
|
19
19
|
|
|
20
20
|
_sys.tracebacklimit = 0
|
|
21
21
|
_logging.disable()
|
|
@@ -81,11 +81,11 @@ def _rows_and_cols(model):
|
|
|
81
81
|
|
|
82
82
|
return dims[model][0], dims[model][1]
|
|
83
83
|
|
|
84
|
+
|
|
84
85
|
def process_rtma_data(
|
|
85
86
|
path,
|
|
86
87
|
filename,
|
|
87
|
-
model
|
|
88
|
-
):
|
|
88
|
+
model):
|
|
89
89
|
|
|
90
90
|
"""
|
|
91
91
|
This function post-processes RTMA Data and returns an xarray data array of the data.
|
|
@@ -97,6 +97,8 @@ def process_rtma_data(
|
|
|
97
97
|
|
|
98
98
|
1) path (String) - The path to the file that has the RTMA Data.
|
|
99
99
|
|
|
100
|
+
2) filename (String) - The name of the RTMA GRIB file.
|
|
101
|
+
|
|
100
102
|
2) model (String) - Default='rtma'. The RTMA model being used:
|
|
101
103
|
|
|
102
104
|
RTMA Models
|
|
@@ -107,9 +109,7 @@ def process_rtma_data(
|
|
|
107
109
|
Hawaii = 'hi rtma'
|
|
108
110
|
Puerto Rico = 'pr rtma'
|
|
109
111
|
Guam = 'gu rtma'
|
|
110
|
-
|
|
111
|
-
3) directory (String) - The directory path where the RTMA files are saved to.
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
Optional Arguments: None
|
|
114
114
|
|
|
115
115
|
Returns
|
|
@@ -172,7 +172,10 @@ def process_rtma_data(
|
|
|
172
172
|
pass
|
|
173
173
|
|
|
174
174
|
try:
|
|
175
|
-
ds['2m_relative_humidity'] =
|
|
175
|
+
ds['2m_relative_humidity'] = (_mpcalc.relative_humidity_from_dewpoint(ds['2m_temperature'] * units('degK'),
|
|
176
|
+
ds['2m_dew_point'] * units('degK'))) * 100
|
|
177
|
+
|
|
178
|
+
ds = ds.metpy.dequantify()
|
|
176
179
|
except Exception as e:
|
|
177
180
|
pass
|
|
178
181
|
|
|
@@ -3,36 +3,8 @@ This file hosts a function that displays a progress bar for downloading a file.
|
|
|
3
3
|
|
|
4
4
|
(C) Eric J. Drewitz 2025-2026
|
|
5
5
|
"""
|
|
6
|
+
from tqdm.auto import tqdm
|
|
6
7
|
|
|
7
|
-
import sys
|
|
8
|
-
|
|
9
|
-
def is_jupyter_notebook() -> bool:
|
|
10
|
-
"""
|
|
11
|
-
Checks if the code is running within a Jupyter Notebook environment.
|
|
12
|
-
|
|
13
|
-
Returns:
|
|
14
|
-
--------
|
|
15
|
-
bool
|
|
16
|
-
True if running in a Jupyter Notebook/Lab, False otherwise.
|
|
17
|
-
"""
|
|
18
|
-
# 1. Quick check for the ipykernel module in active memory
|
|
19
|
-
if 'ipykernel' not in sys.modules:
|
|
20
|
-
return False
|
|
21
|
-
|
|
22
|
-
# 2. Confirm by checking the active IPython shell type
|
|
23
|
-
try:
|
|
24
|
-
from IPython import get_ipython
|
|
25
|
-
shell = get_ipython().__class__.__name__
|
|
26
|
-
return shell == 'ZMQInteractiveShell'
|
|
27
|
-
except (ImportError, NameError):
|
|
28
|
-
return False # Probably standard Python interpreter
|
|
29
|
-
|
|
30
|
-
NOTEBOOK = is_jupyter_notebook()
|
|
31
|
-
|
|
32
|
-
if NOTEBOOK == False:
|
|
33
|
-
from tqdm.auto import tqdm
|
|
34
|
-
else:
|
|
35
|
-
from tqdm.notebook import tqdm
|
|
36
8
|
|
|
37
9
|
def progress_bar(response,
|
|
38
10
|
path,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wxdata
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.3
|
|
4
4
|
Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data.
|
|
5
5
|
Author: Eric J. Drewitz
|
|
6
6
|
Project-URL: Documentation, https://github.com/edrewitz/wxdata/blob/main/Documentation/Landing%20Page.md
|
|
@@ -298,7 +298,7 @@ End-To-End clients with multiple servers to pull data from can find the differen
|
|
|
298
298
|
|
|
299
299
|
***Real-Time Mesoscale Analysis (RTMA)***
|
|
300
300
|
1. [RTMA](https://github.com/edrewitz/wxdata/blob/main/Documentation/rtma.md#real-time-mesoscale-analysis-rtma)
|
|
301
|
-
2. [RTMA Comparison](https://github.com/edrewitz/
|
|
301
|
+
2. [RTMA Comparison](https://github.com/edrewitz/WxData/blob/main/Documentation/rtma%20comparison.md#real-time-mesoscale-analysis-rtma-comparison)
|
|
302
302
|
|
|
303
303
|
***NOAA Storm Prediction Center Outlooks/Climate Prediction Center Outlooks/National Weather Service Forecasts***
|
|
304
304
|
1. [Get NDFD Grids](https://github.com/edrewitz/wxdata/blob/main/Documentation/noaa.md#noaa-get-storm-prediction-center-outlooks-and-national-weather-service-forecasts-ndfd-grids)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|