{ "repository_url": "https://github.com/ronelsolomon/air-quality-MLOPs.git", "owner": "ronelsolomon", "name": "air-quality-MLOPs.git", "extracted_at": "2026-03-02T22:48:37.712860", "files": { "feature_store.py": { "content": "from datetime import datetime, timedelta\nfrom typing import Any, Dict, List, Optional\nimport pandas as pd\nfrom feast import Entity, FeatureView, Field\nfrom feast.types import Int32, Float32, String, Int64\nfrom feast.value_type import ValueType\nfrom feast.infra.offline_stores.file_source import FileSource\nfrom feast.data_source import PushMode\nfrom feast import FeatureStore\nfrom pathlib import Path\nimport json\nimport os\nimport yaml\nfrom datetime import timezone\nimport pytz\n\n# Define the feature store location\nFEAST_REPO = \"feature_repo\"\nos.makedirs(FEAST_REPO, exist_ok=True)\n\nclass AirQualityFeatureStore:\n def __init__(self, repo_path: str = FEAST_REPO):\n self.repo_path = Path(repo_path)\n self.store = None\n self._initialize_feature_store()\n\n def _initialize_feature_store(self):\n if not (self.repo_path / \"feature_store.yaml\").exists():\n (self.repo_path / \"data\").mkdir(parents=True, exist_ok=True)\n\n config = {\n \"project\": \"air_quality\",\n \"registry\": str((self.repo_path / \"registry.db\").absolute()),\n \"provider\": \"local\",\n \"online_store\": {\n \"type\": \"sqlite\",\n \"path\": str((self.repo_path / \"online_store.db\").absolute())\n },\n \"offline_store\": {\n \"type\": \"file\"\n },\n \"entity_key_serialization_version\": 2\n }\n\n with open(self.repo_path / \"feature_store.yaml\", \"w\") as f:\n yaml.dump(config, f, default_flow_style=False)\n\n (self.repo_path / \"__init__.py\").touch()\n\n self.store = FeatureStore(repo_path=str(self.repo_path))\n\n def define_entities_and_features(self):\n \"\"\"Define entities and features for the air quality data\"\"\"\n # Define the monitoring station entity\n station = Entity(\n name=\"station\",\n value_type=ValueType.STRING,\n description=\"Air quality monitoring station\",\n )\n\n # Define the feature view\n air_quality_source = FileSource(\n name=\"air_quality_source\",\n path=str(self.repo_path / \"data/air_quality.parquet\"),\n timestamp_field=\"timestamp\",\n )\n\n air_quality_view = FeatureView(\n name=\"air_quality_metrics\",\n entities=[station],\n ttl=timedelta(days=365),\n schema=[\n Field(name=\"aqi\", dtype=Int32),\n Field(name=\"pm25\", dtype=Float32),\n Field(name=\"pm10\", dtype=Float32),\n Field(name=\"co\", dtype=Float32),\n Field(name=\"no2\", dtype=Float32),\n Field(name=\"o3\", dtype=Float32),\n Field(name=\"temperature\", dtype=Float32),\n Field(name=\"humidity\", dtype=Float32),\n Field(name=\"pressure\", dtype=Float32),\n Field(name=\"dominant_pollutant\", dtype=String),\n Field(name=\"aqi_category\", dtype=String),\n Field(name=\"pm25_trend\", dtype=String),\n Field(name=\"pm25_24h_change\", dtype=Float32),\n Field(name=\"pm25_7d_avg\", dtype=Float32),\n Field(name=\"pm25_pm10_ratio\", dtype=Float32),\n Field(name=\"pm25_no2_ratio\", dtype=Float32),\n Field(name=\"pm25_o3_ratio\", dtype=Float32),\n Field(name=\"heat_index\", dtype=Float32),\n Field(name=\"hour_of_day\", dtype=Int32),\n Field(name=\"day_of_week\", dtype=Int32),\n Field(name=\"is_weekend\", dtype=Int32),\n Field(name=\"month\", dtype=Int32),\n Field(name=\"season\", dtype=Int32),\n Field(name=\"pm25_trend_slope\", dtype=Float32),\n Field(name=\"aqhi\", dtype=Float32),\n ],\n source=air_quality_source,\n )\n\n # Save the feature store configuration\n from feast import FeatureStore\n from pathlib import Path\n\n with open(self.repo_path / \"feature_store.yaml\", \"w\") as f:\n f.write(f\"\"\"\nproject: air_quality\nregistry: {str((self.repo_path / \"registry.db\").absolute())}\nprovider: local\nonline_store:\n type: sqlite\n path: {str((self.repo_path / \"online_store.db\").absolute())}\noffline_store:\n type: file\n\"\"\")\n\n # Create the feature store directory structure\n (self.repo_path / \"data\").mkdir(exist_ok=True)\n (self.repo_path / \"feature_definitions\").mkdir(exist_ok=True)\n\n # Save the feature definitions\n from feast import FeatureStore\n from feast.infra.registry.registry import Registry\n from feast.protos.feast.core.Registry_pb2 import Registry as RegistryProto\n\n self.store.apply([station, air_quality_view])\n\n\n def prepare_feature_data(self, air_quality_data: Dict[str, Any]) -> Dict[str, Any]:\n \"\"\"Prepare the air quality data for feature storage\"\"\"\n # Basic features\n features = {\n \"station\": air_quality_data['city']['name'],\n \"timestamp\": air_quality_data.get('time', {}).get('iso', datetime.utcnow().isoformat()),\n \"aqi\": air_quality_data.get('aqi', 0),\n \"pm25\": air_quality_data.get('iaqi', {}).get('pm25', {}).get('v', 0.0),\n \"pm10\": air_quality_data.get('iaqi', {}).get('pm10', {}).get('v', 0.0),\n \"co\": air_quality_data.get('iaqi', {}).get('co', {}).get('v', 0.0),\n \"no2\": air_quality_data.get('iaqi', {}).get('no2', {}).get('v', 0.0),\n \"o3\": air_quality_data.get('iaqi', {}).get('o3', {}).get('v', 0.0),\n \"temperature\": air_quality_data.get('iaqi', {}).get('t', {}).get('v', 0.0),\n \"humidity\": air_quality_data.get('iaqi', {}).get('h', {}).get('v', 0.0),\n \"pressure\": air_quality_data.get('iaqi', {}).get('p', {}).get('v', 0.0),\n \"dominant_pollutant\": air_quality_data.get('dominentpol', 'unknown'),\n \"latitude\": air_quality_data.get('city', {}).get('geo', [None, None])[0],\n \"longitude\": air_quality_data.get('city', {}).get('geo', [None, None])[1],\n \"timezone\": air_quality_data.get('time', {}).get('tz', ''),\n \"unix_timestamp\": air_quality_data.get('time', {}).get('v'),\n }\n \n # Add forecast features\n forecast = air_quality_data.get('forecast', {}).get('daily', {})\n for day_offset in range(7): # Next 7 days\n day_key = f\"day_{day_offset+1}\"\n if day_offset < len(forecast.get('pm25', [])):\n features.update({\n f\"{day_key}_pm25_avg\": forecast['pm25'][day_offset].get('avg'),\n f\"{day_key}_pm25_max\": forecast['pm25'][day_offset].get('max'),\n f\"{day_key}_pm25_min\": forecast['pm25'][day_offset].get('min'),\n f\"{day_key}_pm10_avg\": forecast['pm10'][day_offset].get('avg'),\n f\"{day_key}_uvi_avg\": forecast['uvi'][day_offset].get('avg') if 'uvi' in forecast else None,\n })\n\n # Add derived features\n features.update(self._calculate_derived_features(air_quality_data))\n return features\n\n def _calculate_derived_features(self, data: Dict[str, Any]) -> Dict[str, Any]:\n \"\"\"Calculate derived features from the raw data\"\"\"\n derived = {}\n \n # Current data\n iaqi = data.get('iaqi', {})\n \n # 1. Air Quality Index (AQI) Categories\n aqi = data.get('aqi', 0)\n if aqi <= 50:\n derived['aqi_category'] = 'good'\n elif aqi <= 100:\n derived['aqi_category'] = 'moderate'\n elif aqi <= 150:\n derived['aqi_category'] = 'unhealthy_sensitive'\n elif aqi <= 200:\n derived['aqi_category'] = 'unhealthy'\n elif aqi <= 300:\n derived['aqi_category'] = 'very_unhealthy'\n else:\n derived['aqi_category'] = 'hazardous'\n \n # 2. Pollutant Ratios\n pm25 = iaqi.get('pm25', {}).get('v', 0.1) # Avoid division by zero\n derived.update({\n 'pm25_pm10_ratio': pm25 / max(iaqi.get('pm10', {}).get('v', 0.1), 0.1),\n 'pm25_no2_ratio': pm25 / max(iaqi.get('no2', {}).get('v', 0.1), 0.1),\n 'pm25_o3_ratio': pm25 / max(iaqi.get('o3', {}).get('v', 0.1), 0.1),\n })\n \n # 3. Weather-related features\n temp = iaqi.get('t', {}).get('v', 0)\n humidity = iaqi.get('h', {}).get('v', 0)\n pressure = iaqi.get('p', {}).get('v', 0)\n \n # Heat index (simplified)\n if temp >= 26.7 and humidity >= 40: # Only calculate for temperatures above 80°F/26.7°C\n c1 = -8.78469475556\n c2 = 1.61139411\n c3 = 2.33854884\n c4 = -0.14611605\n c5 = -0.012308094\n c6 = -0.016424828\n c7 = 0.002211732\n c8 = 0.00072546\n c9 = -0.000003582\n \n t = temp\n r = humidity\n hi = (c1 + c2 * t + c3 * r + c4 * t * r + \n c5 * t**2 + c6 * r**2 + c7 * t**2 * r + \n c8 * t * r**2 + c9 * t**2 * r**2)\n derived['heat_index'] = hi\n else:\n derived['heat_index'] = temp # Just use temperature when heat index not applicable\n \n # 4. Time-based features\n time_data = data.get('time', {})\n if 'iso' in time_data:\n try:\n dt = pd.to_datetime(time_data['iso'])\n derived.update({\n 'hour_of_day': dt.hour,\n 'day_of_week': dt.dayofweek, # Monday=0, Sunday=6\n 'is_weekend': 1 if dt.dayofweek >= 5 else 0,\n 'month': dt.month,\n 'season': (dt.month % 12 + 3) // 3, # 1=winter, 2=spring, 3=summer, 4=fall\n })\n except:\n pass\n \n # 5. Forecast trends (if available)\n forecast = data.get('forecast', {}).get('daily', {})\n if 'pm25' in forecast and len(forecast['pm25']) > 1:\n # Calculate trend (slope) of PM2.5 forecast\n days = [i for i in range(min(3, len(forecast['pm25'])))] # Next 3 days\n pm25_avgs = [forecast['pm25'][i].get('avg', 0) for i in range(len(days))]\n \n if len(days) > 1 and any(pm25_avgs):\n # Simple linear regression for trend\n x_mean = sum(days) / len(days)\n y_mean = sum(pm25_avgs) / len(pm25_avgs)\n \n numerator = sum((days[i] - x_mean) * (pm25_avgs[i] - y_mean) for i in range(len(days)))\n denominator = sum((x - x_mean) ** 2 for x in days)\n \n if denominator != 0:\n trend_slope = numerator / denominator\n derived['pm25_trend'] = 'increasing' if trend_slope > 0.5 else 'decreasing' if trend_slope < -0.5 else 'stable'\n derived['pm25_trend_slope'] = trend_slope\n \n # 6. Air Quality Health Index (simplified)\n # This is a simplified version - actual AQHI calculations may vary by region\n no2 = iaqi.get('no2', {}).get('v', 0)\n o3 = iaqi.get('o3', {}).get('v', 0)\n derived['aqhi'] = (pm25 * 0.5 + no2 * 0.3 + o3 * 0.2) / 3\n \n # 7. Air quality change rate (if historical data is available)\n # This would require access to previous measurements\n \n # Add default values for features that might be missing\n derived.setdefault('pm25_7d_avg', None) # Default to None if not calculated\n derived.setdefault('pm25_24h_change', None) # Default to None if not calculated\n \n return derived\n\n def store_features(self, features: Dict[str, Any]):\n \"\"\"Store features in the feature store\"\"\"\n # Create a DataFrame with the features\n df = pd.DataFrame([features])\n df['timestamp'] = pd.to_datetime(df['timestamp'])\n \n # Ensure the data directory exists\n data_dir = self.repo_path / \"data\"\n data_dir.mkdir(exist_ok=True)\n \n # Save to parquet\n output_path = data_dir / \"air_quality.parquet\"\n df.to_parquet(output_path, index=False)\n \n # Apply the feature store\n self.define_entities_and_features()\n \n # Materialize the features\n self.store.materialize_incremental(end_date=datetime.now().replace(tzinfo=timezone.utc))\n\n def get_historical_features(self, station_id: str, start_date: datetime, end_date: datetime) -> pd.DataFrame:\n \"\"\"Retrieve historical feature data for a specific station within a date range\"\"\"\n # Create a range of timestamps for the entity dataframe\n timestamps = pd.date_range(start=start_date, end=end_date, freq='H')\n entity_df = pd.DataFrame(\n {\n \"station\": [station_id],\n \"event_timestamp\": [pd.Timestamp(datetime.now(tz=pytz.UTC))],\n \"timestamp\": [pd.Timestamp(datetime.now(tz=pytz.UTC))]\n }\n)\n \n features = [\n \"air_quality_metrics:aqi\",\n \"air_quality_metrics:pm25\",\n \"air_quality_metrics:pm10\",\n \"air_quality_metrics:co\",\n \"air_quality_metrics:no2\",\n \"air_quality_metrics:o3\",\n \"air_quality_metrics:temperature\",\n \"air_quality_metrics:humidity\",\n \"air_quality_metrics:pressure\",\n \"air_quality_metrics:dominant_pollutant\",\n \"air_quality_metrics:aqi_category\",\n \"air_quality_metrics:pm25_trend\",\n \"air_quality_metrics:pm25_24h_change\",\n \"air_quality_metrics:pm25_7d_avg\",\n \"air_quality_metrics:pm25_pm10_ratio\",\n \"air_quality_metrics:pm25_no2_ratio\",\n \"air_quality_metrics:pm25_o3_ratio\",\n \"air_quality_metrics:heat_index\",\n \"air_quality_metrics:hour_of_day\",\n \"air_quality_metrics:day_of_week\",\n \"air_quality_metrics:is_weekend\",\n \"air_quality_metrics:month\",\n \"air_quality_metrics:season\",\n \"air_quality_metrics:pm25_trend_slope\",\n \"air_quality_metrics:aqhi\",\n ]\n \n # Get historical features\n historical_features = self.store.get_historical_features(\n entity_df=entity_df,\n features=features\n )\n \n # Convert to pandas DataFrame and clean up\n df = historical_features.to_df()\n if not df.empty:\n # Convert timestamps to local timezone for better readability\n df['event_timestamp'] = pd.to_datetime(df['event_timestamp']).dt.tz_convert(None)\n df['timestamp'] = pd.to_datetime(df['timestamp']).dt.tz_convert(None)\n \n return df", "size": 14681, "language": "python" }, "requirements.txt": { "content": "feast==0.31.1\nnumpy>=1.24.0,<2.0.0\npandas>=1.4.3,<2.0.0\ndask==2023.3.0 # Version that works with pandas < 2.0.0\npyarrow>=11.0.0,<12.0.0 # Latest version compatible with feast 0.31.1\nrequests>=2.26.0\npython-dateutil>=2.8.2\nprotobuf>=3.20.0,<4.0.0\npydantic>=1.8.0,<2.0.0\nSQLAlchemy>=1.4.0,<2.0.0\n\n# For model training and evaluation\nscikit-learn>=1.0.2,<1.4.0\njoblib>=1.3.0,<1.4.0\nmatplotlib>=3.5.1,<4.0.0\nseaborn>=0.11.2,<0.13.0\njupyter>=1.0.0,<2.0.0 # For any notebook-based analysis\n\n# Model registry and tracking\nmlflow>=2.3.0,<3.0.0\ngitpython>=3.1.30 # Required for MLflow model registry\ndocker>=6.0.0,<7.0.0 # Required for MLflow model serving\npython-dotenv>=1.0.0,<2.0.0 # For managing environment variables\n\n# Dashboard dependencies\nstreamlit>=1.32.0,<2.0.0\nplotly>=5.18.0,<6.0.0", "size": 791, "language": "text" }, "train_model.py": { "content": "import pandas as pd\nimport numpy as np\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.model_selection import TimeSeriesSplit, GridSearchCV\nfrom sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score, mean_absolute_percentage_error\nfrom sklearn.impute import SimpleImputer\nimport joblib\nimport os\nimport matplotlib.pyplot as plt\nimport mlflow\nfrom model_registry import log_model, log_experiment_metadata, transition_model_stage\nimport argparse\n\n# Set random seed for reproducibility\nnp.random.seed(42)\n\nos.makedirs('models', exist_ok=True)\nos.makedirs('reports/figures', exist_ok=True)\n\ndef load_and_validate_data(filepath: str = 'training_data.csv', target_col: str = 'temperature') -> pd.DataFrame:\n print(f\"Loading and validating data with target column: {target_col}...\")\n if not os.path.exists(filepath):\n raise FileNotFoundError(f\"Data file not found: {filepath}\")\n df = pd.read_csv(filepath)\n df.columns = df.columns.str.strip()\n if len(df) == 0:\n raise ValueError(\"Empty dataset. Please check your data source.\")\n required_columns = {'timestamp', target_col}\n missing_columns = required_columns - set(df.columns)\n if missing_columns:\n raise ValueError(f\"Missing required columns: {missing_columns}\")\n df['timestamp'] = pd.to_datetime(df['timestamp'])\n dupes = df['timestamp'].duplicated().sum()\n if dupes > 0:\n print(f\"Warning: {dupes} duplicate timestamps found. Aggregating by mean.\")\n df = df.groupby('timestamp').mean(numeric_only=True).reset_index()\n df = df.sort_values('timestamp')\n if df[target_col].nunique() == 1:\n print(f\"Warning: {target_col} values are constant. Model cannot learn anything.\")\n print(f\"Final data points after processing: {len(df)}\")\n print(df.head())\n return df\n\ndef preprocess_data(df: pd.DataFrame, target_col: str = 'temperature'):\n numeric_cols = df.select_dtypes(include=[np.number]).columns\n df = df[numeric_cols]\n if df.isnull().any().any():\n print(\"Warning: Found missing values in the data. Imputing missing values...\")\n imputer = SimpleImputer(strategy='median')\n df = pd.DataFrame(imputer.fit_transform(df), columns=df.columns, index=df.index)\n if df.isnull().any().any():\n raise ValueError(\"Failed to impute all missing values\")\n if target_col not in df.columns:\n raise ValueError(f\"Target column '{target_col}' not found in the data\")\n X = df.drop(columns=[target_col], errors='ignore')\n y = df[target_col]\n feature_names = X.columns.tolist()\n if not feature_names:\n raise ValueError(\"No features available for modeling\")\n return X, y, feature_names\n\ndef create_features(df: pd.DataFrame, target_col: str = 'temperature') -> pd.DataFrame:\n if df.empty:\n raise ValueError(\"Cannot create features: Empty DataFrame\")\n df = df.set_index('timestamp').sort_index()\n df['hour'] = df.index.hour\n df['day_of_week'] = df.index.dayofweek\n df['day_of_month'] = df.index.day\n df['month'] = df.index.month\n df['is_weekend'] = (df.index.dayofweek >= 5).astype(int)\n if len(df) > 24:\n for lag in [1, 2, 3, 6, 12, 24]:\n df[f'{target_col}_lag_{lag}'] = df[target_col].shift(lag)\n for window in [3, 6, 12, 24]:\n df[f'{target_col}_rolling_mean_{window}'] = df[target_col].rolling(window=window, min_periods=1).mean()\n df[f'{target_col}_rolling_std_{window}'] = df[target_col].rolling(window=window, min_periods=1).std()\n return df.reset_index()\n\ndef train_random_forest(X_train, y_train):\n print(\"Training Random Forest model...\")\n tscv = TimeSeriesSplit(n_splits=5)\n param_grid = {\n 'n_estimators': [50, 100],\n 'max_depth': [5, 10, None],\n 'min_samples_split': [2, 5],\n 'min_samples_leaf': [1, 2],\n 'max_features': ['sqrt', 'log2']\n }\n rf = RandomForestRegressor(random_state=42, n_jobs=-1)\n grid_search = GridSearchCV(\n estimator=rf,\n param_grid=param_grid,\n cv=tscv,\n scoring='neg_mean_squared_error',\n verbose=1,\n n_jobs=-1,\n return_train_score=True\n )\n grid_search.fit(X_train, y_train)\n print(f\"Best parameters: {grid_search.best_params_}\")\n print(f\"Best CV score: {-grid_search.best_score_:.4f}\")\n feature_importances = dict(zip(X_train.columns, grid_search.best_estimator_.feature_importances_))\n return grid_search.best_estimator_, grid_search.cv_results_, feature_importances\n\ndef evaluate_model(model, X_test, y_test):\n print(\"Evaluating model...\")\n y_pred = model.predict(X_test)\n metrics = {\n 'mse': mean_squared_error(y_test, y_pred),\n 'rmse': np.sqrt(mean_squared_error(y_test, y_pred)),\n 'mae': mean_absolute_error(y_test, y_pred),\n 'mape': mean_absolute_percentage_error(y_test, y_pred) * 100,\n 'r2': r2_score(y_test, y_pred)\n }\n for metric, value in metrics.items():\n print(f\"{metric.upper()}: {value:.4f}\")\n return metrics\n\ndef plot_feature_importance(model, feature_names, top_n=20):\n importances = model.feature_importances_\n indices = np.argsort(importances)[-top_n:]\n plt.figure(figsize=(10, 6))\n plt.title('Feature Importances')\n plt.barh(range(len(indices)), importances[indices], align='center')\n plt.yticks(range(len(indices)), [feature_names[i] for i in indices])\n plt.xlabel('Relative Importance')\n plt.tight_layout()\n plt.savefig('reports/figures/feature_importance.png')\n plt.close()\n\ndef plot_actual_vs_predicted(y_true, y_pred):\n plt.figure(figsize=(10, 6))\n plt.scatter(y_true, y_pred, alpha=0.5)\n plt.plot([y_true.min(), y_true.max()], [y_true.min(), y_true.max()], 'r--')\n plt.xlabel('Actual')\n plt.ylabel('Predicted')\n plt.title('Actual vs Predicted Values')\n plt.tight_layout()\n plt.savefig('reports/figures/actual_vs_predicted.png')\n plt.close()\n\ndef save_model(model, filename='models/air_quality_model.pkl'):\n model_data = {\n 'model': model,\n 'feature_names': model.feature_names_in_.tolist() if hasattr(model, 'feature_names_in_') else None,\n 'model_type': 'RandomForestRegressor',\n 'timestamp': pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')\n }\n joblib.dump(model_data, filename)\n print(f\"Model saved to {filename}\")\n\ndef main():\n parser = argparse.ArgumentParser(description='Train air quality prediction model')\n parser.add_argument('--target', type=str, default='temperature',\n help='Target variable to predict (e.g., temperature, humidity, pm25, etc.)')\n args = parser.parse_args()\n \n target_col = args.target\n print(f\"Training model to predict: {target_col}\")\n \n try:\n experiment_name = \"air_quality_prediction\"\n log_experiment_metadata(\n experiment_name=experiment_name,\n tags={\n \"project\": \"air_quality_mlops\",\n \"team\": \"data_science\",\n \"model_type\": \"random_forest\"\n },\n data_source=\"training_data.csv\",\n model_version=\"1.0.0\"\n )\n print(\"\\n=== Loading Data ===\")\n df = load_and_validate_data(target_col=target_col)\n print(\"\\n=== Creating Features ===\")\n df = create_features(df, target_col=target_col)\n print(df.head())\n print(\"\\n=== Preprocessing Data ===\")\n X, y, feature_names = preprocess_data(df, target_col=target_col)\n train_size = int(0.8 * len(X))\n X_train, X_test = X.iloc[:train_size], X.iloc[train_size:]\n y_train, y_test = y.iloc[:train_size], y.iloc[train_size:]\n print(\"\\n=== Training Model ===\")\n model, cv_results, feature_importances = train_random_forest(X_train, y_train)\n print(\"\\n=== Model Evaluation ===\")\n metrics = evaluate_model(model, X_test, y_test)\n print(\"\\n=== Logging Model to Registry ===\")\n run_id = log_model(\n model=model,\n model_name=\"air_quality_predictor\",\n params=model.get_params(),\n metrics=metrics,\n feature_importance=feature_importances\n )\n if metrics.get('r2', 0) > 0.7:\n print(\"\\n=== Promoting Model to Production ===\")\n try:\n client = mlflow.tracking.MlflowClient()\n model_versions = client.search_model_versions(f\"name='air_quality_predictor'\")\n latest_version = max([int(mv.version) for mv in model_versions]) if model_versions else 1\n transition_model_stage(\n model_name=\"air_quality_predictor\",\n version=latest_version,\n stage=\"Production\"\n )\n except Exception as e:\n print(f\"Warning: Could not promote model to production: {str(e)}\")\n print(\"\\n=== Generating Plots ===\")\n plot_feature_importance(model, feature_names)\n plot_actual_vs_predicted(y_test, model.predict(X_test))\n print(\"\\n=== Training Completed Successfully! ===\")\n print(\"\\nModel evaluation metrics:\")\n for metric, value in metrics.items():\n print(f\"{metric}: {value:.4f}\")\n except Exception as e:\n print(f\"\\n=== ERROR ===\")\n print(f\"Error during model training: {str(e)}\")\n raise\n\nif __name__ == \"__main__\":\n main()\n", "size": 9385, "language": "python" }, "run_dashboard.sh": { "content": "#!/bin/bash\n\n# Activate virtual environment if needed\n# source venv/bin/activate\n\n# Install required packages\npip install -r requirements.txt\n\n# Run the Streamlit app\nstreamlit run dashboard.py\n\n# Deactivate virtual environment when done\n# deactivate\n", "size": 251, "language": "bash" }, "training_data.csv": { "content": "timestamp,date,aqi,pm25,pm10,co,no2,o3,temperature,humidity,pressure,dominant_pollutant,aqi_category,city,city_geo_lat,city_geo_lon,station_name,station_url,station_idx,time_iso,time_s,time_tz,time_v,attributions,pm25_trend,pm25_24h_change,pm25_7d_avg,pm25_pm10_ratio,pm25_no2_ratio,pm25_o3_ratio,heat_index,hour_of_day,day_of_week,is_weekend,month,season,pm25_trend_slope,aqhi,iaqi_co,iaqi_h,iaqi_no2,iaqi_o3,iaqi_p,iaqi_pm25,iaqi_t,forecast_pm10_0_avg,forecast_pm10_0_day,forecast_pm10_0_max,forecast_pm10_0_min,forecast_pm10_1_avg,forecast_pm10_1_day,forecast_pm10_1_max,forecast_pm10_1_min,forecast_pm10_2_avg,forecast_pm10_2_day,forecast_pm10_2_max,forecast_pm10_2_min,forecast_pm10_3_avg,forecast_pm10_3_day,forecast_pm10_3_max,forecast_pm10_3_min,forecast_pm10_4_avg,forecast_pm10_4_day,forecast_pm10_4_max,forecast_pm10_4_min,forecast_pm10_5_avg,forecast_pm10_5_day,forecast_pm10_5_max,forecast_pm10_5_min,forecast_pm10_6_avg,forecast_pm10_6_day,forecast_pm10_6_max,forecast_pm10_6_min,forecast_pm10_7_avg,forecast_pm10_7_day,forecast_pm10_7_max,forecast_pm10_7_min,forecast_pm25_0_avg,forecast_pm25_0_day,forecast_pm25_0_max,forecast_pm25_0_min,forecast_pm25_1_avg,forecast_pm25_1_day,forecast_pm25_1_max,forecast_pm25_1_min,forecast_pm25_2_avg,forecast_pm25_2_day,forecast_pm25_2_max,forecast_pm25_2_min,forecast_pm25_3_avg,forecast_pm25_3_day,forecast_pm25_3_max,forecast_pm25_3_min,forecast_pm25_4_avg,forecast_pm25_4_day,forecast_pm25_4_max,forecast_pm25_4_min,forecast_pm25_5_avg,forecast_pm25_5_day,forecast_pm25_5_max,forecast_pm25_5_min,forecast_pm25_6_avg,forecast_pm25_6_day,forecast_pm25_6_max,forecast_pm25_6_min,forecast_pm25_7_avg,forecast_pm25_7_day,forecast_pm25_7_max,forecast_pm25_7_min,forecast_uvi_0_avg,forecast_uvi_0_day,forecast_uvi_0_max,forecast_uvi_0_min,forecast_uvi_1_avg,forecast_uvi_1_day,forecast_uvi_1_max,forecast_uvi_1_min,forecast_uvi_2_avg,forecast_uvi_2_day,forecast_uvi_2_max,forecast_uvi_2_min,forecast_uvi_3_avg,forecast_uvi_3_day,forecast_uvi_3_max,forecast_uvi_3_min,forecast_uvi_4_avg,forecast_uvi_4_day,forecast_uvi_4_max,forecast_uvi_4_min,forecast_uvi_5_avg,forecast_uvi_5_day,forecast_uvi_5_max,forecast_uvi_5_min,forecast_uvi_6_avg,forecast_uvi_6_day,forecast_uvi_6_max,forecast_uvi_6_min,forecast_uvi_7_avg,forecast_uvi_7_day,forecast_uvi_7_max,forecast_uvi_7_min,debug\n2025-01-01,2025-01-01,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-02,2025-01-02,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-03,2025-01-03,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-04,2025-01-04,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-05,2025-01-05,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-06,2025-01-06,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-07,2025-01-07,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-08,2025-01-08,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-09,2025-01-09,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-10,2025-01-10,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-11,2025-01-11,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-12,2025-01-12,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-13,2025-01-13,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-14,2025-01-14,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-15,2025-01-15,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-16,2025-01-16,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-17,2025-01-17,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-18,2025-01-18,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-19,2025-01-19,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-20,2025-01-20,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-21,2025-01-21,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-22,2025-01-22,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-23,2025-01-23,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-24,2025-01-24,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-25,2025-01-25,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-26,2025-01-26,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-27,2025-01-27,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-28,2025-01-28,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-29,2025-01-29,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-30,2025-01-30,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-01-31,2025-01-31,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-01,2025-02-01,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-02,2025-02-02,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-03,2025-02-03,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-04,2025-02-04,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-05,2025-02-05,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-06,2025-02-06,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-07,2025-02-07,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-08,2025-02-08,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-09,2025-02-09,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-10,2025-02-10,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-11,2025-02-11,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-12,2025-02-12,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-13,2025-02-13,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-14,2025-02-14,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-15,2025-02-15,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-16,2025-02-16,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-17,2025-02-17,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-18,2025-02-18,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-19,2025-02-19,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-20,2025-02-20,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-21,2025-02-21,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-22,2025-02-22,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-23,2025-02-23,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-24,2025-02-24,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-25,2025-02-25,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-26,2025-02-26,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-27,2025-02-27,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-02-28,2025-02-28,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-01,2025-03-01,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-02,2025-03-02,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-03,2025-03-03,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-04,2025-03-04,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-05,2025-03-05,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-06,2025-03-06,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-07,2025-03-07,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-08,2025-03-08,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-09,2025-03-09,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-10,2025-03-10,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-11,2025-03-11,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-12,2025-03-12,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-13,2025-03-13,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-14,2025-03-14,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-15,2025-03-15,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-16,2025-03-16,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-17,2025-03-17,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-18,2025-03-18,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-19,2025-03-19,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-20,2025-03-20,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-21,2025-03-21,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-22,2025-03-22,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-23,2025-03-23,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-24,2025-03-24,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-25,2025-03-25,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-26,2025-03-26,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-27,2025-03-27,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-28,2025-03-28,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-29,2025-03-29,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-30,2025-03-30,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-03-31,2025-03-31,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-01,2025-04-01,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-02,2025-04-02,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-03,2025-04-03,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-04,2025-04-04,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-05,2025-04-05,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-06,2025-04-06,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-07,2025-04-07,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-08,2025-04-08,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-09,2025-04-09,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-10,2025-04-10,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-11,2025-04-11,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-12,2025-04-12,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-13,2025-04-13,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-14,2025-04-14,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-15,2025-04-15,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-16,2025-04-16,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-17,2025-04-17,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-18,2025-04-18,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-19,2025-04-19,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-20,2025-04-20,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-21,2025-04-21,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-22,2025-04-22,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-23,2025-04-23,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-24,2025-04-24,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-25,2025-04-25,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-26,2025-04-26,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-27,2025-04-27,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-28,2025-04-28,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-29,2025-04-29,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-04-30,2025-04-30,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-01,2025-05-01,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-02,2025-05-02,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-03,2025-05-03,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-04,2025-05-04,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-05,2025-05-05,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-06,2025-05-06,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-07,2025-05-07,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-08,2025-05-08,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-09,2025-05-09,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-10,2025-05-10,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-11,2025-05-11,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-12,2025-05-12,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-13,2025-05-13,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-14,2025-05-14,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-15,2025-05-15,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-16,2025-05-16,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-17,2025-05-17,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-18,2025-05-18,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-19,2025-05-19,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-20,2025-05-20,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-21,2025-05-21,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-22,2025-05-22,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-23,2025-05-23,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-24,2025-05-24,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-25,2025-05-25,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-26,2025-05-26,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-27,2025-05-27,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-28,2025-05-28,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-29,2025-05-29,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-30,2025-05-30,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-05-31,2025-05-31,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-01,2025-06-01,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-02,2025-06-02,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-03,2025-06-03,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-04,2025-06-04,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-05,2025-06-05,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-06,2025-06-06,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-07,2025-06-07,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-08,2025-06-08,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-09,2025-06-09,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-10,2025-06-10,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-11,2025-06-11,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-12,2025-06-12,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-13,2025-06-13,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-14,2025-06-14,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-15,2025-06-15,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-16,2025-06-16,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-17,2025-06-17,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-18,2025-06-18,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-19,2025-06-19,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-20,2025-06-20,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-21,2025-06-21,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-22,2025-06-22,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n2025-06-23,2025-06-23,25,25,,2.3,4,16.8,15.3,78.3,1019.2,pm25,,\"San Jose - Jackson St, Santa Clara, California\",37.34849,-121.89494,\"San Jose - Jackson St, Santa Clara, California\",https://aqicn.org/city/california/santa-clara/san-jose-jackson-st,3902,2025-06-23T20:00:00-07:00,2025-06-23 20:00:00,-07:00,1750708800,CARB - California Air Resources Board|Air Now - US EPA|World Air Quality Index Project,,,,,6.25,1.4880952380952381,,5,1,0,6,3,,,2.3,78.3,4,16.8,1019.2,25,15.3,6,2025-06-21,10,4,7,2025-06-22,9,6,13,2025-06-23,17,10,20,2025-06-24,23,15,16,2025-06-25,23,10,10,2025-06-26,15,9,12,2025-06-27,29,10,12,2025-06-28,13,9,16,2025-06-21,27,12,20,2025-06-22,30,14,35,2025-06-23,52,28,58,2025-06-24,63,50,45,2025-06-25,63,27,28,2025-06-26,48,25,35,2025-06-27,76,27,32,2025-06-28,37,28,1,2025-06-21,9,0,1,2025-06-22,9,0,1,2025-06-23,8,0,1,2025-06-24,8,0,1,2025-06-25,9,0,2,2025-06-26,10,0,2,2025-06-27,10,0,0,2025-06-28,0,0,{'sync': '2025-06-24T13:45:35+09:00'}\n", "size": 170064, "language": "unknown" }, "fetch_data_github.py": { "content": "import os\nimport pandas as pd\nfrom datetime import datetime, timedelta\nfrom app import get_air_quality_data\nimport time\n\n\ndef flatten_air_quality_data(data, date_str=None):\n \"\"\"\n Flatten the air quality data structure, preserving all available fields.\n\n Args:\n data (dict): Raw air quality data from API.\n date_str (str, optional): Date string to use for timestamp fields.\n\n Returns:\n dict: Flattened air quality data.\n \"\"\"\n if not data or 'aqi' not in data:\n return None\n\n now = datetime.now()\n timestamp = date_str + \" 00:00:00\" if date_str else now.strftime('%Y-%m-%d %H:%M:%S')\n date = date_str or now.strftime('%Y-%m-%d')\n\n iaqi = data.get('iaqi', {})\n flat_data = {\n 'timestamp': timestamp,\n 'date': date,\n 'aqi': data.get('aqi'),\n 'pm25': iaqi.get('pm25', {}).get('v') if isinstance(iaqi.get('pm25'), dict) else None,\n 'pm10': iaqi.get('pm10', {}).get('v') if isinstance(iaqi.get('pm10'), dict) else None,\n 'co': iaqi.get('co', {}).get('v') if isinstance(iaqi.get('co'), dict) else None,\n 'no2': iaqi.get('no2', {}).get('v') if isinstance(iaqi.get('no2'), dict) else None,\n 'o3': iaqi.get('o3', {}).get('v') if isinstance(iaqi.get('o3'), dict) else None,\n 'temperature': iaqi.get('t', {}).get('v') if isinstance(iaqi.get('t'), dict) else None,\n 'humidity': iaqi.get('h', {}).get('v') if isinstance(iaqi.get('h'), dict) else None,\n 'pressure': iaqi.get('p', {}).get('v') if isinstance(iaqi.get('p'), dict) else None,\n 'dominant_pollutant': data.get('dominentpol'),\n 'aqi_category': data.get('category', {}).get('name') if isinstance(data.get('category'), dict) else None,\n 'city': data.get('city', {}).get('name', ''),\n 'city_geo_lat': data.get('city', {}).get('geo', [None])[0] if isinstance(data.get('city', {}).get('geo'), list) and len(data.get('city', {}).get('geo', [])) > 0 else None,\n 'city_geo_lon': data.get('city', {}).get('geo', [None, None])[1] if isinstance(data.get('city', {}).get('geo'), list) and len(data.get('city', {}).get('geo', [])) > 1 else None,\n 'station_name': data.get('city', {}).get('name'),\n 'station_url': data.get('city', {}).get('url'),\n 'station_idx': data.get('idx'),\n 'time_iso': data.get('time', {}).get('iso'),\n 'time_s': data.get('time', {}).get('s'),\n 'time_tz': data.get('time', {}).get('tz'),\n 'time_v': data.get('time', {}).get('v'),\n 'attributions': '|'.join([attr.get('name', '') for attr in data.get('attributions', []) if isinstance(attr, dict) and 'name' in attr]),\n # New fields with None as default\n 'pm25_trend': None,\n 'pm25_24h_change': None,\n 'pm25_7d_avg': None,\n 'heat_index': None,\n 'hour_of_day': now.hour,\n 'day_of_week': now.weekday(),\n 'is_weekend': 1 if now.weekday() >= 5 else 0,\n 'month': now.month,\n 'season': (now.month % 12 + 3) // 3,\n 'pm25_trend_slope': None,\n 'aqhi': None,\n }\n\n # Calculate ratios\n try:\n flat_data['pm25_pm10_ratio'] = flat_data['pm25'] / flat_data['pm10'] if flat_data['pm25'] and flat_data['pm10'] else None\n except Exception:\n flat_data['pm25_pm10_ratio'] = None\n try:\n flat_data['pm25_no2_ratio'] = flat_data['pm25'] / flat_data['no2'] if flat_data['pm25'] and flat_data['no2'] else None\n except Exception:\n flat_data['pm25_no2_ratio'] = None\n try:\n flat_data['pm25_o3_ratio'] = flat_data['pm25'] / flat_data['o3'] if flat_data['pm25'] and flat_data['o3'] else None\n except Exception:\n flat_data['pm25_o3_ratio'] = None\n\n # Add all individual air quality indices (iaqi)\n for key, value in iaqi.items():\n if isinstance(value, dict) and 'v' in value and f'iaqi_{key}' not in flat_data:\n flat_data[f'iaqi_{key}'] = value['v']\n\n # Add forecast data if available\n forecast = data.get('forecast', {})\n for day, day_data in forecast.get('daily', {}).items():\n if isinstance(day_data, list):\n for i, item in enumerate(day_data):\n if isinstance(item, dict) and 'avg' in item and 'day' in item:\n flat_data[f'forecast_{day}_{i}_avg'] = item.get('avg')\n flat_data[f'forecast_{day}_{i}_day'] = item.get('day')\n flat_data[f'forecast_{day}_{i}_max'] = item.get('max')\n flat_data[f'forecast_{day}_{i}_min'] = item.get('min')\n\n # Add debugging info\n if 'debug' in data:\n flat_data['debug'] = str(data['debug'])\n\n return flat_data\n\ndef fetch_multiple_days_data(start_date, end_date, api_token=None, city=\"Milpitas\"):\n \"\"\"\n Fetch air quality data for a city for each day in a date range.\n Note: Only fetches current data for each day (not true historical data).\n\n Args:\n start_date (str): Start date in 'YYYY-MM-DD' format.\n end_date (str): End date in 'YYYY-MM-DD' format.\n api_token (str, optional): API token for AQICN.\n city (str): City name.\n\n Returns:\n pd.DataFrame: DataFrame of flattened air quality data.\n \"\"\"\n if api_token is None:\n api_token = os.getenv(\"AQICN_TOKEN\")\n if api_token is None:\n raise ValueError(\"API token not provided and AQICN_TOKEN environment variable not set\")\n\n start = datetime.strptime(start_date, \"%Y-%m-%d\")\n end = datetime.strptime(end_date, \"%Y-%m-%d\")\n all_data = []\n\n current_date = start\n while current_date <= end:\n date_str = current_date.strftime('%Y-%m-%d')\n print(f\"Fetching data for {city} on {date_str}...\")\n try:\n # Remove date parameter since get_air_quality_data doesn't support it\n data = get_air_quality_data(api_token, city)\n if data:\n data['date'] = date_str\n flat_data = flatten_air_quality_data(data, date_str)\n if flat_data:\n all_data.append(flat_data)\n print(f\"Successfully processed data for {date_str}\")\n else:\n print(f\"No valid data for {date_str}\")\n else:\n print(f\"No data returned for {date_str}\")\n except Exception as e:\n print(f\"Error fetching data for {date_str}: {str(e)}\")\n current_date += timedelta(days=1)\n time.sleep(1) # Avoid rate limits\n\n if all_data:\n df = pd.DataFrame(all_data)\n print(f\"Fetched {len(df)} records.\")\n return df\n else:\n print(\"No data fetched.\")\n return pd.DataFrame()\n\n\ndef main():\n import argparse\n \n parser = argparse.ArgumentParser(description='Fetch historical air quality data')\n parser.add_argument(\"--start-date\", required=True, help=\"Start date in YYYY-MM-DD format\")\n parser.add_argument(\"--end-date\", required=True, help=\"End date in YYYY-MM-DD format\")\n parser.add_argument(\"--output\", default=\"training_data.csv\", help=\"Output CSV file path\")\n parser.add_argument(\"--api-token\", help=\"AQICN API token\")\n parser.add_argument(\"--city\", default=\"Milpitas\", help=\"City name\")\n args = parser.parse_args()\n\n # Prefer CLI token, fallback to environment, then hardcoded token\n api_token = args.api_token or os.getenv(\"AQICN_TOKEN\") or \"18fed86f6f05b8695480ad90a15a00661e1b28de\"\n \n print(f\"Fetching data from {args.start_date} to {args.end_date} for {args.city}\")\n new_data = fetch_historical_datas(args.start_date, args.end_date, api_token=api_token, city=args.city)\n\n if new_data.empty:\n print(\"No new data to save.\")\n return\n\n # Ensure output directory exists\n os.makedirs(os.path.dirname(os.path.abspath(args.output)), exist_ok=True)\n \n if os.path.exists(args.output):\n try:\n # Read existing data\n existing = pd.read_csv(args.output)\n # Ensure timestamp is string for comparison\n existing['timestamp'] = existing['timestamp'].astype(str)\n new_data['timestamp'] = new_data['timestamp'].astype(str)\n \n # Find new records (not in existing data)\n existing_timestamps = set(existing['timestamp'])\n new_records = ~new_data['timestamp'].isin(existing_timestamps)\n \n if new_records.any():\n # Only keep new records\n new_data = new_data[new_records]\n # Combine with existing data\n combined = pd.concat([existing, new_data], ignore_index=True)\n # Sort by timestamp\n combined = combined.sort_values('timestamp')\n # Save to file\n combined.to_csv(args.output, index=False)\n print(f\"Added {len(new_data)} new records. Total records: {len(combined)}\")\n else:\n print(\"No new records to add.\")\n return\n \n except Exception as e:\n print(f\"Error processing existing file: {str(e)}\")\n print(\"Creating new file...\")\n new_data.to_csv(args.output, index=False)\n print(f\"Created new file with {len(new_data)} records\")\n else:\n # Save new data to file\n new_data.to_csv(args.output, index=False)\n print(f\"Created new file with {len(new_data)} records\")\n\nif __name__ == \"__main__\":\n main()\n", "size": 9413, "language": "python" }, "fetch_historical_data.py": { "content": "import os\nimport time\nimport pandas as pd\nfrom datetime import datetime, timedelta\nfrom feature_store import AirQualityFeatureStore\nfrom app import get_air_quality_data\n\ndef fetch_historical_data(\n start_date: str,\n end_date: str,\n output_file: str = \"training_data.csv\",\n api_token: str = None,\n city: str = \"Milpitas\",\n delay_sec: float = 1.0,\n log_errors: bool = True\n):\n \"\"\"\n Fetch historical air quality data for a date range and save to CSV\n\n Args:\n start_date (str): Start date in YYYY-MM-DD format\n end_date (str): End date in YYYY-MM-DD format\n output_file (str): Path to save the output CSV file\n api_token (str): AQICN API token. If None, will try to use AQICN_TOKEN env var\n city (str): City name for air quality data\n delay_sec (float): Seconds to wait between API calls\n log_errors (bool): Whether to log errors to a file\n \"\"\"\n # Initialize feature store (optional)\n feature_store = AirQualityFeatureStore()\n\n # Get API token from environment if not provided\n if api_token is None:\n api_token = os.getenv(\"AQICN_TOKEN\")\n if api_token is None:\n raise ValueError(\"API token not provided and AQICN_TOKEN environment variable not set\")\n\n # Validate and convert string dates to datetime objects\n try:\n start = datetime.strptime(start_date, \"%Y-%m-%d\")\n end = datetime.strptime(end_date, \"%Y-%m-%d\")\n except ValueError:\n raise ValueError(\"Dates must be in YYYY-MM-DD format\")\n\n if start > end:\n raise ValueError(\"Start date must not be after end date\")\n\n # Warn if output file exists\n if os.path.exists(output_file):\n print(f\"Warning: Output file '{output_file}' already exists and will be overwritten.\")\n\n # Prepare error log file if needed\n error_log_file = None\n if log_errors:\n error_log_file = output_file.rsplit('.', 1)[0] + \"_errors.log\"\n\n # List to store all data points\n all_data = []\n\n # Fetch data for each day in the range\n current_date = start\n while current_date <= end:\n date_str = current_date.strftime('%Y-%m-%d')\n print(f\"Fetching data for {city} on {date_str}...\")\n\n try:\n # Pass date to get_air_quality_data (assumes function supports this)\n data = get_air_quality_data(api_token, city, date=date_str)\n\n if data:\n # Prepare and store features\n features = feature_store.prepare_feature_data(data)\n # Optionally store features (warn if store is not persistent)\n try:\n feature_store.store_features(features)\n except Exception as fs_exc:\n print(f\"Warning: Could not store features in feature store: {fs_exc}\")\n\n # Add to our collection for CSV\n all_data.append(features)\n print(f\"Successfully stored data for {date_str}\")\n else:\n print(f\"No data available for {date_str}\")\n\n except Exception as e:\n err_msg = f\"Error fetching data for {date_str}: {str(e)}\"\n print(err_msg)\n if log_errors and error_log_file:\n with open(error_log_file, \"a\") as f:\n f.write(err_msg + \"\\n\")\n\n # Move to next day\n current_date += timedelta(days=1)\n time.sleep(delay_sec) # Respect API rate limits\n\n # Convert to DataFrame and save to CSV\n if all_data:\n df = pd.DataFrame(all_data)\n df.to_csv(output_file, index=False)\n print(f\"\\nSuccessfully saved {len(df)} records to {output_file}\")\n return df\n else:\n print(\"No data was fetched successfully.\")\n return None\n\nif __name__ == \"__main__\":\n import argparse\n\n parser = argparse.ArgumentParser(description='Fetch historical air quality data')\n parser.add_argument('--start-date', required=True, type=str, help='Start date (YYYY-MM-DD)')\n parser.add_argument('--end-date', required=True, type=str, help='End date (YYYY-MM-DD)')\n parser.add_argument('--output', default='training_data.csv', type=str, help='Output CSV file path')\n parser.add_argument('--api-token', type=str, help='AQICN API token')\n parser.add_argument('--city', default='Milpitas', type=str, help='City name')\n parser.add_argument('--delay', default=1.0, type=float, help='Delay (seconds) between API calls')\n parser.add_argument('--no-log-errors', action='store_true', help='Do not log errors to a file')\n\n args = parser.parse_args()\n\n fetch_historical_data(\n start_date=args.start_date,\n end_date=args.end_date,\n output_file=args.output,\n api_token=args.api_token,\n city=args.city,\n delay_sec=args.delay,\n log_errors=not args.no_log_errors\n )\n\n", "size": 4835, "language": "python" }, "README.md": { "content": "# 🌬️ Air Quality Prediction MLOPs Project\n\nAn end-to-end MLOps pipeline for predicting air quality using machine learning. This project demonstrates automated data collection, model training, and model deployment with CI/CD practices.\n\n## 🚀 Features\n\n- **Automated Data Pipeline**: Fetches air quality data daily from the AQICN API\n- **ML Model Training**: Trains and evaluates a Random Forest Regressor to predict AQI\n- **Model Registry**: Tracks experiments and manages model versions using MLflow\n- **CI/CD Pipeline**: Automated testing, training, and deployment with GitHub Actions\n- **Monitoring**: Tracks model performance and data quality over time\n\n## 📦 Prerequisites\n\n- Python 3.9+\n- [Poetry](https://python-poetry.org/) (for dependency management)\n- MLflow server (for experiment tracking)\n- AQICN API token (get one from [aqicn.org](https://aqicn.org/data-platform/token/))\n\n## 🛠️ Installation\n\n1. Clone the repository:\n ```bash\n git clone https://github.com/yourusername/air-quality-mlops.git\n cd air-quality-mlops\n ```\n\n2. Install dependencies:\n ```bash\n poetry install\n ```\n\n3. Set up environment variables:\n ```bash\n cp .env.example .env\n # Edit .env with your AQICN token and other settings\n ```\n\n## 🚦 Usage\n\n### Data Pipeline\n\n- **Manual Run**:\n ```bash\n python fetch_data_github.py --start-date 2025-01-01 --end-date 2025-01-07\n ```\n\n- **Scheduled Run**:\n The data pipeline runs automatically daily via GitHub Actions\n\n### Model Training\n\n- **Local Training**:\n ```bash\n python train_model.py --test-size 0.2 --n-estimators 100\n ```\n\n- **Scheduled Training**:\n The model is automatically trained every Monday via GitHub Actions\n\n### Model Serving\n\nStart the FastAPI server:\n```bash\nuvicorn app:app --reload\n```\n\n## 🔄 Workflows\n\n### 1. Data Pipeline (`fetch_data.yml`)\n- Fetches air quality data daily\n- Validates and processes new data\n- Commits updates to the repository\n\n### 2. Model Training (`train_model.yml`)\n- Trains model weekly with the latest data\n- Evaluates model performance\n- Updates model registry if performance improves\n- Generates model cards and visualizations\n\n## 📊 Project Structure\n\n```\nair-quality-mlops/\n├── .github/workflows/ # GitHub Actions workflows\n├── data/ # Raw and processed data\n├── models/ # Trained models and artifacts\n├── notebooks/ # Jupyter notebooks for exploration\n├── reports/ # Reports and visualizations\n├── src/ # Source code\n│ ├── __init__.py\n│ ├── data/ # Data processing modules\n│ ├── features/ # Feature engineering\n│ ├── models/ # Model training and evaluation\n│ └── monitoring/ # Model and data monitoring\n├── tests/ # Unit and integration tests\n├── .env.example # Environment variables template\n├── poetry.lock # Dependency lock file\n├── pyproject.toml # Project metadata and dependencies\n└── README.md # This file\n```\n\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🙏 Acknowledgments\n\n- [AQICN](https://aqicn.org/) for the air quality data API\n- [MLflow](https://mlflow.org/) for experiment tracking\n- [Scikit-learn](https://scikit-learn.org/) for machine learning\n- [FastAPI](https://fastapi.tiangolo.com/) for the API server\n\n---\n\n
\n Made with ❤️ by Ronel\n
\n", "size": 3685, "language": "markdown" }, "dashboard.py": { "content": "import streamlit as st\nimport pandas as pd\nimport joblib\nimport plotly.express as px\nfrom datetime import datetime, timedelta\nimport os\n\n# Set page config\nst.set_page_config(\n page_title=\"Air Quality Dashboard\",\n page_icon=\"🌍\",\n layout=\"wide\"\n)\n\n# Load model and data\n@st.cache_resource\ndef load_model():\n try:\n model = joblib.load('models/model.joblib')\n return model\n except Exception as e:\n st.error(f\"Error loading model: {e}\")\n return None\n\n@st.cache_data\ndef load_data():\n try:\n df = pd.read_csv('training_data.csv', parse_dates=['timestamp'])\n return df\n except Exception as e:\n st.error(f\"Error loading data: {e}\")\n return pd.DataFrame()\n\ndef main():\n st.title(\"🌍 Air Quality Dashboard\")\n \n # Load data and model\n df = load_data()\n model = load_model()\n \n if df.empty:\n st.warning(\"No data available. Please run the data pipeline first.\")\n return\n \n # Sidebar filters\n st.sidebar.header(\"Filters\")\n \n # Date range selector\n min_date = df['timestamp'].min().date()\n max_date = df['timestamp'].max().date()\n date_range = st.sidebar.date_input(\n \"Select date range\",\n [max_date - timedelta(days=7), max_date],\n min_value=min_date,\n max_value=max_date\n )\n \n # Filter data by date range\n if len(date_range) == 2:\n start_date, end_date = date_range\n filtered_df = df[(df['timestamp'].dt.date >= start_date) & \n (df['timestamp'].dt.date <= end_date)]\n else:\n filtered_df = df\n \n # Main metrics\n col1, col2, col3 = st.columns(3)\n with col1:\n st.metric(\"Data Points\", len(filtered_df))\n with col2:\n st.metric(\"Average AQI\", f\"{filtered_df['aqi'].mean():.1f}\")\n with col3:\n st.metric(\"Dominant Pollutant\", filtered_df['dominant_pollutant'].mode()[0] if not filtered_df.empty else \"N/A\")\n \n # AQI Time Series\n st.subheader(\"AQI Over Time\")\n if not filtered_df.empty:\n fig = px.line(\n filtered_df, \n x='timestamp', \n y='aqi',\n title=\"AQI Trend\",\n labels={'aqi': 'AQI', 'timestamp': 'Date'}\n )\n st.plotly_chart(fig, use_container_width=True)\n \n # Pollutant Analysis\n st.subheader(\"Pollutant Analysis\")\n if not filtered_df.empty:\n pollutant_cols = [col for col in filtered_df.columns if col.startswith('iaqi_')]\n if pollutant_cols:\n pollutant_avg = filtered_df[pollutant_cols].mean().sort_values(ascending=False)\n fig = px.bar(\n x=pollutant_avg.index,\n y=pollutant_avg.values,\n labels={'x': 'Pollutant', 'y': 'Average IAQI'},\n title=\"Average Pollutant Levels\"\n )\n st.plotly_chart(fig, use_container_width=True)\n \n # Raw Data\n with st.expander(\"View Raw Data\"):\n st.dataframe(filtered_df)\n \n # Predictions (if model is available)\n if model is not None and not filtered_df.empty:\n st.subheader(\"Model Predictions\")\n \n # Get features for prediction (you'll need to adjust this based on your model's features)\n features = filtered_df[['aqi']] # Adjust with actual feature columns\n \n try:\n # Make predictions\n predictions = model.predict(features)\n \n # Add predictions to dataframe\n results_df = filtered_df[['timestamp', 'aqi']].copy()\n results_df['predicted_aqi'] = predictions\n \n # Plot actual vs predicted\n fig = px.line(\n results_df.melt(id_vars=['timestamp'], \n value_vars=['aqi', 'predicted_aqi'],\n var_name='Type', \n value_name='AQI'),\n x='timestamp',\n y='AQI',\n color='Type',\n title=\"Actual vs Predicted AQI\"\n )\n st.plotly_chart(fig, use_container_width=True)\n \n except Exception as e:\n st.error(f\"Error making predictions: {e}\")\n\nif __name__ == \"__main__\":\n main()\n", "size": 4227, "language": "python" }, ".env": { "content": "AQICN_TOKEN=18fed86f6f05b8695480ad90a15a00661e1b28de", "size": 52, "language": "unknown" }, ".gitattributes": { "content": "# Auto detect text files and perform LF normalization\n* text=auto\n", "size": 66, "language": "unknown" }, "app.py": { "content": "import requests\nfrom datetime import datetime, timedelta\nimport pandas as pd\nimport os\n\ndef get_air_quality_data(api_token, city='Milpitas', lat=None, lng=None):\n \"\"\"\n Fetch air quality and weather data from AQICN API\n \n Parameters:\n - api_token: Your AQICN API token\n - city: City name or 'here' for geolocation (default: 'here')\n - lat, lng: Optional coordinates if using geolocation\n \"\"\"\n base_url = \"http://api.waqi.info/feed\"\n \n if city == 'Milpitas' and lat and lng:\n # Use geolocation\n url = f\"{base_url}/geo:{lat};{lng}/?token={api_token}\"\n else:\n # Use city name\n url = f\"{base_url}/{city}/?token={api_token}\"\n \n try:\n response = requests.get(url)\n data = response.json()\n \n if data['status'] == 'ok':\n return data['data']\n else:\n print(f\"Error: {data.get('data', 'Unknown error')}\")\n return None\n \n except Exception as e:\n print(f\"An error occurred: {str(e)}\")\n return None\n\ndef analyze_air_quality(data):\n \"\"\"\n Analyzes air quality data and returns key insights including:\n - AQI category and health implications\n - Pollutant concentrations\n - Pollutant ratios\n - PM2.5 trend forecast\n - Daily PM2.5 changes\n \n Args:\n data (dict): Air quality data dictionary matching the structure provided\n \n Returns:\n dict: Dictionary containing calculated insights\n \"\"\"\n insights = {}\n \n # Extract relevant data with safe access\n aqi = data.get('aqi')\n dominant_pollutant = data.get('dominentpol')\n iaqi = data.get('iaqi', {})\n forecast = data.get('forecast', {}).get('daily', {}).get('pm25', [])\n \n # AQI category determination\n if aqi is not None:\n if aqi <= 50:\n category = 'Good'\n health = 'No health precautions needed'\n elif aqi <= 100:\n category = 'Moderate'\n health = 'Unusually sensitive people should reduce exertion'\n elif aqi <= 150:\n category = 'Unhealthy for Sensitive Groups'\n health = 'Children, elderly, and respiratory patients should reduce outdoor activities'\n elif aqi <= 200:\n category = 'Unhealthy'\n health = 'Everyone should reduce prolonged exertion'\n elif aqi <= 300:\n category = 'Very Unhealthy'\n health = 'Health warnings of emergency conditions'\n else:\n category = 'Hazardous'\n health = 'Health alert: everyone may experience serious effects'\n \n insights['AQI Category'] = category\n insights['Health Implications'] = health\n insights['Dominant Pollutant'] = dominant_pollutant\n\n # Pollutant concentrations\n concentrations = {}\n for pollutant in ['pm25', 'co', 'no2', 'o3', 'h', 'p', 't']:\n if pollutant in iaqi:\n concentrations[pollutant.upper()] = iaqi[pollutant].get('v')\n insights['Pollutant Concentrations'] = concentrations\n\n # Pollutant ratios (relative to PM2.5)\n ratios = {}\n pm25 = concentrations.get('PM25')\n for pol in ['CO', 'NO2', 'O3']:\n if pol in concentrations and pm25 and concentrations[pol]:\n ratios[f'PM25/{pol}'] = round(pm25 / concentrations[pol], 2)\n insights['Pollutant Ratios'] = ratios\n\n # Forecast trend analysis\n trend = []\n for day_data in forecast:\n trend.append({\n 'date': day_data['day'],\n 'avg_pm25': day_data['avg'],\n 'max_pm25': day_data['max'],\n 'min_pm25': day_data.get('min', 'N/A')\n })\n insights['PM2.5 Forecast Trend'] = trend\n\n # Daily change calculation\n daily_changes = []\n for i in range(1, len(trend)):\n if 'avg_pm25' in trend[i] and 'avg_pm25' in trend[i-1]:\n change = trend[i]['avg_pm25'] - trend[i-1]['avg_pm25']\n daily_changes.append({\n 'date': trend[i]['date'],\n 'change': change,\n 'trend': 'Increasing' if change > 0 else 'Decreasing'\n })\n insights['Daily PM2.5 Changes'] = daily_changes\n\n return insights\n\n\ndef main():\n # Initialize the feature store\n # feature_store = AirQualityFeatureStore()\n \n # Get air quality data\n API_TOKEN = os.getenv(\"AQICN_TOKEN\")\n data = get_air_quality_data(API_TOKEN, \"Milpitas\")\n \n # if data:\n # # Prepare and store features\n # features = feature_store.prepare_feature_data(data)\n # feature_store.store_features(features)\n \n return data\n\nif __name__ == \"__main__\":\n main()", "size": 4626, "language": "python" }, "model_registry.py": { "content": "import os\nimport mlflow\nimport mlflow.sklearn\nimport joblib\nfrom datetime import datetime\nfrom typing import Dict, Any, Optional\nfrom pathlib import Path\n\n# Configure MLflow\ntracking_uri = \"file://\" + str(Path.cwd() / \"mlruns\")\nmlflow.set_tracking_uri(tracking_uri)\n\ndef log_model(\n model: Any,\n model_name: str,\n params: Dict[str, Any],\n metrics: Dict[str, float],\n feature_importance: Dict[str, float],\n model_dir: str = \"models\"\n) -> str:\n \"\"\"\n Log a trained model to MLflow tracking server.\n \n Args:\n model: Trained model object\n model_name: Name to give to the model\n params: Dictionary of model parameters\n metrics: Dictionary of evaluation metrics\n feature_importance: Dictionary of feature importances\n model_dir: Directory to save the model files\n \n Returns:\n str: Run ID of the logged model\n \"\"\"\n # Create model directory if it doesn't exist\n os.makedirs(model_dir, exist_ok=True)\n \n # End any active runs\n if mlflow.active_run() is not None:\n mlflow.end_run()\n \n # Start MLflow run\n with mlflow.start_run() as run:\n # Log parameters\n mlflow.log_params(params)\n \n # Log metrics\n mlflow.log_metrics(metrics)\n \n # Log feature importance as a metric (first 10 most important features)\n top_features = dict(sorted(feature_importance.items(), key=lambda x: x[1], reverse=True)[:10])\n for feature, importance in top_features.items():\n # Clean the feature name to be MLflow compatible\n clean_feature = ''.join(c if c.isalnum() else '_' for c in str(feature))\n # Ensure the metric name is not too long and doesn't start with a number\n metric_name = f\"feature_importance_{clean_feature}\"[:250] # MLflow has a 250 char limit\n if metric_name[0].isdigit():\n metric_name = f\"f_{metric_name}\" # Add prefix if starts with digit\n mlflow.log_metric(metric_name, float(importance)) # Ensure importance is float\n \n # Log the model\n mlflow.sklearn.log_model(\n sk_model=model,\n artifact_path=model_name,\n registered_model_name=model_name\n )\n \n # Save model locally as well\n model_path = os.path.join(model_dir, f\"{model_name}_{run.info.run_id}.pkl\")\n joblib.dump(model, model_path)\n \n # Log the model path as an artifact\n mlflow.log_artifact(model_path)\n \n print(f\"Model logged with run_id: {run.info.run_id}\")\n \n return run.info.run_id\n\ndef load_model(model_name: str, stage: str = \"Production\") -> Any:\n \"\"\"\n Load a model from MLflow model registry.\n \n Args:\n model_name: Name of the model in the registry\n stage: Stage of the model (Production/Staging/None)\n \n Returns:\n Loaded model object\n \"\"\"\n try:\n if stage:\n model_uri = f\"models:/{model_name}/{stage}\"\n else:\n model_uri = f\"models:/{model_name}/latest\"\n \n model = mlflow.sklearn.load_model(model_uri)\n print(f\"Loaded model {model_name} from {stage} stage\")\n return model\n except Exception as e:\n print(f\"Error loading model {model_name} from registry: {str(e)}\")\n return None\n\ndef transition_model_stage(\n model_name: str,\n version: int,\n stage: str,\n archive_existing_versions: bool = True\n) -> bool:\n \"\"\"\n Transition a model version to a specific stage.\n \n Args:\n model_name: Name of the model\n version: Version number of the model\n stage: Target stage (Staging, Production, Archived, None)\n archive_existing_versions: Whether to archive existing models in the target stage\n \n Returns:\n bool: True if transition was successful, False otherwise\n \"\"\"\n try:\n client = mlflow.tracking.MlflowClient()\n \n if archive_existing_versions and stage != \"None\":\n # Archive existing models in the target stage\n client.transition_model_version_stage(\n name=model_name,\n version=version,\n stage=stage,\n archive_existing_versions=True\n )\n else:\n client.transition_model_version_stage(\n name=model_name,\n version=version,\n stage=stage\n )\n \n print(f\"Transitioned model {model_name} version {version} to {stage} stage\")\n return True\n except Exception as e:\n print(f\"Error transitioning model {model_name} version {version} to {stage} stage: {str(e)}\")\n return False\n\ndef log_experiment_metadata(\n experiment_name: str,\n tags: Optional[Dict[str, str]] = None,\n **kwargs\n) -> str:\n \"\"\"\n Log additional metadata to the current MLflow run.\n \n Args:\n experiment_name: Name of the experiment\n tags: Dictionary of tags to log\n **kwargs: Additional key-value pairs to log as parameters\n \n Returns:\n str: Experiment ID\n \"\"\"\n # Set the experiment\n experiment = mlflow.get_experiment_by_name(experiment_name)\n if experiment is None:\n experiment_id = mlflow.create_experiment(experiment_name)\n else:\n experiment_id = experiment.experiment_id\n \n mlflow.set_experiment(experiment_name=experiment_name)\n \n # Log additional parameters\n if kwargs:\n mlflow.log_params(kwargs)\n \n # Log tags\n if tags:\n mlflow.set_tags(tags)\n \n return experiment_id\n", "size": 5638, "language": "python" }, "models/air_quality_model.pkl": { "content": "\u0004e\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0018sklearn.ensemble._forest\u0015RandomForestRegressor)}(\testimator\u0015sklearn.tree._classes\u0015DecisionTreeRegressor)}(\tcriterion\nsquared_error\bsplitter\u0004best\tmax_depthN\u0011min_samples_splitK\u0002\u0010min_samples_leafK\u0001\u0018min_weight_fraction_leafG\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\fmax_featuresN\u000emax_leaf_nodesN\frandom_stateN\u0015min_impurity_decreaseG\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\fclass_weightN\tccp_alphaG\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\nmonotonic_cstN\u0010_sklearn_version\u00051.6.1ub\fn_estimatorsKd\u0010estimator_params(h\u000bh\u000fh\u0010h\u0011h\u0012h\u0013h\u0014h\u0016h\u0015h\u0018h\u0019t\tbootstrap\toob_score\u0006n_jobsJh\u0015K*\u0007verboseK\u0000\nwarm_starth\u0017N\u000bmax_samplesNh\u000bh\fh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019N\u0011feature_names_in_\u0013joblib.numpy_pickle\u0011NumpyArrayWrapper)}(\bsubclass\u0005numpy\u0007ndarray\u0005shapeK:\u0005order\u0001C\u0005dtypeh,h3\u0002O8R(K\u0003\u0001|NNNJJK?tb\nallow_mmap\u001bnumpy_array_alignment_bytesK\u0010ub\u0005\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0015numpy.core.multiarray\f_reconstruct\u0005numpy\u0007ndarrayK\u0000C\u0001bR(K\u0001K:h\u0003\u0005dtype\u0002O8R(K\u0003\u0001|NNNJJK?tb](\u0004pm25\u0004pm10\u0002co\u0003no2\u0002o3\u000btemperature\bhumidity\bpressure\blatitude\tlongitude\u000eday_1_pm25_avg\u000eday_1_pm25_max\u000eday_1_pm25_min\u000eday_1_pm10_avg\nday_1_uvi_avg\u000eday_2_pm25_avg\u000eday_2_pm25_max\u000eday_2_pm25_min\u000eday_2_pm10_avg\nday_2_uvi_avg\u000eday_3_pm25_avg\u000eday_3_pm25_max\u000eday_3_pm25_min\u000eday_3_pm10_avg\nday_3_uvi_avg\u000eday_4_pm25_avg\u000eday_4_pm25_max\u000eday_4_pm25_min\u000eday_4_pm10_avg\nday_4_uvi_avg\u000eday_5_pm25_avg\u000eday_5_pm25_max\u000eday_5_pm25_min\u000eday_5_pm10_avg\nday_5_uvi_avg\u000eday_6_pm25_avg\u000eday_6_pm25_max\u000eday_6_pm25_min\u000eday_6_pm10_avg\nday_6_uvi_avg\u000eday_7_pm25_avg\u000eday_7_pm25_max\u000eday_7_pm25_min\u000eday_7_pm10_avg\nday_7_uvi_avg\u000fpm25_pm10_ratio\u000epm25_no2_ratio\npm25_o3_ratio\nheat_index\u000bhour_of_day\u000bday_of_week\nis_weekend\u0005month\u0006season\u0010pm25_trend_slope\u0004aqhi\u000bpm25_7d_avg\u000fpm25_24h_changeetb.K\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u000en_features_in_K:\n_n_samplesK\u0011\nn_outputs_K\u0001\u0014_n_samples_bootstrapK\u0011\nestimator_h\t\u000bestimators_](h\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jf_h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001\nmax_features_K:\u0005tree_\u0012sklearn.tree._tree\u0004TreeK:h()}(h+h.h/K\u0001h1h2h3h4\u0002i8R(K\u0003\u0001K\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\\\u0003bsh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u000e.h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jjc;h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JGԙGh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JA\u0019h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0014,\u0018h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jf'h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jy\u0018\"rh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JA'h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0019h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JJ\u000eh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JUuh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JW]h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JtmUh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jc\u0019h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jg$h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J>D5h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J&h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0006E\u0005h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J4p\u000eh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0001\u0003Lxh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JW8h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u001aUh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JDph\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J%[6h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\t3\u0000h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0014.h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0001~h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0014.h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JD\u0013\u001eh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JMh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J9M\u001ch\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0015pV\u0006h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0018\u0001h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jnh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JXk\u0005h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J0Jh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JڡW\u0006h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J:d\u001ch\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JI]fh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J޵#h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JG\u000bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JJh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\nHyh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J]h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u000e;h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0000th\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J1\u0017h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JJ\u0001Ih\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JN\u001eh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J2\u001d3h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jk\u0007ah\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J6ޤ\u0003h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0004{h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J?{\u0017h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J}wh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J,\u000bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\n%\\h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J2\u000f\u001bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J(.h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0014x+h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JHSsh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J8\u0010h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0011Ue\u0003h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J)rh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JX\"4qh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J;3wh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\n3\u0010h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J Nh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jbh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\b+Mh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JY]\u0016\u0004h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J4\n\u0001\u0019h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u001b;h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JS)/h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J[س=h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jnխph\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J[.h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J=\u001fh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J(\u001ch\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J~h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0007CLUh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\"a,h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J8hh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015JP\u001cdh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jg?Bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J1\u0006.h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Jg\u000f)h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J]_Ah\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0001LOh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0003lh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J-#\u0005h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J5;5h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015Ji4\u000bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J\u0003T\u0011h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J5R/h\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubh\b)}(h\u000bh\fh\nh\u000eh\u000fK\nh\u0010K\u0002h\u0011K\u0001h\u0012G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0013G?\u0000\u0000\u0000\u0000\u0000\u0000h\u0014Nh\u0015J%\u0004\bh\u0016G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0017Nh\u0018G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000h\u0019NhK\u0001hEK:hFhIK:h()}(h+h.h/K\u0001h1h2h3hOh:h;K\u0010ub\t\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0000\u0000\u0000\u0000\u0000\u0000\u0000K\u0001R}(h\u000fK\u0000hUK\u0001hVh()}(h+h.h/K\u0001h1h2h3h\\h:h;K\u0010ub\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00001@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\u0000\u0000\u0000\u0000\u0000\u0000\u0000h|h()}(h+h.h/K\u0001K\u0001K\u0001h1h2h3hph:h;K\u0010ub\n\u0000\u0000\u0000\u0000\u0000\u0000C@\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000ubh\u001ah\u001bubeh\u001ah\u001bub.", "size": 31756, "language": "unknown" } }, "_cache_metadata": { "url": "https://github.com/ronelsolomon/air-quality-MLOPs.git", "content_type": "github", "cached_at": "2026-03-02T22:48:37.714137", "cache_key": "8bd18a48d36a1a101b6ab9044d1f651c" } }